我有一个网络应用程序可以在除 iOS 以外的所有平台上成功播放音频样本。
这是我最小的可重现示例,下面有其他上下文。
const AudioContext = window.AudioContext || window.webkitAudioContext;
const audioContext = new AudioContext();
async function loadAudioSample(url) {
const response = await fetch(url);
const arrayBuffer = await response.arrayBuffer();
const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);
return audioBuffer;
}
function playSample(audioBuffer) {
const source = audioContext.createBufferSource();
source.buffer = audioBuffer;
source.connect(audioContext.destination);
source.start(0);
}
// make sure user interacts with document first
document.addEventListener('click', async () => {
let buf = await loadAudioSample('./sample.mp3');
if (audioContext.state === 'suspended') {audioContext.resume();}
// logging comes up normal
console.log(audioContext.state, buf);
playSample(buf);
});
补充说明:
sample.mp3
通过 new Audio()
从音频元素播放 .play()
它确实有效,所以我认为文件格式不是问题。 (但我需要 Web Audio API 以获得更高的精度和同步性)。我做错了什么?