![]() |
Re: Lauftext arbeitet nicht korrekt
Delphi-Quellcode:
function TfrmMain.ReadID3Tag(FileName: String): TID3Tag;
var FS: TFileStream; Buffer: array [1..128] of Char; begin FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try FS.Seek(-128, soFromEnd); FS.Read(Buffer, 128); Result.ID := Copy(Buffer, 1, 3); Result.Titel := Copy(Buffer, 4, 30); Result.Artist := Copy(Buffer, 34, 30); Result.Album := Copy(Buffer, 64, 30); Result.Year := Copy(Buffer, 94, 4); Result.Comment := Copy(Buffer, 98, 30); Result.Genre := Ord(Buffer[128]); Result.FileName := FileName; finally FS.Free; end; end; |
Re: Lauftext arbeitet nicht korrekt
Mit Deinem ReadID3Tag kannst Du nur ID3V1 korrekt lesen.
Wenn ein mp3 File mit ID3V3 Tags daher kommt liest Du Datenmüll ein. Du solltest zumindest vorher prüfen, ob ein ID3V1 Tag vorliegt.
Code:
Oder die Werte, die Du dem Record übergibts, überprüfst
Offset Länge Bedeutung
0 3 Kennung "TAG" zur Kennzeichnung eines ID3v1-Blocks 3 30 Songtitel 33 30 Künstler/Interpret 63 30 Album 93 4 Erscheinungsjahr 97 30 Beliebiger Kommentar 127 1 Genre ob sie denn lesbare AsciiZeichen beinhalten. Grüße Klaus |
Re: Lauftext arbeitet nicht korrekt
Und wie kann ich so etwas überprüfen ?
Dein Code oben liest die Id3TagsV2 ein und meiner 1, also muss ich rausfinden, welche Version in der Datei steht und mit dem passenden Code auslesen. Stimmt das so ? *** edit *** Warum stehen dann aber die Id3Tags bei den selben Dateien in der Playlist ohne Datenmüll ? In der Playlist: Static-X - The Only Lauftext: Static-X #0#0#0#0#0#0#0#0#0#0#0#0 - The Only #0#0#0#0#0#0#0#0#0#0#0#0 |
Re: Lauftext arbeitet nicht korrekt
ID3v1 -> 0 3 Kennung "TAG" zur Kennzeichnung eines ID3v1-Blocks
hat in den ersten 3 Bytes das Wort "TAG" stehen. Steht aber auch in dem Link den ich im obigen Beitrag erwähnt habe. Warum in der Playlist alles korrekt zu lesen ist, da steht auch für mich ein großes ?. Vielleich spielt das etwas von PChar und String hinein. bei PChar wird das Textende mit #0 definiert und wird in einem String nicht dargestellt. Grüße Klaus |
Re: Lauftext arbeitet nicht korrekt
Hallo Nils,
Delphi-Quellcode:
du liest mit Copy() einen festen Bereich aus einer Struktur in einen String fester Länge. In Buffer ist Artist aber ein array of byte, welches rechts mit low values (#0) aufgefüllt wird. Du musst also anders vorgehen:
Result.Artist := Copy(Buffer, 34, 30);
Delphi-Quellcode:
Grüße vom marabu
function BufToStr(buf: PChar; maxSize: Integer): String;
begin SetLength(Result, maxSize); Move(buf^, Result[1], maxSize); Result := StrPas(@Result[1]); end; |
Re: Lauftext arbeitet nicht korrekt
Danke, ich habe es jetzt so gelöst:
Delphi-Quellcode:
type
TID3Tag = record ID: array[0..3] of Char; Titel: array[0..30] of Char; Artist: array[0..30] of Char; Album: array[0..30] of Char; Year: array[0..4] of Char; Comment: array[0..30] of Char; Genre: Byte; Filename: String; end; function ReadID3Tag(const FileName: String): TID3Tag; begin FillChar(Result, SizeOf(Result), 0); with TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone) do try Position := Size - 128; Read(Result.ID, 3); Read(Result.Titel, 30); Read(Result.Artist, 30); Read(Result.Album, 30); Read(Result.Year, 4); Read(Result.Comment, 30); Read(Result.Genre, 1); Result.Filename := Filename; finally Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz