AudioTrack Echo

时间:2018-06-05 16:20:39

标签: android echo audiotrack

我正在开发一个记录声音的应用程序,并在实时"中播放它们。我从AudioRecord对象中读出一个缓冲区并进行一些操作。然后我以流模式将此缓冲区写入AudioTrack。我不知道为什么但播放中有回音。

AudioTrack对象如何工作?我会认为它在没有循环或其他东西的情况下播放我写入的内容。

在开发此类应用程序时,有没有像我这样的问题?

这让我感到疯狂。我不知道如何解决这个问题。

这是一些代码

private void startAudioTrack() {
    audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
            settings.getDesiredSampleRate(), AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_FLOAT, bufferSize,
            AudioTrack.MODE_STREAM);
    audioTrack.play();
}

private void startRecorderThread() {
    initTxtFile();
    recorderThread = new RecorderThread(settings.getDesiredSampleRate(),
            new AudioDataReceivedListener() {
        @Override
        public void onDataReceived(final float[] data) {
            try {
                mTimer = new Runnable() {
                    @Override
                    public void run() {
                        float[] filtered = filter.applyFilter(data);
                        if (filtered != null) {
                            monitor.resetData(filtered);
                            audioTrack.write(filtered.clone(), 0, bufferSize,
                                    AudioTrack.WRITE_BLOCKING);

                        }
                        if (fileThread != null) {
                            fileThread.addBuffer(filtered);
                        }
                    }
                };
                mHandler.postDelayed(mTimer, 50);

            } catch (ConcurrentModificationException e) {
                e.printStackTrace();
            }
        }
    });
    recorderThread.startListening();
}

0 个答案:

没有答案