将 .wav 加载到音频缓冲区

时间:2021-01-19 18:38:16

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

我正在尝试用 javascript 创建一个小网络应用程序,它通过同时为每个音符播放多个音频文件来播放一些随机和弦。

我发现如果我使用普通的“音频”类,这将不起作用,因为它们不会同时播放。 (不可靠)因此我想使用 Web Audio API。但在这里我遇到了一个问题: 如何将我的“Audio()”对象(或任何“.wav”文件)转换为 AudioBuffer?

const AudioContext = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();
var audioElement = new Audio("sounds/cut/24.wav");

myArrayBuffer = someUnknownFunction(audioElement);
//Alternative: myArrayBuffer = someOtherUnknownFunction("sounds/cut/24.wav")

var track = audioCtx.createBufferSource();
track.buffer = myArrayBuffer;
track.connect(audioCtx.destination);
track.start(0);

有人知道这个“someUnknownFuntion(Audio)”是什么吗?

1 个答案:

答案 0 :(得分:1)

您可能想阅读BaseAudioContext.decodeAudioData()

基本上,您需要使用 BaseAudioContext.decodeAudioData() 函数指定来源:

const AudioContext = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();
var audioFile = fetch("sounds/cut/24.wav").then(response => response.arrayBuffer()).then(buffer => audioCtx.decodeAudioData(buffer)).then(buffer => {
    var track = audioCtx.createBufferSource();
    track.buffer = buffer;
    track.connect(audioCtx.destination);
    track.start(0);
});

我从this question那里偷了fetch