使用 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)
这些主要是为了试错。我没有任何确切的解决方案。
我是 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)
这些主要是为了试错。我没有任何确切的解决方案。