-1
  • 设备:HUAWEI P smart

  • 安卓版本:8.0.0

  • 通用应用程序:
    RecDev1 -> PlayDev1
    RecDev2 -> PlayDev2
    “同步流”
    ,其中
    RecDev 可以是内置麦克风、USB 麦克风或耳机麦克风
    ,而
    PlayDev 可以是内置扬声器、USB 扬声器或耳机扬声器
    任何输入和输出设备应以如上所示的任何组合“同时”流式传输。

  • 示例应用程序(具有“1”通道的所有设备):
    吉他 -> 有线麦克风 -> [(处理)] -> 内置扬声器
    语音 -> 内置麦克风 -> [(处理)] -> 有线 -扬声器
    “同时流媒体”

  • 代码:
    只是双簧管提供的样本“ LiveEffect ”的扩展版本。
    到目前为止,我尝试过:
    . 直接延伸
    。LiveEffectEngine 不再是单例(2 个具有自己的长 mEngineHandle 的实例)
    。使用 2 个单独的线程
    。为录制流设置回调

  • 注意:
    我收到所有 4 个流的警告Stream is NOT low latency,但所有参数都匹配:
    SharingMode::Exclusive PerformanceMode::LowLatency (not accepted) mSampleRate 48000 (default of PlaybackDevice) AudioFormat::I16

使用 OpenSL-ES API:我无法启动第二个录制流,stream->requestStart()返回“ErrorInternal”

使用 AAudio API:我无法打开第二个录音流,builder.openStream()返回“ErrorInvalidState”

在这两种情况下,我都打电话builder->setCallback(nullptr),所以我认为使用单独的线程可能会有所帮助,但这并没有解决问题。

有任何想法吗?

4

2 回答 2

3

Android 不允许您同时向多个音频设备打开输入(即录制)音频流。不支持此用例。

也许如果您解释为什么要同时从不同的内置麦克风录制,我可以建议一种解决方法。

更新:术语音频设备是指能够或接收或发送音频的设备。音频设备可以连接多个麦克风和/或扬声器,它们表示为不同的通道。

于 2018-12-18T09:07:33.703 回答
-2

** 根据 Don Turner 的回答:“Android 不允许您同时打开多个音频设备的输入(即录制)音频流。不支持此用例。”

** 更清楚:
- Android 不支持同时从多个输入设备录制。
- Android 不支持同时播放多个输出设备。
- 当然,以上两点的组合也不起作用。

** 这可以很容易地测试,例如通过并行运行此 AAudio示例的 2 个实例并选择不同的输出设备。这根本行不通!

** 这个非常重要的约束在官方文档中没有提到!!!

** 因此,Android(oboe、aaudio、opensl es)不支持以下“示例用例”:

USB-Audio-In ---> In-line-speaker

Mic ----> USB-Audio-Out

**我很失望,我花了时间和金钱在此基础上开始做一些事情,假设这是“基本”功能......现在我不得不放弃:-(

** 如果我找到合适的地方,那么我将输入一个“请求”来支持这个“功能”,例如在 AAudio 中。

** 希望这可以帮助其他人,以免他们在 Android 和相应库提供的当前功能之外的东西上投入太多时间。


** donturner 指出的一种可能的解决方法是使用具有 2 个输入和 2 个输出的特殊 USB 声卡,它们只是同一设备中的单独通道。不幸的是,这对我来说真的不起作用,因为我的目标是无需额外硬件(使用耳机接口)的低成本解决方案。

于 2018-12-19T16:13:26.383 回答