![]() |
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 |
Re: Problem beim id3-Tag auslesen
Danke Muetze1.
Da werde ich mal in unsere Newsgroup posten und sehen ob einer die Komponenten verbessert. |
Re: Problem beim id3-Tag auslesen
Moin!
Zitat:
Ich habe die Lib nur mal schnell geschrieben weil damals gab es dazu noch nix und ich brauchte was für meine Musik-Library, daher habe ich das mal schnell b'n'd programmiert. Ich habe bisher auch noch nie Unicode ID3v2 Tags gehabt, wenn ich mal ein solches File bekommen sollte, dann werde das Unicode auch mal implementieren. Auch serializing und komprimierte Tags sind mir bisher noch nicht untergekommen. Daher steht das Projekt schon seit einiger Zeit und ich warte auf überhaupt eine Rückmeldung ob die Klasse irgendwem nutzt und werde anhand dessen die Entwicklung fortführen... MfG Muetze1 |
Re: Problem beim id3-Tag auslesen
Ich bin einer der fleissigen JVCL-Mitarbeiter.
Namentlich habe ich einen Grossteil der Sourcen der JVCL 3 stylistisch ueberarbeitet. Frueher haben wir ueber Mailinglisten zusammengearbeitet. Inzwischen sid die fast ausgetrocknet und die Kommunikation erfolgt ueber unsere Newsgroups auf dem Server ![]() Alle Komponenten sind MPL und wenn du deine Komponente auch unter der MPL veroeffentlichst, dann kannst du gerne die Komponenten zusammenfuehren. Wir sind immer an fleissigen Mitarbeitern interessiert. |
Re: Problem beim id3-Tag auslesen
Moin!
Zitat:
MfG Muetze1 |
Re: Problem beim id3-Tag auslesen
Warum schreibt Delphi eigentlich eine #0 in das letzte Array-Feld? Hat das irgendeinen tieferen Sinn?
Gruß Schneider-Huetter |
Re: Problem beim id3-Tag auslesen
Moin!
Zitat:
MfG Muetze1 |
Re: Problem beim id3-Tag auslesen
Wie schaffe ich es nun am einfachsten den String so zu kürzen, dass alle #0 am Ende gelöscht werden?
Gruß Schneider-Huetter |
Re: Problem beim id3-Tag auslesen
Moin!
In meiner Library mache ich das so:
Delphi-Quellcode:
Das String brauche ich, da mein Buffer direkt aus den Char's besteht:
Trim(String(Buffer.Artist));
Delphi-Quellcode:
MfG
typID3v1Record = Packed Record
HeaderID : Array[0..2] Of Char; Title, Artist, Album : Array[0..29] Of Char; Year : Array[0..3] Of Char; Comment : Array[0..29] Of Char; Genre : Byte; End; Muetze1 |
Re: Problem beim id3-Tag auslesen
Vielen Dank Muetze1, endlich hat's dank deines Tips funktioniert :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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