AudioBufferSourceNode: playbackRate 属性
playbackRate 属性是 AudioBufferSourceNode 接口的一个 k-rate AudioParam,它定义了音频资源播放的速度。
值为 1.0 表示以其采样率相同的速度播放,小于 1.0 的值会导致声音播放得更慢,而大于 1.0 的值则会导致音频播放得比正常快。默认值为 1.0。当设置为其他值时,AudioBufferSourceNode 会在将音频发送到输出之前对其进行重采样。
值
一个 AudioParam,其 value 是一个浮点值,表示音频的播放速率,以原始采样率的十进制比例表示。
考虑一个包含以 44.1 kHz(每秒 44,100 个样本)采样的音频的音频缓冲区。让我们看看 playbackRate 的几个值会产生什么效果。
playbackRate为 1.0 时,音频以全速播放,即 44,100 Hz。playbackRate为 0.5 时,音频以半速播放,即 22,050 Hz。playbackRate为 2.0 时,音频的播放速率加倍到 88,200 Hz。
示例
设置 playbackRate
在此示例中,当用户按下“播放”按钮时,我们将加载一个音轨,对其进行解码,然后将其放入 AudioBufferSourceNode 中。
然后,该示例将 loop 属性设置为 true,以便音轨循环播放。
用户可以使用 滑块控件 来设置 playbackRate 属性。
js
let audioCtx;
let buffer;
let source;
const play = document.getElementById("play");
const stop = document.getElementById("stop");
const playbackControl = document.getElementById("playback-rate-control");
const playbackValue = document.getElementById("playback-rate-value");
async function loadAudio() {
try {
// Load an audio file
const response = await fetch("rnb-lofi-melody-loop.wav");
// Decode it
buffer = await audioCtx.decodeAudioData(await response.arrayBuffer());
} catch (err) {
console.error(`Unable to fetch the audio file. Error: ${err.message}`);
}
}
play.addEventListener("click", async () => {
if (!audioCtx) {
audioCtx = new AudioContext();
await loadAudio();
}
source = audioCtx.createBufferSource();
source.buffer = buffer;
source.connect(audioCtx.destination);
source.loop = true;
source.playbackRate.value = playbackControl.value;
source.start();
play.disabled = true;
stop.disabled = false;
playbackControl.disabled = false;
});
stop.addEventListener("click", () => {
source.stop();
play.disabled = false;
stop.disabled = true;
playbackControl.disabled = true;
});
playbackControl.oninput = () => {
source.playbackRate.value = playbackControl.value;
playbackValue.textContent = playbackControl.value;
};
规范
| 规范 |
|---|
| Web Audio API # dom-audiobuffersourcenode-playbackrate |
浏览器兼容性
加载中…