代码之家  ›  专栏  ›  技术社区  ›  CollioTV

Android源和AudioRecord的多重利用

  •  2
  • CollioTV  · 技术社区  · 10 年前

    我目前正在构建一个android自定义rom,它将仅由语音控制: 所以我在android源代码中遇到了这部分代码:

    // refuse 2 active AudioRecord clients at the same time except if the active input                         
    // uses AUDIO_SOURCE_HOTWORD in which case it is closed.
    

    在里面 https://android.googlesource.com/platform/hardware/libhardware_legacy/+/master/audio/AudioPolicyManagerBase.cpp 第997行

    我想知道这是出于什么目的?硬件限制?

    2 回复  |  直到 10 年前
        1
  •  3
  •   Michael    10 年前

    在播放场景中,多个并发客户端写入同一输出是通过混合处理的,这在libaudiofringer中实现。

    要在录制场景中处理多个并发客户端,您需要某种流分离器,它负责消耗来自驱动程序的音频缓冲区,并将其提供给所有客户端,还可能执行重采样、单声道/立体声转换等。
    当我在索尼工作时,我们在几部手机(Xperia P,U和Solo,IIRC)上使用了专有的流分离器,这使我们能够支持多个录音客户端。所以这是可能的,但这不是微不足道的。

        2
  •  0
  •   Robert Rowntree    10 年前

    这是任何人的猜测,为什么会成为政策。也许这是API将限制或抢先拥有麦克风输出的其他客户的决定的基础。

    这真的重要吗?如果您想产生线程,并在麦克风的输出缓冲区中为每个线程提供原始PCM字节数组的拆分副本,您可以自由执行。

    看看“音轨” here 对于玩家使用缓冲区的一些背景。

    然后

    执行 callback's here 在记录器的实现中,在缓冲区字节上添加拆分函数。然后在各自的线程中做任何你想做的事情。