我对ALSA声音库有疑问。
让我首先说明对我这样的问题的通常答复是“使用杰克”, 并且那个anwer没有帮助,因为我可能不能使用JACK。 我在Android设备上运行本机linux程序(不是 NDK,但真的是原生的),而且从我收集的内容来看,JACK在Android上不起作用,因为一些libc和posix的东西不兼容。
问题:
1)我可以使用2个不同的线程,a)读取捕获的样本和b)播放样本吗?我见过的所有ALSA“全双工”示例只是使用带有阻塞功能的声卡的交替读取/写入,这看起来效果不是很好,特别是如果你的程序应该做的多一点。
2)据我所知,ALSA混合了不同应用程序播放的音频,就像windows音频混音器一样。是否有可能获得对音频设备的独占访问权限,这样我的应用程序可以保证是唯一一个播放音频的应用程序,没有混音和音频设备。正在降低动态范围?
答案 0 :(得分:2)
您可以为两个播放/捕获设备使用两个线程(请参阅the documentation)。
只有在使用dmix
插件时,ALSA才会混合音频。默认情况下,此配置仅适用于大多数桌面声卡。
如果您打开hw
或plughw
设备,则会绕过任何软件混音。
(只要只播放一个流,数据就不会以任何方式降级。)