ID3 теги (ID3 tag) хранятся в последних 128-ми байтах mp3 файла. Благодаря этому их возможно читать без специальных компонентов.
Порядок распределения информации следующий:
- Byte 1-3 = ID ‘TAG’
- Byte 4-33 = Title
- Byte 34-63 = Artist
- Byte 64-93 = Album
- Byte 94-97 = Year
- Byte 98-127 = Comment
- Byte 128 = Genre
Для получения тегов достаточно отформатировать бинарные строки в соответствии с приведенной последовательностью:
$f = fopen(’sample.mp3′, ‘rb’);
rewind($f);
fseek($f, -128, SEEK_END);
$tmp = fread($f,128);
if ($tmp[125] == Chr(0) and $tmp[126] != Chr(0)) {
// ID3 v1.1
$format = ‘a3TAG/ a30NAME/ a30ARTISTS/ a30ALBUM/a4YEAR/ a28COMMENT/ x1/C1TRACK/ C1GENRENO’;
} else {
// ID3 v1
$format = ‘a3TAG/ a30NAME/ a30ARTISTS/ a30ALBUM/ a4YEAR/ a30COMMENT/ C1GENRENO’;
}
$id3tag = unpack($format, $tmp);
Результатов будет ассоциативный массив со значениями тегов.
Хех, а как насчет остальных тегов, скажем, пользовательских? Есть идеи?
Пардон, здесь вообще речь об ID3v1.
а какая задача стоит?
Да тут такое дело. Раз спросил, вот отвечаю
Я залил на хост коллекцию музыкальную. Она у меня причесана, теги прописаны все ID3v2.4 аккуратно
Пытаюсь заполнить mySQL базу для дальнейших веб-дел.
Прописать требуется свойства потока битрэйт сэмплрэйт длительность
Ну и выдернуть несколько тегов, среди которых в частности именованные мной специальные. Такие теги спецификация позволяет.
Потратил дня три, думал обойдусь bash шибко он быстрый. Нашел токмо id3lib-utils, которые видят имена моих тегов, но читать не умеют.
Нашел чудовищно глючную и огромную php-reader из состава Zend Framework и прихожу к выводу, что нужно осваивать чтение файла твоим способом
На самом деле конечно я ищу в конечном итоге полноценную либу, оторая умеет читать поток и теги id3v2.4
Писать такую долговато… Вроде бы много шума поисковик дает, да только zend один
на мыло отписался
Спасибо, приятель!
Я тут подумал, вдруг кто-то будет искать, как я и наткнется на этой место. Надеюсь, ты не возражаешь, что отпишу здесь ответ тоже.
Значит так, идем на getid3.org
Выкачиваем библиотечку и в качестве понимания, что умеет либа извлекать из файла пишем скрипт. А дальше радоваться
analyze(“01.mp3″);
getid3_lib::CopyTagsToComments($ThisFileInfo);
print_r($ThisFileInfo);
?>
Пожалуйста!
обращайся )