Я пытаюсь воспроизвести необработанные звуковые данные с помощью класса AudioTrack
в Android, я использую метод write
, но я заметил, что есть латентность между возвратом метода записи и воспроизведением фактического звука, сделать это просто давайте использовать AudioRecord
класс как следующий код psedu:Задержка Android AudioTrack с воспроизведением
//init AudioTrack
//init AudioRecord
while(true){
byte [] buffer = new byte[1000];
int read = audioRecord(buffer,0,1000);
audioTrack.write(buffer,0,read);
}
Я ожидаю, чтобы получить задержку, которая read/sample rate
секунд, но фактический звук воспроизводится после того, как и дополнительное около 0,5 секунд, мне очень нужно аудио в играть с минимальной задержкой, так же как у кого-то есть объяснение того, что происходит, и есть ли какое-либо доступное решение, или я должен принять это, поскольку это ха rdware проблема?
он говорит: «Как OpenSL ES является родным C API, не являющиеся Dalvik потоки приложения, которые требуют OpenSL ES не имеют Dalvik связанных накладные расходы, такие как паузы для сбора мусора. Однако дополнительных преимуществ производительности для использования OpenSL ES не существует. В частности, использование OpenSL ES не приводит к снижению задержки звука, более высоким приоритетам планирования и т. д., чем то, что платформа как правило, обеспечивает ». – ammcom
Java VM (в современных версиях Android это называется ART) накладные расходы могут быть значительными. Для достижения низкой латентности вам может потребоваться, чтобы ваш обратный вызов звука был надежно на 250 Гц, поэтому ваш обратный вызов будет иметь меньше времени в 4 мс, поэтому каждый микросекунда рассчитывает, и вы не хотите, чтобы они были потрачены на JNI или GC. –