Web/API/OfflineAudioContext

From Get docs


The OfflineAudioContext interface is an AudioContext interface representing an audio-processing graph built from linked together AudioNodes. In contrast with a standard AudioContext, an OfflineAudioContext doesn't render the audio to the device hardware; instead, it generates it, as fast as it can, and outputs the result to an AudioBuffer.

Constructor

OfflineAudioContext.OfflineAudioContext()
Creates a new OfflineAudioContext instance.

Properties

Also inherits properties from its parent interface, BaseAudioContext.

OfflineAudioContext.length Read only
An integer representing the size of the buffer in sample-frames.

Event handlers

OfflineAudioContext.oncomplete
Is an EventHandler called when processing is terminated, that is when the complete event (of type OfflineAudioCompletionEvent) is raised, after the event-based version of OfflineAudioContext.startRendering() is used.

Methods

Also inherits methods from its parent interface, BaseAudioContext.

OfflineAudioContext.suspend()
Schedules a suspension of the time progression in the audio context at the specified time and returns a promise.
OfflineAudioContext.startRendering()
Starts rendering the audio, taking into account the current connections and the current scheduled changes. This page covers both the event-based version and the promise-based version.

Deprecated methods

OfflineAudioContext.resume()
Resumes the progression of time in an audio context that has previously been suspended.

Note: The resume() method is still available — it is now defined on the BaseAudioContext interface (see BaseAudioContext.resume()) and thus can be accessed by both the AudioContext and OfflineAudioContext interfaces.


Events

Listen to these events using addEventListener() or by assigning an event listener to the oneventname property of this interface:

complete
Fired when the rendering of an offline audio context is complete. Also available using the oncomplete event handler property.

Examples

In this simple example, we declare both an AudioContext and an OfflineAudioContext object. We use the AudioContext to load an audio track via XHR (AudioContext.decodeAudioData), then the OfflineAudioContext to render the audio into an AudioBufferSourceNode and play the track through. After the offline audio graph is set up, you need to render it to an AudioBuffer using OfflineAudioContext.startRendering.

When the startRendering() promise resolves, rendering has completed and the output AudioBuffer is returned out of the promise.

At this point we create another audio context, create an AudioBufferSourceNode inside it, and set its buffer to be equal to the promise AudioBuffer. This is then played as part of a simple standard audio graph.

Note: For a working example, see our [[../../../../../../mdn.github.io/webaudio-examples/offline-audio-context-promise/index|offline-audio-context-promise]] Github repo (see the source code too.)


// define online and offline audio context

var audioCtx = new AudioContext();
var offlineCtx = new OfflineAudioContext(2,44100*40,44100);

source = offlineCtx.createBufferSource();

// use XHR to load an audio track, and
// decodeAudioData to decode it and OfflineAudioContext to render it

function getData() {
  request = new XMLHttpRequest();

  request.open('GET', 'viper.ogg', true);

  request.responseType = 'arraybuffer';

  request.onload = function() {
    var audioData = request.response;

    audioCtx.decodeAudioData(audioData, function(buffer) {
      myBuffer = buffer;
      source.buffer = myBuffer;
      source.connect(offlineCtx.destination);
      source.start();
      //source.loop = true;
      offlineCtx.startRendering().then(function(renderedBuffer) {
        console.log('Rendering completed successfully');
        var song = audioCtx.createBufferSource();
        song.buffer = renderedBuffer;

        song.connect(audioCtx.destination);

        play.onclick = function() {
          song.start();
        }
      }).catch(function(err) {
          console.log('Rendering failed: ' + err);
          // Note: The promise should reject when startRendering is called a second time on an OfflineAudioContext
      });
    });
  }

  request.send();
}

// Run getData to start the process off

getData();

Specifications

Specification Status Comment
Web Audio APIThe definition of 'OfflineAudioContext' in that specification. Working Draft Initial definition

Browser compatibility

Update compatibility data on GitHub

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet
OfflineAudioContext Chrome

Full support 14

Edge

Full support 12

Firefox

Full support 25

IE

No support No

Opera

Full support 15

Safari

Full support 6

WebView Android

Full support Yes

Chrome Android

Full support 18

Firefox Android

Full support 26

Opera Android

Full support 14

Safari iOS

?

Samsung Internet Android

Full support 1.0

OfflineAudioContext() constructor

Chrome Full support 55

Notes'

Full support 55

Notes'

Notes' Before Chrome 59, the default values were not supported.

Edge

Full support ≤79

Firefox

Full support 53

IE

No support No

Opera

Full support 42

Safari

?

WebView Android Full support 55

Notes'

Full support 55

Notes'

Notes' Before version 59, the default values were not supported.

Chrome Android Full support 55

Notes'

Full support 55

Notes'

Notes' Before Chrome 59, the default values were not supported.

Firefox Android

Full support 53

Opera Android

Full support 42

Safari iOS

?

Samsung Internet Android Full support 6.0

Notes'

Full support 6.0

Notes'

Notes' Before Samsung Internet 7.0, the default values were not supported.

complete event Chrome

Full support 14

Edge

Full support 12

Firefox

Full support 25

IE

No support No

Opera

Full support 15

Safari

Full support 6

WebView Android

Full support Yes

Chrome Android

Full support 18

Firefox Android

Full support 26

Opera Android

Full support 14

Safari iOS

?

Samsung Internet Android

Full support 1.0

length Chrome

Full support 51

Edge

Full support 14

Firefox

Full support Yes

IE

No support No

Opera

Full support 38

Safari

No support No

WebView Android

Full support 51

Chrome Android

Full support 51

Firefox Android

Full support Yes

Opera Android

Full support 41

Safari iOS

No support No

Samsung Internet Android

Full support 5.0

oncomplete Chrome

Full support 14

Edge

Full support 12

Firefox

Full support 25

IE

No support No

Opera

Full support 15

Safari

Full support 6

WebView Android

Full support Yes

Chrome Android

Full support 18

Firefox Android

Full support 26

Opera Android

Full support 14

Safari iOS

?

Samsung Internet Android

Full support 1.0

resume Chrome

Full support 49

Edge

Full support ≤18

Firefox

No support No

IE

No support No

Opera

Full support 36

Safari

No support No

WebView Android

Full support 49

Chrome Android

Full support 49

Firefox Android

No support No

Opera Android

Full support 36

Safari iOS

No support No

Samsung Internet Android

Full support 5.0

startRendering Chrome

Full support 14

Edge

Full support 12

Firefox

Full support 25

IE

No support No

Opera

Full support 15

Safari

Full support 6

WebView Android

Full support Yes

Chrome Android

Full support 18

Firefox Android

Full support 26

Opera Android

Full support 14

Safari iOS

?

Samsung Internet Android

Full support 1.0

suspend Chrome

Full support 49

Edge

Full support ≤18

Firefox

No support No

IE

No support No

Opera

Full support 36

Safari

No support No

WebView Android

Full support 49

Chrome Android

Full support 49

Firefox Android

No support No

Opera Android

Full support 36

Safari iOS

No support No

Samsung Internet Android

Full support 5.0

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
See implementation notes.'
See implementation notes.


See also