Не могу отменить эхо при использовании 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. Он ссылается на кадр буфера и реализует собственную буферизацию. Но я действительно не знаю, как реализовать собственную буферизацию, чтобы мой код работал хорошо.

0 ответов

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