Nun, ich habe mich mit dem Quellkode beschäftigt mit dem Ziel, die
lame_enc.dll (32 und 64 bit) kleinzukriegen. 1 MByte kann nicht sein,
SOO kompliziert ist LAME (deutsch: lahm) nun auch wieder nicht.
Ich habe es nun auf 120 KByte runterbekommen. Immer noch eine schwere
Echse, wenn man ein Kilobyte mit einem Kilogramm aufwiegt.
Ich kann erst mal nur vage vermuten, dass die Compilereinstellung O1
(Größe) gegen der Originaleinstellung O2 (Geschwindigkeit) den
Löwenanteil macht. Was die DLL dann um ein paar Promille langsamer macht
spielt heutzutage keine Rolle mehr.
Aus Sicht eines C(++)-Programmierers ist lame_enc.dll ein gutes Beispiel
dafür, wie man NICHT programmiert: Das Programm ist um ein Gottobjekt
(äh-struct) herumgestrickt, hat hunderte API-Aufrufe, und kann kein
Unicode in Dateinamen, versagt also bei exotischen Dateinamen.
Normalerweise sollte eine DLL sich nicht wie ein Fremdkörper verhalten
(bspw. _stdcall statt _cdecl) und einfach zu verwenden sein (bspw.
"rundll32 lame_enc.dll,Encode *.wav" - fertig). Das Totschlag-Argument
"Linux-Background" ist keine Entschuldigung für schlechte,
fremdkörperartige Software.
Der fachliche Teil (also der Kern des MP3-Kodierers) ist erwartungsgemäß
schwierig zu verstehen. Immerhin ist lame nicht auf
Geschwindigkeits-Optimierung sondern auf Verständlichkeit solcher
Routinen optimiert (angeblich).
Zurück zur Ausgangsfrage: Was reizt daran, eine Codec neu zu schreiben?
Wenn sowas funktioniert ist und bleibt man heilfroh und rührt man das
nicht an. Nicht ohne wirklich triftigen Grund. Besser komprimierende
Codecs gibt es schon lange, bspw. Vorbis. Der ist aber auch deutlich
größer.