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.
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
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.
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.