【问题标题】:How to read data from multiple microphones using Android's Oboe/AAudio如何使用 Android 双簧管/音频从多个麦克风读取数据
【发布时间】:2019-09-22 14:18:54
【问题描述】:

我对使用 Android Oboe 库访问手机上的两个麦克风很感兴趣。大多数手机都有双麦克风配置,我想同时从两者读取数据。我扩展了 Oboe 的“LiveAffect”示例,并尝试了以下方法:

  1. 有两个 oboe::AudioStream,一个用于我手机上的每个麦克风(注 9 和 Pixel 1)。只运行一个流工作正常,我能够读取数据并播放/保存到文件。但是启动两个流都不起作用(尝试通过stream->requestStart() 启动第二个流时出现以下错误:E/AUDIO-APP:启动流时出错。ErrorInvalidState)。显然,启动两个输入流是一个 Android 限制,正如这个 SO 问题中所讨论的:Android Oboe Library: 2 streams recording from 2 recording devices possible?

  2. 有一个流但有 2 个频道。我的 Note 9 上的两个麦克风属于同一组,但是当我打开一个带有 2 个通道 (->setChannelCount(oboe::ChannelCount::Stereo);) 的流时,我在两个通道中只获得一个麦克风的重复数据。我尝试过使用AudioStreamBuilder 设置,例如设置->setInputPreset(oboe::InputPreset::Camcorder)InputPresets 设置都没有修复它,仍然在两个通道中镜像数据。

两次尝试都无法使用 OpenSL 后端。

【问题讨论】:

标签: android c++ audio-recording opensl oboe


【解决方案1】:

我很确定这是特定设备的问题。一位用户在JUCE forum here 上报告了相同的问题。我已经在内部提交了一个错误(id:133143785),并将尝试将其发送给三星进行进一步调查。

【讨论】:

    【解决方案2】:

    在三星 S8 上获得两个麦克风(AAUDIO 或 SLES)的立体声输入的唯一方法是设置:

    builder->setDeviceId(0) // mandatory ! if set to the microphone id you get only one mic!
    builder->setDirection(oboe::Direction::Input) // obvious
    builder->setChannelCount(2) // obvious
    builder->setFormat(oboe::AudioFormat::I16) // with oboe converter float should work to
    builder->setInputPreset(oboe::InputPreset::Generic) // or oboe::InputPreset::Camcorder
    builder->setUsage(oboe::Usage::Media) // unsure if this is ness.
    

    我注意到奇怪的事情,在您使用单声道(2 x TYPE_BUILTIN_MIC)或立体声(1x TYPE_BUILTIN_MIC)音频后,此设备上的 androids AudioManager.getDevices (AudioManager.GET_DEVICES_ALL) 返回一个不同的列表,所有这些音频都具有 AudioDeviceInfo.getChannelCounts() 列表= [1,2] !

    【讨论】:

    • 不幸的是,这是唯一给我立体声麦克风的配置。一旦指定了特定的麦克风 ID,我就会得到一个重复的单声道信号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    相关资源
    最近更新 更多