Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2007, 21:09   #1
DelphiKettle
 
Регистрация: 26.07.2007
Сообщений: 3
Вопрос Помогите извлечь из МР3-файла название песни

Подскажите, пожалуйста, как из МРЗ-файла, выбранного в OpenDialog прочитать имя исполнителя и название песни.
DelphiKettle вне форума Ответить с цитированием
Старый 29.07.2007, 22:20   #2
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Вот готовый кусок программы, определяет Заголовок, Артиста, Альбом, Год, Комментарий, Жанр.
Код:
{  
  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 TForm1.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;
Alex21 вне форума Ответить с цитированием
Старый 31.07.2007, 00:01   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Считаю нужным предупредить автора вопроса о версиях ID3. Код для первой версии не вытащит тег из второй. Сейчас массово используется ID3v2.3 Уже есть v2.4
На официальном сайте ID3 есть библиотеки для разных языков, в том числе и для Дельфи
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно извлечь иконку из exe файла Altera Win Api 3 19.07.2008 21:39
Как вытянуть название файла из линка jungo Microsoft Office Excel 6 16.07.2008 14:08
Как извлечь имя скачиваемого файла Crazyman Работа с сетью в Delphi 0 01.07.2008 02:34
Название файла по содержимому ячеек. Хелп! Sum Microsoft Office Excel 6 07.04.2008 00:06
Извлечь песни из NFS Pro street DeN1308 Софт 0 24.11.2007 15:38