<audio> auf verschiedenen Rechnern synchronisieren
Linuchs
- browser
- medien
Moin,
ich möchte ausprobieren, ob mehrere Rechner (Slaves) per Internet mit einem Master so gesteuert werden können, dass Audio-Dateien synchron laufen.
Zweck der Übung: Mehrkanal-Ton verteilt im Raum mit Tablets / Smartphones. Also spontan ohne technische Installation. Ein aktiver (bluetooth-)Lautsprecher pro Kanal darf sein.
A) Ein Master-Slave-Konzept für Chöre ist funktionsfähig, aber noch nicht auf Massentauglichkeit / Belastbarkeit getestet. Geht seit zwei Jahren leider nicht wegen Corona.
Prinzip:
Das ist nun nicht simultan, aber in einer vertretbar kurzen Zeit von ein bis zwei Sekunden, jedenfalls in meiner Testumgebung.
B) Mehrspurigkeit ist getestet, allerdings nur jeweils auf einer Webseite. Ich kann zwar vier Spuren in der Lautstärke getrennt regeln, aber jedes Gerät hat nur zwei Audio-Ausgänge rechts/links und (m)ein Bluetooth-Lautsprecher hat die so dicht nebeneinander, dass kein Raumklang ertönt. Auch wenn die Spuren schon mit rechts / mitte / links vorbereitet sind.
Frage:
Welche Technik ist vonnöten, damit ein Startsignal, das über den Server läuft, zeitgleich bei allen Slaves ankommt? Ein minimaler Zeitverzug führt zu Hall, ein größerer zum Echo.
Die Sekunden-Ajax-Abfrage ist zu grob und die vielen unnötigen Abfragen belasten den Server.
Vielleicht gibt es auch lokale Alternativen, mir ist aber nicht bekannt, dass eine Webseite optische oder Bluetooth-Signale senden und empfangen kann.
Bin gespannt auf Vorschläge.
Gruß, Linuchs
Guten Abend,
ich möchte ausprobieren, ob mehrere Rechner (Slaves) per Internet mit einem Master so gesteuert werden können, dass Audio-Dateien synchron laufen.
möglich ist das sicher, aber sicher nicht auf der Basis von HTTP, weil HTTP per se überhaupt keinen Zeitbezug hat. Die Information kann beim Client in 70ms ankommen, aber ebensogut erst in 26 Sekunden, je nach Verbindungsqualität, Traffic, Rechnerauslastung.
Welche Technik ist vonnöten, damit ein Startsignal, das über den Server läuft, zeitgleich bei allen Slaves ankommt? Ein minimaler Zeitverzug führt zu Hall, ein größerer zum Echo.
Du brauchst ein Protokoll, das von sich aus Echtzeitfähigkeit mitbringt, zum Beispiel RTSP. Die in den Browsern integrierten Player können das größtenteils, aber du brauchst einen RTSP-Server auf deinem zentralen Gerät, das alles koordinieren soll.
Immer eine Handbreit Wasser unterm Kiel
Martin
Hallo Martin,
eine Alternative, die ich mir vorstellen kann, ist eine Synchronisierung der Clients mittels NTP auf einen einheitlichen Timestamp. Wenn man kein NTP hat, könnte man auch mittels Ajax einen Server-Timestamp beschaffen und die Differenz zur Systemzeit bestimmen.
Ein billiger NTP Nachbau wäre ein Ajax-Request "GetTime". Man misst die Roundtrip-Zeit und zieht deren halben Wert von gelieferten Serverzeitpunkt ab, damit hat man eine Näherung an die echte Serverzeit. Entscheidend ist nur, dass es serverseitig nicht zu Queueing kommt, damit keine Queue-Wartezeit die Messung der Roundtrip-Zeit stört. Ggf. macht man die Requests mehrfach und verwendet den mit der kürzesten Roundtrip-Zeit.
Nach der Zeitsynchronisierung könnte man eine Startzeit vorgeben, zu der alle Clients gleichzeitig loslegen. Ist kein Realtime, kommt aber nahe.
Rolf
Hallo Rolf,
eine Alternative, die ich mir vorstellen kann, ist eine Synchronisierung der Clients mittels NTP auf einen einheitlichen Timestamp. Wenn man kein NTP hat, könnte man auch mittels Ajax einen Server-Timestamp beschaffen und die Differenz zur Systemzeit bestimmen.
ja, vielleicht "funktioniert das irgendwie", aber es kommt mir vor, als wollte man ein Steak grillen, indem man es mit einem Bunsenbrenner röstet. Kann funktionieren, kann aber auch ganz schnell übers Ziel hinausschießen oder nur partiell die Oberfläche verbrennen, während das Innere noch roh bleibt.
Ein billiger NTP Nachbau wäre ein Ajax-Request "GetTime". Man misst die Roundtrip-Zeit und zieht deren halben Wert von gelieferten Serverzeitpunkt ab, damit hat man eine Näherung an die echte Serverzeit. Entscheidend ist nur, dass es serverseitig nicht zu Queueing kommt, damit keine Queue-Wartezeit die Messung der Roundtrip-Zeit stört. Ggf. macht man die Requests mehrfach und verwendet den mit der kürzesten Roundtrip-Zeit.
Man kann sich oft irgendwie mit Krücken helfen - aber ist das immer sinnvoll?
Nach der Zeitsynchronisierung könnte man eine Startzeit vorgeben, zu der alle Clients gleichzeitig loslegen. Ist kein Realtime, kommt aber nahe.
Aber die Reaktion auf spontane Ereignisse ist dann auch wieder Murx.
Immer eine Handbreit Wasser unterm Kiel
Martin