【问题标题】:ALSA - multithreading, and "exclusive access" to audio HWALSA - 多线程和对音频硬件的“独占访问”
【发布时间】:2013-01-20 10:33:12
【问题描述】:

我对 ALSA 声音库有疑问。

首先让我声明,对我这样的问题的通常回答是“使用 JACK”, 并且那个答案没有帮助,因为我可能无法使用 JACK。 我在 Android 设备上运行一个原生 linux 程序(不是 NDK,但真的是原生的),根据我的收集,JACK 不能在 Android 上运行,因为一些 libc 和 posix 东西不兼容。

问题:

1) 我可以使用 2 个不同的线程来 a) 读取捕获的样本和 b) 回放样本吗?我见过的所有 ALSA “全双工”示例都只是使用带有阻塞功能的声卡交替读取/写入,这似乎不是很好,特别是如果你的程序应该做更多的事情。

2) 据我了解,ALSA 混合不同应用程序播放的音频,就像 Windows 音频混合器一样。是否有可能获得对音频设备的独占访问权限,从而保证我的应用程序是唯一播放音频的应用程序,而不会发生动态范围的混合和降级?

【问题讨论】:

  • 据我所知,Android OS 负责管理系统声音,没有办法在非 root/非修改设备上直接访问 ALSA。
  • 更重要的是,不能保证底层实际上是 ALSA。
  • 这是什么意思/你能详细说明吗,Marko?
  • 至于有根设备,这与我正在做的事情无关,摆弄自定义设备。

标签: android linux audio alsa


【解决方案1】:
  1. 您可以为两个播放/捕获设备使用两个线程(请参阅the documentation)。

  2. ALSA 仅在使用 dmix 插件时才混合音频。默认情况下,此配置仅适用于大多数桌面声卡。

    如果您打开hwplughw 设备,将绕过任何软件混音。

    (只要只有一个流在播放,数据不会以任何方式降级。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2018-10-10
    • 2022-01-23
    相关资源
    最近更新 更多