如何使用WebAudio将多个立体声信号混合到一个?

时间:2018-12-08 16:11:07

标签: web-audio

我正在编写一个Web应用程序,该应用程序需要将多种立体声声音组合到一个立体声输出中,所以我想要一个等效的gstreamer's audiomixer element,但WebAudio中似乎没有。 ChannelMerger的功能不尽相同-将多个单声道信号合并为一个多通道信号。

AudioNode.connect的文档说,您可以将输出连接到其他节点的多个输入,并且将同一输出多次连接到同一输入的尝试将被忽略。但这并没有说明如果您尝试将多个不同的输出连接到同一输入将会发生什么。可以像我想要的那样充当简单的混音器吗?我怀疑不是,因为WebAudio确实提供的拆分/合并功能(请参阅上面的ChannelMerger)似乎主要基于在多个单声道信号和一个通道与一个单声道信号映射的一个多通道信号之间进行转换。

我可以选择一个任意节点(我想GainNode可以工作,并且可以利用其增益功能),并将其channelInterpretation模式设置为“扬声器”以实际混合通道,但是它仅适用于1、2 4或6个输入。我不太可能需要超过6,但我绝对需要能够处理3,甚至可能是5。这可以通过使用多个混音器来完成(例如,对于三个通道,将一个混音器中的输入1和2混音,然后在第二个混频器中将其输出与输入3混合),但是我想我必须添加更多的GainNodes才能正确平衡混合。混频器可能必须衰减每个输入,以防止重合的峰值削波超出范围,因此对于没有补偿的链式混频器,我最终将以1 / 4、1 / 4、1 / 2而不是1 / 3、1 / 3结束,1/3?

1 个答案:

答案 0 :(得分:3)

您几乎完全正确。使用单个GainNode,并将每个源连接到GainNode的单个输入。这将汇总所有不同的连接并产生单个输出。如果您知道所有单独的信号源都是立体声,则无需更改channelInterpretationchannelCountModechannelCount的任何内容即可得到想要的东西。

您可能必须调整GainNode的增益值以减小输出音量,以免过驱动输出设备。

除此之外,这都应该起作用。