web-audio-api - 如何使用 WebAudio 将多个立体声信号混合为一个?
问题描述
我正在编写一个网络应用程序,它需要将多个立体声声音组合成一个立体声输出,所以我想要一个等效于gstreamer 的 audiomixer element,但 WebAudio 中似乎没有。ChannelMerger 做的事情并不完全相同——它将多个单声道信号组合成一个多通道信号。
AudioNode.connect 的文档说您可以将输出连接到其他节点的多个输入,并且尝试将相同的输出连接到相同的输入多次被忽略。但它并没有说明如果您尝试将多个不同的输出连接到同一个输入会发生什么。这会像我想要的那样充当简单的混音器吗?我怀疑不是,因为 WebAudio 确实提供的拆分/合并功能(参见上面的 ChannelMerger)似乎主要基于在多个单声道信号和一个多声道信号之间进行转换,并具有一个通道到一个单声道信号映射。
我可以采用任意节点(我猜 GainNode 可以工作,我可以利用它的增益功能)并将其 channelInterpretation 模式设置为“扬声器”以实际混合通道,但它仅适用于 1、2、4 或 6输入。我不太可能需要超过 6 个,但我肯定需要能够处理 3 个,可能还有 5 个。这可以通过使用多个混音器来完成(例如,对于一个混音器中的三个通道混合输入 1 和 2,然后在第二个混音器中将其输出与输入 3 混合),但我认为我必须添加更多 GainNode 才能正确平衡混音。混频器可能必须衰减每个输入以防止同时出现的峰值超出范围,因此对于没有补偿的链式混频器,我最终会得到 1/4,1/4,1/2 而不是 1/3,1/3 ,1/3?
解决方案
你几乎做对了。使用单个GainNode
并将每个源连接到单个输入到GainNode
. 这将总结所有不同的连接并产生单个输出。如果您知道所有单独的源都是立体声的,则无需更改 , 或 的任何内容channelInterpretation
即可channelCountMode
获得channelCount
所需的内容。
您可能必须调整增益值GainNode
以降低输出音量,以免过度驱动输出设备。
除此之外,这应该都可以。
推荐阅读
- uitableview - 如何使用 JSON 数据填充自定义 UITableViewCell?
- cassandra - Cassandra 何时确认写入?
- numbers - 增加产生最后一位数和效率顺序的素数
- node.js - Heroku Postgres 无法在 Windows 上拉和推
- php - laravel 试图提取收到的 id,不能使用它
- android - 从帮助程序类访问共享首选项
- python - 将 F# 的列表处理与 python 的 pandas 矢量化进行比较
- sql - 列中的Sqlite3商店列表
- python - 为什么在本地 Windows 上工作时,带有 nordvpn socks 代理的 python 发布请求在远程托管服务器上不起作用?
- amazon-s3 - AWS Amplify:使用 Storage.list 返回标签和/或元数据