Web Audio -- 仅在 iOS 上没有声音

问题描述 投票:0回答:0

我有一个网络应用程序可以在除 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 以获得更高的精度和同步性)。
  • 音频文件托管在我自己的域中,因此它不是 CORS
  • 在 iOS 16 设备、iPhone 和 iPad 上测试

我做错了什么?

ios cross-browser mobile-safari web-audio-api audiocontext
© www.soinside.com 2019 - 2024. All rights reserved.