Och, wenn die Dokumentation halbwegs klar ist, ist das Parsen und die Manipulation von Binärdateien auf dem Level eigentlich kein Problem. Die Fehlerbehandlung und "never trust an input" ist fast komplizierter als der Rest. Geht ja bei mir nicht um den Audiocodec, sondern nur um die Metadaten. Da hält sich die Komplexität noch in Grenzen.
Die "Kleinigkeit", die ich vergessen hatte, war übrigens relativ peinlich. Im Ogg-Seiten-Header gibt es ein Byte für die Anzahl der Daten-Segmente, die in dieser Seite zu finden sind, und dann ein passend großes Byte-Array, in dem die Größen der einzelnen Segmente zu finden sind (pro Seite also maximal 255 Segmente zu je 255 Byte). Beim Schreiben habe ich zwar die Anzahl der Segmente korrekt berechnet, aber deren Größen nicht in den Header geschrieben. Das ist natürlich Murks.
Interessanterweise ist es jetzt so, dass mein Code unter Umständen die benötigte Seiteanzahl für die drei Ogg-Header
reduziert, auch wenn sich der Comment-Header
vergrößert. Liegt daran, dass anscheinend einige Tagger den dritten Header (der auf die VorbisComments folgt), immer auf eine eigene OggPage schreiben. Das ist aber nicht erforderlich, und mache ich auch nicht so. Könnte ich höchstens als Option für die OggVorbisFile-Klasse einbauen, falls das ein Anwender der Klassen so haben möchte ...
Ansonsten passt das jetzt soweit. Seiten werden auch wieder durchnummeriert, und der Wert für "AbsolutePosition" sollte auch korrekt gesetzt werden. Muss nur noch ein paar Spezialfälle testen (d.h. Comment-Size ist ein exaktes Vielfaches von 255, oder sogar genau gleich 255*255). Und etwas Fehlerbehandlung für den Fall, dass das Seitenflag für "letzte Seite" nicht gesetzt ist, oder zu früh gesetzt wird.
Einbau in Nemp wird aber noch ne Weile dauern.
We are, we were and will not be.