Это резко сократит ваши задержки. Если МГц равен 44100, а вы находитесь в конфигурации MONO с 256, ваша задержка будет не менее 1000 * 256/44100 миллисекунд = ~ 5,8 мс. 256/44100 - это преобразование выборок в секунды, поэтому умножение на 1000 дает миллисекунды. Проблемы внутренней реализации плеера. Вы не можете контролировать это из Java. Надеюсь, это поможет кому-то :)
аюсь разработать приложение, подобное iRig для Android, поэтому первым делом нужно захватить микрофонный вход и одновременно воспроизвести его.
У меня это есть, но проблема в том, что я получаю некоторую задержку, которая делает это непригодным для использования, и если я начну обрабатывать буфер, я боюсь, что он станет совершенно непригодным для использования.
Я использую аудиозапись и аудиотрек, как это:
new Thread(new Runnable() {
public void run() {
while(mRunning){
mRecorder.read(mBuffer, 0, mBufferSize);
//Todo: Apply filters here into the buffer and then play it modified
mPlayer.write(mBuffer, 0, mBufferSize);
//Log.v("MY AMP","ARA");
}
И инициализация таким образом:
// ==================== INITIALIZE ========================= //
public void initialize(){
mBufferSize = AudioRecord.getMinBufferSize(mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
mBufferSize2 = AudioTrack.getMinBufferSize(mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
mBuffer = new byte[mBufferSize];
Log.v("MY AMP","Buffer size:" + mBufferSize);
mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mBufferSize);
mPlayer = new AudioTrack(AudioManager.STREAM_MUSIC,
mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mBufferSize2,
AudioTrack.MODE_STREAM);
}
Вы знаете, как получить более быстрый ответ? Спасибо!