Я записываю и воспроизводю аудио с использованием audioRecord и audioTrack, работает нормально, но с задержкой.После некоторых исследований я нашел кое-что об Oboe Library (OpenSl и Aaudio).Я хочу максимально увеличить задержку, которую можно уменьшить с помощью audioRecord и audioTrack, но я не знаю, возможно ли это.Это часть моего кода:
protected void recordAndPlay() {
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
final int bufferSizeIn = AudioRecord.getMinBufferSize(freq,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
final int bufferSizeOut = AudioTrack.getMinBufferSize(freq,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION/*MediaRecorder.AudioSource.MIC*/, freq,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufferSizeIn);
audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, freq,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufferSizeOut,
AudioTrack.MODE_STREAM);
buffer = new short[bufferSizeIn];//buffer de amostras
audioRecord.startRecording(); //começa a captar a voz
Log.i("", "Audio Recording started");
audioTrack.play(); //começa a transmitir a voz
Log.i("", "Audio Playing started");
Rthread = new Thread(new Runnable() {
public void run() {
while (true) {
try {
audioRecord.read(buffer, 0, bufferSizeIn);
audioTrack.write(buffer,0,bufferSizeIn);
} catch (Throwable t) {
Log.e("Error", "Read write failed");
t.printStackTrace();
}
}
}
});
Rthread.start();
}