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

rea*_*alh 3 web-audio-api

我正在编写一个网络应用程序,需要将多个立体声声音组合成一个立体声输出,因此我想要一个相当于gstreamer 的 audiomixer element 的元素,但 WebAudio 中似乎没有。ChannelMerger 并不做完全相同的事情 - 它将多个单声道信号合并为一个多通道信号。

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

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

Ray*_*Toy 7

你几乎做对了。使用单个GainNode并将每个源连接到 的单个输入GainNode。这将总结所有不同的连接并产生一个输出。如果您知道所有单独的信号源都是立体声,则无需更改channelInterpretationchannelCountMode、 或channelCount来获得您想要的内容。

您可能需要调整增益值GainNode以降低输出音量,以免输出设备过载。

除此之外,这应该都有效。

  • 谢谢。对输入上的多个连接求和的能力是我所缺少的信息。毕竟它在规范中有记录,位于 <https://www.w3.org/TR/webaudio/#channel-up-mixing-and-down-mixing>,但我仍然在 MDN 上找不到相应的信息,这通常是一个很好的信息来源。 (2认同)