
ID3 - формат контейнера, позволяющий хранить в файлах формата MP3 (MPEG-1 Layer III) дополнительную информацию, такую как имя артиста, название композиции, название альбома, номер дорожки и др. Версия ID3v1 была разработана в 1996 (Eric Kemp). Метка располагается в конце файла, занимает 128 байт и начинается со строки "TAG". Поля: title (30 байт), artist (30 байт), album (30 байт), year (4 байта), comment (30 байт), genre (1 байт, список жанров предопределён). Кодировка - ISO-8859-1/ISO-Latin 1 (в России обычно используется cp1251), символ-заполнитель - 0x0.
Версия ID3v1.1 была разработана в 1997 (Michael Mutschler): в последнем байте поля comment записывается номер дорожки. Версия ID3v2.2 была разработана в 1998 (M. Nilsson). Не имеет ничего общего с ID3v1. Теги располагаются в начале файла. Каждый тег занимает отдельный кадр (frame) размером до 16МБ.
Для "безнаказанной" вставки незвуковых данных в MP3 файл используется тот факт, что любой MP3 декодер начинает декодирование после получения сигнала синхронизации (0b11111111 111xxxxx), так что достаточно поместить тег до первого такого сигнала и не допускать его случайного появления внутри тега (0b11111111 111xxxxx заменяется на 0b11111111 00000000 111xxxxx, а 0xff00 на 0xff0000). Порядок бит - MSB, порядок байт - big endian, символ-заполнитель - 0x0.
В начале тега идёт заголовок (10 байт): "ID3", подверсия ID3v2 (0x0200), флаги (1 байт: использование алгоритма десинхронизации, использование сжатия, остальное - резерв), длина тега без заголовка (4 байта, в каждом байте используются только младшие 7 бит), за которым идёт последовательность кадров. Каждый кадр имеет заголовок: 3-х символьное имя, 3-байтная длина кадра без заголовка. Имена, начинающиеся с 'X', 'Y' или 'Z', считаются экспериментальными (читай: можно придумывать свои кадры). По умолчанию, используется кодировка ISO-8859-1 (терминатор строки - 0x00). Некоторые (не все, а только имена которых начинаются с 'T'?) типы кадров могут использовать UCS-2 (Unicode), терминатор строки - 0x0000, про необходимые для определения порядка байт символы BOM разработчики забыли, такие кадры имеют однобайтовый флаг в начале кадра (0 - ISO-8859-1, 1 - UCS-2). Текстовые кадры могут иметь 3-х символьное поле, описывающее язык (ISO-639-2). Используемые в кадрах URL могут быть относительными.
Основные кадры (всего их более 80, в скобках даны имена для ID3v2.3 и ID3v2.4):
- TT1 (TIT1) - Content group description
- TT2 (TIT2) - название произведения
- TT3 (TIT3) - уточнение названия
- TP1 (TPE1) - основной исполнитель (можно указать несколько, разделяя их символом '/')
- TP2 (TPE2) - уточнение исполнителя (название группы и т.д.)
- TP3 (TPE3) - дирижёр
- TP4 (TPE4) - обработчик, модификатор
- TCM (TCOM) - композитор (можно указать несколько, разделяя их символом '/')
- TXT (TEXT) - автор текст произведения (можно указать несколько, разделяя их символом '/')
- TLA (TLAN) - язык (языки)
- TCO (TCON) - жанр (ссылки на жанры из списка ID3v1 в виде '(номер)' или свой текст)
- TAL (TALB) - название альбома. фильма, шоу и т.д.
- TPA (TPOS) - номер части альбома (если используется несколько носителей) или "номер/из"
- TRK (TRCK) - номер произведения в альбоме или "номер/из"
- TRC (TSRC) - номер ISRC (International Standard Recording Code)
- TYE (TYER) - год (4 символа)
- TDA (TDAT) - дата записи в формате 'DDMM'
- TIM (TIME) - время записи в формате 'HHMM'
- TMT (TMED) - тип носителя, произвольный текст или код в скобках:
- DIG[/A] (прочие цифровые источники [аналоговая передача])
- ANA (прочие аналоговые источники)
- CD[/A|/DD|/AD/AA]
- LD[/A]
- TT[/33|/45|/78] (грампластинка)
- MD
- DAT
- DVD
- TV/SECAM
- VID/PAL/SVHS
- RAD/FM
- TEL (телефон)
- MC (кассетный магнитофон)
- REE (катушечный магнитофон)
- TFT (TFLT) - тип аудиокодека: MPG/1, MPG/2, MPG/3, MPG/2.5, MPG/AAC, PCM, VQF, MIME
- TBM (TBPM) - BPM (beats per minute)
- TCR (TCOP) - запись об авторском праве ("1999 Иванов")
- TPB (TPUB) - издатель
- TEN (TENC) - кодировщик файла
- TSS (TSSE) - название программы или оборудования, используемой при кодировании, и параметры
- TOF (TOFN) - оригинальное имя файла
- TLE (TLEN) - длина произведения в милисекундах
- TDY (TDLY) - пауза между произведениями в милисекундах
- TKE (TKEY) - тональность произведения
- TXX (TXXX) - строка пользователя
- IPL (IPLS) - прочие участники
- MCI (MCDI) - содержимое CD-ROM TOC для поиска в cddb и т.п.
- ETC (ETCO) - таблица событий и их времена для синхронизации со слайд-шоу и т.п.
- MLL (MLLT) - индекс для быстрого позиционирования в файле
- ULT (USLT) - текст песни (содержит поля кодировки, языка и типа текста; разрешаются переводы строк, может быть только один текст для каждого языка и типа)
- SLT (SYLT) - синхронизированный текст песни (для караоке)
- COM (COMM) - комментарий (содержит поля кодировки и языка)
- RVA (RVAD) - позволяет задать желаемое изменение громкости левого и правого канала, а также имеющиеся в файле пиковые значения
- EQU (EQUA) - кривая эквалайзера
- REV (RVRB) - задание уровня эха и прочие спецэффекты (интересно, существует ли хоть один проигрыватель, учитывающий этот кадр?)
- PIC (APIC) - встроенная картинка (задаётся кодировка текста, описание картинки, тип картинки (иконка, передняя обложка, задняя обложка и т.д.), формат картинки ('PNG', 'JPG', '-->' для указания URL отдельного файла), последовательность байт)
- GEO (GEOB) - произвольный встроенный объект (задаётся кодировка текста, описание, MIME-тип, имя файла, последовательность байт)
- CNT (PCNT) - сколько раз игрался этот файл
- POP (POPM) - рейтинг популярности (содержит email, рейтинг и счётчик)
Версия ID3v2.3 была разработана в 1999 (M. Nilsson). Подверсия ID3v2 изменилась на 0x0300. Вместо флага сжатия появились флаги дополнительного заголовка (содержит CRC-32) и экспериментального статуса. Имена кадров стали 4-х символьными, длина кадра также задаётся теперь 4-мя байтами. В кодировке UCS-2 вспомнили про символ BOM для определения порядка байт (а про разницу UCS-2 и UTF-16 пока нет). Заголовок кадра получил свои флаги (2 байта): что должна делать программа редактирования тега с незнакомым типом кадра (удалять или копировать), что должна делать программа редактирования файла с незнакомым типа кадра, только чтение, кадр сжат zlib, кадр зашифрован, кадр принадлежит группе. Кадр RVAD теперь имеет поля, позволяющие управлять громкостью дополнительных каналов. В кадре APIC формат картинки задаётся с помощью MIME типа и подтипа ("image/png" или "-->" для указания URL отдельного файла).
Добавлены кадры:
- USER - определяет права на использование файла
- OWNE - определяет продавца, цену и дату покупки
- PRIV - для частного использования
- "экспериментальный" тег XRVA (relative volume adjustment, в dB) добавляется утилитой normalize
Версия ID3v2.4 была разработана в 2000 (M. Nilsson). Подверсия ID3v2 изменилась на 0x0400. Формат дополнительного заголовка изменился: полностью переработана структура, добавлен флаг наложения кадров (позволяет иметь несколько тегов в файле или потоке), возможность наложить ограничение на количество кадров и размер тега, кодировку и длину строк, формат и разрешение картинок. Появился флаг наличия заключения тега и само опциональное заключение (10 байт) для упрощения нахождения тега с конца файла. Наконец, разобрались с кодировками, теперь строки могут быть в кодировках: ISO-8859-1, UTF-16 с BOM, UTF-16BE без BOM и UTF-8. Код языка - 3 символа в соответствии с ISO-639-2 строчными буквами, неизвестный язык - XXX. В заголовок кадра добавлены флаги десинхронизации и Data Length Indicator. Текстовые кадры могут содержать несколько значений, разделяемых терминатором строки (0x0 для ISO-8859-1, 0x0000 для UTF-16, 0x00 для UTF-8) вместо '/' в версии ID3v2.3. Вместо кода в скобках (TCON, TMED) теперь необходимо использовать строки, разделённые терминаторами.
Добавлены кадры (удалены TYER, TDAT, TIME, IPLS, RVAD, EQUA):
- TSST - подзаголовок набора записей
- TMCL - таблица соответствия между названиями инструментов (нечётные поля) и именами музыкантов (чётные поля через запятую)
- TIPL - таблица соответствия между функциями (нечётные поля) и именами исполнителей (чётные поля через запятую), заменяет кадр IPLS
- TMOD - настроение (Romantic и т.д.)
- TPRO - аналогично TCOP, но для отметки изготовителя (P)
- TOWN - имя покупателя лицензии
- TDEN - отметка времени кодирования (ГГГГ-ММ-ДДTЧЧ:ММ:СС или сокращённое)
- TDOR - отметка времени изготовления оригинала
- TDRC - отметка времени записи (заменяет TYER, TDAT и TIME)
- TDRL - отметка времени выпуска записи
- TDTG - отметка времени записи тега
- TSOA - строка, используемая для сортировки по альбомам вместо TALB
- TSOP - строка, используемая для сортировки по исполнителям вместо TPE2
- TSOT - строка, используемая для сортировки по названиям вместо TIT2
- RVA2 - позволяет задать желаемое изменение громкости для каждого канала (формат изменился совершенно по сравнению с RVAD)
- EQU2 - кривая эквалайзера (формат изменился совершенно по сравнению с EQUA)
- ASPI - ещё один индекс для позиционирования внутри файла
Наличие множества мелких, но неприятных и бессмысленных несоответсвий между версиями, совершенно дикий формат и непонимание автором стандарта понятий Unicode привело к тому, что во многих программах до сих пор нет поддержки ID3v2.4, выпущенной в 2000 году, а вместо этого разработчики запихивают UTF-8 в ID3v2.3 и даже в ID3v1. В сочетании с коллекциями с тегами ID3v1 в cp1251 (и даже тегами ID3v2.3 в cp1251 и указанием языка "eng"!) и новыми приложениями, в которых преднамеренно выключена обработка неверных кодировок, вызывает ужасное раздражение. Для редактирования тегов можно использовать специальные приложения или такие аудиопроигрыватели.
Вы можете войти под своим логином или зарегистрироваться на сайте.