声音无法通过网络音频正确播放

时间:2020-09-27 23:26:50

标签: javascript html5-audio web-audio-api audiocontext

我正在尝试使用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();
};

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

1 个答案:

答案 0 :(得分:1)

Web Audio API的decodeAudioData()函数可以解码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();
};

这是您的提琴的更新版本的链接:https://jsfiddle.net/pzx0vg89/