AudioNode: connect() Methode

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.

Die connect() Methode der AudioNode Schnittstelle ermöglicht es Ihnen, einen der Ausgänge des Knotens mit einem Ziel zu verbinden, das entweder ein anderer AudioNode (und damit die Audiodaten an den angegebenen Knoten leitet) oder ein AudioParam sein kann, sodass die Ausgabedaten des Knotens automatisch verwendet werden, um den Wert dieses Parameters im Laufe der Zeit zu ändern.

Syntax

js
connect(destination)
connect(destination, outputIndex)
connect(destination, outputIndex, inputIndex)

Parameter

destination

Der AudioNode oder AudioParam, mit dem verbunden werden soll.

outputIndex Optional

Ein Index, der angibt, welcher Ausgang des aktuellen AudioNode mit dem Ziel verbunden werden soll. Die Indexnummern sind entsprechend der Anzahl der Ausgangskanäle definiert (siehe Audiokanäle). Während Sie einen gegebenen Ausgang nur einmal mit einem gegebenen Eingang verbinden können (wiederholte Versuche werden ignoriert), können Sie einen Ausgang mit mehreren Eingängen verbinden, indem Sie connect() wiederholt aufrufen. Dies macht Fan-out möglich. Der Standardwert ist 0.

inputIndex Optional

Ein Index, der beschreibt, welcher Eingang des Ziels mit dem aktuellen AudioNode verbunden werden soll; der Standardwert ist 0. Die Indexnummern sind entsprechend der Anzahl der Eingangskanäle definiert (siehe Audiokanäle). Es ist möglich, einen AudioNode mit einem anderen AudioNode zu verbinden, der wiederum zurück zu dem ersten AudioNode verbindet, wodurch ein Zyklus entsteht.

Rückgabewert

Wenn das Ziel ein Knoten ist, gibt connect() eine Referenz auf das Ziel-AudioNode-Objekt zurück, wodurch Sie mehrere connect()-Aufrufe verketten können. In einigen Browsern geben ältere Implementierungen dieser Schnittstelle undefined zurück.

Wenn das Ziel ein AudioParam ist, gibt connect() undefined zurück.

Ausnahmen

IndexSizeError DOMException

Wird ausgelöst, wenn der als outputIndex oder inputIndex angegebene Wert nicht einem vorhandenen Eingang oder Ausgang entspricht.

InvalidAccessError DOMException

Wird ausgelöst, wenn der Zielknoten nicht Teil desselben Audiokontexts wie der Quellknoten ist.

NotSupportedError DOMException

Wird ausgelöst, wenn die angegebene Verbindung einen Zyklus erzeugen würde (in dem das Audio wiederholt durch dieselben Knoten zurückläuft) und es keine DelayNode Objekte im Zyklus gibt, um zu verhindern, dass die resultierende Wellenform in der unendlichen Konstruktion desselben Audioframes stecken bleibt. Wird auch ausgelöst, wenn der inputIndex Parameter verwendet wird, während das Ziel ein AudioParam ist.

Beispiele

Verbindung zu einem Audioeingang

Die offensichtlichste Verwendung der connect() Methode besteht darin, die Audioausgabe von einem Knoten in den Audioeingang eines anderen Knotens zur weiteren Verarbeitung zu leiten. Zum Beispiel könnten Sie das Audio von einem MediaElementAudioSourceNode—das heißt, das Audio von einem HTML-Medienelement wie <audio>—durch einen Bandpassfilter führen, der mit einem BiquadFilterNode implementiert wird, um Geräusche zu reduzieren, bevor das Audio dann an die Lautsprecher gesendet wird.

Dieses Beispiel erstellt einen Oszillator und verknüpft ihn mit einem Verstärkungsknoten, sodass der Verstärkungsknoten die Lautstärke des Oszillatorknotens steuert.

js
const audioCtx = new AudioContext();

const oscillator = audioCtx.createOscillator();
const gainNode = audioCtx.createGain();

oscillator.connect(gainNode);
gainNode.connect(audioCtx.destination);

AudioParam-Beispiel

In diesem Beispiel werden wir den Verstärkungswert eines GainNode mit einem OscillatorNode mit einer langsamen Frequenz ändern. Diese Technik ist bekannt als eine LFO-kontrollierte Parameter.

js
const audioCtx = new AudioContext();

// create an normal oscillator to make sound
const oscillator = audioCtx.createOscillator();

// create a second oscillator that will be used as an LFO (Low-frequency
// oscillator), and will control a parameter
const lfo = audioCtx.createOscillator();

// set the frequency of the second oscillator to a low number
lfo.frequency.value = 2.0; // 2Hz: two oscillations per second

// create a gain whose gain AudioParam will be controlled by the LFO
const gain = audioCtx.createGain();

// connect the LFO to the gain AudioParam. This means the value of the LFO
// will not produce any audio, but will change the value of the gain instead
lfo.connect(gain.gain);

// connect the oscillator that will produce audio to the gain
oscillator.connect(gain);

// connect the gain to the destination so we hear sound
gain.connect(audioCtx.destination);

// start the oscillator that will produce audio
oscillator.start();

// start the oscillator that will modify the gain value
lfo.start();

AudioParam Hinweise

Es ist möglich, einen AudioNode Ausgang mit mehr als einem AudioParam zu verbinden, und mehr als einen AudioNode Ausgang mit einem einzigen AudioParam zu verbinden, mit mehreren Aufrufen von connect(). Fan-in und Fan-out werden daher unterstützt.

Ein AudioParam nimmt die gerenderten Audiodaten von jedem verbundenen AudioNode Ausgang und konvertiert sie durch Down-Mixing in Mono (falls sie nicht bereits Mono sind). Anschließend wird es mit allen anderen solchen Ausgängen und dem intrinsischen Parameterwert (dem Wert, den das AudioParam normalerweise ohne Audioverbindungen hätte), einschließlich aller für den Parameter geplanten Zeitlinienänderungen, zusammengeführt.

Daher ist es möglich, den Bereich zu wählen, in dem sich ein AudioParam ändern wird, indem man den Wert des AudioParam auf die zentrale Frequenz setzt und einen GainNode zwischen der Audioquelle und dem AudioParam verwendet, um den Bereich der AudioParam-Änderungen anzupassen.

Spezifikationen

Specification
Web Audio API
# dom-audionode-connect
Web Audio API
# dom-audionode-connect-destinationparam-output

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch