Эхоподавление Android с чистой Java

Я записываю голос и играю синхронно в 16-битном буфере pcm на уровне API 11 и использую чистую Java для эхоподавления. Я пробовал много способов, таких как webrtc в jni с android ndk, но безуспешно для меня, спасибо за любую идею.

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];
 }

1 ответ

Для AudioSource есть много вариантов. https://developer.android.com/reference/android/media/MediaRecorder.AudioSource

Попробуйте другие. (MediaRecorder.AudioSource.VOICE_RECOGNITION и т. Д.)

Неясно, какова цель вашего приложения. Запись аудио и их немедленная рендеринг приведут к вой, что сильно повлияет на AEC. Вы можете прочитать немного больше о вой и AEC. Пожалуйста, опишите цель вашего проекта и что именно вы пытаетесь достичь.

Другие вопросы по тегам