AudioNode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
Das AudioNode
-Interface ist ein generisches Interface zur Darstellung eines Audiobearbeitungsmoduls.
Beispiele umfassen:
- eine Audioquelle (z.B. ein HTML-
<audio>
- oder<video>
-Element, einOscillatorNode
, etc.), - das Audioziel,
- ein intermediäres Bearbeitungsmodul (z.B. ein Filter wie
BiquadFilterNode
oderConvolverNode
), oder - Lautstärkeregelung (wie
GainNode
)
Hinweis: Ein AudioNode
kann Ziel von Ereignissen sein, daher implementiert es das EventTarget
-Interface.
Instanz-Eigenschaften
AudioNode.context
Nur lesbar-
Gibt den zugeordneten
BaseAudioContext
zurück, das Objekt, das das Verarbeitungsgraf darstellt, an dem der Knoten beteiligt ist. AudioNode.numberOfInputs
Nur lesbar-
Gibt die Anzahl der Eingänge zurück, die den Knoten speisen. Quellknoten sind definiert als Knoten mit einer
numberOfInputs
-Eigenschaft mit einem Wert von0
. AudioNode.numberOfOutputs
Nur lesbar-
Gibt die Anzahl der Ausgänge zurück, die aus dem Knoten kommen. Zielknoten — wie
AudioDestinationNode
— haben für dieses Attribut einen Wert von0
. AudioNode.channelCount
-
Repräsentiert eine Ganzzahl, die verwendet wird, um zu bestimmen, wie viele Kanäle beim Up-Mixing and Down-Mixing von Verbindungen zu irgendeinem Eingang des Knotens verwendet werden. Die Verwendung und genaue Definition hängen vom Wert von
AudioNode.channelCountMode
ab. AudioNode.channelCountMode
-
Repräsentiert einen enumerierten Wert, der beschreibt, wie Kanäle zwischen den Eingängen und Ausgängen des Knotens abgeglichen werden müssen.
AudioNode.channelInterpretation
-
Repräsentiert einen enumerierten Wert, der die Bedeutung der Kanäle beschreibt. Diese Interpretation definiert, wie das Audio Up-Mixing und Down-Mixing erfolgen wird. Die möglichen Werte sind
"speakers"
oder"discrete"
.
Instanz-Methoden
Implementiert auch Methoden aus dem Interface EventTarget
.
AudioNode.connect()
-
Ermöglicht es, den Ausgang dieses Knotens als Eingang in einen anderen Knoten zu verbinden, entweder als Audiodaten oder als Wert eines
AudioParam
. AudioNode.disconnect()
-
Ermöglicht es, den aktuellen Knoten von einem anderen, zu dem er bereits verbunden ist, zu trennen.
Beschreibung
Das Audio-Routing-Graf
Jedes AudioNode
hat Eingänge und Ausgänge, und mehrere Audio-Knoten sind verbunden, um ein Verarbeitungsgraf zu erstellen. Dieser Graf ist in einem AudioContext
enthalten, und jeder Audio-Knoten kann nur zu einem Audiokontext gehören.
Ein Quellknoten hat keine Eingänge, aber einen oder mehrere Ausgänge und kann zur Tonerzeugung verwendet werden. Andererseits hat ein Zielknoten keine Ausgänge; stattdessen werden alle seine Eingänge direkt über die Lautsprecher (oder welches Audiogerät auch immer der Audiokontext verwendet) wiedergegeben. Darüber hinaus gibt es Verarbeitungsknoten, die Eingänge und Ausgänge haben. Die genaue Verarbeitung variiert von einem AudioNode
zum anderen, aber im Allgemeinen liest ein Knoten seine Eingänge, führt eine audio-bezogene Verarbeitung durch und erzeugt neue Werte für seine Ausgänge oder lässt das Audio passieren (zum Beispiel im AnalyserNode
, bei dem das Ergebnis der Verarbeitung separat zugänglich ist).
Je mehr Knoten im Graf sind, desto höher wird die Latenz sein. Zum Beispiel, wenn Ihr Graf eine Latenz von 500ms hat, wird es eine halbe Sekunde dauern, bis ein Ton, der vom Quellknoten gespielt wird, über Ihre Lautsprecher zu hören ist (oder noch länger wegen der Latenz im zugrunde liegenden Audiogerät). Daher, wenn Sie interaktives Audio benötigen, halten Sie den Graf soweit wie möglich klein und setzen Sie benutzergesteuerte Audioknoten am Ende eines Grafen. Zum Beispiel sollte eine Lautstärkeregelung (GainNode
) der letzte Knoten sein, damit Lautstärkeänderungen sofort wirksam werden.
Jeder Eingang und Ausgang hat eine bestimmte Anzahl an Kanälen. Zum Beispiel hat Mono-Audio einen Kanal, während Stereo-Audio zwei Kanäle hat. Die Web Audio API wird die Anzahl der Kanäle nach Bedarf erhöhen oder verringern; Einzelheiten finden Sie in der Spezifikation der Web Audio API.
Für eine Liste aller Audionoden siehe die Web Audio API-Homepage.
Erstellen eines AudioNode
Es gibt zwei Möglichkeiten, ein AudioNode
zu erstellen: über den Konstruktor und über die Factory-Methode.
// constructor
const analyserNode = new AnalyserNode(audioCtx, {
fftSize: 2048,
maxDecibels: -25,
minDecibels: -60,
smoothingTimeConstant: 0.5,
});
// factory method
const analyserNode = audioCtx.createAnalyser();
analyserNode.fftSize = 2048;
analyserNode.maxDecibels = -25;
analyserNode.minDecibels = -60;
analyserNode.smoothingTimeConstant = 0.5;
Sie sind frei, entweder Konstruktoren oder Factory-Methoden zu verwenden oder beide zu mischen, jedoch gibt es Vorteile bei der Verwendung der Konstruktoren:
- Alle Parameter können während der Konstruktion festgelegt werden und müssen nicht einzeln gesetzt werden.
- Sie können einen Audioknoten unterklassen. Zwar wird die eigentliche Verarbeitung intern vom Browser durchgeführt und kann nicht verändert werden, jedoch können Sie einen Wrapper um einen Audioknoten schreiben, um benutzerdefinierte Eigenschaften und Methoden bereitzustellen.
- Etwas bessere Leistung: Sowohl in Chrome als auch Firefox rufen die Factory-Methoden intern die Konstruktoren auf.
Kurze Historie: Die erste Version der Web Audio-Spezifikation definierte nur die Factory-Methoden. Nach einer Designüberprüfung im Oktober 2013 wurde beschlossen, Konstruktoren hinzuzufügen, da sie zahlreiche Vorteile gegenüber Factory-Methoden bieten. Die Konstruktoren wurden von August bis Oktober 2016 in die Spezifikation aufgenommen. Factory-Methoden sind weiterhin in der Spezifikation enthalten und nicht veraltet.
Beispiel
Dieses einfache Code-Snippet zeigt die Erstellung einiger Audionoden und wie die AudioNode
-Eigenschaften und -Methoden verwendet werden können. Beispiele für solche Anwendungen finden Sie in den auf der Web Audio API-Hauptseite verlinkten Beispielen (zum Beispiel Violent Theremin).
const audioCtx = new AudioContext();
const oscillator = new OscillatorNode(audioCtx);
const gainNode = new GainNode(audioCtx);
oscillator.connect(gainNode).connect(audioCtx.destination);
oscillator.context;
oscillator.numberOfInputs;
oscillator.numberOfOutputs;
oscillator.channelCount;
Spezifikationen
Specification |
---|
Web Audio API # AudioNode |
Browser-Kompatibilität
BCD tables only load in the browser