![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тэги у медиа-файлов [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]Слева-направо, сверху-вниз