首页 > 解决方案 > 将 .wav 加载到音频缓冲区

问题描述

我正在尝试在 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)”可能是什么?

标签: javascriptaudiohtml5-audioweb-audio-api

解决方案


您可能想阅读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);
});

fetch我从这个问题中偷了。


推荐阅读