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

问题描述 投票:0回答:1

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

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

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

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

有人对如何解决这个问题有任何想法吗?预先感谢!

javascript blob web-audio-api audiobuffer
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();
© www.soinside.com 2019 - 2024. All rights reserved.