Я работаю над приложением для записи звонков с использованием источника звука MediaRecorder VOICE_CALL. На некоторых устройствах с зефиром происходит сбой, затем я изменил источник на MIC, здесь входящий голос не записывается. Из-за этого ограничения Java теперь я работаю над собственным кодом Android для записи голосового вызова. Мне удалось записать звук с помощью native-audio рекордер для регистратора звонков. Проблема в нативном коде, также он записывает только односторонний голос, входящий голос не записывается. Затем я попробовал предустановленную конфигурацию голосовой связи, но она не записывалась. Ниже приведен код предустановленной конфигурации.
const SLInterfaceID id[2] = { SL_IID_ANDROIDSIMPLEBUFFERQUEUE,SL_IID_ANDROIDCONFIGURATION};
const SLboolean req[2] = { SL_BOOLEAN_TRUE,SL_BOOLEAN_TRUE};
result = (*engineEngine)->CreateAudioRecorder(engineEngine, &recorderObject, &audioSrc,
&audioSnk, 2, id, req);
SLAndroidConfigurationItf inputConfig;
result = (*recorderObject)->GetInterface(recorderObject,
SL_IID_ANDROIDCONFIGURATION,
&inputConfig);
if (SL_RESULT_SUCCESS == result) {
SLuint32 presetValue =SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION ;
(*inputConfig)->SetConfiguration(inputConfig,
SL_ANDROID_KEY_RECORDING_PRESET,
&presetValue,
sizeof(SLuint32));
__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "\n Native PCM Conf Success\n");
} else{
__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "\n Native PCM Conf Error %d\n",result);
}
После добавления предустановленной конфигурации я получаю системную ошибку при запуске записи голосового вызова:
E / AudioRecord: не удалось получить аудиовход для источника записи 7, частота дискретизации 16000, формат 0x1, маска канала 0x10, сеанс 925, флаги 0
E / libOpenSLES: android_audioRecorder_realize (0x559548c350) ошибка при создании объекта AudioRecord; статус -22
W / libOpenSLES: Выход из Object :: Realize (SL_RESULT_CONTENT_UNSUPPORTED)