1

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

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

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

Uncaught (in promise) DOMException: 该元素没有支持的来源。

有没有人对如何解决这个问题有任何想法?提前致谢!

4

1 回答 1

0

AudioBuffer 是 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 Audio API 直接播放 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();
于 2020-04-16T15:51:08.633 回答