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.
OfflineAudioContext.OfflineAudioContext()OfflineAudioContext instance.Implements properties from its parent, AudioContext.
OfflineAudioContext.length Read only
OfflineAudioContext.oncompleteEventHandler 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.Also implements methods from its parent, AudioContext, and EventTarget too.
OfflineAudioContext.resume()OfflineAudioContext.suspend()OfflineAudioContext.startRendering()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 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 audioCtx = new (window.AudioContext || window.webkitAudioContext)();
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(); | Specification | Status | Comment |
|---|---|---|
| Web Audio API The definition of 'OfflineAudioContext' in that specification. | Working Draft | Initial definition |
| Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|---|
| Basic support | 10.0webkit | (Yes) | 25.0 (25.0) | No support | 15.0webkit 22 (unprefixed) | 6.0webkit |
Promise-based startRendering()
| 42.0 | ? | 37.0 (37.0) | ? | ? | ? |
suspend(), resume()
| 49.0 | ? | ||||
length | 51.0 | ? |
| Feature | Android Webview | Firefox Mobile (Gecko) | Firefox OS | Edge | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|---|
| Basic support | 33.0 | 26.0 | 1.2 | (Yes) | ? | ? | ? | (Yes) |
Promise-based startRendering()
| 42.0 | 37.0 | 2.2 | ? | ? | ? | ? | 42.0 |
suspend(), resume()
| 49.0 | ? | 49.0 | |||||
length | 51.0 | ? | 51.0 |
© 2005–2017 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext