Forum: Mikrocontroller und Digitale Elektronik MP3 Länge berechnen


von M. Н. (Gast)


Lesenswert?

Hallo Leute.

Habe einen MP3 Player mit einem xmega128a1 und einem vs1011 gebaut. 
Funktioniert sehr gut. Ich würde gerne die Gesamtlänge des Lieds 
auslesen.
Weiß jemand, wie das funktioniert?

Wäre toll

M.H.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Hat Dein ATXMega Zugriff auf die Datei? Dann musst Du nur die 
Längenangabe aus dem MP3-Header auslesen. Ist gar nicht so schwer, wenn 
man sich die Header-Tabellen auf Wikipedia anguckt.


Gruß
Jonathan

von M. Н. (Gast)


Lesenswert?

Auf wikipedia finde ich nur den frame-header und der enthält keine 
Längenangabe. ebenso kann ich ihn in meinen Dateien nicht finden.

Gruß M.H.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Ja - MP3 ist ein Container (glaub ich :P). Du musst in deinem Code 
schaun, welches Format es denn jetzt ist (steht auf Wikipedia) und dann 
den Header des entsprechenden Formates auslesen (glaub ich auch nur 
xD)... Dann hast Du die Länge.


Gruß
Jonathan

von Sascha W. (sascha-w)


Lesenswert?

also für die Länge gibt's im ID3V2 ein Feld - ist natürlich kein 
Mussfeld. Ich wollte das mal für das erzeugen einer Playlist heranziehen 
- war aber fast immer leer. Evl. gibt es ja ein Tool mit dem man das 
automatisch eintragen kann.
Ansonsten musst du wohl die Frames zählen, ich weis aber jetzt nicht ob 
die Spieldauer dann auch wieder von der Bitrate abhängt.

Sascha

von Tobias Hagemeier (Gast)


Lesenswert?

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

von M. Н. (Gast)


Lesenswert?

Ok. Das hat mir schonmal sehr geholfen.

wenn ich weitere Fragen habe Poste ich sie.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.