Эхоподавление 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. Пожалуйста, опишите цель вашего проекта и что именно вы пытаетесь достичь.