Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тэги у медиа-файлов [D7, XP]


Silver__Dragon ©   (2006-01-11 17:33:00) 

Новый вопрос: А как у медиа-файлов читать id-тэги(жанр, артист, альбом и т.д.)?
Заранее спасибо.


Хинт   (2006-01-11 18:58:00) [1]

{
Модуль для работы с MP3 Tag'ами ID3V1 (05.12.2003)

Автор: Hint

Новый тип: TMp3Tag
Новая константа: Genres (список жанров)

Функции:

Пример использования:

var
Mp3Tag:TMp3Tag;
Mp3File:string;
begin
Mp3File:='C:\Music\song.mp3';
if TagExists(Mp3File) then
       begin
        Mp3Tag:=GetMp3Tag(Mp3File);
        ShowMessage('Название: '+Mp3Tag.Title+#13+#10+'Жанр: '+IndexToGenre(Mp3Tag.Genre));
       end
else ShowMessage('TAG не найден');
end;
}

unit UMP3Tags;

interface

Uses SysUtils, Classes;

type
  TMP3Tag = record
     FileName:string;
     Title,Artist,Album:string[30];
     Year:string[4];
     Comment:string[29];
     Track,Genre:byte;
  end;

function IndexToGenre(Index:byte):string;
function GenreToIndex(Genre:string):byte;
function GetMP3Tag(var Mp3Tag:TMP3Tag;FileName:string):boolean;
function SetMp3Tag(Mp3Tag:TMP3Tag;FileName:string):boolean;
function DeleteMp3Tag(FileName:string):boolean;
function TagExists(FileName:string):boolean;

const
Genres: array [0..125] 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',
     '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','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 Brass','Primus','Porn Groove',
     'Satire','Slow Jam','Club','Tango','Samba',
     'Folklore','Ballad','Poweer Ballad','Rhytmic Soul','Freestyle',
     'Duet','Punk Rock','Drum Solo','A Capela','Euro-House','Dance Hall');

implementation

function GetMP3Tag(var Mp3Tag:TMP3Tag;FileName:string):boolean;
var
tag:array[0..127] of char;
F:file;
I:byte;
S:string;

function DelSpace(s:string):string;
begin
Result:=s;
if length(Result)=0 then exit;
while s[length(Result)] in [' ', #0] do
begin
delete(Result,length(Result),1);
if Result = '' then break;
end;
end;

begin
Result:=false;
if not FileExists(FileName) then exit;
mp3tag.FileName:=FileName;
mp3tag.Title:=ExtractFileName(ChangeFileExt(FileName,''));
mp3tag.Artist:='Unknown';
mp3tag.Album:='Unknown';
mp3tag.Year:='';
mp3tag.Comment:='';
mp3tag.Genre:=255;
mp3tag.Track:=0;
try
AssignFile(F,FileName);
{$I-}
Reset(F,1);
Seek(F,FileSize(F)-128);
BlockRead(f,tag,128);
CloseFile(F);
{$I+}
if IOResult=0 then
       begin
         s := '';
         for i := 0 to 127 do s := s + tag[i];
         if copy(s,1,3)='TAG' then
                 begin
                 mp3tag.Title:=DelSpace(copy(S,4,30));
                 mp3tag.Artist:=DelSpace(copy(S,34,30));
                 mp3tag.Album:=DelSpace(copy(S,64,30));
                 mp3tag.Year:=DelSpace(copy(S,94,4));
                 mp3tag.Comment:=DelSpace(copy(S,98,29));
                 mp3tag.Track:=Ord(S[127]);
                 mp3tag.Genre:=Ord(S[128]);
                 Result:=true;
                 end;
       end;
except
Result:=false;
end;
end;

function SetMp3Tag(MP3Tag:TMP3Tag; FileName:string):boolean;
var
mp3Str:TFileStream;
TExists:boolean;

procedure WriteString(Str:string;Count:byte);
var
i:integer;
CH:char;
begin
CH:=#0;
for i:=1 to Count do
       begin
        if I


Silver__Dragon   (2006-01-11 18:19:00) [2]

Спасибо!


begin...end   (2006-01-11 18:07:00) [3]

http://www.id3.org
http://www.wotsit.org


Silver__Dragon   (2006-01-11 18:03:00) [4]

а если серьезно?


Silver__Dragon   (2006-01-11 17:50:00) [5]

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


Reindeer Moss Eater   (2006-01-11 17:35:00) [6]

Слева-направо, сверху-вниз


Наверх

Титульная страница Поиск, карта сайта Написать письмо