Moin!
Das mit der Tracknummer ist haargenau richtig - keine Einwände. Ansonsten kannst du auch gerne mal ein Blick in meine MP3Lib werfen auf meine HP - diese liegt da samt Quellen zur freien Nutzung.
Und mit dem Schreiben von Freiraum bei den ID3v2 Tags:
1. Wenn der Tag schon vorhanden ist, dann findest du diesen Zwischenraum ja raus, weil
1a) entweder der ID3 Header diesen freien Platz mit einschliesst (also in seiner Längenangabe mit enthält), oder
1b) die erste Frame weit später zu finden ist als direkt nach dem Ende des ID3 Tags
und wenn das irgendwie der Fall ist, dann musst du entscheiden, ob der neue Tag da noch reinpasst oder nicht. Wenn ja, dann kannst du doch einfach schreiben - ins Originalfile. Wenn nicht, dann musst du wiederrum den schon angesprochenen langsamen Weg nehmen, genauso wenn...
2. kein ID3v2 Tag vorhanden ist, dann musst auch diesen Weg einmal gehen und das dementsprechend anlegen.
Nun noch was dazu zum programmieren:
1. ein TStream Nachfahre bietet einem die einfache Methode CopyFrom() - damit kann man leicht nach schreiben des Tags den alten Inhalt (also die Frames, die Musik) hinten anhängen.
2. Man kann bei einem TMemoryStream, TFileStream, etc einfach die Property Size setzen und somit auch nach alleinigen schreiben des ID3v2 Tags die Datei vergrössern und dann z.B. die Daten mittels CopyFrom() anhängen.
Ich muss dazu noch gestehen, das meine ID3 Lib das ganze mit den freien Bytes beim Editieren/Schreiben noch nicht unterstützt - ich habe es aber ebend in die ToDo List aufgenommen. Als nächstes kommt aber erstmal
UniCode Support, der schon halb fertig ist und bei vielen Tags funktioniert...
MfG
Muetze1