使用 OpenSL ES 替换默认 MIC(Android 中的原生音频)

Replace Default MIC using OpenSL ES(Native-audio in Android)

我是 Android 使用 OpenSL ES 的原生音频的新手,我需要您的帮助。

现在想写一个实时录音和回放的app。在录音部分,我们在制作录音机时,首先要配置音源。像这样。

SLDataLocator_IODevice loc_dev = {SL_DATALOCATOR_IODEVICE,SL_IODEVICE_AUDIOINPUT,SL_DEFAULTDEVICEID_AUDIOINPUT, NULL};
SLDataSource audioSrc = {&loc_dev, NULL};

SL_DEFAULTDEVICEID_AUDIOINPUT是Default microphone的地址。我想在 android phone 上使用其他 MIC(我正在使用具有三个不同 MIC 的 Nexus 6),但我找不到其他 MIC 的地址。

感谢任何回复!

OpenSLES.h 我们得到了一些类型的 IODevices,它们是..

/** IODevice-types */
#define SL_IODEVICE_AUDIOINPUT  ((SLuint32) 0x00000001)
#define SL_IODEVICE_LEDARRAY    ((SLuint32) 0x00000002)
#define SL_IODEVICE_VIBRA       ((SLuint32) 0x00000003)
#define SL_IODEVICE_RESERVED4   ((SLuint32) 0x00000004)
#define SL_IODEVICE_RESERVED5   ((SLuint32) 0x00000005)

您可以尝试其中的每一个来检查它们是否满足您的需求。

你也可以看看OpenSLES_AndroidConfiguration.h。在初始化 AudioRecorder 时,您在此处有一些 Android 配置来设置输入类型。

/*---------------------------------------------------------------------------*/
/* Android AudioRecorder configuration                                       */
/*---------------------------------------------------------------------------*/

/** Audio recording preset */
/** Audio recording preset key */
#define SL_ANDROID_KEY_RECORDING_PRESET ((const SLchar*) "androidRecordingPreset")
/** Audio recording preset values */
/**   preset "none" cannot be set, it is used to indicate the current settings
 *     do not match any of the presets. */
#define SL_ANDROID_RECORDING_PRESET_NONE                ((SLuint32) 0x00000000)
/**   generic recording configuration on the platform */
#define SL_ANDROID_RECORDING_PRESET_GENERIC             ((SLuint32) 0x00000001)
/**   uses the microphone audio source with the same orientation as the camera
 *     if available, the main device microphone otherwise */
#define SL_ANDROID_RECORDING_PRESET_CAMCORDER           ((SLuint32) 0x00000002)
/**   uses the main microphone tuned for voice recognition */
#define SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION   ((SLuint32) 0x00000003)
/**   uses the main microphone tuned for audio communications */
#define SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION ((SLuint32) 0x00000004)

这些主要是为了试错。我没有任何确切的解决方案。