Я использую основные звуковые функции Windows, в основном WASAPI, для рендеринга эксклюзивного потока, следуя примеру в потоках эксклюзивного режима.
Это создает два чередующихся буфера, которые воспроизводятся и заполняются попеременно. Существует событие, связанное с завершением буфера, которое пробуждает поток, чтобы он мог заполнить только что завершенный буфер. GETPOSITION показывает, что поток активируется, когда текущий буфер находится в кадре 147 буфера 160 кадров. Это оставляет мне 13/160 буферного времени, чтобы получить новый буфер, заполнить его и освободить. У меня много расчетов, времени не хватает. Я полагаю, я мог бы сохранить контроль над процессором вместо того, чтобы спать, когда буфер заполнен, но это не похоже на правильное решение.
Кроме того, хотя мой процесс «PRO AUDIO» и имеет приоритет 25, иногда событие завершения буфера откладывается еще дальше, поэтому система начинает воспроизведение незаполненного буфера. Я не нашел никаких дискуссий о том, как этот тайм-аут должен работать или как его можно контролировать. Я ожидал, что событие завершения буфера прибудет через несколько кадров в следующий буфер. Кто-нибудь знаком с этим материалом? Или с решением, или с подсказкой о том, где его искать?
Вы должны иметь две темы. В главном потоке вы выполняете всю обработку звука и вычисления и доставляете результаты во вторичный поток. Работа вторичного потока состоит только в том, чтобы ждать событий WASAPI и записывать продукты основного потока на звуковую карту. Поток, который записывает аудио, не должен обрабатывать аудио.
Других решений пока нет …