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