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

Javascript 什么';将音频缓冲区放入可由音频元素播放的blob中的最佳方法是什么?,javascript,blob,web-audio-api,audiobuffer,Javascript,Blob,Web Audio Api,Audiobuffer,我有一个作为变量存储的AudioBuffer,我想让它由音频元素播放。以下是我当前的无效代码: const blob = new Blob(audioBuffer.getChannelData(1), { type: "audio/wav" }); const url = window.URL.createObjectURL(blob); audioElement.src = url; 当我尝试播放audioElement时,出现以下错误: 未捕获(承诺中)DOMEException:元素没有

我有一个作为变量存储的AudioBuffer,我想让它由音频元素播放。以下是我当前的无效代码:

const blob = new Blob(audioBuffer.getChannelData(1), { type: "audio/wav" });
const url = window.URL.createObjectURL(blob);
audioElement.src = url;
当我尝试播放audioElement时,出现以下错误:

未捕获(承诺中)DOMEException:元素没有支持的源


有人对如何解决这个问题有什么想法吗?提前谢谢

音频缓冲区是PCM数据,尚未编码为WAV。如果您需要WAV,您应该获得一个库来为您进行编码,例如

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

constblob=newblob([audioBufferToWav(audioBuffer.getChannelData(1))],{type:“audio/wav”});
constURL=window.url.createObjectURL(blob);
audioElement.src=url;
下面使用Web音频API直接播放PCM AudioBuffer

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

音频缓冲区是PCM数据,尚未编码为WAV。如果您需要WAV,您应该获得一个库来为您进行编码,例如

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

constblob=newblob([audioBufferToWav(audioBuffer.getChannelData(1))],{type:“audio/wav”});
constURL=window.url.createObjectURL(blob);
audioElement.src=url;
下面使用Web音频API直接播放PCM AudioBuffer

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

我根本不喜欢WAV,编码到WAV是将音频缓冲区放入音频元素的src的最简单方法吗?是的。根据您正在执行的操作,可能有更好的方法,例如使用createMediaElementSource。但是如果一个音频缓冲区需要连接到一个音频元素,是的,编码到WAV是最简单的方法。我根本没有真正连接到WAV,编码到WAV是将这个音频缓冲区连接到音频元素的src的最简单的方法吗?是的。根据您正在执行的操作,可能有更好的方法,例如使用createMediaElementSource。但是考虑到音频缓冲区需要连接到音频元素,是的,编码到WAV是最简单的方法。