include/id3/globals.h

Go to the documentation of this file.
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   "Psychadelic",       //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   "Trash 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 

Generated on Mon Aug 20 17:48:46 2007 for id3lib by  doxygen 1.5.2