Offline / Non-Realtime Rendering mit der Web Audio API

8

Das Problem

Ich arbeite an einer Webanwendung, bei der Benutzer Audio-Samples 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 des gerenderten Audios jeder Muster-Server-Seite vornehmen. Dies lässt mir zwei Optionen, soweit ich sehen kann:

  1. Lassen Sie meinen eigenen Rendering-Code serverseitig laufen und versuchen Sie so, wie möglich dem In-Browser-Rendering zu folgen. Vielleicht könnte ich sogar den Web-Audio-Code aus dem Chromium-Projekt herausziehen und modifizieren, aber das scheint viel Arbeit zu sein.

  2. Machen Sie das Rendern clientseitig, hoffentlich schneller als in Echtzeit, und senden Sie dann das gerenderte Audio an den Server. Dies ist ideal (und DRY), da nur eine Engine für das Pattern-Rendering verwendet wird.

Die mögliche Lösung

Diese Frage führte mich zu dieses Codebeispiel im Chromium-Repository , das darauf hinweist, dass eine Offline-Verarbeitung möglich ist. Der Trick scheint darin zu bestehen, ein webkitAudioContext mit einigen Argumenten zu konstruieren (normalerweise wird ein Zero-Argument-Konstruktor verwendet). Das Folgende sind meine Vermutungen, was die Parameter bedeuten:

%Vor%

Ich habe die Probe leicht angepasst und in Chrome 23.0.1271.91 unter Windows, Mac und Linux getestet. Hier ist das Live-Beispiel und die Ergebnisse (öffnen Sie die Dev Tools Javascript Console, um zu sehen, was passiert):

  • Mac - Es funktioniert !!
  • Windows - FEHLER - SYNTAX_ERR: DOM-Ausnahme 12
  • Linux - FEHLER - SYNTAX_ERR: DOM-Ausnahme 12

Der oben beschriebene webkitAudioContext -Konstruktor verursacht die Ausnahme unter Windows und Linux.

Meine Frage

Offline-Rendering wäre perfekt für das, was ich versuche zu tun, aber ich kann nirgends Dokumentation finden, und die Unterstützung ist weniger als ideal. Hat jemand mehr Informationen dazu? Sollte ich bald Unterstützung in Windows und / oder Linux erwarten, oder sollte ich erwarten, dass bald auf dem Mac verschwinden wird?

    
John Vinyard 27.11.2012, 18:48
quelle

1 Antwort

3

Ich habe vor ein paar Monaten etwas darüber recherchiert, und es gibt eine startRendering-Funktion auf dem audioContext, aber ich wurde von Google-Leuten darauf hingewiesen, dass die Implementierung zu dieser Zeit geändert werden sollte. Ich glaube nicht, dass das schon passiert ist, und es ist immer noch kein Teil der offiziellen Dokumentation, also würde ich vorsichtig sein, eine App zu bauen, die davon abhängt.

Die aktuelle Implementierung ist auch nicht schneller als in Echtzeit (vielleicht leicht in sehr hellen Anwendungen) und manchmal sogar langsamer als in Echtzeit.

Am besten schlagen Sie die Gräben und implementieren die Web-Audio-Server-Seite, wenn Sie nicht-Echtzeit-Rendering benötigen. Wenn Sie mit Echtzeit-Rendering leben könnten, gibt es unter Ссылка ein Projekt, das von Interesse sein könnte.

Bitte beachten Sie, dass ich selbst kein Googler bin, und was mir gesagt wurde, war in keiner Weise ein Versprechen.

    
Oskar Eriksson 28.11.2012, 08:40
quelle