OfflineAudioContext
interface is an
AudioContext
interface representing an audio-processing graph built from linked together
AudioNode
s. In contrast with a standard
AudioContext
,
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
.
<div id="interfaceDiagram" style="display: inline-block; position: relative; width: 100%; padding-bottom: 11.666666666666666%; vertical-align: middle; overflow: hidden;"><svg style="display: inline-block; position: absolute; top: 0; left: 0;" viewbox="-50 0 600 70" preserveAspectRatio="xMinYMin meet"><a xlink:href="../API/EventTarget.html" target="_top"><rect x="1" y="1" width="110" height="50" fill="#fff" stroke="#D4DDE4" stroke-width="2px" /><text x="56" y="30" font-size="12px" font-family="Consolas,Monaco,Andale Mono,monospace" fill="#4D4E53" text-anchor="middle" alignment-baseline="middle">EventTarget</text></a><polyline points="111,25 121,20 121,30 111,25" stroke="#D4DDE4" fill="none"/><line x1="121" y1="25" x2="151" y2="25" stroke="#D4DDE4"/><a xlink:href="../API/AudioContext" target="_top"><rect x="151" y="1" width="120" height="50" fill="#fff" stroke="#D4DDE4" stroke-width="2px" /><text x="211" y="30" font-size="12px" font-family="Consolas,Monaco,Andale Mono,monospace" fill="#4D4E53" text-anchor="middle" alignment-baseline="middle">AudioContext</text></a><polyline points="271,25 281,20 281,30 271,25" stroke="#D4DDE4" fill="none"/><line x1="281" y1="25" x2="311" y2="25" stroke="#D4DDE4"/><a xlink:href="../API/OfflineAudioContext" target="_top"><rect x="311" y="1" width="190" height="50" fill="#F4F7F8" stroke="#D4DDE4" stroke-width="2px" /><text x="406" y="30" font-size="12px" font-family="Consolas,Monaco,Andale Mono,monospace" fill="#4D4E53" text-anchor="middle" alignment-baseline="middle">OfflineAudioContext</text></a></svg></div>
a:hover text { fill: #0095DD; pointer-events: all;}
OfflineAudioContext.OfflineAudioContext()
OfflineAudioContext
实例。
Also inherits properties from its parent interface,
BaseAudioContext
.
OfflineAudioContext.length
只读
An integer representing the size of the buffer in sample-frames.
OfflineAudioContext.oncomplete
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()
被使用。
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.
OfflineAudioContext.resume()
Resumes the progression of time in an audio context that has previously been suspended.
注意
:
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
接口。
监听这些事件使用
addEventListener()
或通过把事件监听器赋值给
on
eventname
property of this interface:
complete
oncomplete
event handler property.
In this simple example, we declare both an
AudioContext
和
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
使用
OfflineAudioContext.startRendering
.
当
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.
注意 : For a working example, see our offline-audio-context-promise Github repo (see the 源代码 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();
| 规范 | 状态 | 注释 |
|---|---|---|
|
Web 音频 API
The definition of 'OfflineAudioContext' in that specification. |
工作草案 | 初始定义 |
| 桌面 | 移动 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
OfflineAudioContext
|
Chrome 14 | Edge ≤18 | Firefox 25 | IE 不支持 No | Opera 15 | Safari 6 | WebView Android Yes | Chrome Android 18 | Firefox Android 26 | Opera Android 14 | Safari iOS ? | Samsung Internet Android 1.0 |
OfflineAudioContext()
构造函数
|
Chrome 55 | Edge ≤79 | Firefox 53 | IE 不支持 No | Opera 42 | Safari ? |
WebView Android
55
注意事项
|
Chrome Android
55
注意事项
|
Firefox Android 53 | Opera Android 42 | Safari iOS ? |
Samsung Internet Android
6.0
注意事项
|
complete
event
|
Chrome 14 | Edge 12 | Firefox 25 | IE 不支持 No | Opera 15 | Safari 6 | WebView Android Yes | Chrome Android 18 | Firefox Android 26 | Opera Android 14 | Safari iOS ? | Samsung Internet Android 1.0 |
length
|
Chrome 51 | Edge 14 | Firefox Yes | IE 不支持 No | Opera 38 | Safari 不支持 No | WebView Android 51 | Chrome Android 51 | Firefox Android Yes | Opera Android 41 | Safari iOS 不支持 No | Samsung Internet Android 5.0 |
oncomplete
|
Chrome 14 | Edge 12 | Firefox 25 | IE 不支持 No | Opera 15 | Safari 6 | WebView Android Yes | Chrome Android 18 | Firefox Android 26 | Opera Android 14 | Safari iOS ? | Samsung Internet Android 1.0 |
resume
|
Chrome 49 | Edge ≤18 | Firefox 不支持 No | IE 不支持 No | Opera 36 | Safari 不支持 No | WebView Android 49 | Chrome Android 49 | Firefox Android 不支持 No | Opera Android 36 | Safari iOS 不支持 No | Samsung Internet Android 5.0 |
startRendering
|
Chrome 14 | Edge 12 | Firefox 25 | IE 不支持 No | Opera 15 | Safari 6 | WebView Android Yes | Chrome Android 18 | Firefox Android 26 | Opera Android 14 | Safari iOS ? | Samsung Internet Android 1.0 |
suspend
|
Chrome 49 | Edge ≤18 | Firefox 不支持 No | IE 不支持 No | Opera 36 | Safari 不支持 No | WebView Android 49 | Chrome Android 49 | Firefox Android 不支持 No | Opera Android 36 | Safari iOS 不支持 No | Samsung Internet Android 5.0 |
完整支持
不支持
兼容性未知
见实现注意事项。
OfflineAudioContext
AnalyserNode
AudioBuffer
AudioBufferSourceNode
AudioContext
AudioContextOptions
AudioDestinationNode
AudioListener
AudioNode
AudioNodeOptions
AudioParam
AudioProcessingEvent
AudioScheduledSourceNode
AudioWorklet
AudioWorkletGlobalScope
AudioWorkletNode
AudioWorkletProcessor
BaseAudioContext
BiquadFilterNode
ChannelMergerNode
ChannelSplitterNode
ConstantSourceNode
ConvolverNode
DelayNode
DynamicsCompressorNode
GainNode
IIRFilterNode
MediaElementAudioSourceNode
MediaStreamAudioDestinationNode
MediaStreamAudioSourceNode
OfflineAudioCompletionEvent
OscillatorNode
PannerNode
PeriodicWave
StereoPannerNode
WaveShaperNode