Registriert seit: 4. Apr 2006
96 Beiträge
Delphi 5 Professional
|
Re: Probleme mit Strings
18. Jul 2006, 23:36
hab das ganze mal so abgeändert wie du vorgeschlagen hast, aber nichts.
Delphi-Quellcode:
procedure TForm1.BitBtn4Click(Sender: TObject);
var Datei: file of char;
Zeile,Tempo: string;
Buffer: char;
TAG: TID3TAG;
begin
if OpenDialog1.Execute then
begin
AssignFile(Datei, OpenDialog1.filename);
Reset(Datei);
Zeile:='';
while not eof(Datei) do
begin
Read(Datei, Buffer);
if Buffer = #$0D then
begin
ListBox1.Items.Add(Zeile);
TAG:=Lese_ID3Tag(Zeile);
if Tag.ID = 'TAG' then
begin
with Tag do
Tempo:=Artist+' - '+Album+' - '+Titel;
setLength(Tempo, 128);
CheckListBox1.Items.Add(Tempo);
end
else
CheckListBox1.Items.Add(Zeile);
Zeile:='';
end
else
if Buffer >= #$20 then
Zeile:=Zeile+Buffer;
end;
CloseFile(Datei);
end;
caption:='Playlist - '+OpenDialog1.filename;
end;
function TForm1.Lese_ID3Tag(Filename: string):TID3Tag;
var
Buffer: array[1..128] of char;
Datei: File;
mp3hdrread: array[1..4] of byte;
mp3hdr: longint absolute mp3hdrread;
tempbyte, bitrateindex, versionindex: byte;
bitrate, version, layer, groese: longint;
TAG : TID3Tag;
begin
try
AssignFile(Datei, Filename);
Reset(Datei,1);
groese:=filesize(Datei);
blockread(Datei,mp3hdrread,4);
tempbyte:=mp3hdrread[1];
mp3hdrread[1]:=mp3hdrread[4];
mp3hdrread[4]:=tempbyte;
tempbyte:=mp3hdrread[2];
mp3hdrread[2]:=mp3hdrread[3];
mp3hdrread[3]:=tempbyte;
reset(Datei,1);
Seek(Datei,FileSize(Datei)-128);
BlockRead(Datei, Buffer, SizeOf(Buffer));
CloseFile(Datei);
bitrateindex:=((mp3hdr shr 12) and $F);
versionindex:=((mp3hdr shr 19) and $3);
case versionindex of
0: version:=3;
1: version:=0; //unbekannt
2: version:=2;
3: version:=1;
end;
layer:=4-((mp3hdr shr 17) and $3);
if version<>0 then
bitrate:=MPEG_BIT_RATES[version][layer][bitrateindex]
else
bitrate:=128;
with Tag 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]);
sample:=sample_rates[version][((mp3hdr shr 10) and $3)];
dauer:=(groese*8) div ((bitrate)*1000);
bits:=bitrate;
vers:=version;
layers:=layer;
end;
except
end;
result:=tag;
end;
Stefan
|
|
Zitat
|