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:

EventTarget AudioNode

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 Wert 0 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 Wert 0.

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

AudioNodes, die an einem AudioContext teilnehmen, erstellen einen 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.

js
// constructor
const analyserNode = new AnalyserNode(audioCtx, {
  fftSize: 2048,
  maxDecibels: -25,
  minDecibels: -60,
  smoothingTimeConstant: 0.5,
});
js
// 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).

js
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

Siehe auch