Чтение ID3 тегов из файла
Главная → Статьи → Чтение ID3
ID3 тэги это специального вида включения в аудио-файлы, содержащие смысловое описание музыкального файла - исполнитель, альбом и т.д.
Многие программеры пытаются читать тяжелейший мануал с сайта www.id3.org по id3 тегам. Есть хорошие решения по чтению на sourceforge.net.
Предлагаю простой способ чтения ID3v1.1 тега из медиа файла. Пример отлаживался в C++ Builder 6.
// объявление структуры:
struct ID3v1tag
{
char sign[3];
char Title[30];
char Artist[30];
char Album[30];
char Year[4];
char Commentaries[28];
char nullbyte;
char Track;
char Genre;
};
// ... ваш код
обработчик команды чтения:
if(FileExists(FileListBox1->FileName))
{
ID3v1tag tag; // объявляем пер-ную
// создаем файловый поток
TFileStream *fs = new TFileStream(FileListBox1->FileName,fmOpenRead);
fs->Position= fs->Size-128; // устанавливаем указатель
fs->Read(&tag,sizeof(tag)); // считываем данные
delete fs; // освобождаем поток
// проверяем наличие сигнатуры TAG
if (tag.sign[0]=='T' &&
tag.sign[1]=='A' &&
tag.sign[2]=='G')
{ // если есть выводим
EditTitle->Text=tag.Title;
EditTitle->Text=EditTitle->Text.SubString(0,30);
// т.к. под поле отводится только 30 символов, иначе баг при
// чтении 30 символьного тега
EditArtist->Text=tag.Artist;
EditArtist->Text=EditArtist->Text.SubString(0,30);
EditAlbum->Text=tag.Album;
EditAlbum->Text=EditAlbum->Text.SubString(0,30);
EditComm->Text=tag.Commentaries;
EditComm->Text=EditComm->Text.SubString(0,28);
EditYear->Text=EditYear->Text.SubString(0,4);
UpDownTrack->Position=(int)tag.Track;
ComboBoxGenre->ItemIndex=(int)tag.Genre;
}
}
// ... ваш код
// в заголовочном файле надо объявить модуль
// #include <FileCtrl.hpp>
Для корректной работы примера нужны компоненты c установленными свойствами. Подобное описание находится в файле *.dfm, не стоит его править - последствия не предсказуемы!!!
( Расшифровка:
Имя компонента : Имя класса
Свойство = Значение )
DriveComboBox1: TDriveComboBox
DirectoryListBox1: TDirectoryListBox
FileListBox1: TFileListBox
Label1,Label2,Label3,Label4,Label5: TLabel
EditTitle: TEdit
MaxLength = 30
EditArtist: TEdit
MaxLength = 30
EditAlbum: TEdit
MaxLength = 30
EditComm: TEdit
MaxLength = 30
ComboBoxGenre: TComboBox
Items.Strings = (
'Blues'
'Classic Rock'
'Country'
'Dance'
'Disco'
'Funk'
'Grunge'
'Hip-Hop'
'Jazz'
'Metal'
'New Age'
'Oldies'
'Other'
'Pop'
'R&B'
'Rap'
'Reggae'
'Rock'
'Techno'
'Industrial'
'Alternative'
'Ska'
'Death Metal'
'Pranks'
'Soundtrack'
'Euro-Techno'
'Ambient'
'Trip-Hop'
'Vocal'
'Jazz+Funk'
'Fusion'
'Trance'
'Classical'
'Instrumental'
'Acid'
'House'
'Game'
'Sound Clip'
'Gospel'
'Noise'
'AlternRock'
'Bass'
'Soul'
'Punk'
'Space'
'Meditative'
'Instrumental Pop'
'Instrumental Rock'
'Ethnic'
'Gothic'
'Darkwave'
'Techno-Industrial'
'Electronic'
'Pop-Folk'
'Eurodance'
'Dream'
'Southern Rock'
'Comedy'
'Cult'
'Gangsta'
'Top 40'
'Christian Rap'
'Pop/Funk'
'Jungle'
'Native American'
'Cabaret'
'New Wave'
'Psychedelic'
'Rave'
'Showtunes'
'Trailer'
'Lo-Fi'
'Tribal'
'Acid Punk'
'Acid Jazz'
'Polka'
'Retro'
'Musical'
'Rock & Roll'
'Hard Rock'
'Folk'
'Folk/Rock'
'National Folk'
'Swing'
'Fast Fusion'
'Bebob'
'Latin'
'Revival'
'Celtic'
'Bluegrass'
'Avantgarde'
'Gothic Rock'
'Progressive Rock'
'Psychedelic Rock'
'Symphonic Rock'
'Slow Rock'
'Big Band'
'Chorus'
'Easy Listening'
'Acoustic'
'Humour'
'Speech'
'Chanson'
'Opera'
'Chamber Music'
'Sonata'
'Symphony'
'Booty Bass'
'Primus'
'Porn Groove'
'Satire'
'Slow Jam'
'Club'
'Tango'
'Samba'
'Folklore'
'Ballad'
'Power Ballad'
'Rhythmic Soul'
'Freestyle'
'Duet'
'Punk Rock'
'Drum Solo'
'Acapella'
'Euro-House'
'Dance Hall'
'Goa'
'Drum & Bass'
'Club-House'
'Hardcore'
'Terror'
'Indie'
'BritPop'
'Negerpunk'
'Polsk Punk'
'Beat'
'Christian Gangs'
'Heavy Metal'
'Black Metal'
'Crossover'
'Contemporary Ch?'
'Cristian Rock'
'Merengue'
'Salsa'
'Thrash Metal'
'Anime'
'JPop'
'Synthpop')
EditTrack: TEdit
Text = '0'
UpDownTrack: TUpDown
Associate = EditTrack
Пример основан на чтении всей структуры из файла. Аналогично можно организовать и запись в файл, перемещая указатель на нужную позицию в файле.
Краткое описание формата
Здесь описан простейший (и самый популярный) вариант - ID3v1.1 являющийся слегка доработанным вариантом ID3v1.
Этот стандарт уже считается устаревшим (опубликован ID3v2 позволяющий включать в аудиофайл буквально любую сопутствующую информацию вплоть до фотографий и караоке).
Формат записи ID3v1 описан ниже.
AAABBBBB BBBBBBBB BBBBBBBB BBBBBBBB BCCCCCCC CCCCCCCC CCCCCCCC CCCCCCCD DDDDDDDD DDDDDDDD DDDDDDDD DDDDDEEE EFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFG
| Длина (байт) |
Описание | |
|---|---|---|
| A | 3 | Сигнатура, должна содержать символы "TAG". |
| B | 30 | Название |
| C | 30 | Исполнитель |
| D | 30 | Альбом |
| E | 4 | Год |
| F | 30 | Примечания
|
| G | 1 | Жанр
Представляет собой индекс в списке жанров. Существует стандартный список жанров и список, расширенный разработчиками WinAmp. Ниже приведен сводный список жанров, индексы соответственно от 00h до 93h, всего 148 жанров (только не надо меня спрашивать что такое "Negerpunk" или "Christian Gangs" - я уже слишком стар чтобы в это въезжать ;) ). "Blues","Classic Rock","Country","Dance","Disco","Funk","Grunge", |
Материал о формате был взят с сайта www.sources.ru, автор Андрей Сорокин anso.da.ru
Другие материалы:
- Решение уравнения методом дихотомии
- Вывод текста под углом
- Реализация метода искусственного базиса (М-метода)
- Определение вида четырехугольника
- Smarty Plugins
Комментарии:
e-mail (не публикуется):
комментарий: