Interface AudioNode

AudioNodes are the building blocks of an AudioContext. This interface represents audio sources, the audio destination, and intermediate processing modules. These modules can be connected together to form processing graphs for rendering audio to the audio hardware. Each node can have inputs and/or outputs. An AudioSourceNode has no inputs and a single output. An AudioDestinationNode has one input and no outputs and represents the final destination to the audio hardware. Most processing nodes such as filters will have one input and one output. Each type of AudioNode differs in the details of how it processes or synthesizes audio. But, in general, AudioNodes will process its inputs (if it has any), and generate audio for its outputs (if it has any).

An output may connect to one or more AudioNode inputs, thus fanout is supported. An input may be connected from one or more AudioNode outputs, thus fanin is supported.

In order to handle this fanin, any AudioNode with inputs performs an up-mixing of all connections for each input:

  1. Calculate N: the maximum number of channels of all the connections to the input. For example, if an input has a mono connection and a stereo connection then this number will be 2.
  2. For each connection to the input, up-mix to N channels.
  3. Mix together all the up-mixed streams from (2). This is a straight-forward mixing together of each of the corresponding channels from each connection.

Please see Mixer Gain Structure for more informative details.

For performance reasons, practical implementations will need to use block processing, with each AudioNode processing a fixed number of sample-frames of size block-size. In order to get uniform behavior across implementations, we will define this value explicitly. block-size is defined to be 128 sample-frames which corresponds to roughly 3ms at a sample-rate of 44.1KHz.

Hierarchy

Index

Properties

Methods

Properties

public context: AudioContext

The AudioContext which owns this AudioNode.

public numberOfInputs: number

The number of inputs feeding into the AudioNode. This will be 0 for an AudioSourceNode.

public numberOfOutputs: number

The number of outputs coming out of the AudioNode. This will be 0 for an AudioDestinationNode.

Methods

public connect(destination: AudioNode, output?: number, input?: number)

Connects the AudioNode to another AudioNode.

It is possible to connect an AudioNode output to more than one input with multiple calls to connect(). Thus, "fanout" is supported.

It is possible to connect an AudioNode to another AudioNode which creates a cycle. In other words, an AudioNode may connect to another AudioNode, which in turn connects back to the first AudioNode. This is allowed only if there is at least one DelayNode in the cycle or an exception will be thrown.

There can only be one connection between a given output of one specific node and a given input of another specific node. Multiple connections with the same termini are ignored. For example:

nodeA.connect(nodeB);
nodeA.connect(nodeB);

will have the same effect as

nodeA.connect(nodeB);

Parameters

  • destination: AudioNode

    the AudioNode to connect to.

  • output?: number optional

    an index describing which output of the AudioNode from which to connect. An out-of-bound value throws an exception.

  • input?: number optional

    an index describing which input of the destination AudioNode to connect to. An out-of-bound value throws an exception.

public connect(destination: AudioParam, output?: number)

Connects the AudioNode to an AudioParam, controlling the parameter value with an audio-rate signal.

It is possible to connect an AudioNode output to more than one AudioParam with multiple calls to connect(). Thus, "fanout" is supported.

It is possible to connect more than one AudioNode output to a single AudioParam with multiple calls to connect(). Thus, "fanin" is supported.

An 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, then mix it together with other such outputs and finally will mix with the intrinsic parameter value (the value the AudioParam would normally have without any audio connections), including any timeline changes scheduled for the parameter.

There can only be one connection between a given output of one specific node and a specific AudioParam. Multiple connections with the same termini are ignored. For example:

nodeA.connect(param);
nodeA.connect(param);

will have the same effect as

nodeA.connect(param);

Parameters

  • destination: AudioParam

    the AudioParam to connect to.

  • output?: number optional

    an index describing which output of the AudioNode from which to connect. An out-of-bound value throws an exception.

public disconnect(output?: number)

Disconnects an AudioNode's output.

Parameters

  • output?: number optional

    an index describing which output of the AudioNode to disconnect. An out-of-bound value throws an exception.