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 Juli 2015.
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
connect(destination)
connect(destination, outputIndex)
connect(destination, outputIndex, inputIndex)
Parameter
destination-
Der
AudioNodeoderAudioParam, mit dem verbunden werden soll. outputIndexOptional-
Ein Index, der angibt, welcher Ausgang des aktuellen
AudioNodemit 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 Sieconnect()wiederholt aufrufen. Dies macht Fan-out möglich. Der Standardwert ist 0. inputIndexOptional-
Ein Index, der beschreibt, welcher Eingang des Ziels mit dem aktuellen
AudioNodeverbunden werden soll; der Standardwert ist 0. Die Indexnummern sind entsprechend der Anzahl der Eingangskanäle definiert (siehe Audiokanäle). Es ist möglich, einenAudioNodemit einem anderenAudioNodezu verbinden, der wiederum zurück zu dem erstenAudioNodeverbindet, 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
IndexSizeErrorDOMException-
Wird ausgelöst, wenn der als
outputIndexoderinputIndexangegebene Wert nicht einem vorhandenen Eingang oder Ausgang entspricht. InvalidAccessErrorDOMException-
Wird ausgelöst, wenn der Zielknoten nicht Teil desselben Audiokontexts wie der Quellknoten ist.
NotSupportedErrorDOMException-
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
DelayNodeObjekte im Zyklus gibt, um zu verhindern, dass die resultierende Wellenform in der unendlichen Konstruktion desselben Audioframes stecken bleibt. Wird auch ausgelöst, wenn derinputIndexParameter verwendet wird, während das Ziel einAudioParamist.
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.
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.
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
Loading…