ID3 tag версии 1.0 предназначен для хранения некоторой информации о содержимом MP3-шки, которая не может быть сохранена непосредственно в потоке MP3. Располагаться он может в последних 128 байтах MP3-файла, но его наличие в файле не обязательно. То есть, считываем последние 128 байт файла, проверяем сигнатуру (первые три символа - TAG), и если она совпала, то считаем эти 128 байт ID3 тагом.
Содержимое ID3 тага версии 1.0:Offset | Type | Name | Comment |
0 3 33 63 93 97 127 |
char[3] char[30] char[30] char[30] char[4] char[30] byte | Signature Title Artist Album Year Comment Genre |
'TAG', если нет, то это не ID3-таг Название песни Исполнитель Название альбома Год издания Комментарий Жанр музыки, см. таблицу |
Как видно, название песни, альбома, исполнитель и комментарий представляются не более чем тридцатью символами. Если же в строке меньше 30 символов, то она дополняется символами с кодом 0 (первый символ с кодом 0 считается концом строки). Имеется также небольшое расширение формата - ID3 таг версии 1.1, позволяющий сохранять номер трека компакт-диска, с которого оцифровывалсь музыка. Для этого выделен последний байт комментария. Чтобы быть уверенным, что это именно номер трека, а не символ из очень длинного комментария, надо проверить предпоследний байт на равенство нулю.
Содержимое ID3 тага версии 1.1:Offset | Type | Name | Comment |
0 3 33 63 93 97 125 126 127 |
char[3] char[30] char[30] char[30] char[4] char[28] byte byte byte |
Signature Title Artist Album Year Comment 0 Track Genre |
'TAG', если нет, то это не ID3-таг Название песни Исполнитель Название альбома Год издания Комментарий Разделитель - если не 0, то таг версии 1.0 Номер трека компакт-диска Жанр музыки, см. таблицу |
К сожалению, поскольку формат тага разрабатывался буржуями, нет никаких стандартов на то, в какой кодировке будут записаны русские символы. Поэтому, естественно, каждый пишет в той кодировке, которая роднее его системе. Ну а авторам программ приходится извращаться, чтобы эти таги обрабатывать. В MP3 Tagger-е для определения кодировки используется частотный анализ русских букв. Вероятно, стоило бы пожертвовать каким-нибудь байтиком в ID3 таге для записи номера кодировки. В программе так и делается - если исполнитель умещается в 28 символов, то в 29-й символ поля Artist пишется 0, а в 30-й: 1 для cp-866, 2 для win-1251, 3 для КОИ-8. Естественно, другие программы это не поддерживают :-)
Жанр музыки кодируется одним байтом, что также создаёт проблемы
- нельзя расширять список. Вот список всех
возможных жанров:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
Оригинальный список (1996) Blues ClassicRock Country Dance Disco Funk Grunge Hip-Hop Jazz Metal NewAge Oldies Other Pop R&B Rap Reggae Rock Techno Industrial Alternative Ska DeathMetal Pranks Soundtrack Euro-Techno Ambient Trip-Hop Vocal Jazz+Funk Fusion Trance Classical Instrumental Acid House Game SoundClip Gospel Noise Alt.Rock Bass Soul Punk Space Meditative InstrumentalPop InstrumentalRock Ethnic Gothic Darkwave Techno-Industrial Electronic Pop-Folk Eurodance Dream SouthernRock Comedy Cult GangstaRap Top40 ChristianRap Pop/Funk Jungle NativeAmerican Cabaret NewWave Psychedelic Rave Showtunes Trailer Lo-Fi Tribal AcidPunk AcidJazz Polka Retro Musical Rock&Roll HardRock |
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
Добавлено 12.12.1997 (Winamp) Folk Folk/Rock NationalFolk Swing Fast-Fusion Bebob Latin Revival Celtic Bluegrass Avantgarde GothicRock ProgressiveRock PsychedelicRock SymphonicRock SlowRock BigBand Chorus EasyListening Acoustic Humour Speech Chanson Opera ChamberMusic Sonata Symphony BootyBass Primus PornGroove Satire |
111 112 113 114 115 |
Добавлено 26.01.1998 (Winamp 1.7) SlowJam Club Tango Samba Folklore |
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
Добавлено 13.04.1998 (Winamp 1.90) Ballad PowerBallad RhythmicSoul Freestyle Duet PunkRock DrumSolo ACappella Euro-House DanceHall Goa Drum&Bass Club-House Hardcore Terror Indie BritPop Negerpunk PolskPunk Beat ChristianGangstaRap HeavyMetal BlackMetal Crossover ContemporaryChristian ChristianRock |
142 143 144 145 146 147 |
Добавлено 01.06.1998 (Winamp 1.91) Merengue Salsa ThrashMetal Anime JPop Synthpop |
148 ...... 254 |
Не определены |
255 | Отсутствует |