The OfflineAudioContext class is an almost complete implementation of the Web Audio API OfflineAudioContext interface. It is used for rendering audio to a buffer rather than playing it through speakers. It also excludes the deprecated createScriptProcessor() method.
Key capabilities include:
- Rendering audio to a buffer via
startRendering(). - Creating audio nodes similar to
AudioContext. - Managing audio state and properties like
sampleRate and length.
Note on Listener: Firefox and Safari (up to version 14.0.1) do not support modifying the listener via AudioParams. Calling scheduling functions on the AudioParams of an OfflineAudioContext listener in these browsers will throw a NotSupportedError.
interface IOfflineAudioContext extends EventTarget {
readonly audioWorklet?: IAudioWorklet;
readonly currentTime: number;
readonly destination: IAudioDestinationNode<IOfflineAudioContext>;
readonly length: number;
readonly listener: IAudioListener;
onstatechange: null | TEventHandler<IOfflineAudioContext>;
readonly sampleRate: number;
readonly state: TAudioContextState;
createAnalyser(): IAnalyserNode<IOfflineAudioContext>;
createBiquadFilter(): IBiquadFilterNode<IOfflineAudioContext>;
createBuffer(numberOfChannels: number, length: number, sampleRate: number): IAudioBuffer;
createBufferSource(): IAudioBufferSourceNode<IOfflineAudioContext>;
createChannelMerger(numberOfInputs?: number): IAudioNode<IOfflineAudioContext>;
createChannelSplitter(numberOfOutputs?: number): IAudioNode<IOfflineAudioContext>;
createConstantSource(): IConstantSourceNode<IOfflineAudioContext>;
createConvolver(): IConvolverNode<IOfflineAudioContext>;
createDelay(maxDelayTime?: number): IDelayNode<IOfflineAudioContext>;
createDynamicsCompressor(): IDynamicsCompressorNode<IOfflineAudioContext>;
createGain(): IGainNode<IOfflineAudioContext>;
createIIRFilter(feedforward: number[], feedback: number[]): IIIRFilterNode<IOfflineAudioContext>;
createOscillator(): IOscillatorNode<IOfflineAudioContext>;
createPanner(): IPannerNode<IOfflineAudioContext>;
createPeriodicWave(real: number[], imag: number[], constraints?: Partial<IPeriodicWaveConstraints>): IPeriodicWave;
createStereoPanner(): IStereoPannerNode<IOfflineAudioContext>;
createWaveShaper(): IWaveShaperNode<IOfflineAudioContext>;
decodeAudioData(
audioData: ArrayBuffer,
successCallback?: TDecodeSuccessCallback,
errorCallback?: TDecodeErrorCallback
): Promise<IAudioBuffer>;
startRendering(): Promise<IAudioBuffer>;
}