Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

Тэги у медиа-файлов   Найти похожие ветки 

 
Silver__Dragon   (2006-01-11 17:33) [0]

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


 
Reindeer Moss Eater ©   (2006-01-11 17:35) [1]

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


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

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


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

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


 
begin...end ©   (2006-01-11 18:07) [4]

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


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

Спасибо!


 
Хинт ©   (2006-01-11 18:58) [6]

{
Модуль для работы с 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<=Length(Str) then Mp3Str.Write(Str[i],1) else Mp3Str.Write(CH,1);
       end;
end;

begin
Result:=false;
if not FileExists(FileName) then exit;

try
FileSetAttr(filename,0);
TExists:=TagExists(filename);
Mp3Str:=TFileStream.create(FileName,fmOpenWrite);
if not TExists then Mp3Str.Seek(Mp3Str.Size,0) else Mp3Str.Seek(Mp3Str.Size-128,0);
WriteString("TAG",3);
WriteString(MP3Tag.Title,30);
WriteString(MP3Tag.Artist,30);
WriteString(MP3Tag.Album,30);
WriteString(MP3Tag.Year,4);
WriteString(MP3Tag.Comment,29);
Mp3Str.Write(MP3Tag.Track,1);
Mp3Str.Write(MP3Tag.Genre,1);
Mp3Str.Free;
Result:=true;
except
Result:=false;
end;
end;

function DeleteMp3Tag(FileName:string):boolean;
var
F:file;
begin
Result:=false;
if not TagExists(FileName) then exit;
try
FileSetAttr(filename,0);
AssignFile(F,filename);
Reset(F,1);
Seek(F,FileSize(F)-128);
Truncate(F);
CloseFile(F);
Result:=true;
except
Result:=false;
end;
end;

function TagExists(FileName:string):boolean;
var
Tag:array[0..2] of char;
F:File;
begin
Result:=false;
try
FileSetAttr(filename,0);
if FileExists(FileName) then
       begin
       AssignFile(F,FileName);
       {$I-}
       Reset(F,1);
       Seek(F,FileSize(F)-128);
       BlockRead(f,tag,3);
       CloseFile(F);
       {$I+}
       if IOResult=0 then if Tag="TAG" then Result:=true;
       end;
except
Result:=false;
end;
end;

function IndexToGenre(Index:byte):string;
begin
if Index<=125 then Result:=Genres[Index] else Result:="";
end;

function GenreToIndex(Genre:string):byte;
var
i:byte;
begin
if Genre<>"" then
       begin
        for i:=0 to 125 do if UpperCase(Genres[i])=UpperCase(Genre) then
                       begin
                        Result:=i;
                        exit;
                       end;
       end
else Result:=255;
end;

end.


Еще есть для ID3v2. Надо?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.096 c
2-1135596187
kukushka-Q
2005-12-26 14:23
2006.01.29
Перестает работать MS Access база с dll на Delphi на другом компе


9-1124420133
anton_321
2005-08-19 06:55
2006.01.29
у кого есть скаченный DirectX9 SDK?


9-1121634452
LexaDup
2005-07-18 01:07
2006.01.29
Линия видимости в GLSCene


4-1132253502
reskator
2005-11-17 21:51
2006.01.29
несколько USB мышей в качестве датчиков перемещений


15-1136303618
tesseract
2006-01-03 18:53
2006.01.29
Цветокоррекция





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский