xref: /MusicPlayer2/MusicPlayer2/taglib/eventtimingcodesframe.h (revision 2661106a96494c0a7dfab38bf1ae7b9565882443)
1 /***************************************************************************
2     copyright            : (C) 2014 by Urs Fleisch
3     email                : [email protected]
4  ***************************************************************************/
5 
6 /***************************************************************************
7  *   This library is free software; you can redistribute it and/or modify  *
8  *   it  under the terms of the GNU Lesser General Public License version  *
9  *   2.1 as published by the Free Software Foundation.                     *
10  *                                                                         *
11  *   This library is distributed in the hope that it will be useful, but   *
12  *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
13  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
14  *   Lesser General Public License for more details.                       *
15  *                                                                         *
16  *   You should have received a copy of the GNU Lesser General Public      *
17  *   License along with this library; if not, write to the Free Software   *
18  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA         *
19  *   02110-1301  USA                                                       *
20  *                                                                         *
21  *   Alternatively, this file is available under the Mozilla Public        *
22  *   License Version 1.1.  You may obtain a copy of the License at         *
23  *   http://www.mozilla.org/MPL/                                           *
24  ***************************************************************************/
25 
26 #ifndef TAGLIB_EVENTTIMINGCODESFRAME_H
27 #define TAGLIB_EVENTTIMINGCODESFRAME_H
28 
29 #include "id3v2frame.h"
30 #include "tlist.h"
31 
32 namespace TagLib {
33 
34   namespace ID3v2 {
35 
36     //! ID3v2 event timing codes frame
37     /*!
38      * An implementation of ID3v2 event timing codes.
39      */
40     class TAGLIB_EXPORT EventTimingCodesFrame : public Frame
41     {
42       friend class FrameFactory;
43 
44     public:
45 
46       /*!
47        * Specifies the timestamp format used.
48        */
49       enum TimestampFormat {
50         //! The timestamp is of unknown format.
51         Unknown              = 0x00,
52         //! The timestamp represents the number of MPEG frames since
53         //! the beginning of the audio stream.
54         AbsoluteMpegFrames   = 0x01,
55         //! The timestamp represents the number of milliseconds since
56         //! the beginning of the audio stream.
57         AbsoluteMilliseconds = 0x02
58       };
59 
60       /*!
61        * Event types defined in id3v2.4.0-frames.txt 4.5. Event timing codes.
62        */
63       enum EventType {
64         Padding                = 0x00,
65         EndOfInitialSilence    = 0x01,
66         IntroStart             = 0x02,
67         MainPartStart          = 0x03,
68         OutroStart             = 0x04,
69         OutroEnd               = 0x05,
70         VerseStart             = 0x06,
71         RefrainStart           = 0x07,
72         InterludeStart         = 0x08,
73         ThemeStart             = 0x09,
74         VariationStart         = 0x0a,
75         KeyChange              = 0x0b,
76         TimeChange             = 0x0c,
77         MomentaryUnwantedNoise = 0x0d,
78         SustainedNoise         = 0x0e,
79         SustainedNoiseEnd      = 0x0f,
80         IntroEnd               = 0x10,
81         MainPartEnd            = 0x11,
82         VerseEnd               = 0x12,
83         RefrainEnd             = 0x13,
84         ThemeEnd               = 0x14,
85         Profanity              = 0x15,
86         ProfanityEnd           = 0x16,
87         NotPredefinedSynch0    = 0xe0,
88         NotPredefinedSynch1    = 0xe1,
89         NotPredefinedSynch2    = 0xe2,
90         NotPredefinedSynch3    = 0xe3,
91         NotPredefinedSynch4    = 0xe4,
92         NotPredefinedSynch5    = 0xe5,
93         NotPredefinedSynch6    = 0xe6,
94         NotPredefinedSynch7    = 0xe7,
95         NotPredefinedSynch8    = 0xe8,
96         NotPredefinedSynch9    = 0xe9,
97         NotPredefinedSynchA    = 0xea,
98         NotPredefinedSynchB    = 0xeb,
99         NotPredefinedSynchC    = 0xec,
100         NotPredefinedSynchD    = 0xed,
101         NotPredefinedSynchE    = 0xee,
102         NotPredefinedSynchF    = 0xef,
103         AudioEnd               = 0xfd,
104         AudioFileEnds          = 0xfe
105       };
106 
107       /*!
108        * Single entry of time stamp and event.
109        */
110       struct SynchedEvent {
SynchedEventSynchedEvent111         SynchedEvent(unsigned int ms, EventType t) : time(ms), type(t) {}
112         unsigned int time;
113         EventType type;
114       };
115 
116       /*!
117        * List of synchronized events.
118        */
119       typedef TagLib::List<SynchedEvent> SynchedEventList;
120 
121       /*!
122        * Construct an empty event timing codes frame.
123        */
124       explicit EventTimingCodesFrame();
125 
126       /*!
127        * Construct a event timing codes frame based on the data in \a data.
128        */
129       explicit EventTimingCodesFrame(const ByteVector &data);
130 
131       /*!
132        * Destroys this EventTimingCodesFrame instance.
133        */
134       virtual ~EventTimingCodesFrame();
135 
136       /*!
137        * Returns a null string.
138        */
139       virtual String toString() const;
140 
141       /*!
142        * Returns the timestamp format.
143        */
144       TimestampFormat timestampFormat() const;
145 
146       /*!
147        * Returns the events with the time stamps.
148        */
149       SynchedEventList synchedEvents() const;
150 
151       /*!
152        * Set the timestamp format.
153        *
154        * \see timestampFormat()
155        */
156       void setTimestampFormat(TimestampFormat f);
157 
158       /*!
159        * Sets the text with the time stamps.
160        *
161        * \see text()
162        */
163       void setSynchedEvents(const SynchedEventList &e);
164 
165     protected:
166       // Reimplementations.
167 
168       virtual void parseFields(const ByteVector &data);
169       virtual ByteVector renderFields() const;
170 
171     private:
172       /*!
173        * The constructor used by the FrameFactory.
174        */
175       EventTimingCodesFrame(const ByteVector &data, Header *h);
176       EventTimingCodesFrame(const EventTimingCodesFrame &);
177       EventTimingCodesFrame &operator=(const EventTimingCodesFrame &);
178 
179       class EventTimingCodesFramePrivate;
180       EventTimingCodesFramePrivate *d;
181     };
182 
183   }
184 }
185 #endif
186