我正在为树莓派开发一个 C++(开源)汽车收音机应用程序;https://github.com/vinthewrench/carradio
我在 ALSA api 和 Signstek USB DAC 方面取得了一些成功,但我想要一些关于如何解决与使用 4 个扬声器相关的问题的建议。
我的代码目前只知道左右通道,并且 snd_pcm_writei 调用“默认”设备。
我相信我可以添加另一个 USB DAC 来为我提供 4 个通道(正面和背面),但我不清楚如何编写代码来与所有 4 个通道通信。我怀疑答案是创建某种形式的混合虚拟设备前通道和后通道并执行 snd_pcm_open 并调用该设备。
那么问题是?配置ALSA以集成前后通道并让ALSA完成所有混音工作的正确方法是什么?
我对如何设置 ALSA 仍然有点一无所知,并且经历了一些尝试和错误。
非常感谢。
答案1
您需要设计建议:不使用两个不同的声卡直接通过 ALSA 驱动相同输出的通道。原因是每个声卡都有一个稍微不同的主时钟,两个通道对的时钟会分开,一段时间后(当你最不期望的时候)你的应用程序将开始出现有趣的错误。
因此,要么使用可以重新采样并纠正时钟漂移的东西(例如Pulseaudio)。或者找一些有4通道的USB声卡,有很多可供选择。
配置ALSA以集成前后通道并让ALSA完成所有混音工作的正确方法是什么?
如果你是受虐狂并坚持这样做,请看看多插件,并记下其上的附加route
或插件。plug