将音频缓冲区放入可由音频元素播放的 blob 中的最佳方法是什么?

What's the best way to get an audio buffer into a blob that can be played by an audio element?

我有一个 AudioBuffer 存储为变量,我想让它由 Audio 元素播放。这是我当前无法运行的代码:

const blob = new Blob(audioBuffer.getChannelData(1), { type: "audio/wav" });
const url = window.URL.createObjectURL(blob);
audioElement.src = url;

当我尝试播放 audioElement 时,出现以下错误:

未捕获(承诺)DOMException:该元素没有受支持的来源。

有没有人知道如何解决这个问题?提前致谢!

A​​udioBuffer 是PCM 数据,尚未编码为WAV。如果你需要 WAV,你应该得到一个库来为你做编码,比如 https://www.npmjs.com/package/audiobuffer-to-wav

包含以上代码后(您可以从 index.js 中复制 audioBufferToWav 函数及其下面调用的函数)。

const blob = new Blob([audioBufferToWav(audioBuffer.getChannelData(1))], { type: "audio/wav" });
const url = window.URL.createObjectURL(blob);
audioElement.src = url;

下面使用Web AudioAPI直接播放PCM AudioBuffer

var myArrayBuffer = audioBuffer;
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var source = audioCtx.createBufferSource();
source.buffer = myArrayBuffer;
source.connect(audioCtx.destination);
source.start();