Web Audio 无法正确播放声音

Sound wont play correctly with Web Audio

我正在尝试使用 AudioContext 播放 wav 文件 - 它在加载 <audio> 标签时正确播放(如 jsfiddle 所示),但在使用 AudioContext 时播放不正确。

var startButton = document.getElementById('start-stream');
var wav = new wavefile.WaveFile();
startButton.onclick = function() {
  audioCtx = new AudioContext();
  wav.fromBase64(mydata);

  buffer = audioCtx.createBuffer(1, audioCtx.sampleRate * 3, audioCtx.sampleRate);

  // add audio data to buffer
  buffer.getChannelData(0).set(wav.getSamples());

  source = audioCtx.createBufferSource();
  source.buffer = buffer;
  source.connect(audioCtx.destination);
  source.start();
};

Fiddle 在这里:https://jsfiddle.net/Persiancoffee/6v8dLt3f/7/

网络音频 decodeAudioData() 的功能 API 可以解码 WAV 文件,这就是为什么您不需要任何外部库用于此用例的原因。它将为您生成 AudioBuffer

startButton.onclick = async function () {
    audioCtx = new AudioContext();

    const arrayBuffer = Uint8Array.from(
        atob(mydata),
        (character) => character.charCodeAt(0)
    ).buffer;

    buffer = await audioCtx.decodeAudioData(arrayBuffer);
    
    source = audioCtx.createBufferSource();
    source.buffer = buffer;
    source.connect(audioCtx.destination);
    source.start();
};

这是您 fiddle 的更新版本的 link:https://jsfiddle.net/pzx0vg89/