Problem mit ID3-Tags
-
Hi zusammen,
habe hier im Forum ein kleines Beispiel befunden, wie ich die ID3v1 Tags eines MP3 auslesen kann und es funktioniert auch schon ganz gut.
Dieses Thema wurde vor ca. 2 jahren hier schon gepostet, aber ist leider keine Antwort auf meine Frage dabei. Deswegen schreibe ich es nochmal.Die letzten 128 Bits eines FileStreams sind ja die ID3v1 Tags.
Will sie wie folgt auslesen:fs = new TFileStream(mp3,fmOpenRead); //MP3 öffnen try { fs->Seek(-128,soFromEnd); //Die letzten 128 Zeichen einlesen fs->Read(buffer,128); ID = Copy(buffer,0,3); Title=Copy(buffer,3,30); Artist=Copy(buffer,33,30); Album=Copy(buffer,63,30); Year=Copy(buffer,93,4); Comment=Copy(buffer,97,30); Genre=(unsigned)Copy(buffer,127,1).c_str(); /* Hab ich bei Wikipedia gefunden Field Length Offsets Tag 3 0-2 Songname 30 3-32 Artist 30 33-62 Album 30 63-92 Year 4 93-96 Comment 30 97-126 Genre 1 127 */ } catch(...) { } delete fs; ... //Tags ausgeben Steht in einer anderen Klasse Textausgabe->Text = id3v1->ID+"\r\n"+id3v1->Title+"\r\n"+id3v1->Artist+"\r\n" +id3v1->Album+"\r\n"+id3v1->Year+"\r\n" +id3v1->Comment+"\r\n" +id3v1->Genre;
Jetzt habe wird bei mir nur "Tag" und der "Songname" angezeigt!Dann schreibt er nichts merh!
Auch wenn ich alles auskommentiere.Meine Denkweise: Die Tags haben ja immer eine gewisse Länge und einen Startindex, oder?
Wieso hat der Offset einen Beriech und nicht einen konstanten wert?
Warum funktioniert das nicht?Wäre um eure Hilfe sehr dankbar!
Danke Bench
-
Die Offset sind konstant. Offset 0-2 heisst "alles vom ersten bis zum dritten Zeichen" usw. usf.
Wenn nicht mehr als der Songname angezeigt wird dann steht ggf. einfach nicht mehr drin.Für die Zukunft: wenn du (Nach)Fragen zu einem Beitrag hast dann diese bitte im ursprünglichen Thread posten.
-
Hi,
erstmal dank!!
Mit dem Posten mach ich in zukunft so!
Zum Problem:
Aber wenn ich jetzt im Windows-Explorer die Infos, welche ich auslesen möchte, anzeige, dann erscheint alles wunderbar was ich haben möchte!An was kann das Problem liegen?
Habe den Code mal editiertda ich ja die Positionen angebe, von welcher gelesen werden soll.
ID = Copy(buffer,0,3); Title=Copy(buffer,3,33); // ID3 Tags auslesen Artist=Copy(buffer,33,63); Album=Copy(buffer,63,93); Year=Copy(buffer,93,97); Comment=Copy(buffer,97,127); Genre=(unsigned)Copy(buffer,127,128).c_str();
Danke Bench
-
HI,
wenn ich es Debugge, dann geht es!!!
Also muss es am ausgeben in dem Textfeld liegen!danke für das!
ABER:
Wie kann ich die Tags wieder speicher???
Will sie abändern und dann abspeichern!Danke Bench