我正在使用MediaRecorder VOICE_CALL 音频源处理呼叫记录器应用程序,在一些marshmallow设备中它崩溃,然后我将源更改为 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)
答案 0 :(得分:0)
检查文档并设置正确的采样率,格式和掩码。通道掩码可以是立体声或单声道。我不确定你是如何获得状态-22错误的,但根据文档
,Realize错误非常清楚如果不支持格式,则SL_RESULT_CONTENT_UNSUPPORTED(例如,采样率太高)
查看NDK示例以阐明您的参数设置