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();
};
网络音频 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/。
我正在尝试使用 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();
};
网络音频 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/。