我正在开发一个记录声音的应用程序,并在实时"中播放它们。我从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();
}