/// <summary>
        ///    Creates a deep copy of the current instance.
        /// </summary>
        /// <returns>
        ///    A new <see cref="Frame" /> object identical to the
        ///    current instance.
        /// </returns>
        public override Frame Clone()
        {
            var frame = new EventTimeCodesFrame(header);

            frame.timestampFormat = timestampFormat;
            frame.events          = events.ConvertAll(item => (EventTimeCode)item.Clone());
            return(frame);
        }
        /// <summary>
        ///    Creates a deep copy of the current instance.
        /// </summary>
        /// <returns>
        ///    A new <see cref="Frame" /> object identical to the
        ///    current instance.
        /// </returns>
        public override Frame Clone()
        {
            var frame = new EventTimeCodesFrame(header)
            {
                TimestampFormat = TimestampFormat,
                Events          = Events.ConvertAll(item => (EventTimeCode)item.Clone())
            };

            return(frame);
        }
        /// <summary>
        ///    Gets a play count frame from a specified tag, optionally
        ///    creating it if it does not exist.
        /// </summary>
        /// <param name="tag">
        ///    A <see cref="Tag" /> object to search in.
        /// </param>
        /// <param name="create">
        ///    A <see cref="bool" /> specifying whether or not to create
        ///    and add a new frame to the tag if a match is not found.
        /// </param>
        /// <returns>
        ///    A <see cref="EventTimeCodesFrame" /> object containing the
        ///    matching frame, or <see langword="null" /> if a match
        ///    wasn't found and <paramref name="create" /> is <see
        ///    langword="false" />.
        /// </returns>
        public static EventTimeCodesFrame Get(Tag tag, bool create)
        {
            EventTimeCodesFrame etco;

            foreach (Frame frame in tag)
            {
                etco = frame as EventTimeCodesFrame;

                if (etco != null)
                {
                    return(etco);
                }
            }

            if (!create)
            {
                return(null);
            }

            etco = new EventTimeCodesFrame();
            tag.AddFrame(etco);
            return(etco);
        }