diff --git a/daemon/src/audio/opensl/opensllayer.cpp b/daemon/src/audio/opensl/opensllayer.cpp index 5020dbef70b48741ee78a2adceef3895cc340ce2..bb0387f957f2fd5e655254391842d182a23b6d15 100644 --- a/daemon/src/audio/opensl/opensllayer.cpp +++ b/daemon/src/audio/opensl/opensllayer.cpp @@ -339,12 +339,15 @@ OpenSLLayer::initAudioCapture() // create audio recorder // (requires the RECORD_AUDIO permission) DEBUG("Create audio recorder\n"); - const SLInterfaceID id[] = {SL_IID_ANDROIDSIMPLEBUFFERQUEUE}; - const SLboolean req[] = {SL_BOOLEAN_TRUE}; + const SLInterfaceID id[2] = {SL_IID_ANDROIDSIMPLEBUFFERQUEUE, + SL_IID_ANDROIDCONFIGURATION}; + const SLboolean req[2] ={SL_BOOLEAN_TRUE, + SL_BOOLEAN_TRUE}; + SLAndroidConfigurationItf recorderConfig; if (engineInterface_ != nullptr) { result = (*engineInterface_)->CreateAudioRecorder(engineInterface_, - &recorderObject_, &audioSource, &audioSink, 1, id, req); + &recorderObject_, &audioSource, &audioSink, 2, id, req); } if (SL_RESULT_SUCCESS != result) { @@ -352,6 +355,22 @@ OpenSLLayer::initAudioCapture() return; } + /* Set Android configuration */ + result = (*recorderObject_)->GetInterface(recorderObject_, + SL_IID_ANDROIDCONFIGURATION, + &recorderConfig); + if (result == SL_RESULT_SUCCESS) { + SLint32 streamType = SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION; + result = (*recorderConfig)->SetConfiguration( + recorderConfig, SL_ANDROID_KEY_RECORDING_PRESET, + &streamType, sizeof(SLint32)); + } + + if (result != SL_RESULT_SUCCESS) { + DEBUG("Warning: Unable to set android recorder configuration"); + return; + } + // realize the audio recorder DEBUG("Realize the audio recorder\n"); result = (*recorderObject_)->Realize(recorderObject_, SL_BOOLEAN_FALSE);