1

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

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

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

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

4

2 回答 2

1

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

于 2019-05-20T15:45:47.653 回答
1

我可以在三星 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() list = [1 ,2] !

于 2020-02-20T13:26:54.430 回答