Skip to main content
Version: Next

BaseAudioContext

The BaseAudioContext interface acts as a supervisor of audio-processing graphs. It provides key processing parameters such as current time, output destination or sample rate. Additionally, it is responsible for nodes creation and audio-processing graph's lifecycle management. However, BaseAudioContext itself cannot be directly utilized, instead its functionalities must be accessed through one of its derived interfaces: AudioContext, OfflineAudioContext, or WorkletAudioContext.

Audio graph

An audio graph is a structured representation of audio processing elements and their connections within an audio context. The graph consists of various types of nodes, each performing specific audio operations, connected in a network that defines the audio signal flow. In general we can distinguish four types of nodes:

Rendering the audio graph

Audio graph rendering is done in blocks of sample-frames. The number of sample-frames in a block is called render quantum size, and the block itself is called a render quantum. By default render quantum size value is 128 and it is a constant.

The AudioContext rendering thread is driven by a system-level audio callback. Each call has a system-level audio callback buffer size, which is a varying number of sample-frames that needs to be computed on time before the next system-level audio callback arrives, but render quantum size does not have to be a divisor of the system-level audio callback buffer size.

info

Concept of system-level audio callback does not apply to OfflineAudioContext or WorkletAudioContext.

Properties

NameTypeDescription
currentTimenumberDouble value representing an ever-increasing hardware time in seconds, starting from 0.0.
Read only
destinationAudioDestinationNodeFinal output destination associated with the context.
Read only
listenerAudioListenerListener used for 3D spatialization, shared by all PannerNodes in the context.
Read only
sampleRatenumberFloat value representing the sample rate (in samples per seconds) used by all nodes in this context.
Read only
stateContextStateEnumerated value represents the current state of the context.
Read only

Methods

createAnalyser

Creates AnalyserNode.

Returns: AnalyserNode

createBiquadFilter

Creates BiquadFilterNode.

Returns: BiquadFilterNode

createBuffer

Creates AudioBuffer.

ParameterTypeDescription
numOfChannelsnumberAn integer representing the number of channels of the buffer.
lengthnumberAn integer representing the length of the buffer in sampleFrames. Two seconds buffer has length equals to 2 * sampleRate.
sampleRatenumberA float representing the sample rate of the buffer.

Errors

Error typeDescription
NotSupportedErrornumOfChannels is outside the nominal range [1, 32].
NotSupportedErrorsampleRate is outside the supported range [3000, 768000].
NotSupportedErrorlength is less then 1.

Returns: AudioBuffer

createBufferSource

Creates AudioBufferSourceNode.

ParameterTypeDescription
options
Optional
{ pitchCorrection: boolean }Boolean that specifies if pitch correction has to be available.

Returns: AudioBufferSourceNode

createBufferQueueSource
Mobile only

Creates AudioBufferQueueSourceNode.

ParameterTypeDescription
options
Optional
AudioBufferQueueSourceOptionsConstructor options for AudioBufferQueueSourceNode.

Returns: AudioBufferQueueSourceNode

createChannelMerger

Creates ChannelMergerNode.

ParameterTypeDescription
numberOfInputs
Optional
numberNumber of inputs to merge (range 132, default 6).

Returns: ChannelMergerNode

createChannelSplitter

Creates ChannelSplitterNode.

ParameterTypeDescription
numberOfOutputs
Optional
numberNumber of outputs to split into (range 132, default 6).

Returns: ChannelSplitterNode

createConstantSource

Creates ConstantSourceNode.

Returns: ConstantSourceNode

createConvolver

Creates ConvolverNode.

Returns: ConvolverNode

createDelay

Creates DelayNode

ParameterTypeDescription
maxDelayTime
Optional
numberMaximum amount of time to buffer delayed values

Returns: DelayNode

createGain

Creates GainNode.

Returns: GainNode

createIIRFilter

Creates IIRFilterNode.

Returns: IIRFilterNode

createOscillator

Creates OscillatorNode.

Returns: OscillatorNode

createPeriodicWave

Creates PeriodicWave. This waveform specifies a repeating pattern that an OscillatorNode can use to generate its output sound.

ParameterTypeDescription
realFloat32ArrayAn array of cosine terms.
imagFloat32ArrayAn array of sine terms.
constraints
Optional
{ disableNormalization: boolean }An object that specifies if normalization is disabled. If so, periodic wave will have maximum peak value of 1.0 and minimum peak value of -1.0.

Errors

Error typeDescription
InvalidAccessErrorreal and imag arrays do not have same length.

Returns: PeriodicWave

createRecorderAdapter

Creates a RecorderAdapterNode — an AudioNode that adapts an AudioRecorder into the audio graph. Feed it using AudioRecorder.connect and connect it downstream like any other node. Produces silence until a recorder is connected to it.

Returns: RecorderAdapterNode

createStereoPanner

Creates StereoPannerNode.

Returns: StereoPannerNode

createWaveShaper

Creates WaveShaperNode.

Returns: WaveShaperNode

decodeAudioData

Decodes audio data from a file path, an ArrayBuffer, or a bundled app asset (a number module id returned by require('./audio.mp3')). The decoded audio is automatically resampled to match the audio context's sampleRate.

For the list of supported formats visit this page.

ParameterTypeDescription
inputArrayBufferArrayBuffer with encoded audio data.
stringPath to a remote or local audio file.
number
Mobile only
React Native asset module id (for example, the value returned by require('./audio.mp3')).
fetchOptions
Optional
RequestInitAdditional fetch options when input is a remote URL (for example, auth headers).
caution
If you pass a number as input, decoding resolves the bundled asset through React Native's Image component. By default, only .mp3, .wav, .mp4, .m4a, and .aac assets are supported. To use other formats, see static non-image resources.

Returns: Promise<AudioBuffer>

Example decoding audio
const url = ... // url to an audio

const buffer = await audioContext.decodeAudioData(url);

decodePCMInBase64

Decodes base64-encoded PCM audio data.

ParameterTypeDescription
base64StringstringBase64-encoded PCM audio data.
inputSampleRatenumberSample rate of the input PCM data.
inputChannelCountnumberNumber of channels in the input PCM data.
isInterleaved
Optional
booleanWhether the PCM data is interleaved. Default is true.

Returns: Promise<AudioBuffer>

Example decoding with data in base64 format

const data = ... // data encoded in base64 string
// data is not interleaved (Channel1, Channel1, ..., Channel2, Channel2, ...)
const buffer = await this.audioContext.decodeAudioData(data, 4800, 2, false);

Remarks

currentTime

  • Timer starts when context is created, stops when context is suspended.

ContextState

Acceptable values:

  • suspended

The audio context has been suspended (with one of suspend or OfflineAudioContext.suspend).

  • running

The audio context is running normally.

  • closed

The audio context has been closed (with close method).