id3lib
3.8.3
|
00001 // -*- C++ -*- 00002 /* $Id: globals.h,v 1.54 2003/02/21 03:47:41 slackorama Exp $ 00003 00004 * id3lib: a C++ library for creating and manipulating id3v1/v2 tags 00005 * Copyright 1999, 2000 Scott Thomas Haug 00006 * Copyright 2002 Thijmen Klok (thijmen@id3lib.org) 00007 00008 * This library is free software; you can redistribute it and/or modify it 00009 * under the terms of the GNU Library General Public License as published by 00010 * the Free Software Foundation; either version 2 of the License, or (at your 00011 * option) any later version. 00012 * 00013 * This library is distributed in the hope that it will be useful, but WITHOUT 00014 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00015 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 00016 * License for more details. 00017 * 00018 * You should have received a copy of the GNU Library General Public License 00019 * along with this library; if not, write to the Free Software Foundation, 00020 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00021 00022 * The id3lib authors encourage improvements and optimisations to be sent to 00023 * the id3lib coordinator. Please see the README file for details on where to 00024 * send such submissions. See the AUTHORS file for a list of people who have 00025 * contributed to id3lib. See the ChangeLog file for a list of changes to 00026 * id3lib. These files are distributed with id3lib at 00027 * http://download.sourceforge.net/id3lib/ 00028 */ 00029 00034 #ifndef _ID3LIB_GLOBALS_H_ 00035 #define _ID3LIB_GLOBALS_H_ 00036 00037 #include <stdlib.h> 00038 #include "id3/sized_types.h" 00039 00040 /* id3lib version. 00041 * we prefix variable declarations so they can 00042 * properly get exported in windows dlls. 00043 */ 00044 #ifdef WIN32 00045 # define LINKOPTION_STATIC 1 //both for use and creation of static lib 00046 # define LINKOPTION_CREATE_DYNAMIC 2 //should only be used by prj/id3lib.dsp 00047 # define LINKOPTION_USE_DYNAMIC 3 //if your project links id3lib dynamic 00048 # ifndef ID3LIB_LINKOPTION 00049 # pragma message("*** NOTICE *** (not a real error)") 00050 # pragma message("* You should include a define in your project which reflect how you link the library") 00051 # pragma message("* If you use id3lib.lib or libprj/id3lib.dsp (you link static) you should add") 00052 # pragma message("* ID3LIB_LINKOPTION=1 to your preprocessor definitions of your project.") 00053 # pragma message("* If you use id3lib.dll (you link dynamic) you should add ID3LIB_LINKOPTION=3") 00054 # pragma message("* to your preprocessor definitions of your project.") 00055 # pragma message("***") 00056 # error read message above or win32.readme.first.txt 00057 # else 00058 # if (ID3LIB_LINKOPTION == LINKOPTION_CREATE_DYNAMIC) 00059 //used for creating a dynamic dll 00060 # define ID3_C_EXPORT extern _declspec(dllexport) 00061 # define ID3_CPP_EXPORT __declspec(dllexport) 00062 # define CCONV __stdcall // Added for VB & Delphi Compatibility - By FrogPrince Advised By Lothar 00063 # endif 00064 # if (ID3LIB_LINKOPTION == LINKOPTION_STATIC) 00065 //used for creating a static lib and using a static lib 00066 # define ID3_C_EXPORT 00067 # define ID3_CPP_EXPORT 00068 # define CCONV 00069 # endif 00070 # if (ID3LIB_LINKOPTION == LINKOPTION_USE_DYNAMIC) 00071 //used for those that do not link static and are using the dynamic dll by including a id3lib header 00072 # define ID3_C_EXPORT extern _declspec(dllimport) 00073 # define ID3_CPP_EXPORT __declspec(dllimport) //functions like these shouldn't be used by vb and delphi, 00074 # define CCONV __stdcall // Added for VB & Delphi Compatibility - By FrogPrince Advised By Lothar 00075 # endif 00076 # endif 00077 #else /* !WIN32 */ 00078 # define ID3_C_EXPORT 00079 # define ID3_CPP_EXPORT 00080 # define CCONV 00081 #endif /* !WIN32 */ 00082 00083 #define ID3_C_VAR extern 00084 00085 #ifndef __cplusplus 00086 00087 typedef int bool; 00088 # define false (0) 00089 # define true (!false) 00090 00091 #endif /* __cplusplus */ 00092 00093 ID3_C_VAR const char * const ID3LIB_NAME; 00094 ID3_C_VAR const char * const ID3LIB_RELEASE; 00095 ID3_C_VAR const char * const ID3LIB_FULL_NAME; 00096 ID3_C_VAR const int ID3LIB_MAJOR_VERSION; 00097 ID3_C_VAR const int ID3LIB_MINOR_VERSION; 00098 ID3_C_VAR const int ID3LIB_PATCH_VERSION; 00099 ID3_C_VAR const int ID3LIB_INTERFACE_AGE; 00100 ID3_C_VAR const int ID3LIB_BINARY_AGE; 00101 00102 #define ID3_TAGID "ID3" 00103 #define ID3_TAGIDSIZE (3) 00104 #define ID3_TAGHEADERSIZE (10) 00105 00111 #define STR_V1_COMMENT_DESC "ID3v1 Comment" 00112 00113 00114 typedef unsigned char uchar; 00115 typedef long unsigned int luint; 00116 00117 typedef uint16 unicode_t; 00118 typedef uint16 flags_t; 00119 00120 #define NULL_UNICODE ((unicode_t) '\0') 00121 00122 /* These macros are used to make the C and C++ declarations for enums and 00123 * structs have the same syntax. Basically, it allows C users to refer to an 00124 * enum or a struct without prepending enum/struct. 00125 */ 00126 #ifdef __cplusplus 00127 # define ID3_ENUM(E) enum E 00128 # define ID3_STRUCT(S) struct S 00129 #else 00130 # define ID3_ENUM(E) typedef enum _ ## E E; enum _ ## E 00131 # define ID3_STRUCT(S) typedef struct _ ## S S; struct _ ## S 00132 #endif 00133 00137 ID3_ENUM(ID3_TextEnc) 00138 { 00139 ID3TE_NONE = -1, 00140 ID3TE_ISO8859_1, 00141 ID3TE_UTF16, 00142 ID3TE_UTF16BE, 00143 ID3TE_UTF8, 00144 ID3TE_NUMENCODINGS, 00145 ID3TE_ASCII = ID3TE_ISO8859_1, // do not use this -> use ID3TE_IS_SINGLE_BYTE_ENC(enc) instead 00146 ID3TE_UNICODE = ID3TE_UTF16 // do not use this -> use ID3TE_IS_DOUBLE_BYTE_ENC(enc) instead 00147 }; 00148 00149 #define ID3TE_IS_SINGLE_BYTE_ENC(enc) ((enc) == ID3TE_ISO8859_1 || (enc) == ID3TE_UTF8) 00150 #define ID3TE_IS_DOUBLE_BYTE_ENC(enc) ((enc) == ID3TE_UTF16 || (enc) == ID3TE_UTF16BE) 00151 00154 ID3_ENUM(ID3_V1Spec) 00155 { 00156 ID3V1_0 = 0, 00157 ID3V1_1, 00158 ID3V1_NUMSPECS 00159 }; 00160 00161 ID3_ENUM(ID3_V2Spec) 00162 { 00163 ID3V2_UNKNOWN = -1, 00164 ID3V2_2_0 = 0, 00165 ID3V2_2_1, 00166 ID3V2_3_0, 00167 ID3V2_4_0, 00168 ID3V2_EARLIEST = ID3V2_2_0, 00169 ID3V2_LATEST = ID3V2_3_0 00170 }; 00171 00174 ID3_ENUM(ID3_TagType) 00175 { 00176 ID3TT_NONE = 0, 00177 ID3TT_ID3V1 = 1 << 0, 00178 ID3TT_ID3V2 = 1 << 1, 00179 ID3TT_LYRICS3 = 1 << 2, 00180 ID3TT_LYRICS3V2 = 1 << 3, 00181 ID3TT_MUSICMATCH = 1 << 4, 00183 ID3TT_LYRICS = ID3TT_LYRICS3, 00185 ID3TT_ID3 = ID3TT_ID3V1 | ID3TT_ID3V2, 00187 ID3TT_ALL = ~ID3TT_NONE, 00189 ID3TT_PREPENDED = ID3TT_ID3V2, 00191 ID3TT_APPENDED = ID3TT_ALL & ~ID3TT_ID3V2 00192 }; 00193 00197 ID3_ENUM(ID3_FieldID) 00198 { 00199 ID3FN_NOFIELD = 0, 00200 ID3FN_TEXTENC, 00201 ID3FN_TEXT, 00202 ID3FN_URL, 00203 ID3FN_DATA, 00204 ID3FN_DESCRIPTION, 00205 ID3FN_OWNER, 00206 ID3FN_EMAIL, 00207 ID3FN_RATING, 00208 ID3FN_FILENAME, 00209 ID3FN_LANGUAGE, 00210 ID3FN_PICTURETYPE, 00211 ID3FN_IMAGEFORMAT, 00212 ID3FN_MIMETYPE, 00213 ID3FN_COUNTER, 00214 ID3FN_ID, 00215 ID3FN_VOLUMEADJ, 00216 ID3FN_NUMBITS, 00217 ID3FN_VOLCHGRIGHT, 00218 ID3FN_VOLCHGLEFT, 00219 ID3FN_PEAKVOLRIGHT, 00220 ID3FN_PEAKVOLLEFT, 00221 ID3FN_TIMESTAMPFORMAT, 00222 ID3FN_CONTENTTYPE, 00223 ID3FN_LASTFIELDID 00224 }; 00225 00229 ID3_ENUM(ID3_FrameID) 00230 { 00231 /* ???? */ ID3FID_NOFRAME = 0, 00232 /* AENC */ ID3FID_AUDIOCRYPTO, 00233 /* APIC */ ID3FID_PICTURE, 00234 /* ASPI */ ID3FID_AUDIOSEEKPOINT, 00235 /* COMM */ ID3FID_COMMENT, 00236 /* COMR */ ID3FID_COMMERCIAL, 00237 /* ENCR */ ID3FID_CRYPTOREG, 00238 /* EQU2 */ ID3FID_EQUALIZATION2, 00239 /* EQUA */ ID3FID_EQUALIZATION, 00240 /* ETCO */ ID3FID_EVENTTIMING, 00241 /* GEOB */ ID3FID_GENERALOBJECT, 00242 /* GRID */ ID3FID_GROUPINGREG, 00243 /* IPLS */ ID3FID_INVOLVEDPEOPLE, 00244 /* LINK */ ID3FID_LINKEDINFO, 00245 /* MCDI */ ID3FID_CDID, 00246 /* MLLT */ ID3FID_MPEGLOOKUP, 00247 /* OWNE */ ID3FID_OWNERSHIP, 00248 /* PRIV */ ID3FID_PRIVATE, 00249 /* PCNT */ ID3FID_PLAYCOUNTER, 00250 /* POPM */ ID3FID_POPULARIMETER, 00251 /* POSS */ ID3FID_POSITIONSYNC, 00252 /* RBUF */ ID3FID_BUFFERSIZE, 00253 /* RVA2 */ ID3FID_VOLUMEADJ2, 00254 /* RVAD */ ID3FID_VOLUMEADJ, 00255 /* RVRB */ ID3FID_REVERB, 00256 /* SEEK */ ID3FID_SEEKFRAME, 00257 /* SIGN */ ID3FID_SIGNATURE, 00258 /* SYLT */ ID3FID_SYNCEDLYRICS, 00259 /* SYTC */ ID3FID_SYNCEDTEMPO, 00260 /* TALB */ ID3FID_ALBUM, 00261 /* TBPM */ ID3FID_BPM, 00262 /* TCOM */ ID3FID_COMPOSER, 00263 /* TCON */ ID3FID_CONTENTTYPE, 00264 /* TCOP */ ID3FID_COPYRIGHT, 00265 /* TDAT */ ID3FID_DATE, 00266 /* TDEN */ ID3FID_ENCODINGTIME, 00267 /* TDLY */ ID3FID_PLAYLISTDELAY, 00268 /* TDOR */ ID3FID_ORIGRELEASETIME, 00269 /* TDRC */ ID3FID_RECORDINGTIME, 00270 /* TDRL */ ID3FID_RELEASETIME, 00271 /* TDTG */ ID3FID_TAGGINGTIME, 00272 /* TIPL */ ID3FID_INVOLVEDPEOPLE2, 00273 /* TENC */ ID3FID_ENCODEDBY, 00274 /* TEXT */ ID3FID_LYRICIST, 00275 /* TFLT */ ID3FID_FILETYPE, 00276 /* TIME */ ID3FID_TIME, 00277 /* TIT1 */ ID3FID_CONTENTGROUP, 00278 /* TIT2 */ ID3FID_TITLE, 00279 /* TIT3 */ ID3FID_SUBTITLE, 00280 /* TKEY */ ID3FID_INITIALKEY, 00281 /* TLAN */ ID3FID_LANGUAGE, 00282 /* TLEN */ ID3FID_SONGLEN, 00283 /* TMCL */ ID3FID_MUSICIANCREDITLIST, 00284 /* TMED */ ID3FID_MEDIATYPE, 00285 /* TMOO */ ID3FID_MOOD, 00286 /* TOAL */ ID3FID_ORIGALBUM, 00287 /* TOFN */ ID3FID_ORIGFILENAME, 00288 /* TOLY */ ID3FID_ORIGLYRICIST, 00289 /* TOPE */ ID3FID_ORIGARTIST, 00290 /* TORY */ ID3FID_ORIGYEAR, 00291 /* TOWN */ ID3FID_FILEOWNER, 00292 /* TPE1 */ ID3FID_LEADARTIST, 00293 /* TPE2 */ ID3FID_BAND, 00294 /* TPE3 */ ID3FID_CONDUCTOR, 00295 /* TPE4 */ ID3FID_MIXARTIST, 00296 /* TPOS */ ID3FID_PARTINSET, 00297 /* TPRO */ ID3FID_PRODUCEDNOTICE, 00298 /* TPUB */ ID3FID_PUBLISHER, 00299 /* TRCK */ ID3FID_TRACKNUM, 00300 /* TRDA */ ID3FID_RECORDINGDATES, 00301 /* TRSN */ ID3FID_NETRADIOSTATION, 00302 /* TRSO */ ID3FID_NETRADIOOWNER, 00303 /* TSIZ */ ID3FID_SIZE, 00304 /* TSOA */ ID3FID_ALBUMSORTORDER, 00305 /* TSOP */ ID3FID_PERFORMERSORTORDER, 00306 /* TSOT */ ID3FID_TITLESORTORDER, 00307 /* TSRC */ ID3FID_ISRC, 00308 /* TSSE */ ID3FID_ENCODERSETTINGS, 00309 /* TSST */ ID3FID_SETSUBTITLE, 00310 /* TXXX */ ID3FID_USERTEXT, 00311 /* TYER */ ID3FID_YEAR, 00312 /* UFID */ ID3FID_UNIQUEFILEID, 00313 /* USER */ ID3FID_TERMSOFUSE, 00314 /* USLT */ ID3FID_UNSYNCEDLYRICS, 00315 /* WCOM */ ID3FID_WWWCOMMERCIALINFO, 00316 /* WCOP */ ID3FID_WWWCOPYRIGHT, 00317 /* WOAF */ ID3FID_WWWAUDIOFILE, 00318 /* WOAR */ ID3FID_WWWARTIST, 00319 /* WOAS */ ID3FID_WWWAUDIOSOURCE, 00320 /* WORS */ ID3FID_WWWRADIOPAGE, 00321 /* WPAY */ ID3FID_WWWPAYMENT, 00322 /* WPUB */ ID3FID_WWWPUBLISHER, 00323 /* WXXX */ ID3FID_WWWUSER, 00324 /* */ ID3FID_METACRYPTO, 00325 /* */ ID3FID_METACOMPRESSION, 00326 /* >>>> */ ID3FID_LASTFRAMEID 00327 }; 00328 00329 ID3_ENUM(ID3_V1Lengths) 00330 { 00331 ID3_V1_LEN = 128, 00332 ID3_V1_LEN_ID = 3, 00333 ID3_V1_LEN_TITLE = 30, 00334 ID3_V1_LEN_ARTIST = 30, 00335 ID3_V1_LEN_ALBUM = 30, 00336 ID3_V1_LEN_YEAR = 4, 00337 ID3_V1_LEN_COMMENT = 30, 00338 ID3_V1_LEN_GENRE = 1 00339 }; 00340 00341 ID3_ENUM(ID3_FieldFlags) 00342 { 00343 ID3FF_NONE = 0, 00344 ID3FF_CSTR = 1 << 0, 00345 ID3FF_LIST = 1 << 1, 00346 ID3FF_ENCODABLE = 1 << 2, 00347 ID3FF_TEXTLIST = ID3FF_CSTR | ID3FF_LIST | ID3FF_ENCODABLE 00348 }; 00349 00351 ID3_ENUM(ID3_FieldType) 00352 { 00353 ID3FTY_NONE = -1, 00354 ID3FTY_INTEGER = 0, 00355 ID3FTY_BINARY, 00356 ID3FTY_TEXTSTRING, 00357 ID3FTY_NUMTYPES 00358 }; 00359 00363 ID3_ENUM(ID3_Err) 00364 { 00365 ID3E_NoError = 0, 00366 ID3E_NoMemory, 00367 ID3E_NoData, 00368 ID3E_BadData, 00369 ID3E_NoBuffer, 00370 ID3E_SmallBuffer, 00371 ID3E_InvalidFrameID, 00372 ID3E_FieldNotFound, 00373 ID3E_UnknownFieldType, 00374 ID3E_TagAlreadyAttached, 00375 ID3E_InvalidTagVersion, 00376 ID3E_NoFile, 00377 ID3E_ReadOnly, 00378 ID3E_zlibError 00379 }; 00380 00381 ID3_ENUM(ID3_ContentType) 00382 { 00383 ID3CT_OTHER = 0, 00384 ID3CT_LYRICS, 00385 ID3CT_TEXTTRANSCRIPTION, 00386 ID3CT_MOVEMENT, 00387 ID3CT_EVENTS, 00388 ID3CT_CHORD, 00389 ID3CT_TRIVIA 00390 }; 00391 00392 ID3_ENUM(ID3_PictureType) 00393 { 00394 ID3PT_OTHER = 0, 00395 ID3PT_PNG32ICON = 1, // 32x32 pixels 'file icon' (PNG only) 00396 ID3PT_OTHERICON = 2, // Other file icon 00397 ID3PT_COVERFRONT = 3, // Cover (front) 00398 ID3PT_COVERBACK = 4, // Cover (back) 00399 ID3PT_LEAFLETPAGE = 5, // Leaflet page 00400 ID3PT_MEDIA = 6, // Media (e.g. lable side of CD) 00401 ID3PT_LEADARTIST = 7, // Lead artist/lead performer/soloist 00402 ID3PT_ARTIST = 8, // Artist/performer 00403 ID3PT_CONDUCTOR = 9, // Conductor 00404 ID3PT_BAND = 10, // Band/Orchestra 00405 ID3PT_COMPOSER = 11, // Composer 00406 ID3PT_LYRICIST = 12, // Lyricist/text writer 00407 ID3PT_REC_LOCATION = 13, // Recording Location 00408 ID3PT_RECORDING = 14, // During recording 00409 ID3PT_PERFORMANCE = 15, // During performance 00410 ID3PT_VIDEO = 16, // Movie/video screen capture 00411 ID3PT_FISH = 17, // A bright coloured fish 00412 ID3PT_ILLUSTRATION = 18, // Illustration 00413 ID3PT_ARTISTLOGO = 19, // Band/artist logotype 00414 ID3PT_PUBLISHERLOGO = 20 // Publisher/Studio logotype 00415 }; 00416 00417 ID3_ENUM(ID3_TimeStampFormat) 00418 { 00419 ID3TSF_FRAME = 1, 00420 ID3TSF_MS 00421 }; 00422 00423 ID3_ENUM(MP3_BitRates) 00424 { 00425 MP3BITRATE_FALSE = -1, 00426 MP3BITRATE_NONE = 0, 00427 MP3BITRATE_8K = 8000, 00428 MP3BITRATE_16K = 16000, 00429 MP3BITRATE_24K = 24000, 00430 MP3BITRATE_32K = 32000, 00431 MP3BITRATE_40K = 40000, 00432 MP3BITRATE_48K = 48000, 00433 MP3BITRATE_56K = 56000, 00434 MP3BITRATE_64K = 64000, 00435 MP3BITRATE_80K = 80000, 00436 MP3BITRATE_96K = 96000, 00437 MP3BITRATE_112K = 112000, 00438 MP3BITRATE_128K = 128000, 00439 MP3BITRATE_144K = 144000, 00440 MP3BITRATE_160K = 160000, 00441 MP3BITRATE_176K = 176000, 00442 MP3BITRATE_192K = 192000, 00443 MP3BITRATE_224K = 224000, 00444 MP3BITRATE_256K = 256000, 00445 MP3BITRATE_288K = 288000, 00446 MP3BITRATE_320K = 320000, 00447 MP3BITRATE_352K = 352000, 00448 MP3BITRATE_384K = 384000, 00449 MP3BITRATE_416K = 416000, 00450 MP3BITRATE_448K = 448000 00451 }; 00452 00453 ID3_ENUM(Mpeg_Layers) 00454 { 00455 MPEGLAYER_FALSE = -1, 00456 MPEGLAYER_UNDEFINED, 00457 MPEGLAYER_III, 00458 MPEGLAYER_II, 00459 MPEGLAYER_I 00460 }; 00461 00462 ID3_ENUM(Mpeg_Version) 00463 { 00464 MPEGVERSION_FALSE = -1, 00465 MPEGVERSION_2_5, 00466 MPEGVERSION_Reserved, 00467 MPEGVERSION_2, 00468 MPEGVERSION_1 00469 }; 00470 00471 ID3_ENUM(Mp3_Frequencies) 00472 { 00473 MP3FREQUENCIES_FALSE = -1, 00474 MP3FREQUENCIES_Reserved = 0, 00475 MP3FREQUENCIES_8000HZ = 8000, 00476 MP3FREQUENCIES_11025HZ = 11025, 00477 MP3FREQUENCIES_12000HZ = 12000, 00478 MP3FREQUENCIES_16000HZ = 16000, 00479 MP3FREQUENCIES_22050HZ = 22050, 00480 MP3FREQUENCIES_24000HZ = 24000, 00481 MP3FREQUENCIES_32000HZ = 32000, 00482 MP3FREQUENCIES_48000HZ = 48000, 00483 MP3FREQUENCIES_44100HZ = 44100, 00484 }; 00485 00486 ID3_ENUM(Mp3_ChannelMode) 00487 { 00488 MP3CHANNELMODE_FALSE = -1, 00489 MP3CHANNELMODE_STEREO, 00490 MP3CHANNELMODE_JOINT_STEREO, 00491 MP3CHANNELMODE_DUAL_CHANNEL, 00492 MP3CHANNELMODE_SINGLE_CHANNEL 00493 }; 00494 00495 ID3_ENUM(Mp3_ModeExt) 00496 { 00497 MP3MODEEXT_FALSE = -1, 00498 MP3MODEEXT_0, 00499 MP3MODEEXT_1, 00500 MP3MODEEXT_2, 00501 MP3MODEEXT_3 00502 }; 00503 00504 ID3_ENUM(Mp3_Emphasis) 00505 { 00506 MP3EMPHASIS_FALSE = -1, 00507 MP3EMPHASIS_NONE, 00508 MP3EMPHASIS_50_15MS, 00509 MP3EMPHASIS_Reserved, 00510 MP3EMPHASIS_CCIT_J17 00511 }; 00512 00513 ID3_ENUM(Mp3_Crc) 00514 { 00515 MP3CRC_ERROR_SIZE = -2, 00516 MP3CRC_MISMATCH = -1, 00517 MP3CRC_NONE = 0, 00518 MP3CRC_OK = 1 00519 }; 00520 00521 ID3_STRUCT(Mp3_Headerinfo) 00522 { 00523 Mpeg_Layers layer; 00524 Mpeg_Version version; 00525 MP3_BitRates bitrate; 00526 Mp3_ChannelMode channelmode; 00527 Mp3_ModeExt modeext; 00528 Mp3_Emphasis emphasis; 00529 Mp3_Crc crc; 00530 uint32 vbr_bitrate; // avg bitrate from xing header 00531 uint32 frequency; // samplerate 00532 uint32 framesize; 00533 uint32 frames; // nr of frames 00534 uint32 time; // nr of seconds in song 00535 bool privatebit; 00536 bool copyrighted; 00537 bool original; 00538 }; 00539 00540 #define ID3_NR_OF_V1_GENRES 148 00541 00542 static const char *ID3_v1_genre_description[ID3_NR_OF_V1_GENRES] = 00543 { 00544 "Blues", //0 00545 "Classic Rock", //1 00546 "Country", //2 00547 "Dance", //3 00548 "Disco", //4 00549 "Funk", //5 00550 "Grunge", //6 00551 "Hip-Hop", //7 00552 "Jazz", //8 00553 "Metal", //9 00554 "New Age", //10 00555 "Oldies", //11 00556 "Other", //12 00557 "Pop", //13 00558 "R&B", //14 00559 "Rap", //15 00560 "Reggae", //16 00561 "Rock", //17 00562 "Techno", //18 00563 "Industrial", //19 00564 "Alternative", //20 00565 "Ska", //21 00566 "Death Metal", //22 00567 "Pranks", //23 00568 "Soundtrack", //24 00569 "Euro-Techno", //25 00570 "Ambient", //26 00571 "Trip-Hop", //27 00572 "Vocal", //28 00573 "Jazz+Funk", //29 00574 "Fusion", //30 00575 "Trance", //31 00576 "Classical", //32 00577 "Instrumental", //33 00578 "Acid", //34 00579 "House", //35 00580 "Game", //36 00581 "Sound Clip", //37 00582 "Gospel", //38 00583 "Noise", //39 00584 "AlternRock", //40 00585 "Bass", //41 00586 "Soul", //42 00587 "Punk", //43 00588 "Space", //44 00589 "Meditative", //45 00590 "Instrumental Pop", //46 00591 "Instrumental Rock", //47 00592 "Ethnic", //48 00593 "Gothic", //49 00594 "Darkwave", //50 00595 "Techno-Industrial", //51 00596 "Electronic", //52 00597 "Pop-Folk", //53 00598 "Eurodance", //54 00599 "Dream", //55 00600 "Southern Rock", //56 00601 "Comedy", //57 00602 "Cult", //58 00603 "Gangsta", //59 00604 "Top 40", //60 00605 "Christian Rap", //61 00606 "Pop/Funk", //62 00607 "Jungle", //63 00608 "Native American", //64 00609 "Cabaret", //65 00610 "New Wave", //66 00611 "Psychedelic", //67 00612 "Rave", //68 00613 "Showtunes", //69 00614 "Trailer", //70 00615 "Lo-Fi", //71 00616 "Tribal", //72 00617 "Acid Punk", //73 00618 "Acid Jazz", //74 00619 "Polka", //75 00620 "Retro", //76 00621 "Musical", //77 00622 "Rock & Roll", //78 00623 "Hard Rock", //79 00624 // following are winamp extentions 00625 "Folk", //80 00626 "Folk-Rock", //81 00627 "National Folk", //82 00628 "Swing", //83 00629 "Fast Fusion", //84 00630 "Bebob", //85 00631 "Latin", //86 00632 "Revival", //87 00633 "Celtic", //88 00634 "Bluegrass", //89 00635 "Avantgarde", //90 00636 "Gothic Rock", //91 00637 "Progressive Rock", //92 00638 "Psychedelic Rock", //93 00639 "Symphonic Rock", //94 00640 "Slow Rock", //95 00641 "Big Band", //96 00642 "Chorus", //97 00643 "Easy Listening", //98 00644 "Acoustic", //99 00645 "Humour", //100 00646 "Speech", //101 00647 "Chanson", //102 00648 "Opera", //103 00649 "Chamber Music", //104 00650 "Sonata", //105 00651 "Symphony", //106 00652 "Booty Bass", //107 00653 "Primus", //108 00654 "Porn Groove", //109 00655 "Satire", //110 00656 "Slow Jam", //111 00657 "Club", //112 00658 "Tango", //113 00659 "Samba", //114 00660 "Folklore", //115 00661 "Ballad", //116 00662 "Power Ballad", //117 00663 "Rhythmic Soul", //118 00664 "Freestyle", //119 00665 "Duet", //120 00666 "Punk Rock", //121 00667 "Drum Solo", //122 00668 "A capella", //123 00669 "Euro-House", //124 00670 "Dance Hall", //125 00671 "Goa", //126 00672 "Drum & Bass", //127 00673 "Club-House", //128 00674 "Hardcore", //129 00675 "Terror", //130 00676 "Indie", //131 00677 "Britpop", //132 00678 "Negerpunk", //133 00679 "Polsk Punk", //134 00680 "Beat", //135 00681 "Christian Gangsta Rap", //136 00682 "Heavy Metal", //137 00683 "Black Metal", //138 00684 "Crossover", //139 00685 "Contemporary Christian",//140 00686 "Christian Rock ", //141 00687 "Merengue", //142 00688 "Salsa", //143 00689 "Thrash Metal", //144 00690 "Anime", //145 00691 "JPop", //146 00692 "Synthpop" //147 00693 }; 00694 00695 #define ID3_V1GENRE2DESCRIPTION(x) (x < ID3_NR_OF_V1_GENRES && x >= 0) ? ID3_v1_genre_description[x] : NULL 00696 00697 #define MASK(bits) ((1 << (bits)) - 1) 00698 #define MASK1 MASK(1) 00699 #define MASK2 MASK(2) 00700 #define MASK3 MASK(3) 00701 #define MASK4 MASK(4) 00702 #define MASK5 MASK(5) 00703 #define MASK6 MASK(6) 00704 #define MASK7 MASK(7) 00705 #define MASK8 MASK(8) 00706 00707 /* 00708 * The following is borrowed from glib.h (http://www.gtk.org) 00709 */ 00710 #ifdef WIN32 00711 00712 /* On native Win32, directory separator is the backslash, and search path 00713 * separator is the semicolon. 00714 */ 00715 # define ID3_DIR_SEPARATOR '\\' 00716 # define ID3_DIR_SEPARATOR_S "\\" 00717 # define ID3_SEARCHPATH_SEPARATOR ';' 00718 # define ID3_SEARCHPATH_SEPARATOR_S ";" 00719 00720 #else /* !WIN32 */ 00721 00722 # ifndef _EMX_ 00723 /* Unix */ 00724 00725 # define ID3_DIR_SEPARATOR '/' 00726 # define ID3_DIR_SEPARATOR_S "/" 00727 # define ID3_SEARCHPATH_SEPARATOR ':' 00728 # define ID3_SEARCHPATH_SEPARATOR_S ":" 00729 00730 # else 00731 /* EMX/OS2 */ 00732 00733 # define ID3_DIR_SEPARATOR '/' 00734 # define ID3_DIR_SEPARATOR_S "/" 00735 # define ID3_SEARCHPATH_SEPARATOR ';' 00736 # define ID3_SEARCHPATH_SEPARATOR_S ";" 00737 00738 # endif 00739 00740 #endif /* !WIN32 */ 00741 00742 #ifndef NULL 00743 # define NULL ((void*) 0) 00744 #endif 00745 00746 #endif /* _ID3LIB_GLOBALS_H_ */ 00747