JavaScript - 将多个音频 blob 合并为一个?

时间:2021-02-07 17:03:04

标签: javascript audio blob mediarecorder mediadevices

我已经阅读了大量有关相关主题的答案 - 主要是询问如何连接多个录音(即一个接一个播放)。我希望合并我的音频 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 属性或分配的媒体提供程序对象指示的媒体资源不合适。

0 个答案:

没有答案