OfflineAudioContext
Baseline 廣泛可用 *
OfflineAudioContext 介面是一個 AudioContext 介面,它代表一個由連結在一起的 AudioNode 構建的音訊處理圖。與標準的 AudioContext 不同,OfflineAudioContext 不會將音訊渲染到裝置硬體;相反,它會盡快生成音訊,並將結果輸出到 AudioBuffer。
建構函式
OfflineAudioContext()-
建立一個新的
OfflineAudioContext例項。
例項屬性
還繼承了其父介面 BaseAudioContext 的屬性。
OfflineAudioContext.length只讀-
一個整數,表示緩衝區中樣本幀的大小。
例項方法
還繼承了其父介面 BaseAudioContext 的方法。
OfflineAudioContext.suspend()-
在指定的將來時間點排程暫停音訊上下文中的時間程序,並返回一個 Promise。
OfflineAudioContext.startRendering()-
開始渲染音訊,考慮當前的連線和當前計劃的更改。本頁面同時涵蓋基於事件的版本和基於 Promise 的版本。
已廢棄的方法
OfflineAudioContext.resume()-
恢復先前已暫停音訊上下文中時間的程序。
注意: resume() 方法仍然可用——它現在定義在 BaseAudioContext 介面上(請參閱 AudioContext.resume),因此 AudioContext 和 OfflineAudioContext 介面都可以訪問它。
事件
使用 addEventListener() 或透過將事件監聽器分配給此介面的 oneventname 屬性來監聽這些事件。
完成-
當離線音訊上下文的渲染完成時觸發。
示例
使用離線音訊上下文播放音訊
在此示例中,我們聲明瞭 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 Audio API # OfflineAudioContext |
瀏覽器相容性
載入中…