是否可以使用 Oboe 库同时在 Android 中打开 2 个麦克风?

2023-11-22

我正在尝试使用 google 打开 2 个麦克风流Oboe对于每个麦克风,像这样的库:

oboe::AudioStreamBuilder builder;
    builder.setChannelCount(channelCount)
            ->setDirection(isInput ? oboe::Direction::Input : oboe::Direction::Output)
            ->setSharingMode((oboe::SharingMode) sharingMode)
            ->setPerformanceMode((oboe::PerformanceMode) performanceMode)
            ->setInputPreset((oboe::InputPreset)inputPreset)
            ->setDeviceId(deviceId)
            ->setSessionId((oboe::SessionId) sessionId)
            ->setSampleRate(sampleRate)
            ->setFormat((oboe::AudioFormat) format)
            ->setChannelConversionAllowed(channelConversionAllowed)
            ->setFormatConversionAllowed(formatConversionAllowed)
            ->setSampleRateConversionQuality((oboe::SampleRateConversionQuality) rateConversionQuality)
            ;

oboe::AudioStream *oboeStream = nullptr;
oboe::Result result = builder.openStream(&oboeStream);

如您所见,deviceId 被传递给构建器。这是我通过一些 java 方法获得的麦克风 ID。我通过 7 和 9 作为 id,用于内置麦克风和电话麦克风。问题是当我尝试启动 2 个流时:

oboeStream.requestStart()

我在第二个流中收到此错误:

E/AudioRecord: start() status -38

但如果我尝试在两个不同的版本中仅打开第一个,然后仅打开第二个,则一切正常。那么我真的无法用 Oboe 打开 2 个麦克风流吗?看起来是一个很强大的库,应该是可以的。


大多数时候,Android 不允许您从多个线程捕获音频。您的手机有多少输入源或使用哪个库并不重要。您无法同时打开两个音频流。即使两个单独的普通应用程序也无法同时访问输入源,如果您想在另一个进程捕获流源时开始录制,则会返回错误。从 Android 10 开始,发生了一些变化。根据文档:

Android 10(API 级别 29)及更高版本强制采用优先级方案 可以在应用程序运行时在应用程序之间切换输入音频流。 在大多数情况下,如果新应用程序获取音频输入,则先前的应用程序会获取音频输入。 捕获应用程序继续运行,但收到​​静默。在某些情况下 系统可以继续向这两个应用程序传送音频。

两个流意味着两个线程,就像两个不同的应用程序。在某些情况下,两个进程可以同时捕获音频,如下所示:

助手+普通应用

无障碍服务+普通App

语音通话+普通App

欲了解更多详情,请阅读这一页在 Android 文档中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用 Oboe 库同时在 Android 中打开 2 个麦克风? 的相关文章

