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.
* Some parts of this feature may have varying levels of support.
Die AudioNode
-Schnittstelle ist eine generische Schnittstelle zur Darstellung eines Audiomoduls zur Verarbeitung.
Beispiele umfassen:
- eine Audioquelle (z.B. ein HTML-
<audio>
- oder<video>
-Element, einOscillatorNode
, etc.), - das Audioziel,
- ein Zwischenverarbeitungsmodul (z.B. ein Filter wie
BiquadFilterNode
oderConvolverNode
), oder - Lautstärkeregelung (wie
GainNode
)
Hinweis:
Ein AudioNode
kann Ziel von Ereignissen sein, daher implementiert es die EventTarget
-Schnittstelle.
Instanz-Eigenschaften
AudioNode.context
Schreibgeschützt-
Gibt den zugehörigen
BaseAudioContext
zurück, das heißt das Objekt, das den Verarbeitungsgraphen darstellt, an dem der Knoten beteiligt ist. AudioNode.numberOfInputs
Schreibgeschützt-
Gibt die Anzahl der Eingänge zurück, die den Knoten speisen. Quellknoten sind definiert als Knoten, die eine
numberOfInputs
-Eigenschaft mit dem Wert0
haben. AudioNode.numberOfOutputs
Schreibgeschützt-
Gibt die Anzahl der Ausgänge zurück, die aus dem Knoten kommen. Zielknoten — wie
AudioDestinationNode
— haben für dieses Attribut den Wert0
. AudioNode.channelCount
-
Repräsentiert eine Ganzzahl, die verwendet wird, um zu bestimmen, wie viele Kanäle beim Up-Mixing und Down-Mixing von Verbindungen zu Eingängen des Knotens verwendet werden. Seine Verwendung und genaue Definition hängt 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 wird definieren, wie Audio Up-Mixing und Down-Mixing erfolgen wird. Die möglichen Werte sind
"speakers"
oder"discrete"
.
Instanz-Methoden
Implementiert auch Methoden der Schnittstelle EventTarget
.
AudioNode.connect()
-
Ermöglicht uns, den Ausgang dieses Knotens als Eingang in einen anderen Knoten zu verbinden, entweder als Audiodaten oder als Wert eines
AudioParam
. AudioNode.disconnect()
-
Ermöglicht uns, den aktuellen Knoten von einem anderen zu trennen, mit dem er bereits verbunden ist.
Beschreibung
Der Audio-Routing-Graph
Jeder AudioNode
hat Eingänge und Ausgänge, und mehrere Audioknoten sind miteinander verbunden, um einen Verarbeitungsgraphen zu bilden. Dieser Graph ist in einem AudioContext
enthalten, und jeder Audioknoten kann nur zu einem Audiokontext gehören.
Ein Quellknoten hat keine Eingänge, aber einen oder mehrere Ausgänge und kann verwendet werden, um Ton zu erzeugen. Andererseits hat ein Zielknoten keine Ausgänge; stattdessen werden alle seine Eingänge direkt auf den Lautsprechern abgespielt (oder welchem Audioausgabegerät auch immer der Audiokontext verwendet). Zusätzlich 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 audiospezifische Verarbeitung durch und generiert neue Werte für seine Ausgänge oder lässt das Audio passieren (zum Beispiel im AnalyserNode
, wo das Ergebnis der Verarbeitung separat abgerufen wird).
Je mehr Knoten in einem Graphen, desto höher die Latenz. Zum Beispiel, wenn Ihr Graph eine Latenz von 500 ms hat, wird es eine halbe Sekunde dauern, bis ein Ton, der vom Quellknoten abgespielt wird, auf Ihren Lautsprechern zu hören ist (oder sogar länger aufgrund der Latenz im zugrunde liegenden Audiogerät). Daher sollten Sie, wenn Sie interaktives Audio benötigen, den Graphen so klein wie möglich halten und benutzerkontrollierte Audioknoten am Ende eines Graphen platzieren. Beispielsweise sollte eine Lautstärkeregelung (GainNode
) der letzte Knoten sein, damit Lautstärkeänderungen sofort wirksam werden.
Jeder Eingang und Ausgang hat eine bestimmte Anzahl von 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 bei Bedarf up-mixen oder down-mixen; überprüfen Sie die Web Audio-Spezifikation für Details.
Für eine Liste aller Audioknoten, siehe die Web Audio API Startseite.
Erstellen eines AudioNode
Es gibt zwei Möglichkeiten, ein AudioNode
zu erstellen: über den Konstruktor und über die Fabrikwesensmethode.
// 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 Fabrikwesensmethoden zu verwenden, oder beide zu mischen, jedoch gibt es Vorteile bei der Verwendung der Konstruktoren:
- Alle Parameter können während der Konstruktion gesetzt werden und müssen nicht einzeln gesetzt werden.
- Sie können einen Audio-Knoten unterklassen. Während die eigentliche Verarbeitung intern durch den Browser erfolgt und nicht geändert werden kann, könnten Sie eine Wrapper-Klasse um einen Audio-Knoten schreiben, um benutzerdefinierte Eigenschaften und Methoden bereitzustellen.
- Leicht bessere Leistung: In sowohl Chrome als auch Firefox rufen die Fabrikwesensmethoden intern die Konstruktoren auf.
Kurzgeschichte: Die erste Version der Web Audio-Spezifikation definierte nur die Fabrikwesensmethoden. Nach einer Designüberprüfung im Oktober 2013 wurde entschieden, Konstruktoren hinzuzufügen, da sie zahlreiche Vorteile gegenüber den Fabrikwesensmethoden haben. Die Konstruktoren wurden von August bis Oktober 2016 zur Spezifikation hinzugefügt. Fabrikwesensmethoden sind weiterhin in der Spezifikation enthalten und sind nicht veraltet.
Beispiel
Dieses einfache Code-Snippet zeigt die Erstellung einiger Audioknoten und wie die AudioNode
-Eigenschaften und -Methoden verwendet werden können. Sie können Beispiele für solche Anwendungen auf der Web Audio API Startseite finden (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 |