Android Oboe库:可以从2个录制设备进行2个流录制吗?

时间:2018-12-15 20:04:39

标签: oboe

  • 设备:HUAWEI P smart

  • Android版本:8.0.0

  • 通用申请:
    RecDev1-> PlayDev1
    RecDev2-> PlayDev2
    “同时流式传输”
    在哪里
      RecDev可以内置麦克风,USB麦克风或耳机麦克风

      PlayDev可以是内置扬声器,USB扬声器或耳机扬声器
    如上所示,任何输入和输出设备均应以任意组合“同时”传输。

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

  • 代码:
    只是oboe提供的示例“ 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:我无法启动第二个RecordingStream,stream->requestStart()返回“ ErrorInternal”

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:-3)

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

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

**这很容易测试,例如通过并行运行此AAudio Sample的2个实例并选择不同的输出设备。这将行不通!

**官方文档中未提及此非常重要的约束条件!!!

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

USB音频输入--->内置扬声器
 并同时
麦克风----> USB音频输出

**我很失望,我花了很多时间和金钱来开始一些基于此的事情,假设这是“基本”功能...现在我必须放弃:-(

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

**希望这对其他人有帮助,然后再花太多时间在Android和相应库提供的当前功能之外的东西上。


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