Schnelleres IO beim Schreiben von ID3v2


#1

Hallo Florian,

in bezug auf ID3v2 Geschwindigkeit schreibst Du in der FAQ:

Meine Frage in der Hinsicht wäre: Es muss doch nicht wirklich eine neue Datei angelegt werden, and die man die MP3 Nutzdaten dann anhängt. Eigentlich müßte doch prinzipiell nur die alte MP3 Datei "nach vorne verlängert" werden. Da kann man dann die ID3v2 Daten reinschreiben. Gibt es dazu nicht evtl. optimierte Win32 Funktionen oder so etwas?

Ich frage deshalb, da das nachträgliche Taggen von MP3s mit kID3, der Tagger von KDE, eindeutig schneller geht. Ich weiß zwar nicht, wie es im Source dort realisiert ist, aber es scheint optimiertere Möglichkeiten zu geben.

Da dies die Kernfunktionalität und eine wesentliches Kriterium für eine angenehme Benutzung von MP3Tag ist, würde ich mich freuen, hier in naher Zukunft eine Verbesserung zu sehen.

Danke für deine tolle Arbeit und viele Grüße,

Dominik

Nachtrag:
Vielleicht bringt es was, für MP3 ID3 Tags, die ID3Lib einzubinden:
http://id3lib.sourceforge.net/ (benutzt die GNU Lesser GPL als Lizenz)
das ist die Tagging Library von KID3, und die scheint für diese Zwecke ziemlich flott zu sein. Aber ich will mich hier nicht zu weit aus dem Fenster lehnen, alles nur als Vorschlag gedacht.


#2

MP3Tags ID3v2 Funktionalität basiert schon auf ID3Lib. In der Windows API gibt es, soviel ich weiß, keine Möglichkeit, Bytes am Anfang einer Datei zu schreiben, ohne dabei den ganzen Inhalt erneut zu schreiben. Vielleicht hat Linux das besser im Griff. Eventuell hängt es auch damit zusammen, dass Linux Ext2FS / Ext3FS / Raiser FS / ... als Dateisystem benutzt.


#3

Das ist schlicht und einfach nicht möglich.
In einem FAT/NTFS Dateisystem kann man nicht vor eine Datei schreiben.
Meinem Kenntnisstand nach liegt das daran, dass Dateien in (bei win2k 4k große) Cluster aufgeteilt ist. Und bis auf den letzten Cluster müssen die alle "voll" sein. Theoretisch wäre es also schon möglich vor eine Datei zu schreiben - allerdings nur in 4kb Blöcken. Also recht unnütz.
Ich bezweifle aber, dass das bei LInux geht - meines Wissens ist das in keinem modernen Filesystem möglich (das ist auch recht schwachsinnig, da es zu einer recht wahnsinnigen Fragmentierung führen würde)