随机推荐

  • 如果mysql表不存在则创建

    我不太使用 php mysql 但我需要一个我认为相对简单的任务 检查表是否存在 如果不存在则创建它 我什至无法获得有用的错误消息 并且数据库中没有创建表 显然我的语法有问题
  • 禁用 jqGrid 选定行的子网格扩展

    问题 带有子网格的 jqGrid 我想禁用主网格某些行的展开 折叠功能 我其实找到了一个方法 grid jqGrid setGridParam afterInsertRow function rowid aData rowelem var
  • 如何在对象数组中查询算法数据

    我有一个数据数组 其中 Algolia 索引中包含多个对象 如下所示 status available startDate 2000 10 20 endDate 2022 10 20 availablePlatform 1 2 3 avai
  • 将表标准化为第三范式

    这道题显然是一道家庭作业题 我听不懂我的教授 也不知道他在选举期间说了什么 我需要一步一步地进行说明 首先将下表规范化为 1NF 然后是 2NF 然后是 3NF 我感谢任何帮助和指导 好吧 我希望我都记得正确 让我们开始吧 Rules 让它
  • 如何使用节点谷歌客户端 API 来获取已获取令牌的用户配置文件?

    通过获取用户个人资料信息curl curl i https www googleapis com userinfo v2 me H Authorization Bearer a google account access token 通过获
  • 更改默认 JLabel 字体

    我将如何为所有人设置默认字体JLabel实例 而不是为每个设置字体JLabel独立 Use UIManager定义 JLabel 的默认字体 import java awt FlowLayout import java awt Font i
  • 收益返回和异常处理[重复]

    这个问题在这里已经有答案了 我刚刚遇到一个使用yield return 的方法 但没有抛出我期望的ArgumentException 的情况 我在这里用最简单的类重建了这个案例 class Program static void Main
  • 将十六进制字符(连字)转换为 utf-8 字符

    我有一个从 pdf 文件转换而来的文本内容 文本中有一些不需要的字符 我想将它们转换为 utf 8 字符 例如 人工免疫系统 转换为 Arti 社会免疫系统 像一个字符一样转换 我用了gdex学习ascii角色的价值 但我不知道如何将其替换
  • 如何将WebView设置为非全屏?

    我正在尝试在我的 Android 应用程序中使用 WebView 我正在代码端 而不是 XML 创建我的 webview 我的问题是 当我调用 webview 的 loadUrl 方法时 webview 进入全屏模式 如何保持 webvie
  • 尝试编译此代码是否会导致 IDE 终止或编译器无法运行?

    提防Exit内联函数中的命令用法 我这里一直使用Delphi XE3 Symptom 在某些情况下 当调用包含以下内容的内联函数时Exit命令 以及返回值使用内联函数的directly in WriteLn 编译器报告错误消息 dcc 退出
  • 二进制 XML 文件第 8 行:膨胀类片段时出错,Google 地图

    在此应用程序中 我尝试添加功能性 V2 谷歌地图 我已经查看了大多数关于创建活动 获取地图密钥以及创建 xml 文件的教程 以尝试看看我是否错过了任何步骤 我已经完成了 4 次 但事实并非如此好像我错过了任何一步 Here是我使用的网站 当
  • “SecretKeyFactory 不可用”是什么意思?

    这有什么问题吗 for Object obj java security Security getAlgorithms Cipher System out println obj javax crypto SecretKeyFactory
  • 如何将颜色条位置向右移动

    I draw a scatter chart as below 代码是 sc plt scatter x y marker o s size r c clr vmin lb vmax ub cmap mycm alpha 0 65 cbar
  • 在sql存储过程中传递表名

    是否可以将表名作为输入参数传递给存储过程 例如 create procedure test tablename char 10 as begin select from tablename end go 我知道这行不通 那么 如果我想将表名
  • iOS 实时确定名片的角点

    我想实现像这个应用程序这样的名片检测功能 https scanbot io 相机应检测到名片并自动拍摄它的照片 仅名片 我的想法是使用BradLarson s GPUImage库 检测角点 使用 Harris 角点检测算法 计算获得的角点的
  • 使用 ClosedXML C# 库,在尝试保存时如何找出导致此错误的数据

    我有一个 C 应用程序 可以使用以下命令导出到 Excel封闭XML 它工作正常 但遇到了一个问题 当我点击时 var ms new MemoryStream workbook SaveAs ms 我得到一个例外 hexadecimal v
  • 名为 Tuple 的 C# 可以用作 MVC 页面模型类型吗?

    在 C 7 中 您可以命名元组 var foo Name Joe Age 42 如果我使用以下方法将其传递给 MVC 模型 return View foo 那么cshtml文件中应该使用什么语法来声明模型呢 虽然这不起作用 但类似 mode
  • 有人可以解释一下 Big-Oh 如何与求和一起使用吗?

    我知道这严格来说不是一个编程问题 但它is一个计算机科学问题 所以我希望有人能帮助我 I ve been working on my Algorithms homework and figuring out the Big Oh Big O
  • 如何通过另一个计算列使用一个计算列

    我在 Sqlite 中有一个查询涉及复杂的列计算 比方说 SELECT 1 1 AS a 我想将此计算选择为a 但我还需要将其用作另一个计算的组成部分 SELECT 1 1 AS a a 2 AS b 不幸的是这会产生错误 Error no
  • 是否可以使用 Oboe 库同时在 Android 中打开 2 个麦克风?

    我正在尝试使用 google 打开 2 个麦克风流Oboe对于每个麦克风 像这样的库 oboe AudioStreamBuilder builder builder setChannelCount channelCount gt setDi