javascript - 使用 WebAudio 合并/混合两个音频流

标签 javascript html audio stream webrtc

我有一个来自 navigator.getUserMedia 的 MediaStreamSource,它连接到 GainNode,而 GainNode 又连接到 ScriptProcessorNode,如下所示:

[getUserMediaStream] -> [MediaStreamSource] -> [GainNode] -> ScriptProcessorNode -> (destination)

在我的应用程序中,ScriptProcessorNode 执行主要工作,即通过 WebSocket 处理原始音频流并将其传输到远程服务器(我的应用程序基本上是基于 Web 的录音机)以进行保存。这很好用。

但是,现在我要介绍第二个 MediaStreamSource,这次是从 WebRTC PeerConnection 获取的。对等连接本身工作正常,如果将音频路由到元素中,我可以听到来自对等点的音频。但是,我希望第二个 MediaStreamSource 也通过管道传输到 ScriptProcessorNode,从而有效地记录两个音频流。

我要做的是在两个音频流到达 ScriptProcessorNode 之前将它们混合在一起。我尝试将第二个 MediaStreamSource 连接到同一个 GainNode(也直接连接到 ScriptProcessorNode),但这不起作用,因为这些节点都不接受超过一个输入节点(即使它在尝试连接多余节点时从未返回任何错误).我正在努力实现这样的目标:

像这样:

[MediaStreamSource] -> [Intermediary Node(s)?] -> [GainNode] -> [ScriptProcessorNode] -> [Server]
                     /
[MediaStreamSource] /

然后我查看了 WebAudio 规范,发现实际上接受多个输入的唯一节点是 ChannelMergerNode。然而,规范指出流是根据它们连接到节点的顺序合并到 channel 中的,因此连接到输入的第一个流将成为输出的左 channel ,第二个流将成为右 channel 。由此我认为结果将只是左耳上的一个流和右耳上的另一个流。我只想将两个流合并并平均混合到一个单声道中。

对于当前的 WebAudio API,这完全可能吗?

非常感谢您的帮助!

埃里克

最佳答案

您是否尝试将 ChannelMergerNode 与下混结合使用?

http://www.w3.org/TR/webaudio/#UpMix <-- 棘手的链接,它是关于下混和上混

关于javascript - 使用 WebAudio 合并/混合两个音频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20532089/

相关文章:

JavaScript - 使用 for 循环项声明变量

javascript - 处理 JavaScript 中未定义的属性

javascript - 如何移动天气状况旁边的天气图标?

java - 查找字符串中的子字符串(HTML、Android)

javascript - 空间接口(interface) : animating containers back and forth to a sidebar

linux - ALSA 与 PulseAudio - 延迟问题

Javascript for 循环检查条件

html - 未对齐的文本和单选按钮

audio - 不允许将XHTML元素音频作为SVG元素的子元素

ios - 使用 Audio Session 录制时如何减少录音噪音?