Moin,
MP3s sind in sogenannte Frames unterteilt, die je nach Format (MPEG 1/2,
Layer I-III) eine andere Anzahl von Samples haben. Für die "üblichen"
MP3s sind darin immer 1152 Samples untergebracht, bei 44,1 kHz
Sampling-Frequenz ist also ein Frame ca. 26,122ms, bei 48 kHz genau 24
ms lang.
Das gilt für jede in MPEG 1, Layer 3 codierte Datei, unabhängig von der
Bitrate. Die Bitrate gibt dann also nur noch vor, wie groß (Bytes) ein
Frame ist.
Im Endeffekt beschränkt sich das Ermitteln der Länge einer MP3 also auf
das Zählen der Frames.
Da die Frames jedoch je nach Bitrate eine unterschiedliche Größe haben
können und das komplett unabhängig von den anderen, muss man wirklich
alle zählen und kann nicht die Größe der Datei durch die Größe eines
"üblichen" Frames dividieren. Letzteres funktioniert nur bei CBR
(constant bitrate), also wenn alle Frames gleich groß sind. Für die
wirklich universelle Lösung, die immer funktioniert, muss man wirklich
zählen.
Um die einzelnen Frames zu finden, muss man deren Länge ermitteln und
dann eben vom einen zum anderen Frame springen. Dafür gibts bei jedem
Frame einen Header, der aus 4 Bytes besteht. Wie der Header aufgebaut
ist, findet man quasi überall im Netz und auch eine Formel um die Länge
des Frames zu ermitteln sollte nicht allzu schwer zu finden sein.
Ich hoffe ich konnte damit etwas helfen. Ich habe selber einen relativ
flexiblen MP3/WAVE-Player entwickelt und musste mir die Infos mühsam
zusammen suchen da scheinbar keiner so wirklich bescheid weiß ;)
Gruß,
Tobi