![]() |
Problem beim id3-Tag auslesen
Hallo zusammen,
ich habe ein für mich völlig unverständliches Problem beim Auslesen des id3-Tags: Die Tags werden mittels TFileStream in ein "Array of Char" eingelesen und dann in 2 getrennte Strings (für Interpret und Titel) kopiert, das funktioniert so weit auch ganz gut solange ich nur entweder den Titel oder den Interpret z.B. in ein Edit-Feld schreibe. Wenn ich jedoch die beiden Strings zusammenfügen möchte (z.B.: Interpret + ' - ' + Titel) wird nur der Interpret angezeigt(bzw der String, der vorne steht). Wenn ich zuert den Titel in ein Edit-Feld schreibe, dann den Interpret in ein anderes Edit-Feld schreibe und sie dann zusammenfüge funktionirt es :wiejetzt: ???? Im Voraus schon mal vielen Dank |
Re: Problem beim id3-Tag auslesen
Moin!
Tja, das Problem klingt gut und interessant, aber ein wenig Code wäre schonmal nicht schlecht, weil so kann ich nur folgendes sagen: Tjoa, schick, scheint irgendwo der Wurm drin zu sein... MfG Muetze1 |
Re: Problem beim id3-Tag auslesen
Hängt den Strings vielleicht ein #0 drann, welches Delphi beim konkatinieren nicht mitbekommt?!
|
Re: Problem beim id3-Tag auslesen
hmmm...
ok..hier mal meine Routine zum Lesen von ID3 (nur V1 !!)
Code:
procedure TID3V1.Readtag;
var st : TFilestream; buf: array[0..127] of char; tmppos,curpos : integer; function ArrayToStr(count:integer):string; var i,ende : integer; begin result := ''; ende := curpos+(count-1); for I := curpos to ende do result := result+buf[i]; curpos := ende+1; end; begin readed := false; changed := false; try st := TFilestream.create(ffilename,fmOpenRead); st.Seek(-128,soFromEnd); st.ReadBuffer(buf[0],128); st.free; if (BUF[0]='T') and (BUF[1]='A') and (BUF[2]='G') then begin readed := true; curpos := 3; fTitle := ArrayToStr(30); fartist := arraytostr(30); falbum := arraytostr(30); fyear := arraytostr(4); tmppos := curpos+28; if (ord(buf[tmppos]) =$00) and (ord(buf[tmppos+1]) <> $00) then begin fversion := 1; fcomment := arraytostr(28); falbumtrack := ord(buf[curpos+1]); inc(curpos,2); end else begin fversion := 0; fcomment := trim(arraytostr(30)); end; fgenre := ord(buf[127]); end; except on e:exception do raise e; end; end; Hoffe es hilft weiter:) |
Re: Problem beim id3-Tag auslesen
Moin!
Ok, die Strings die du dir zusammenholst aus dem Record sind alle am Ende mit einer #0 aufgefüllt und diese wird die Probleme machen. Daher musst du vorher die Strings mal kürzen, bzw. die #0 hinten entfernen. MfG Muetze1 |
Re: Problem beim id3-Tag auslesen
Besorg dir doch die JediVCL. Da sind ID3 Komponenten mit dabei.
|
Re: Problem beim id3-Tag auslesen
Moin!
Zitat:
MfG Muetze1 |
Re: Problem beim id3-Tag auslesen
Muetze1, kannst du mal deine Komponente mit der Jedi-Komponente vergleichen?
Eine von beiden ist bestimmt besser und der andere lernt was. |
Re: Problem beim id3-Tag auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Moin!
Ok, habe mir mal die JEDI VCL runtergeladen und den Source angeschaut. Meine Lib entstand aus der Not und ist daher einfacher, aber einen kleinen Vergleich wage ich mal. ID3 Tag Lib - keine Komprimierung / Verschlüsselte Tags - keine ID3v2.2.x.x, erst ab v2.3.x.x und höher (4 Buchstabige Tag IDs) - kein Unicode UTF-8/UTF-16 Support + alle Tags, auch unbekannte, können über Streams geschrieben und gelesen werden + kleinerer Code + eine Lib für beide Tag Typen JEDI ID3 - keine Komprimierung / verschlüsselte Tags - unbekannte Tags können nicht gelesen / geschrieben werden, bleiben nil - 2 Klassen / Units für die unterschiedlichen Tag Typen + auch ID3v2.2.x.x Tags + Unicode anscheinend supported Dann ist noch die Frage ob die JEDI ID3 Lib unbekannte Tags automatisch entfernt, wenn diese auch nicht gelesen werden konnten. Das konnte ich beim überschauen des Codes nicht herauslesen. Ich wollte die JEDI VCL nicht installieren und ich habe auch nicht mit der JEDI ID3 Klasse gearbeitet. Das müsste man vielleicht nochmal im Detail klären. Auch kann es noch weitere Unterschiede geben, aber ich habe den Code nur überflogen. It's your choice... MfG Muetze1 |
Re: Problem beim id3-Tag auslesen
Vielen Dank für eure Antworten, werde eure Vorschläge mal testen, das mit der #0 hört sich ziemlich vernünftig an. Die Komponenten will ich eigentlich nur als Notlösung einsetzen, man will ja auch was lernen beim Programmieren ;)
MfG Schneider-Huetter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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