2017-08-09 103 views
3

我正在使用MediaRecorder VOICE_CALL音源通话记录的应用程序,在它的崩溃一些棉花糖设备,后来我改变源MIC这里传入的声音是没有得到记录。现在由于这个java限制,我正在使用原生android代码来记录语音通话。 我设法使用native-audio录音机录制通话记录。问题是在本地代码中也只记录单侧语音,传入语音没有被记录。然后我试着语音通讯预设配置,它没有录音。以下是预设的配置代码。如何OpenSL配置录制语音呼叫

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 ,channel mask 0x10,session 925,flags 0

E/libOpenSLES:android_audioRecorder_realize(0x559548c350)创建AudioRecord对象时出错;状态-22

W/libOpenSLES:离开的物体::实现(SL_RESULT_CONTENT_UNSUPPORTED)

+0

你说的是https://github.com/googlesamples/android-ndk/tree/master/audio-echo这个链接,但在我的情况下音频文件是不是跟这个代码创建 –

+0

没有我用这个例子:https://github.com/googlesamples/android-ndk/tree/master/native-audio,并在语音呼叫我启动记录器并将缓冲区存储文件保存为sd卡内的.pcm。 检查此链接保存到SD卡:https://stackoverflow.com/questions/18444354/save-recorded-audio-to-file-opensl-es-android –

+0

意味着它不会自动启动?我运行的代码有一个按钮启动,所以当我打电话给任何一个tmo然后我去这个应用程序并按下按钮启动,然后它会开始记录?它把我的文件放在哪个文件夹中? –

回答

0

检查文档和设置正确的采样速率,格式和掩码。频道掩码可能是立体声或单声道。我不知道你是如何获取状态-22错误,但错误认识是非常明确的,按照文件

SL_RESULT_CONTENT_UNSUPPORTED如果不支持的格式(如采样率太高)

看在NDK样本澄清你的参数设置