【问题标题】:Android source and AudioRecord multi-utilisationAndroid源和AudioRecord多用途
【发布时间】:2014-09-08 22:50:13
【问题描述】:

我目前正在构建一个 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 行

我想知道这样做的目的是什么?硬件限制?

【问题讨论】:

  • 你实现过那个分离器吗?你能告诉我你做了什么吗?
  • 它还没有完成,但我可以给你一些信息!
  • @michael 写的答案很好,事实上你必须修改audioflinger(输入部分)以匹配输出的工作方式,然后你必须修改记录从 hardware->codec->dispatch(audioflinger) 到 hardware->dispatch->codec 的架构
  • @Vlad 如果您想了解更多信息,请通过 colliotv.epitech@gmail.com 联系我

标签: android audio-recording android-source android-build


【解决方案1】:

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

要在录制场景中处理多个并发客户端,您需要某种流分离器来处理来自驱动程序的音频缓冲区并将它们提供给所有客户端,并可能执行重新采样、单声道/立体声转换,等等。一个普通的 Android 实现根本没有分流器(反正不是我最后一次看)。
当我在索尼工作时,我们在几部手机(Xperia P、U 和Solo,IIRC),这使我们能够支持多个录音客户端。所以是可以做到的,但也不是小事。

【讨论】:

  • 所以如果我想开始我的研究,浏览和学习 libaudioflinger 就足够了,还是我应该看看另一个更有用的代码?
  • libaudioflinger 似乎是添加分流器的好地方(我们使用的那个是在那里添加的),因此一方面了解 libaudioflinger 的不同部分以及它如何连接到音频 HAL,并且另一方面,客户端 API(例如AudioRecord)当然是个好主意。
【解决方案2】:

任何人都在猜测为什么这会成为政策。也许它决定了 API 将限制或抢占拥有麦克风输出的其他客户端。

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

查看“audiotrack”here 了解玩家使用缓冲区的一些背景。

然后

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

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 2012-10-07
    • 2012-09-23
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2014-10-19
    相关资源
    最近更新 更多