Чтение ID3-тегов МР3-звуков

Вы никогда не замечали, что МР3-плейеры, подобные Winamp, помимо имени МР3-файла отображают массу дополнительной информации о проигрываемом звуке. Обычно выводится название композиции и имя исполнителя. Но, немного «покопавшись» в настройках, можно узнать и более тонкие детали: название альбома, к которому относится песня, имена композитора и автора слов, компанию звукозаписи и многое другое. Очевидно, что МР3-файлы, в отличие от WAV- или MlDl-звуков, содержат дополнительные элементы, служащие для хранения описательной информации. Эти элементы называются ЮЗ-тегами (ID3 tags).

В ActionScript возможность чтения ID3-тегов добавлена еще во времена Flash 6. Именно тогда появилось свойство id3 класса Sound, которое, впрочем, оставалось недокументированным вплоть до выхода Flash MX 2004. В новой версии программы стало возможным распознавать современные версии ID3-тегов, а также было добавлено событие onID3, происходящее по завершении загрузки ID3-тегов.

Flash-плейер 7 поддерживает ID3-теги версий 1.0,1.1,2.3 и 2.4. Теги, описанные в малораспространенной версии 2.2 соответствующего стандарта, не поддерживаются.

ID3-теги первой версии довольно существенно отличаются от ID3-тегов второй версии.

• Во-первых, ID3-тегов первой версии гораздо меньше — всего 7 (первоначально для них выделялось всего 128 байтов).


Время показало, что на практике зачастую требуется более обстоятельная информация о звуке, чем имя исполнителя или название альбома. Так появились ЮЗ-теги второй версии, полное количество которых составляет несколько десятков (Flash-плейер считывает не все из них, а только общепризнанные).

• Во-вторых, ID3-теги разных версий различаются тем, где они хранятся в МР3-файле. ID3-теги первой версии записываются в самый конец файла, а второй — в начало. Это различие кажется второстепенным. На самом же деле то, где в файле хранится описательная информация, на практике может оказаться очень важным. Представьте, например, что вы проигрываете MP3-звук в потоковом режиме. Если в нем используются ID3-теги второй версии, то описание станет доступным в самом начале загрузки. В результате будет возможно создать нечто вроде титров, в которых будут приводиться основные сведения о прослушиваемой композиции. Если же в МР3-файле прописаны только ID3-теги первой версии, то воспользоваться содержащейся в них информацией можно будет только по окончании загрузки. Но в случае потокового режима импортирования это уже будет бессмысленно, так как звук, проигравшись, просто удалится из памяти.

С целью совместимости с ранними версиями МР3-проигрывателей зачастую прописываются ID3-теги как первой, так и второй версий.Если в вашем проекте будет считываться информация из ID3-тегов, то стоит убедиться, что необходимые из них в МР3-файлах заполнены.


Если же какие-то теги окажутся пустыми, то стоит заполнить их самостоятельно. Существуют специальные программы, которые дают возможность редактировать ID3-теги. Впрочем, основные теги можно заполнить и при помощи популярного проигрывателя Winamp (соответствующая панель открывается командой File Info (Заголовок файла) контекстного меню элемента в списке).

Если МР3-файл содержит ID3-теги, то плейер автоматически их распознает и сохраняет в форме одноименных свойств специального объекта, на который указывает свойство id3, имеющееся у любого объекта класса Sound. Например, тег year даст свойство id3.year, тег TLAN — свойство id3.TLAN и т. д. У объекта id3 есть только те свойства, для которых есть заполненные теги:

var sound:Sound=new Sound(this);
sound.attachSound("snd");
for (var i in sound.id3) {
trace(i + " = " + sound.id3[i]);
}
// Выводит: genre=13 comment=Elton John - Bernie Taupin year=1995
// album=Made In England artist=Elton John songname=Believe

Считать информацию из ID3-тегов можно только в случае звуков, динамически прикрепленных при помощи метода attachSound() или закачанных посредством метода loadSound().


Обратиться к ID3-тегам звуков, помещенных на временную диаграмму «вручную», невозможно, Чтобы плейер мог распознать ID3-теги, в них должна применяться кодировка UTF-8 (в «старых» МР3-файлах в ID3-тегах иногда используется восьмибитовая кодировка).

Набор ID3-тегов второй версии содержит все теги первой версии. Однако они имеют другое название. Возникает сложность: как узнать, теги какой версии использует данный звук и исходя из этого прочитать значение нужного свойства. Решить эту проблему не очень сложно, но, к счастью, ей можно вообще не задаваться. Дело в том, что если звук имеет ID3-теги второй версии, которые соответствуют тегам первой версии, то ID3vl-теги объекта id3 заполняются плейером на основе информации, приведенной в аналогичных ID3v2-тегах. Например, если у звука имеется тег TYER, то заполнено будет как свойство TYER, так и year. Описанная особенность делает использование свойств, создаваемых на основе ID3-тегов первой версии, более предпочтительным. Действительно, при этом удастся считать нужную информацию независимо от того, ID3-теги какой версии характерны для МР3-файла.

Время поступления D3-TeroB при импортировании звуков методом loadSound() зависит прежде всего от версии тегов, ID3-теги второй версии хранятся вначале МР3-файла, поэтому они становятся доступными почти сразу после начала закачки.


Теги первой версии располагаются в конце файла, поэтому они импортируются в самую последнюю очередь. Из-за такой неоднозначности невозможно заранее предсказать, в какой момент теги ID3-тсги станут доступными для обработки.

Вернее, это было бы невозможно сделать, не будь у класса Sound события onID3, которое происходит в момент поступления ЮЗ-тегов. Интересно, что если в МР3-файле имеются ID3-теги обеих версий, то событие onID3 происходит дважды (в начале и в конце загрузки).

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Динамическое присоединение звука. Метод attachSound()
Импортирование внешних МР3-файлов
Операции со звуком без использования программирования
Основные понятия теории цифрового звука
Свойства position и duration

Вернуться в раздел: Action Script / 15. Работа со звуком