Offline- / Nicht-Echtzeit-Rendering mit der Web-Audio-API
Ich arbeite an einer Webanwendung, in der Benutzer Audiobeispiele sequenzieren und optional Effekte auf die Musikmuster anwenden können, die sie mit der Web-Audio-API erstellen. Die Muster werden als JSON-Daten gespeichert, und ich möchte eine Analyse der gerenderten Audiodaten der einzelnen Pattern-Server durchführen. Dies lässt mir zwei Möglichkeiten, soweit ich sehen kann:
Führen Sie meinen eigenen Rendering-Code serverseitig aus und versuchen Sie, ihn so originalgetreu wie möglich für das Rendering im Browser zu gestalten. Vielleicht könnte ich sogar den Web-Audio-Code aus dem Chromium-Projekt ziehen und ihn ändern, aber dies scheint möglicherweise eine Menge Arbeit zu bedeuten.
Machen Sie das Rendering clientseitig, hoffentlich schneller als in Echtzeit, und senden Sie das gerenderte Audio an den Server. Dies ist ideal (und DRY), da nur eine Engine für die Musterwiedergabe verwendet wird.
DasMöglich LösungDiese Frage führe mich zuDieses Codebeispiel im Chromium-RepositoryDies scheint darauf hinzudeuten, dass eine Offline-Verarbeitung möglich ist. Der Trick scheint zu sein, a zu konstruierenwebkitAudioContext
mit einigen Argumenten (normalerweise wird ein Konstruktor mit Nullargumenten verwendet). Das Folgende sind meine Vermutungen, was die Parameter bedeuten:
new webkitAudioContext(2, // channels
10 * 44100, // length in samples
44100); // sample rate
Ich habe das Beispiel leicht angepasst und es in Chrome 23.0.1271.91 unter Windows, Mac und Linux getestet.Hier ist das Live-Beispielund die Ergebnisse (öffne die Dev Tools Javascript-Konsole, um zu sehen, was passiert):
Mac -Es klappt!!Windows -SCHEITERN - SYNTAX_ERR: DOM-Ausnahme 12Linux -SCHEITERN - SYNTAX_ERR: DOM-Ausnahme 12DaswebkitAudioContext
Der oben beschriebene Konstruktor verursacht die Ausnahme unter Windows und Linux.
Offline-Rendering wäreperfekt für das, was ich versuche, aber ich kann nirgendwo Dokumentation finden, und die Unterstützung ist nicht ideal. Hat jemand mehr Informationen dazu? Sollte ich bald Unterstützung für Windows und / oder Linux erwarten, oder sollte ich Unterstützung für erwartenverschwinden bald auf dem Mac?