Linuchs: zwei <audio> - Spuren im Browser nicht synchron

problematische Seite

Moin,

ein sehr spezielles Thema, das aber in den letzten zwei Wochen doch Interesse fand.

Ich bin dabei, zu meinen Liedtexten im Browser mehrere Audio-Spuren zum Üben für Stimmen und Instrumente hinzuzufügen. Ich war positiv überrascht, dass das im Prinzip funktioniert. Im Programm Audacity laufen die Spuren synchron und sind auch gleichlang:

Audacity

Wenn ich daraus zwei MP3-Dateien generiere, beide 3:08 lang, ist der Ton synchron, wenn ich ab Start laufen lasse. Klicke ich aber auf eine Text-Phrase, z.B. „Alles das hab' ich gesehen“ laufen beide Spuren übereinstimmend ab 2:10 wie mit Javascript vorgesehen, aber klaffen akustisch auseinander. Die Akustik kann ich hier leider (noch nicht) posten, aber so sieht es aus. Timer und Gesamtlänge stimmen überein:

nicht synchron

Zum Üben mit Aufsetzen so nicht zu gebrauchen.

Hat jemand eine Idee, warum der laufende audio-currentTime nicht exakt am Sound hängt?

fragt Linuchs

  1. problematische Seite

    Hallo Linuchs,

    es gibt eine 7 Jahre alte Frage bei Stackoverflow zum Thema, die wenig erfreuliches zeigt:

    https://stackoverflow.com/questions/16489495/sync-multiple-html5-audio-tracks-with-seek

    Der Antwortende bestreitet, dass man mit <audio> eine Chance auf Erfolg hat, oder O-Ton:

    Relying on streaming and expecting synchronization is a recipe for disappointment. :)

    Er empfiehlt das Web Audio API, wo man mit Audiobuffern arbeite (sprich: alles schon im RAM, oder zumindest kontrollierbare Teile davon) und das präziser sei, aber damit zu pausieren oder zu positionieren ist wohl nach Meinung des dortigen OP Eselquälerei[1]... (und es hängt den IE ab).

    Ich habe WebAudio noch nicht verwendet, du müsstest Dich im verlinkten MDN Bereich schlau machen.

    Die Alternative wäre wohl, die 2 oder 3 häufigsten Kombinationen von Audiostreams zu pre-mixen und als einen einzigen Stream anzubieten.

    Rolf

    --
    sumpsi - posui - obstruxi

    1. O-Ton: (...) seeking and pausing becomes a real pain in the ass ↩︎

    1. problematische Seite

      Hallo Rolf,

      danke für die Quelle. Habe ich was überhört oder ist diese Web Audio API gar nicht hörbar?

      Linuchs

  2. problematische Seite

    Hi there,

    ein sehr spezielles Thema, das aber in den letzten zwei Wochen doch Interesse fand.

    das auch schon erschöpfend beantwortet wurde.

    Hat jemand eine Idee, warum der laufende audio-currentTime nicht exakt am Sound hängt?

    ich wiederhole es gerne, wenn auch diesmal weniger ausführlich:

    das was Du da möchtest funktioniert mit dem audio-Element nicht, weil erstens die zeitliche Auflösung für das was Du vorhast nicht gut genug ist und zweitens ein Browser nicht einmal annähernd ein "Realtime"-Objekt ist; das bedeutet, daß der Browser immer im Hintergrund irgendwelche Dinge erledigt und abarbeitet, die ihm wichtiger sind als Dein audio-Element und somit nie garantiert ist, daß zwei oder gar mehr Audio-Spuren synchron laufen. Das funktioniert eben umgekehrt auch nicht - wenn man den Zeitstempel eines Audio-Objekts mit currentTime ausliest, dann bekommt man idR nur einen Wert zurück, der nach meiner Erfahrung nach um eine halbe Sekunde herum schwanken kann. Und das ist für Synchronizität zweier Musikstimmen oder was auch immer bei weitem nicht exakt genug.

    Ohne Plugins oder ähnliche Technik (RolfB hat Dir ja schon einen möglich Weg gezeigt) wirst Du Dein Problem nicht lösen können, auch und besonders nicht, wenn Du es in zwei oder drei Wochen wieder hier posten wirst...