用纯java回声取消android

时间:2015-08-11 12:52:00

标签: java android android-ndk aec echo-cancellation

我在API级别11中以16位pcm缓冲区录制语音和播放同步 并使用纯java来回应取消我尝试了许多方式,例如在jni中使用android ndk的webrtc但是对我来说不成功感谢任何想法。

AudioRecord  recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO,  AudioFormat.ENCODING_PCM_16BIT, audioBufferSize);                        
AudioTrack player = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, audioBufferSize, AudioTrack.MODE_STREAM);

recorder.startRecording();
player.play();

 short [] buffer = new short[1024];
 short [] buffer_tmp = new short[1024];
 MobileAec aec = new MobileAec();  

 while (at_isRun) 
 {       
   recorder.read(buffer, 0, buffer.length);
   aec.doAEC(buffer, buffer_tmp)// set AEC to reference of buffer.  
   player.write(buffer, 0, buffer.length);   

   for(int i=0; i<buffer.length; i++)                     
    buffer_tmp[i] = buffer[i];
 }

2 个答案:

答案 0 :(得分:-1)

目前还不清楚您申请的目的是什么。录制音频并立即将其渲染回来将导致对AEC产生巨大影响的啸声。您可以阅读更多关于howling and AEC的内容。请详细说明项目的目的以及您想要实现的目标。

答案 1 :(得分:-1)

AudioSource有很多选项。 https://developer.android.com/reference/android/media/MediaRecorder.AudioSource

尝试其他人。 (MediaRecorder.AudioSource.VOICE_RECOGNITION等。)