Registriert seit: 17. Apr 2003
Ort: Dattenberg
102 Beiträge
Delphi 2005 Personal
|
Wirkliche Position eines mp3headers...nicht mal jedi kanns!
30. Aug 2005, 21:12
Hi Leute!
Ich habe heute ein Programm geschrieben um den MP3 Header auszulesen auch den Xing Header für Variable Bitraten. Ziel war es die Spiellänge von mp3s zu bestimmen, auch von denen, mit VBR.
Das funktioniert auch alles ganz gut, doch bei einigen läuft da ganzschön was schief:
Normale Dokumentationen meinen immer man solle nach dem Sync '1111 1111 111X XXX' suchen, denn diese besetzten Bits weisen auf den Anfang des MPEG Headers hin. Selbst die Jedis machen das so. Doch oft, wie ich feststellen musste, ist das nicht der Header, sondern einfach nur zufällig besetzte Bits; dabei steht der echte Header weiter unten in der Datei.
Als erster Gedanke kam mir, den Header an dieser Stelle auszulesen, und sobald die Bitrate, die MPEGVersion, die Samplingrate oder die LayerVersion in einem ungültigen Bereich landen, die Suche nach dem Header fortzuführen, da es sich ja offensichtlich bei dem erkannten Snyc um Zufall handelt. Gesagt getan, es werden durch dieses Verfahren auch schon viele mp3s die vorher falsch waren, richtig erkannt, nur leider noch immer nicht alle.
Das Interessante: "WinAMP" erkennt alle Header richtig...es muss also noch ein Kriterium für die Richtigkeit eines Headers geben..hoffe ihr wisst es!
PS: Allen Code zu diesem Thema den ich bis jetzt gefunden habe, inkl. Jedis suchen nur nach dem "1111 1111 111X XXX" Sync...
DaDu
|