2017-08-09 101 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樣本澄清你的參數設置