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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2007, 14:25   #1
Albenous
Helper
Форумчанин
 
Аватар для Albenous
 
Регистрация: 10.12.2006
Сообщений: 109
Стрелка mp3 теги

Люди, где в mp3 хранится инфа о файле (песня, артист, год и т.п.)?
Если есть идеи, как достать эту инфу без обращения к динамической памяти и не используя нестандартнах функций и компонентов - поделитесь, пожалуйста.
Глупых вопросов не бывает - бывают глупые ответы.
Albenous вне форума Ответить с цитированием
Старый 16.01.2007, 14:47   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Модуль в вложении
Вложения
Тип файла: txt 1.txt (15.5 Кб, 254 просмотров)
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 16.01.2007, 15:29   #3
Albenous
Helper
Форумчанин
 
Аватар для Albenous
 
Регистрация: 10.12.2006
Сообщений: 109
Печаль

Цитата:
Сообщение от Квэнди Посмотреть сообщение
Модуль в вложении
Чего-то у меня какие-то глюки с компом...
нельзя ли заархивировать и выложить?
Глупых вопросов не бывает - бывают глупые ответы.
Albenous вне форума Ответить с цитированием
Старый 16.01.2007, 15:39   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

http://rapidshare.com/files/11953229/1.txt
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 16.01.2007, 16:11   #5
Albenous
Helper
Форумчанин
 
Аватар для Albenous
 
Регистрация: 10.12.2006
Сообщений: 109
Сообщение

хм...
Сколько литературы не пересмотрел по данному вопросу - везде одно и то же. Такое чувство, что эта инфа бралась из какого-то одного источника и лишь незначительно изменялась.
Есть ли какая-то стандартная функция для просмотра/редатирования, к примеру, названия песни?
Как я понял, берется файл, читается из него тэг, а дальше..?
Жалко, что там готовый листинг, сложно разбираться...
Почему всегда вводится новый тип TMp3Tag?
Глупых вопросов не бывает - бывают глупые ответы.

Последний раз редактировалось Albenous; 16.01.2007 в 16:14. Причина: неточность изложения мысли
Albenous вне форума Ответить с цитированием
Старый 16.01.2007, 16:19   #6
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
Почему всегда вводится новый тип TMp3Tag?
да хоть TipaTEGotMP3, выбирают самое подходящее название и ставят букву "Т" - т.к. это тип.

Код:
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;
zetrix вне форума Ответить с цитированием
Старый 16.01.2007, 17:29   #7
Albenous
Helper
Форумчанин
 
Аватар для Albenous
 
Регистрация: 10.12.2006
Сообщений: 109
Хорошо

Цитата:
да хоть TipaTEGotMP3, выбирают самое подходящее название и ставят букву "Т" - т.к. это тип.
да я о другом... зачем вообще вводить новый тип? Неужели без него нельзя?
Кстати жанр массивом задается практически везде, где я смотрел. (примерно в 24 из 25) Откуда пошла такая деталь?
И все всегда пользуются записями. Надо будет мне придумать что - нибудь по-оригинальнее...

Код:
LlbAlbum.Caption := 'Album: ' + Album;
немного не понял: что за lib перед Album? Что обозначает?
Глупых вопросов не бывает - бывают глупые ответы.
Albenous вне форума Ответить с цитированием
Старый 16.01.2007, 17:57   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Так перепишите в чем проблема ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 16.01.2007, 18:30   #9
PAVEL315
Форумчанин Подтвердите свой е-майл
 
Аватар для PAVEL315
 
Регистрация: 18.11.2006
Сообщений: 172
По умолчанию

Какие у вас тут сложные кодики...
У меня же всё проще...
Код:
type
TMP3Header = record
Tag : array[0..2] of Char
Title, Artist, Comment, Album : array[0..29] of CHar;
Year : array[0..3] of Char
genre : Byte;
end;
Истроенный МР3 заголовок представляет собой 128-байтную структуру, хранимую в конце файла. Первые 3 символа содержат слово "TAG", далее следуют 4 30-байтных поля названия произведения, исполнителя, примечаний и названия альбома. Завершают заголовок 4 байта, которые содержат год и один байт - жанр.
дык!
PAVEL315 вне форума Ответить с цитированием
Старый 16.01.2007, 18:54   #10
Albenous
Helper
Форумчанин
 
Аватар для Albenous
 
Регистрация: 10.12.2006
Сообщений: 109
Радость

Цитата:
Сообщение от PAVEL315 Посмотреть сообщение
Какие у вас тут сложные кодики...
У меня же всё проще...
Действительно проще. И объяснение очень хорошее, доступное.
Жанр - это ведь число, как я понял? номер элемента в массиве?

Вот ведь в чем вопрос:
Tstream - поток данных
Tfilestream - обмен данных с файлом
так?
А нельзя ли тут обойтись без потока?
Глупых вопросов не бывает - бывают глупые ответы.
Albenous вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Незакрытые теги GAGARIN-NEW HTML и CSS 13 15.12.2007 15:52