Der Martin: Wie genau (Takte zu Ablaufzeit) sind mp3-Dateien?

Beitrag lesen

Hallo,

ich beantworte mal die im Posting-Titel gestellte Frage direkt: Das mp3-Audioformat hat ein sehr exakt deterministisches Zeitverhalten. Zwei mp3-Dateien, die mit derselben Abtastrate und derselben Bitrate erzeugt wurden, müssten also perfekt synchron zueinander abgespielt werden.

Habe eine Ablaufgrafik hinzugefügt. Grün sind die aktiven Takte (keine Pause für diese Stimme):

Wo kommt diese Grafik her? Wie bzw. woraus entsteht die?

Der Snapshot zeigt den Einsatz des Basses eine s zu früh. Takt 50 wäre richtig. Eine Sekunde (zähle ein-und-zwan-zig) zu früh in eine Pause reinsingen kann nicht akzeptiert werden.

Nein, natürlich nicht. Auch wenn das ein sehr langsames Musikstück sein muss (ein Takt muss ja etwa zwei Sekunden lang sein), geht das gar nicht.

Deshalb die rot-grauen Balken zum ausmessen. Oben korrekt 127 Takte in 12 10 Takt Einheiten +, darunter korrekt 4:03 min in 24 10s Einheiten +.

Okay. Beim Abbilden von Taktnummer auf Spieldauer entsteht aber schonmal ein Rundungsfehler, denn 127/243 (Takte zu Sekunden) ergibt irgendeinen gebrochenen Wert. Und ich sehe dich immer nur mit ganzen Sekunden hantieren. Außerdem hat eine Musik-Aufnahme ja meist noch etwas Zugabe vor dem ersten sowie nach dem letzten Takt.

Die Gesamtdauer 4:03 der Masterspur (erste) ermittle ich mit

arr_ausgewaehlte_audios[0].addEventListener( 'canplaythrough', function () {
  durationSec = this.duration.toFixed(2);  // Sekunden mit 2 Nachkommastellen
  let arr     = durationSec.split(".");
  minuten     = ("00" + Math.floor( arr[0] / 60 )) . slice(-2);
  sekunden    = ("00" + ( arr[0] - minuten * 60 )) . slice(-2);
  if ( document.querySelector( "#duration" ) ) {
    document.querySelector( "#duration" ).innerHTML = minuten +":" +sekunden;
  }
});

Warum wandelst du die Spieldauer erst auf eine Darstellung mit zwei Nachkommastellen, wenn du doch die Nachkommastellen gar nicht berücksichtigst? Schon wieder ein möglicher Rundungsfehler, der auf fast eine Sekunde anwachsen kann. Aber solange der Algorithmus der Umwandlung immer der gleiche ist, muss auch das gleiche Ergebnis rauskommen - mit dem gleichen Rundungsfehler.

Habe überlegt, ob da ein Rundungsfehler vorliegen kann, aber nicht gefunden. Eine andere Frage wäre, ob das Programm MuseScore genau gleiche Taktlängen beim mp3-Export erzeugt.

Ich habe zwar den Trick mit dem bit reservoir nicht hundertprozentig verstanden - eventuell könnte dadurch bei unterschiedlichen Audio-Inhalten ein kleiner Versatz entstehen. Der wäre dann aber entsprechend den maximal 511 Bytes in der Größenordnung von Millisekunden; ich glaube nicht, dass man das wahrnehmen würde.

Als ich die Bass-mp3 als Master genommen habe, ist die duration 04:04

Ich würde doch von Rundungsfehlern ausgehen. Leg doch mal alle deine Zeitberechnungen auf Millisekunden aus und schau nach, ob der Fehler dann immer noch da ist.

Einen schönen Tag noch
 Martin

--
"Hab ich vergessen" ist oft nur ein Euphemismus für "Hab ich noch nie verstanden".