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

时间:2013-12-11 23:26:13

标签: javascript html5 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。但是,规范声明流基于它们连接到节点的顺序合并到通道中,因此连接在输入上的第一个流将成为输出的左通道,第二个流将成为右通道。从这一点开始,我认为结果将最终成为我左耳上的一条流,而另一条右边则是右边的流。我只想将两个流合并并混合成一个单声道。

使用当前的WebAudio API,这是否可行?

非常感谢您的帮助!

的Eirik

1 个答案:

答案 0 :(得分:0)

您是否尝试将ChannelMergerNode与向下混合相结合?

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