如何使用 Android 的 Oboe/AAudio 从多个麦克风读取数据
How to read data from multiple microphones using Android's Oboe/AAudio
我对使用 Android 双簧管库访问 phone 上的两个 microphone 很感兴趣。大多数 phones 都有双麦克风配置,我想同时从两个麦克风读取数据。我扩展了双簧管的 "LiveAffect" 示例,并尝试了以下操作:
我的 phone(Note 9 和 Pixel 1)上有两个 oboe::AudioStream,每个微型 phone 一个。 运行 只有一个流工作正常,我能够读取数据并将其播放 back/save 到文件。但是启动两个流都不起作用(尝试通过 stream->requestStart()
启动第二个流时出现以下错误:E/AUDIO-APP:启动流时出错。ErrorInvalidState) .显然,启动两个输入流是一个 Android 限制,如这个 SO 问题中所讨论的:
有一个流但有 2 个频道。我的 Note 9 上的两个麦克风是同一组的一部分,但是当我用两个通道 (->setChannelCount(oboe::ChannelCount::Stereo);
) 打开一个流时,我在两个通道中只得到一个 micro[=41= 的重复数据].我试过使用 AudioStreamBuilder
设置,例如设置 ->setInputPreset(oboe::InputPreset::Camcorder)
。 InputPresets
设置的 None 修复了它,仍然在两个通道中镜像数据。
这两种尝试都无法使用 OpenSL 后端。
我相当确定这是特定设备的问题。一位用户在 JUCE forum here 上报告了相同的问题。我已经在内部提交了一个错误 (id: 133143785),并将尝试将其发送给三星进行进一步调查。
我在三星 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.
我注意到奇怪的事情,机器人 AudioManager.getDevices (AudioManager.GET_DEVICES_ALL) 在这个设备上 returns 使用单声道音频后的不同列表 ( 2 x TYPE_BUILTIN_MIC )或立体声(1x TYPE_BUILTIN_MIC)都具有 AudioDeviceInfo.getChannelCounts() list = [1,2] !
我对使用 Android 双簧管库访问 phone 上的两个 microphone 很感兴趣。大多数 phones 都有双麦克风配置,我想同时从两个麦克风读取数据。我扩展了双簧管的 "LiveAffect" 示例,并尝试了以下操作:
我的 phone(Note 9 和 Pixel 1)上有两个 oboe::AudioStream,每个微型 phone 一个。 运行 只有一个流工作正常,我能够读取数据并将其播放 back/save 到文件。但是启动两个流都不起作用(尝试通过
stream->requestStart()
启动第二个流时出现以下错误:E/AUDIO-APP:启动流时出错。ErrorInvalidState) .显然,启动两个输入流是一个 Android 限制,如这个 SO 问题中所讨论的:有一个流但有 2 个频道。我的 Note 9 上的两个麦克风是同一组的一部分,但是当我用两个通道 (
->setChannelCount(oboe::ChannelCount::Stereo);
) 打开一个流时,我在两个通道中只得到一个 micro[=41= 的重复数据].我试过使用AudioStreamBuilder
设置,例如设置->setInputPreset(oboe::InputPreset::Camcorder)
。InputPresets
设置的 None 修复了它,仍然在两个通道中镜像数据。
这两种尝试都无法使用 OpenSL 后端。
我相当确定这是特定设备的问题。一位用户在 JUCE forum here 上报告了相同的问题。我已经在内部提交了一个错误 (id: 133143785),并将尝试将其发送给三星进行进一步调查。
我在三星 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.
我注意到奇怪的事情,机器人 AudioManager.getDevices (AudioManager.GET_DEVICES_ALL) 在这个设备上 returns 使用单声道音频后的不同列表 ( 2 x TYPE_BUILTIN_MIC )或立体声(1x TYPE_BUILTIN_MIC)都具有 AudioDeviceInfo.getChannelCounts() list = [1,2] !