Развленичия
Консультация
Полезные ссылки
Категории раздела
Новое на форуме
  • Статистика
    Онлайн
    На сайте 1
    Гостей: 1
    Пользователей: 0

    Юзеры онлайн:
    Юзеры за сегодня:

    Зарег. на сайте

    Всего: 17568
    Новых за месяц: 4
    Новых за неделю: 0
    Новых вчера: 0
    Новых сегодня: 0

    Из них

    Администраторов: 1
    Модератор форума: 0
    Друзей: 5
    Обычных юзеров: 17551

    Из них

    Парней:
    Девушек:


    Как прочитать ТЕГИ из MP3-файла?

    Дата: 05.04.2011
    Автор: Гром

    ПрочитатьID3-теги из MP3-файла очень легко и  для этого нетребуется никаких специальных компонентов. Все ID3-теги хранятся впоследних 128-ми байтах MP3-файла.Часть из них записана не в том виде, в каком мы привыкли их читать вWinamp или в другом проигрывателе... Итак, перейдём сразу к коду...

    Это - общая схема хранения информации в MP3-файле,которую мы будем читать:
    { 
    Byte 1-3 = ID 'TAG'
    Byte 4-33 = Titel / Title
    Byte 34-63 = Artist
    Byte 64-93 = Album
    Byte 94-97 = Jahr / Year
    Byte 98-127 = Kommentar / Comment
    Byte 128 = Genre
    }

     Вся эта информация отделяется от "музыки" символами'TAG' . После эти символов начинается служебнаяинформация: название композиции, исполнитель, альбом, год исполнения,комментарий, жанр. Объявимдля них отдельный тип:

    type
    TID3Tag = record
    ID: string[3];
    Titel: string[30];
    Artist: string[30];
    Album: string[30];
    Year: string[4];
    Comment: string[30];
    Genre: Byte;
    end;

    Как мы видим, этот класс содержит несколькостроковых полей, в каждом из которых и будет записан соответствующийID3-тег.

    Теперь поговорим о теге, отвечащем зажанр композиции. В файле хранится лишь номер жанра, ане название, поэтому получать его название придётся самим. Объявиммассив, содержащий названия всех возможныхжанров. Всего их 147:

    const
    Genres : array[0..146]ofstring =
    ('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',
    'Alternative Rock','Bass','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 US','Cabaret','New Wave',
    'Psychadelic','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','Rhytmic 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 Gangsta','Heavy Metal','Black Metal','Crossover','Contemporary C',
    'Christian Rock','Merengue','Salsa','Thrash Metal','Anime','JPop','SynthPop');

    А вот функция, читающая все теги изMP3-файла... Пропишем её после  implementation:

    function readID3Tag(FileName: string): TID3Tag; 
    var
    FSL: TFileStream;
    Buff: array[1..128]of Char;
    begin
    FSL := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
    try
    FSL.Seek(-128, soFromEnd);
    FSL.Read(Buff, 128);
    with Result do
    begin
    ID := Copy(Buff, 1, 3);
    Titel := Copy(Buff, 4, 30);
    Artist := Copy(Buff, 34, 30);
    Album := Copy(Buff, 64, 30);
    Year := Copy(Buff, 94, 4);
    Comment := Copy(Buff, 98, 30);
    Genre := Ord(Buff[128]);
    end;
    finally
    FSL.Free;
    end;
    end;

    Данная функция возвращает нам всё содержимоеID3-тегов MP3-файла, указанного в FileName. Теперь осталось написатьобработчик открытия файла и чтения содержимого всех тегов извыбранного файла:

    procedure TfrmMain.Button1Click(Sender: TObject); 
    begin
    IF OpenDialog1.Execute then
    begin
    WITH readID3Tag(OpenDialog1.FileName) do
    begin
    LlbID.Caption :='ID: ' + ID;
    LlbTitel.Caption :='Titel: ' + Titel;
    LlbArtist.Caption :='Artist: ' + Artist;
    LlbAlbum.Caption :='Album: ' + Album;
    LlbYear.Caption :='Year: ' + Year;
    LlbComment.Caption :='Comment: ' + Comment;
    IF(Genre >=0)AND(Genre <=146) then
    LlbGenre.Caption :='Genre: ' + Genres[Genre]
    else
    LlbGenre.Caption :='N/A';
    end;
    end;
    end;

    Осталось добавить соответствующиекомпоненты на форму и проверить работу програамы.

    Скачать исходник для статьи


    Смотри также:




    Похожие статьи:

    Просмотров: 1481
    Комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
     
    Ваш логин: Ваш пароль: