Zum Inhalt springen

Web Audio API

aus Wikipedia, der freien Enzyklopädie

Die Web Audio API ist eine in JavaScript verfasste API zum Erzeugen und Bearbeiten von Audiosignalen in Webapplikationen. Der Standard wird von einer Arbeitsgruppe des W3C entwickelt und kommt beispielsweise in Browserspielen zum Einsatz. Sie kann als Audio-Analogon zum Canvas-Element gesehen werden.

Funktionsweise[Bearbeiten]

Audiosignale werden durch einen mittels Programmcode spezifizierten Graphen (AudioContext) geleitet, in dem jeder Knoten (AudioNode) einen Bearbeitungsschritt repräsentiert und mit anderen Knoten verbunden ist. Es gibt einen Ausgabeknoten, der die Daten je nach Art des Kontexts an die Audioausgabe des Systems, also beispielsweise den Lautsprecher weiterleitet oder als Binärdaten speichert. Eingabeknoten können ein Audiosignal durch einen Oszillator produzieren oder diese aus anderen Quellen beziehen. Dies können Audiodateien sein, ein angeschlossenes Mikrofon oder WebRTC-Verbindungen. Schließlich gibt es Knoten, die Audiosignale bearbeiten. Hier reicht die Palette von einfachen Manipulationen der Lautstärke über die Anwendung verschiedener Filter bis hin zur Möglichkeit, den Raumklang (einschließlich Doppler-Effekt) für beliebige Positionen und Bewegungen des Zuhörers neu zu berechnen.<ref>Web audio spatialization basics. In: MDN Web Docs. Abgerufen am 5. September 2016 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Mehrere Tonkanäle werden dabei automatisch angepasst, sofern Quelle und Ziel unterschiedliche Anordnungen verwenden, sie können aber auch über eigene Knoten bearbeitet werden. Es gibt auch Knoten, die das Audiosignal unverändert lassen, aber zur Analyse eine schnelle Fourier-Transformation durchführen.<ref>Visualizations with Web Audio API. In: MDN Web Docs. Abgerufen am 5. September 2016 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Bei der Verknüpfung der Knoten sind Schleifen zulässig, sofern einer der enthaltenen Knoten die Ausgabe verzögert. Die Knoten besitzen Parameter, die das genaue Verhalten beschreiben und während der Verarbeitung auch geändert werden können.

Die eigentliche Signalverarbeitung findet hauptsächlich in der zugrundeliegenden Implementation der API statt, jedoch ist auch direkte Bearbeitung in JavaScript möglich.<ref>Vorlage:Cite book/NameVorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Web Audio API.] W3C, , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 4. Juli 2012.  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/dvcs.w3.orgVorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref>

Beispiel[Bearbeiten]

Gezeigt werden drei Rechtecke, beschriftet mit „Oscillator“, „Gain“ und „AudioDestination“ und in dieser Reihenfolge durch Pfeile verbunden. Das erste Rechteck ist ausgewählt, in der rechten Hälfte sind seine Eigenschaften eingeblendet: „type: sine, frequency: 2500, detune: 0“.
Grafische Darstellung der AudioNodes des Beispiels in der Debug-Ansicht in Firefox

Das folgende Beispiel erzeugt einen Sinuston.<ref>Using the Web Audio API. In: MDN Web Docs. Abgerufen am 5. September 2016 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> <syntaxhighlight lang="javascript"> //AudioContext erzeugen var audioCtx = new AudioContext();

//AudioNodes erzeugen var oscillatorNode = audioCtx.createOscillator(); var gainNode = audioCtx.createGain();

//AudioNodes verbinden oscillatorNode.connect(gainNode); gainNode.connect(audioCtx.destination);

//AudioNodes konfigurieren oscillatorNode.type = 'sine'; oscillatorNode.frequency.value = 2500; gainNode.gain.value = 0.5;

//Ausgabe starten oscillatorNode.start(); </syntaxhighlight>

Durch eine dynamische Anpassung von oscillatorNode.frequency.value (der Frequenz in Hertz) und gainNode.gain.value (der relativen Lautstärke) können so einfache Melodien erzeugt werden.

Browserunterstützung[Bearbeiten]

Die Web Audio API wird von allen wichtigen aktuellen Browsern unterstützt: Mozilla Firefox ab Version 25, Google Chrome ab Version 14 (bis Version 33 nur mit webkit-Präfix), Microsoft Edge, Opera ab Version 15 (ab Version 22 ohne Präfix) und Safari ab Version 6 (mit Präfix). Auch die meisten mobilen Browser unterstützen die API.<ref>Can I use: Web Audio API. Abgerufen am 5. September 2016.</ref><ref>Unprefixed Web Audio API - Chrome Platform Status. Abgerufen am 5. September 2016.</ref>

Da sich die Spezifikation aber noch in Entwicklung befindet, variiert der Grad der Unterstützung zwischen den verschiedenen Browsern und zwischen unterschiedlichen Version der Browser. Ebenfalls unterschiedlich ist die Performance<ref>Soledad Penadés: What’s new in Web Audio? In: Mozilla Hacks. 15. August 2016, abgerufen am 5. September 2016 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> und die Debugging-Möglichkeiten.<ref>Web Audio Editor. In: MDN Web Docs. Abgerufen am 5. September 2016 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Für ältere Browser gibt es Polyfills, die über Flash oder eine ältere API in Firefox funktionieren.<ref>g200kg: WAAPISim. In: GitHub. Abgerufen am 6. September 2016.</ref>

Einzelnachweise[Bearbeiten]

<references />

Weblinks[Bearbeiten]