离线音频上下文:startRendering() 方法
基线 广泛可用
此功能已成熟稳定,可在许多设备和浏览器版本上运行。它自 2021 年 4 月.
startRendering()
方法是 OfflineAudioContext
接口的方法,用于开始渲染音频图,同时考虑当前连接和当前计划的更改。
当渲染完成时,将触发 complete
事件(类型为 OfflineAudioCompletionEvent
),事件中包含作为 renderedBuffer
属性的结果 AudioBuffer
。
当前,浏览器支持两种版本的 startRendering()
方法 - 一个较旧的基于事件的版本和一个较新的基于 promise 的版本。前者最终会被删除,但目前出于向后兼容性的原因,两种机制都提供。
语法
startRendering()
参数
无。
返回值
一个 Promise
,它将用 AudioBuffer
作为结果来完成。
示例
使用离线音频上下文播放音频
在此示例中,我们声明了 AudioContext
和 OfflineAudioContext
对象。我们使用 AudioContext
加载音频轨 fetch()
,然后使用 OfflineAudioContext
将音频渲染到 AudioBufferSourceNode
并播放音频轨。在设置离线音频图后,我们使用 OfflineAudioContext.startRendering()
将其渲染为 AudioBuffer
。
当 startRendering()
promise 解决时,渲染已完成,输出 AudioBuffer
从 promise 中返回。
此时,我们创建另一个音频上下文,在其中创建一个 AudioBufferSourceNode
,并将其缓冲区设置为等于 promise AudioBuffer
。然后,它作为简单的标准音频图的一部分进行播放。
// Define both online and offline audio contexts
let audioCtx; // Must be initialized after a user interaction
const offlineCtx = new OfflineAudioContext(2, 44100 * 40, 44100);
// Define constants for dom nodes
const play = document.querySelector("#play");
function getData() {
// Fetch an audio track, decode it and stick it in a buffer.
// Then we put the buffer into the source and can play it.
fetch("viper.ogg")
.then((response) => response.arrayBuffer())
.then((downloadedBuffer) => audioCtx.decodeAudioData(downloadedBuffer))
.then((decodedBuffer) => {
console.log("File downloaded successfully.");
const source = new AudioBufferSourceNode(offlineCtx, {
buffer: decodedBuffer,
});
source.connect(offlineCtx.destination);
return source.start();
})
.then(() => offlineCtx.startRendering())
.then((renderedBuffer) => {
console.log("Rendering completed successfully.");
play.disabled = false;
const song = new AudioBufferSourceNode(audioCtx, {
buffer: renderedBuffer,
});
song.connect(audioCtx.destination);
// Start the song
song.start();
})
.catch((err) => {
console.error(`Error encountered: ${err}`);
});
}
// Activate the play button
play.onclick = () => {
play.disabled = true;
// We can initialize the context as the user clicked.
audioCtx = new AudioContext();
// Fetch the data and start the song
getData();
};
规范
规范 |
---|
Web 音频 API # dom-offlineaudiocontext-startrendering |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。