我已经阅读了大量有关相关主题的答案 - 主要是询问如何连接多个录音(即一个接一个播放)。我希望合并我的音频 blob,以便它们同时播放(例如背景音轨和人声)。
(注意 - 我说的是合并已经记录的 blob 数据,不是合并流,我意识到can be done。)
我的音频是从 ondataavailable
事件提供的记录数据。
let recData = [
[ /* recording 1 data chunks */ ],
[ /* recording 2 data chunks */ ],
/* ... */
]
当我将它提供给 new Blob()
时,我可以通过将数组展平来让它们连续播放:
let blob = new Blob(recData.flat()),
audio = new Audio(URL.createObjectUrl(blob));
audio.play(); //plays joined recordings, one after the other
但我还没有找到如何(或是否)合并录音以同时播放。我读过关于音频数据 API 可以做到这一点的传言,但我没有看到任何解决方案。此外,我看到一个回答说你可以像这样建立一个合并的 blob:
let blob = new Blob(recData[0]);
recData.slice(1).forEach(arr => blob = new Blob([blob, arr]));
但是当我尝试玩时,我得到了
<块引用>未捕获(承诺)DOMException:由 src 属性或分配的媒体提供程序对象指示的媒体资源不合适。