Path: blob/main/files/en-us/web/api/audionode/connect/index.md
6540 views
------{{ APIRef("Web Audio API") }}
The connect() method of the {{ domxref("AudioNode") }} interface lets you connect one of the node's outputs to a target, which may be either another AudioNode (thereby directing the sound data to the specified node) or an {{domxref("AudioParam")}}, so that the node's output data is automatically used to change the value of that parameter over time.
Syntax
Parameters
destination: The {{domxref("AudioNode")}} or {{domxref("AudioParam")}} to which to connect.
outputIndex{{optional_inline}}: An index specifying which output of the current
AudioNodeto connect to the destination. The index numbers are defined according to the number of output channels (see Audio channels). While you can only connect a given output to a given input once (repeated attempts are ignored), you can connect an output to multiple inputs by callingconnect()repeatedly. This makes fan-out possible. The default value is 0.
inputIndex{{optional_inline}}: An index describing which input of the destination you want to connect the current
AudioNodeto; the default is 0. The index numbers are defined according to the number of input channels (see Audio channels). It is possible to connect anAudioNodeto anotherAudioNode, which in turn connects back to the firstAudioNode, creating a cycle.
Return value
If the destination is a node, connect() returns a reference to the destination {{domxref("AudioNode")}} object, allowing you to chain multiple connect() calls. In some browsers, older implementations of this interface return {{jsxref("undefined")}}.
If the destination is an AudioParam, connect() returns undefined.
Exceptions
IndexSizeError{{domxref("DOMException")}}: Thrown if the value specified as
outputIndexorinputIndexdoesn't correspond to an existing input or output.
InvalidAccessError{{domxref("DOMException")}}: Thrown if the destination node is not part of the same audio context as the source node.
NotSupportedError{{domxref("DOMException")}}: Thrown if the specified connection would create a cycle (in which the audio loops back through the same nodes repeatedly) and there are no {{domxref("DelayNode")}} objects in the cycle to prevent the resulting waveform from getting stuck constructing the same audio frame indefinitely. Also thrown if the
inputIndexparameter is used while the destination is an {{domxref("AudioParam")}}.
Examples
Connecting to an audio input
The most obvious use of the connect() method is to direct the audio output from one node into the audio input of another node for further processing. For example, you might send the audio from a {{domxref("MediaElementAudioSourceNode")}}—that is, the audio from an HTML media element such as {{HTMLElement("audio")}}—through a band pass filter implemented using a {{domxref("BiquadFilterNode")}} to reduce noise before then sending the audio along to the speakers.
This example creates an oscillator, then links it to a gain node, so that the gain node controls the volume of the oscillator node.
AudioParam example
In this example, we will be altering the gain value of a {{domxref("GainNode")}} using an {{domxref("OscillatorNode")}} with a slow frequency value. This technique is know as an LFO-controlled parameter.
AudioParam notes
It is possible to connect an AudioNode output to more than one {{ domxref("AudioParam") }}, and more than one AudioNode output to a single {{ domxref("AudioParam") }}, with multiple calls to connect(). Fan-in and fan-out are therefore supported.
An {{ domxref("AudioParam") }} will take the rendered audio data from any AudioNode output connected to it and convert it to mono by down-mixing (if it is not already mono). Next, it will mix it together with any other such outputs, and the intrinsic parameter value (the value the {{ domxref("AudioParam") }} would normally have without any audio connections), including any timeline changes scheduled for the parameter.
Therefore, it is possible to choose the range in which an {{domxref("AudioParam")}} will change by setting the value of the {{domxref("AudioParam")}} to the central frequency, and to use a {{domxref("GainNode")}} between the audio source and the {{domxref("AudioParam")}} to adjust the range of the {{domxref("AudioParam")}} changes.
Specifications
{{Specifications}}
Browser compatibility
{{Compat}}