![]() |
ID3v1 und ID3v2 auslesen
Hi,
das Auslesen von Tags treibt mich noch in den Wahnsinn. :? Mein Problem ist eigentlich recht simpel: ich will die ID3-Tags aus MP3-Dateien lesen. Das Problem ist nur, dass es manchmal v1.1 und manchmal v2 oder gar beides sein kann. Ich kann auch soweit erstere Version mit folgendem Source von ![]()
Delphi-Quellcode:
Das Problem ist nun aber, dass ich bisher nichts gefunden habe, um die neuere Version auszulesen.
type
TID3Tag = record // diese Struktur erweitert die Char arrays um ein Zeichen für Nullterminator, // somit muß sie Feld für Feld gelesen und geschrieben werden, da ID3 eben diese Terminatoren NICHT speichert. ID: array[0..3] of Char; Title: 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; 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.Title, 30); Read(Result.Artist, 30); Read(Result.Album, 30); Read(Result.Year, 4); Read(Result.Comment, 30); Read(Result.Genre, 1); finally Free; end; end; Hat jemand da was für mich? Chris |
Re: ID3v1 und ID3v2 auslesen
Die zweite Version ist nicht so einfach aufgebaut. Die Struktur findest du unter
![]() Ansonsten gibt es auf Torry sicherlich einige Komponenten, die auch ID3v2 lesen können, zumindest rudimentär. Alternativ habe ich im DF mal mein [df]"UltimaTag"[/df] vorgestellt, das ID3v1 und ID3v2 lesen und schreiben kann. ID3v2-Unterstützung ist zwar bei weitem noch nicht komplett, aber die Informationen, die auch ID3v1 enthält, sind fertig. An einem kompletten Redesign von UltimaTag arbeite ich noch, zur Zeit gibt's Lese-Support für einige ID3v2-Frames, allerdings bisher ungetestet, schreibender Zugriff ist noch lange nicht fertig. |
Re: ID3v1 und ID3v2 auslesen
Hi,
Zitat:
Zitat:
Das Problem bei den Torry-Komponenten: die sind nicht D2005-Kompatibel. Und ich habe keine Lust wieder zwei Stunden daran zu sitzen ein D7-Paket auf D9 umzuschreiben. :? Zitat:
Danke für den Hinweis. ;) SourceCode lässt sich auch mit Notepad lesen. *g* Chris |
Re: ID3v1 und ID3v2 auslesen
Zitat:
Zitat:
|
Re: ID3v1 und ID3v2 auslesen
Weicheier! Source schreibt man mit vi. :-D
|
Re: ID3v1 und ID3v2 auslesen
vi?!? dieser komische Editor, den keiner bedienen kann? Da bleibe ich doch lieber bei joe ;-)
|
Re: ID3v1 und ID3v2 auslesen
Hi,
klar. Deine Unit ist nahezu perfekt. Nur die Lizenz stört mich. :? Das Projekt, was ich gerade schreibe sollte eigentlich nicht Freeware werden und die (L)GPL zwingt mich ja nahezu dazu, oder? Chris Joe ist ganz gut. Aber Vi finde ich besser. :tongue: Auf jedenfalls sind beide besser, als emacs. :kotz: |
Re: ID3v1 und ID3v2 auslesen
Zitat:
Zitat:
Bei einer dynamischen Linkung (kompilier' dir 'ne DLL mit Interface oder ein BPL ;-)) ist dein Programm lediglich eines, das meine Bibliothek benutzt, unterliegt also weder der GPL, noch der LGPL. Allerdings bin ich der Urheber, habe also sämtliche Rechte an der Bibliothek, und wenn du lieb guckst (sehe ich da ein Delphi2005 in deinen Augen? :mrgreen:), räume ich dir eine Sonderlizensierung ein :zwinker: Andererseits wolltest du doch sowieso nur einen Denkanstoß haben und dir den Code selber schreiben, dein Code wäre dann von dir zu lizensieren, unter jeder Lizenz die dir einfällt ;-) |
Re: ID3v1 und ID3v2 auslesen
Hi,
okay. ;) Ich denke sowieso, dass ich selber was schreiben muss, weil ich eigentlich das gerne direkt in meine Klasse einbauen möchte. Naja, ich werde mir was einfallen lassen. Danke für deine Hilfe, Chris |
Re: ID3v1 und ID3v2 auslesen
Wie waere es mit der JCL/JVCL? Zu Id3 v1 und v2 ist da auch etwas dabei.
|
Re: ID3v1 und ID3v2 auslesen
Hi,
aus zwei bzw. drei Gründen nehme ich im Moment nicht die JVCL: erstens habe ich keine Möglichkeit (lies Zeit) 15MB herunterzuladen (wg. ISDN) um dann unter Umständen festzustellen, dass es nicht richtig mit D2005 funktioniert und zweitens weil ich gerne auf jegliche Zusatzkomponenten/-bibliotheken verzichten möchte. ;) Aber ansonsten habe ich nichts gegen die JVCL. Ich warte im Moment auf den 20. Dezember in der Hoffnung, dass dann die JVCL Version 3 fertig ist und ich mir relativ sicher sein kann, dass die 15MB sich gelohnt haben (die ich dann aber auch in der Schule runterladen werde). ;) Chris |
Re: ID3v1 und ID3v2 auslesen
Moin!
In dem oben von dir verlinkten Beitrag habe ich auch auf meine ID3 Tag Lib verwiesen und diese kommt ohne Komponente aus sondern ist eine reine Klasse und du kannst es ja bei dir nutzen und es sollte Delphi 2005 kompatibel sein. MfG Muetze1 |
Re: ID3v1 und ID3v2 auslesen
Hi Leute,
als ich gerade diesen Thread laß ist mir etwas aufgefallen. @Chakotay1308: Diese Version:
Delphi-Quellcode:
type
TID3Tag = record // diese Struktur erweitert die Char arrays um ein Zeichen für Nullterminator, // somit muß sie Feld für Feld gelesen und geschrieben werden, da ID3 eben diese Terminatoren NICHT speichert. ID: array[0..3] of Char; Title: 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; 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.Title, 30); Read(Result.Artist, 30); Read(Result.Album, 30); Read(Result.Year, 4); Read(Result.Comment, 30); Read(Result.Genre, 1); finally Free; end; end; funktionioniert nur bei ID3v1 Tags, es gibt aber schon seit langem die oft verwendete ID3v1.1. Du solltest auf jeden Fall die Funktion ausbauen, die Struktur ist folgende: ID ('TAG') Title 30 Artist 30 Album 30 Year 4 Comment 28 0-Byte ($0) 1 Album Track (Titelnummer) 1 Genre 1 die Zahlen sind natürlich in Byte. Gruß DelphiFreund |
Re: ID3v1 und ID3v2 auslesen
Aber nicht immer wird v1.1 benutzt, manchmal ist der Kommentar tatsächlich 30 Zeichen lang. Der Indikator für v1.1 sind die letzten beiden Byte des Comment-Feldes, ist der vorletzte ein Nullbyte und der letzte ungleich 0, dann ist der letzte die Tracknummer. Ist das vorletzte ungleich 0, ist es v1.0 und die letzten beiden gehören zum Kommentar.
|
Re: ID3v1 und ID3v2 auslesen
Stimmt, darauf sollte man natürlich achten, ich versuche ja auch seit gestern TAGs zu lesen und zu schreiben
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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