id3lib  3.8.3
globals.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 /* $Id: globals.h,v 1.54 2003/02/21 03:47:41 slackorama Exp $
3 
4  * id3lib: a C++ library for creating and manipulating id3v1/v2 tags
5  * Copyright 1999, 2000 Scott Thomas Haug
6  * Copyright 2002 Thijmen Klok (thijmen@id3lib.org)
7 
8  * This library is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU Library General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or (at your
11  * option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
16  * License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public License
19  * along with this library; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 
22  * The id3lib authors encourage improvements and optimisations to be sent to
23  * the id3lib coordinator. Please see the README file for details on where to
24  * send such submissions. See the AUTHORS file for a list of people who have
25  * contributed to id3lib. See the ChangeLog file for a list of changes to
26  * id3lib. These files are distributed with id3lib at
27  * http://download.sourceforge.net/id3lib/
28  */
29 
34 #ifndef _ID3LIB_GLOBALS_H_
35 #define _ID3LIB_GLOBALS_H_
36 
37 #include <stdlib.h>
38 #include "id3/sized_types.h"
39 
40 /* id3lib version.
41  * we prefix variable declarations so they can
42  * properly get exported in windows dlls.
43  */
44 #ifdef WIN32
45 # define LINKOPTION_STATIC 1 //both for use and creation of static lib
46 # define LINKOPTION_CREATE_DYNAMIC 2 //should only be used by prj/id3lib.dsp
47 # define LINKOPTION_USE_DYNAMIC 3 //if your project links id3lib dynamic
48 # ifndef ID3LIB_LINKOPTION
49 # pragma message("*** NOTICE *** (not a real error)")
50 # pragma message("* You should include a define in your project which reflect how you link the library")
51 # pragma message("* If you use id3lib.lib or libprj/id3lib.dsp (you link static) you should add")
52 # pragma message("* ID3LIB_LINKOPTION=1 to your preprocessor definitions of your project.")
53 # pragma message("* If you use id3lib.dll (you link dynamic) you should add ID3LIB_LINKOPTION=3")
54 # pragma message("* to your preprocessor definitions of your project.")
55 # pragma message("***")
56 # error read message above or win32.readme.first.txt
57 # else
58 # if (ID3LIB_LINKOPTION == LINKOPTION_CREATE_DYNAMIC)
59  //used for creating a dynamic dll
60 # define ID3_C_EXPORT extern _declspec(dllexport)
61 # define ID3_CPP_EXPORT __declspec(dllexport)
62 # define CCONV __stdcall // Added for VB & Delphi Compatibility - By FrogPrince Advised By Lothar
63 # endif
64 # if (ID3LIB_LINKOPTION == LINKOPTION_STATIC)
65  //used for creating a static lib and using a static lib
66 # define ID3_C_EXPORT
67 # define ID3_CPP_EXPORT
68 # define CCONV
69 # endif
70 # if (ID3LIB_LINKOPTION == LINKOPTION_USE_DYNAMIC)
71  //used for those that do not link static and are using the dynamic dll by including a id3lib header
72 # define ID3_C_EXPORT extern _declspec(dllimport)
73 # define ID3_CPP_EXPORT __declspec(dllimport) //functions like these shouldn't be used by vb and delphi,
74 # define CCONV __stdcall // Added for VB & Delphi Compatibility - By FrogPrince Advised By Lothar
75 # endif
76 # endif
77 #else /* !WIN32 */
78 # define ID3_C_EXPORT
79 # define ID3_CPP_EXPORT
80 # define CCONV
81 #endif /* !WIN32 */
82 
83 #define ID3_C_VAR extern
84 
85 #ifndef __cplusplus
86 
87 typedef int bool;
88 # define false (0)
89 # define true (!false)
90 
91 #endif /* __cplusplus */
92 
93 ID3_C_VAR const char * const ID3LIB_NAME;
94 ID3_C_VAR const char * const ID3LIB_RELEASE;
95 ID3_C_VAR const char * const ID3LIB_FULL_NAME;
100 ID3_C_VAR const int ID3LIB_BINARY_AGE;
101 
102 #define ID3_TAGID "ID3"
103 #define ID3_TAGIDSIZE (3)
104 #define ID3_TAGHEADERSIZE (10)
105 
111 #define STR_V1_COMMENT_DESC "ID3v1 Comment"
112 
113 
114 typedef unsigned char uchar;
115 typedef long unsigned int luint;
116 
117 typedef uint16 unicode_t;
118 typedef uint16 flags_t;
119 
120 #define NULL_UNICODE ((unicode_t) '\0')
121 
122 /* These macros are used to make the C and C++ declarations for enums and
123  * structs have the same syntax. Basically, it allows C users to refer to an
124  * enum or a struct without prepending enum/struct.
125  */
126 #ifdef __cplusplus
127 # define ID3_ENUM(E) enum E
128 # define ID3_STRUCT(S) struct S
129 #else
130 # define ID3_ENUM(E) typedef enum _ ## E E; enum _ ## E
131 # define ID3_STRUCT(S) typedef struct _ ## S S; struct _ ## S
132 #endif
133 
138 {
145  ID3TE_ASCII = ID3TE_ISO8859_1, // do not use this -> use ID3TE_IS_SINGLE_BYTE_ENC(enc) instead
146  ID3TE_UNICODE = ID3TE_UTF16 // do not use this -> use ID3TE_IS_DOUBLE_BYTE_ENC(enc) instead
147 };
148 
149 #define ID3TE_IS_SINGLE_BYTE_ENC(enc) ((enc) == ID3TE_ISO8859_1 || (enc) == ID3TE_UTF8)
150 #define ID3TE_IS_DOUBLE_BYTE_ENC(enc) ((enc) == ID3TE_UTF16 || (enc) == ID3TE_UTF16BE)
151 
155 {
156  ID3V1_0 = 0,
159 };
160 
162 {
170 };
171 
175 {
177  ID3TT_ID3V1 = 1 << 0,
178  ID3TT_ID3V2 = 1 << 1,
179  ID3TT_LYRICS3 = 1 << 2,
180  ID3TT_LYRICS3V2 = 1 << 3,
181  ID3TT_MUSICMATCH = 1 << 4,
192 };
193 
198 {
224 };
225 
230 {
231  /* ???? */ ID3FID_NOFRAME = 0,
232  /* AENC */ ID3FID_AUDIOCRYPTO,
233  /* APIC */ ID3FID_PICTURE,
235  /* COMM */ ID3FID_COMMENT,
236  /* COMR */ ID3FID_COMMERCIAL,
237  /* ENCR */ ID3FID_CRYPTOREG,
238  /* EQU2 */ ID3FID_EQUALIZATION2,
239  /* EQUA */ ID3FID_EQUALIZATION,
240  /* ETCO */ ID3FID_EVENTTIMING,
241  /* GEOB */ ID3FID_GENERALOBJECT,
242  /* GRID */ ID3FID_GROUPINGREG,
244  /* LINK */ ID3FID_LINKEDINFO,
245  /* MCDI */ ID3FID_CDID,
246  /* MLLT */ ID3FID_MPEGLOOKUP,
247  /* OWNE */ ID3FID_OWNERSHIP,
248  /* PRIV */ ID3FID_PRIVATE,
249  /* PCNT */ ID3FID_PLAYCOUNTER,
250  /* POPM */ ID3FID_POPULARIMETER,
251  /* POSS */ ID3FID_POSITIONSYNC,
252  /* RBUF */ ID3FID_BUFFERSIZE,
253  /* RVA2 */ ID3FID_VOLUMEADJ2,
254  /* RVAD */ ID3FID_VOLUMEADJ,
255  /* RVRB */ ID3FID_REVERB,
256  /* SEEK */ ID3FID_SEEKFRAME,
257  /* SIGN */ ID3FID_SIGNATURE,
258  /* SYLT */ ID3FID_SYNCEDLYRICS,
259  /* SYTC */ ID3FID_SYNCEDTEMPO,
260  /* TALB */ ID3FID_ALBUM,
261  /* TBPM */ ID3FID_BPM,
262  /* TCOM */ ID3FID_COMPOSER,
263  /* TCON */ ID3FID_CONTENTTYPE,
264  /* TCOP */ ID3FID_COPYRIGHT,
265  /* TDAT */ ID3FID_DATE,
266  /* TDEN */ ID3FID_ENCODINGTIME,
267  /* TDLY */ ID3FID_PLAYLISTDELAY,
269  /* TDRC */ ID3FID_RECORDINGTIME,
270  /* TDRL */ ID3FID_RELEASETIME,
271  /* TDTG */ ID3FID_TAGGINGTIME,
273  /* TENC */ ID3FID_ENCODEDBY,
274  /* TEXT */ ID3FID_LYRICIST,
275  /* TFLT */ ID3FID_FILETYPE,
276  /* TIME */ ID3FID_TIME,
277  /* TIT1 */ ID3FID_CONTENTGROUP,
278  /* TIT2 */ ID3FID_TITLE,
279  /* TIT3 */ ID3FID_SUBTITLE,
280  /* TKEY */ ID3FID_INITIALKEY,
281  /* TLAN */ ID3FID_LANGUAGE,
282  /* TLEN */ ID3FID_SONGLEN,
284  /* TMED */ ID3FID_MEDIATYPE,
285  /* TMOO */ ID3FID_MOOD,
286  /* TOAL */ ID3FID_ORIGALBUM,
287  /* TOFN */ ID3FID_ORIGFILENAME,
288  /* TOLY */ ID3FID_ORIGLYRICIST,
289  /* TOPE */ ID3FID_ORIGARTIST,
290  /* TORY */ ID3FID_ORIGYEAR,
291  /* TOWN */ ID3FID_FILEOWNER,
292  /* TPE1 */ ID3FID_LEADARTIST,
293  /* TPE2 */ ID3FID_BAND,
294  /* TPE3 */ ID3FID_CONDUCTOR,
295  /* TPE4 */ ID3FID_MIXARTIST,
296  /* TPOS */ ID3FID_PARTINSET,
298  /* TPUB */ ID3FID_PUBLISHER,
299  /* TRCK */ ID3FID_TRACKNUM,
302  /* TRSO */ ID3FID_NETRADIOOWNER,
303  /* TSIZ */ ID3FID_SIZE,
307  /* TSRC */ ID3FID_ISRC,
309  /* TSST */ ID3FID_SETSUBTITLE,
310  /* TXXX */ ID3FID_USERTEXT,
311  /* TYER */ ID3FID_YEAR,
312  /* UFID */ ID3FID_UNIQUEFILEID,
313  /* USER */ ID3FID_TERMSOFUSE,
316  /* WCOP */ ID3FID_WWWCOPYRIGHT,
317  /* WOAF */ ID3FID_WWWAUDIOFILE,
318  /* WOAR */ ID3FID_WWWARTIST,
320  /* WORS */ ID3FID_WWWRADIOPAGE,
321  /* WPAY */ ID3FID_WWWPAYMENT,
322  /* WPUB */ ID3FID_WWWPUBLISHER,
323  /* WXXX */ ID3FID_WWWUSER,
326  /* >>>> */ ID3FID_LASTFRAMEID
327 };
328 
330 {
331  ID3_V1_LEN = 128,
339 };
340 
342 {
344  ID3FF_CSTR = 1 << 0,
345  ID3FF_LIST = 1 << 1,
346  ID3FF_ENCODABLE = 1 << 2,
348 };
349 
352 {
358 };
359 
364 {
379 };
380 
382 {
390 };
391 
393 {
395  ID3PT_PNG32ICON = 1, // 32x32 pixels 'file icon' (PNG only)
396  ID3PT_OTHERICON = 2, // Other file icon
397  ID3PT_COVERFRONT = 3, // Cover (front)
398  ID3PT_COVERBACK = 4, // Cover (back)
399  ID3PT_LEAFLETPAGE = 5, // Leaflet page
400  ID3PT_MEDIA = 6, // Media (e.g. lable side of CD)
401  ID3PT_LEADARTIST = 7, // Lead artist/lead performer/soloist
402  ID3PT_ARTIST = 8, // Artist/performer
403  ID3PT_CONDUCTOR = 9, // Conductor
404  ID3PT_BAND = 10, // Band/Orchestra
405  ID3PT_COMPOSER = 11, // Composer
406  ID3PT_LYRICIST = 12, // Lyricist/text writer
407  ID3PT_REC_LOCATION = 13, // Recording Location
408  ID3PT_RECORDING = 14, // During recording
409  ID3PT_PERFORMANCE = 15, // During performance
410  ID3PT_VIDEO = 16, // Movie/video screen capture
411  ID3PT_FISH = 17, // A bright coloured fish
412  ID3PT_ILLUSTRATION = 18, // Illustration
413  ID3PT_ARTISTLOGO = 19, // Band/artist logotype
414  ID3PT_PUBLISHERLOGO = 20 // Publisher/Studio logotype
415 };
416 
418 {
421 };
422 
424 {
428  MP3BITRATE_16K = 16000,
429  MP3BITRATE_24K = 24000,
430  MP3BITRATE_32K = 32000,
431  MP3BITRATE_40K = 40000,
432  MP3BITRATE_48K = 48000,
433  MP3BITRATE_56K = 56000,
434  MP3BITRATE_64K = 64000,
435  MP3BITRATE_80K = 80000,
436  MP3BITRATE_96K = 96000,
437  MP3BITRATE_112K = 112000,
438  MP3BITRATE_128K = 128000,
439  MP3BITRATE_144K = 144000,
440  MP3BITRATE_160K = 160000,
441  MP3BITRATE_176K = 176000,
442  MP3BITRATE_192K = 192000,
443  MP3BITRATE_224K = 224000,
444  MP3BITRATE_256K = 256000,
445  MP3BITRATE_288K = 288000,
446  MP3BITRATE_320K = 320000,
447  MP3BITRATE_352K = 352000,
448  MP3BITRATE_384K = 384000,
449  MP3BITRATE_416K = 416000,
451 };
452 
454 {
460 };
461 
463 {
469 };
470 
472 {
484 };
485 
487 {
493 };
494 
496 {
502 };
503 
505 {
511 };
512 
514 {
519 };
520 
522 {
530  uint32 vbr_bitrate; // avg bitrate from xing header
531  uint32 frequency; // samplerate
532  uint32 framesize;
533  uint32 frames; // nr of frames
534  uint32 time; // nr of seconds in song
537  bool original;
538 };
539 
540 #define ID3_NR_OF_V1_GENRES 148
541 
542 static const char *ID3_v1_genre_description[ID3_NR_OF_V1_GENRES] =
543 {
544  "Blues", //0
545  "Classic Rock", //1
546  "Country", //2
547  "Dance", //3
548  "Disco", //4
549  "Funk", //5
550  "Grunge", //6
551  "Hip-Hop", //7
552  "Jazz", //8
553  "Metal", //9
554  "New Age", //10
555  "Oldies", //11
556  "Other", //12
557  "Pop", //13
558  "R&B", //14
559  "Rap", //15
560  "Reggae", //16
561  "Rock", //17
562  "Techno", //18
563  "Industrial", //19
564  "Alternative", //20
565  "Ska", //21
566  "Death Metal", //22
567  "Pranks", //23
568  "Soundtrack", //24
569  "Euro-Techno", //25
570  "Ambient", //26
571  "Trip-Hop", //27
572  "Vocal", //28
573  "Jazz+Funk", //29
574  "Fusion", //30
575  "Trance", //31
576  "Classical", //32
577  "Instrumental", //33
578  "Acid", //34
579  "House", //35
580  "Game", //36
581  "Sound Clip", //37
582  "Gospel", //38
583  "Noise", //39
584  "AlternRock", //40
585  "Bass", //41
586  "Soul", //42
587  "Punk", //43
588  "Space", //44
589  "Meditative", //45
590  "Instrumental Pop", //46
591  "Instrumental Rock", //47
592  "Ethnic", //48
593  "Gothic", //49
594  "Darkwave", //50
595  "Techno-Industrial", //51
596  "Electronic", //52
597  "Pop-Folk", //53
598  "Eurodance", //54
599  "Dream", //55
600  "Southern Rock", //56
601  "Comedy", //57
602  "Cult", //58
603  "Gangsta", //59
604  "Top 40", //60
605  "Christian Rap", //61
606  "Pop/Funk", //62
607  "Jungle", //63
608  "Native American", //64
609  "Cabaret", //65
610  "New Wave", //66
611  "Psychedelic", //67
612  "Rave", //68
613  "Showtunes", //69
614  "Trailer", //70
615  "Lo-Fi", //71
616  "Tribal", //72
617  "Acid Punk", //73
618  "Acid Jazz", //74
619  "Polka", //75
620  "Retro", //76
621  "Musical", //77
622  "Rock & Roll", //78
623  "Hard Rock", //79
624 // following are winamp extentions
625  "Folk", //80
626  "Folk-Rock", //81
627  "National Folk", //82
628  "Swing", //83
629  "Fast Fusion", //84
630  "Bebob", //85
631  "Latin", //86
632  "Revival", //87
633  "Celtic", //88
634  "Bluegrass", //89
635  "Avantgarde", //90
636  "Gothic Rock", //91
637  "Progressive Rock", //92
638  "Psychedelic Rock", //93
639  "Symphonic Rock", //94
640  "Slow Rock", //95
641  "Big Band", //96
642  "Chorus", //97
643  "Easy Listening", //98
644  "Acoustic", //99
645  "Humour", //100
646  "Speech", //101
647  "Chanson", //102
648  "Opera", //103
649  "Chamber Music", //104
650  "Sonata", //105
651  "Symphony", //106
652  "Booty Bass", //107
653  "Primus", //108
654  "Porn Groove", //109
655  "Satire", //110
656  "Slow Jam", //111
657  "Club", //112
658  "Tango", //113
659  "Samba", //114
660  "Folklore", //115
661  "Ballad", //116
662  "Power Ballad", //117
663  "Rhythmic Soul", //118
664  "Freestyle", //119
665  "Duet", //120
666  "Punk Rock", //121
667  "Drum Solo", //122
668  "A capella", //123
669  "Euro-House", //124
670  "Dance Hall", //125
671  "Goa", //126
672  "Drum & Bass", //127
673  "Club-House", //128
674  "Hardcore", //129
675  "Terror", //130
676  "Indie", //131
677  "Britpop", //132
678  "Negerpunk", //133
679  "Polsk Punk", //134
680  "Beat", //135
681  "Christian Gangsta Rap", //136
682  "Heavy Metal", //137
683  "Black Metal", //138
684  "Crossover", //139
685  "Contemporary Christian",//140
686  "Christian Rock ", //141
687  "Merengue", //142
688  "Salsa", //143
689  "Thrash Metal", //144
690  "Anime", //145
691  "JPop", //146
692  "Synthpop" //147
693 };
694 
695 #define ID3_V1GENRE2DESCRIPTION(x) (x < ID3_NR_OF_V1_GENRES && x >= 0) ? ID3_v1_genre_description[x] : NULL
696 
697 #define MASK(bits) ((1 << (bits)) - 1)
698 #define MASK1 MASK(1)
699 #define MASK2 MASK(2)
700 #define MASK3 MASK(3)
701 #define MASK4 MASK(4)
702 #define MASK5 MASK(5)
703 #define MASK6 MASK(6)
704 #define MASK7 MASK(7)
705 #define MASK8 MASK(8)
706 
707 /*
708  * The following is borrowed from glib.h (http://www.gtk.org)
709  */
710 #ifdef WIN32
711 
712 /* On native Win32, directory separator is the backslash, and search path
713  * separator is the semicolon.
714  */
715 # define ID3_DIR_SEPARATOR '\\'
716 # define ID3_DIR_SEPARATOR_S "\\"
717 # define ID3_SEARCHPATH_SEPARATOR ';'
718 # define ID3_SEARCHPATH_SEPARATOR_S ";"
719 
720 #else /* !WIN32 */
721 
722 # ifndef _EMX_
723 /* Unix */
724 
725 # define ID3_DIR_SEPARATOR '/'
726 # define ID3_DIR_SEPARATOR_S "/"
727 # define ID3_SEARCHPATH_SEPARATOR ':'
728 # define ID3_SEARCHPATH_SEPARATOR_S ":"
729 
730 # else
731 /* EMX/OS2 */
732 
733 # define ID3_DIR_SEPARATOR '/'
734 # define ID3_DIR_SEPARATOR_S "/"
735 # define ID3_SEARCHPATH_SEPARATOR ';'
736 # define ID3_SEARCHPATH_SEPARATOR_S ";"
737 
738 # endif
739 
740 #endif /* !WIN32 */
741 
742 #ifndef NULL
743 # define NULL ((void*) 0)
744 #endif
745 
746 #endif /* _ID3LIB_GLOBALS_H_ */
747