Du könntest zuerst schauen, ob die MP3 Datei einen Xing / Info / VBRI Header enthält. Dort ist die Frameanzahl schon definiert.
Hier ist die offizielle Xing SDK: http://docs.real.com/docs/xingtech/vbrheadersdk.zip
Und hier die offizielle VBRI SDK: http://www.iis.fraunhofer.de/amm/download/mp3_vbr_sdk.zip
Der Info Header Aufbau ist mit dem des Xing Headers identisch - der einzige Unterschied ist der Identifier "Info" anstelle von "Xing". Übrigens, LAME und GOGO sind die einzigen Encoder, die einen Info Header bei CBR Files schreiben.
Für das Berechnen der Frames bei CBR Dateien ohne Info Header verwende ich folgende Formel (Pseudocode):
Frame Number = Audio Size / (Coefficient * Bit Rate * 1000 / Sampling Rate + Padding)
Audio Size ist die Größe der Audiodaten (ohne ID3 / APE / Lyrics3... Tags) in Bytes.
Coefficient ist abhängig von MPEG Version und MPEG Layer. Hier ist eine Tabelle:
Bit Rate ist der Bit Rate Wert in kbps.
Sampling Rate ist der Sampling Rate Wert in Hz.
Padding ist der Padding Slot Wert. Wenn die MPEG Datei den Padding Bit gesetzt hat hat er den Wert 1 bei Layer 2 und Layer 3, und den Wert 4 bei Layer 1. Wenn der Padding Bit nicht gesetzt ist, ist der Padding Wert 0.
Die Länge der MPEG Datei kann dann wiefolgt berechnet werden (Pseudocode):
Duration = Frame Number * Sample Size / Sampling Rate
Duration (in Sekunden), Frame Number und Sampling Rate (Hz) ist glaube ich klar. Sample Size hat folgende Werte:
Gruß
Sebastian Mares
Edit: Layer 1 Werte für Coefficient und Sample Size gefixt.