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:

EventTarget AudioNode

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

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

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

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

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 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).

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

BCD tables only load in the browser

Siehe auch