frames должно быть количеством кадров (выборок), которое вы хотите записать из буфера.Звуковой драйвер вашей системы сразу начнет передавать эти семплы на звуковую карту, и они будут воспроизводиться с постоянной скоростью.
Задержка вводится в нескольких местах.Существует задержка от данных, буферизованных драйвером, в ожидании передачи на карту.По крайней мере, один буфер заполнен данными, которые передаются на карту в любой момент времени, и существует буферизация на стороне приложения, что вас и беспокоит.
Чтобы уменьшить задержку на стороне приложениявам нужно написать наименьший буфер, который будет работать для вас.Если ваше приложение выполняет задачу DSP, это, как правило, ценность данных одного окна.
Нет смысла писать небольшие буферы в цикле - просто продолжайте и все напишите за один раз - но есть важный момент для понимания: чтобы минимизировать задержку, ваше приложение должно записывать в драйвер не быстрее, чем драйвер записывает данные на звуковую карту, или вы в конечном итоге будете накапливать больше данных и накапливать все больше и больше задержек.
Длядизайн, который делает создание данных в непрерывном режиме с помощью звукового драйвера относительно легким, посмотрите на гнездо (http://jackaudio.org/), которое основано на регистрации функции обратного вызова с помощью механизма воспроизведения звука. На самом деле, вам, вероятно, лучше использовать гнездовместо того, чтобы пытаться сделать это самостоятельно, если вы действительно беспокоитесь о задержке.