Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получаем ID3Tag v1

Delphi , Мультимедиа , Аудио

Получаем ID3Tag v1


{ 
  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 
} 


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

const 
 Genres : array[0..146] of string = 
    ('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'); 


var 
  Form1: TForm1; 

implementation 

{$R *.dfm} 

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

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;

Программа на Delphi, которая читает ID3-тег из MP3-файла и отображает метаданные в графическом пользовательском интерфейсе (GUI).

Структура ID3-тега Тип TID3Tag определяется как запись:

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

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

Список жанров Массив строк Genres определяется как список жанров:

const Genres: array[0..146] of string = (
  'Blues', ... // 146 жанров listed
);

Этот список сопоставляет байтовое значение (представляющее жанр) с человекочитаемым именем жанра.

Функция чтения ID3-тега Функция readID3Tag читает ID3-тег из MP3-файла и возвращает запись TID3Tag:

function readID3Tag(FileName: string): TID3Tag;
var
  FS: TFileStream;
  Buffer: array [1..128] of Char;
begin
  FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    FS.Seek(-128, soFromEnd); // seek to the end of the file and move back 128 bytes
    FS.Read(Buffer, 128);
    with Result do
    begin
      ID := Copy(Buffer, 1, 3); // extract the 'TAG' ID
      Titel := Copy(Buffer, 4, 30);
      Artist := Copy(Buffer, 34, 30);
      Album := Copy(Buffer, 64, 30);
      Year := Copy(Buffer, 94, 4);
      Comment := Copy(Buffer, 98, 30);
      Genre := Ord(Buffer[128]); // extract the genre byte
    end;
  finally
    FS.Free;
  end;
end;

Функция использует объект TFileStream для чтения ID3-тега из файла. Она перемещается к концу файла и возвращает 128 байт в буфер. Запись Result инициализируется значениями, выдергиваемыми из буфера.

Код GUI Код GUI определяет форму (TfrmMain) с несколькими метками (LlbID, LlbTitel, и т.д.) и кнопкой (Button1). Когда кнопка нажата, она выполняет диалоговое окно для выбора MP3-файла. Выбранный файл передается функции readID3Tag, которая возвращает запись TID3Tag. Код GUI затем обновляет метки с значениями метаданных:

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;

Код GUI также обрабатывает случай, когда значение жанра выходит за пределы диапазона, отображая "N/А" вместо этого.

В статье описывается способ чтения метаданных MP3-файла, содержащего ID3-теги версии 1, и отображения полученных данных в интерфейсе приложения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Аудио ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 14:53:36/0.0036940574645996/0