2013-02-05 39 views
1

我对ALSA声音库有疑问。ALSA - 多线程和音频“独家访问”HW

让我先说明一下,像我这样的问题的常见回答是“使用JACK”, ,并且那个anwer没有帮助,因为我可能无法使用JACK。 我正在Android设备上运行本机linux程序(而不是 NDK,但真的是本地的),并且从我所搜集的内容来看,JACK不适用于Android,因为某些libc和posix不兼容。

的问题:

1)我可以使用2个不同的线程,一个)读取捕获的样本和b)采样回放?我见过的所有ALSA“全双工”示例只是使用交替读取/写入带有阻塞函数的声卡,这看起来不是太好,特别是如果您的程序应该做的比这更多。

2)据我所知,ALSA混合不同应用程序播放的音频,非常像Windows音频混音器。是否有可能独占访问音频设备,这样我的应用程序将保证是唯一一个播放音频,而不会混淆动态范围的恶化?

+0

据我所知Android操作系统是负责管理系统的声音,也没有办法直接在非根/非修改设备上访问ALSA。 – Kristopher

+0

更重要的是,不能保证底层实际上是ALSA。 – marko

+0

你是什么意思/你能说一说吗,马可? – user1847129

回答

2
  1. 您可以为两个回放/捕获设备使用两个线程(请参阅the documentation)。

  2. 仅当使用dmix插件时,ALSA才会混音。默认情况下,这仅适用于大多数桌面声卡。

    如果您打开hwplughw设备,则任何软件混合都将被绕过。

    (只要只有一个流播放,数据将不以任何方式被降解。)