Ich hab mittlerweile rausgefunden warum das so lange dauerte. Beim Auslesen eines Tags von einer bestimmten Datei war eine Schleife die fast Endlos war. Warum? Keine Ahnung
. Mit anderen Playern ging das ohne Probs und mit nem Program zum ID3Tags auslesen gabs auch keine Probs. Ich hab den Code etwas optimiert und für alle die es interessiert Hier isser:
Code:
...
var Pfad array of string;
...
procedure GetFilesInDirectoryMP3(ADirectory: string; AMask: String; ARekursiv: Boolean);
var
SR: TSearchRec;
begin
if (ADirectory<>'') and (ADirectory[length(ADirectory)]<>'\') then
ADirectory:=ADirectory+'\';
if (FindFirst(ADirectory+AMask,faAnyFile-faDirectory,SR)=0) then
begin
repeat
if (SR.Name<>'.') and (SR.Name<>'..') and ((SR.Attr and faDirectory) = 0) then
Setlength(Pfad,length(Pfad)+1);
Pfad[high(Pfad)]:=ADirectory+SR.Name;
until FindNext(SR)<>0;
FindClose(SR);
end;
if ARekursiv then
if (FindFirst(ADirectory+'*.*',faDirectory,SR)=0) then
begin
repeat
if (SR.Name<>'.') and (SR.Name<>'..') then
GetFilesInDirectoryMP3(ADirectory+SR.Name,AMask,True);
until FindNext(SR)<>0;
FindClose(SR);
end;
end;
procedure Tfrm2wnl.BitBtn1Click(Sender: TObject);
var
i:integer;
Value, M, S : Integer;
begin
seek(f3,filesize(f3));
getfilesindirectoryMP3(directorylistbox1.Directory,'*.mp3' ,true);
if high(pfad)>=1 then
frm2wnl.progressbar1.Max:=high(pfad);
for i:=0 to high(pfad) do
begin
if Uppercase(ExtractFileExt(pfad[i]))<>'.MP3' then Continue;
MP3.Execute(pfad[i]);
if MP3.ID3v2TLEN<>'' then
Value := Trunc(strtoint(mp3.ID3v2TLEN) / 1000)
else
Value := Trunc(mp3.spielzeit);
M := (value mod 3600) div 60;
S := (value mod 3600) mod 60;
if MP3.ID3v2TPE1<> '' then mp3liste.Artist:='+ '+MP3.ID3v2TPE1 //Das mit dem '+' passt schon. Einfach ignorieren.
else mp3liste.Artist := '+ Unbekannt';
if MP3.ID3v2TALB<> '' then mp3liste.Album:=MP3.ID3v2TALB
else mp3liste.Album := 'Unbekannt';
if MP3.ID3v2TIT2<> '' then mp3liste.Titel:=MP3.ID3v2TIT2
else mp3liste.Titel := 'Unbekannt';
if mp3.ID3v2TCON<> '' then mp3liste.Genre:=mp3.ID3v2TCON
else mp3liste.Genre := 'Unbekannt';
mp3liste.Zeit:=Format('%2.2d:%2.2d', [M, S]);
if MP3.ID3v2TRCK<> '' then mp3liste.TrackNr:=MP3.ID3v2TRCK
else mp3liste.TrackNr := '00';
if fileexists (pfad[i]) then
begin
mp3liste.Dateiname:=ExtractFileName(Pfad[i]);
mp3liste.Pfad:=ExtractFilePath(Pfad[i]);
end;
write(f3,mp3liste);
frm2wnl.progressbar1.position:=i;
end;
...
end;
Wenn einer ne Idee hat diesen Code noch besser zu machen dann soll er es bitte nicht für sich behalten.