Не могу отменить эхо при использовании Speex в андроиде
Я использую speex lib в своем приложении для Android, чтобы два телефона могли общаться друг с другом. Это мой код клиента. Это хорошо работает, когда я удаляю эту строку: short[] result = SpeexEchoCanceller.getInstance(). Process(recordBuff,toShortArray(receiveBuff)); Когда добавляете эту строку, другой телефон только слышит много шума и не слышит мой голос.
private static final int buffSize = 1000; закрытый байт [] receiveBuff = новый байт [buffSize];
private short[] recordBuff = new short[buffSize];
private void startTalk(){
new Thread(new Runnable() {
@Override
public void run() {
try {
// start AudioRecord and init speex
SpeexEchoCanceller.getInstance().open(8000,160,100);
//.....some code......
isRecording = true;
while(isRecording){
int len = 0;
if(((len = mServerInputStream.read(receiveBuff)) != -1) && mAudioTrack != null){
mAudioTrack.write(receiveBuff,0,len);
mAudioTrack.flush();
}
mAudioRecord.read(recordBuff, 0, buffSize);
//process echo
short[] result = SpeexEchoCanceller.getInstance().process(recordBuff,toShortArray(receiveBuff));
byte[] resultByte = toByteArray(result);
mServerOutStream.write(resultByte,0,buffSize);
mServerOutStream.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
Здесь я нахожу старую тему: проблемы с эхоподавлением Android Speex. Он ссылается на кадр буфера и реализует собственную буферизацию. Но я действительно не знаю, как реализовать собственную буферизацию, чтобы мой код работал хорошо.