问题描述
我正在尝试使用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/
解决方法
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/。