Разработка сайтов и программного обеспечения, системное администрирование, обучение программированию и работе с СУБД MySQL

in english

Чтение 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 Примечания
  • В версии ID3v1 все 30 байт заняты текстом примечания
  • В версии ID3v1.1 текст примечания занимает только первые 28 байт за которыми обязательно следует байт 0, а в последнем байте поля - номер трека в альбоме.
G 1 Жанр

Представляет собой индекс в списке жанров. Существует стандартный список жанров и список, расширенный разработчиками WinAmp.

Ниже приведен сводный список жанров, индексы соответственно от 00h до 93h, всего 148 жанров (только не надо меня спрашивать что такое "Negerpunk" или "Christian Gangs" - я уже слишком стар чтобы в это въезжать ;) ).

"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"

Материал о формате был взят с сайта www.sources.ru, автор Андрей Сорокин anso.da.ru

Реклама:

Метки: C++ Builder, ID3v1.1, исходник.

Комментарии:

tinkivinki:
это супер:) очень рад что нашел данную информацию:)
Xbool:
Отличная статья, очень помогла! Спасибо вам!
имя:

e-mail (не публикуется):

комментарий:

© Ткачев Филипп, 2005—2017
Программист, веб-разработка и прикладное ПО.
Все права защищены.