Синхронизация событий буфера Core Audio (WASAPI)

0

Я использую основные звуковые функции Windows, в основном WASAPI, для создания эксклюзивного потока, следуя примеру в потоках Exclusive Mode.

Это создает два чередующихся буфера, которые воспроизводятся и заполняются поочередно. Существует событие, связанное с завершением буфера, которое пробуждает поток, чтобы он мог пополнить заполненный буфер. GETPOSITION показывает, что поток просвечивается, когда текущий буфер находится в кадре 147 буфера кадров 160. Это оставляет мне 13/160 буфера, чтобы получить новый буфер, заполнить его и отпустить. У меня много вычислений, это мало времени. Я полагаю, что я мог бы контролировать процессор вместо того, чтобы спать, когда буфер заполнен, но это не похоже на правильное решение.

Кроме того, хотя мой процесс является "PRO AUDIO" и имеет приоритет 25, иногда событие завершения буфера еще более задерживается, поэтому система начинает воспроизведение незаполненного буфера. Я не нашел никакого обсуждения того, как это время должно работать, или как его можно контролировать. Я ожидал, что событие завершения буфера поступит в небольшое количество кадров в следующий буфер. Кто-нибудь знаком с этим материалом? Либо с решением, либо с пониманием того, где его искать?

Теги:
audio
wasapi

1 ответ

0

У вас должно быть два потока. В основном потоке вы выполняете всю обработку и вычисления звука и доставляете результаты второму потоку. Задача вторичного потока - только ждать событий WASAPI и записывать продукты основного потока на звуковую карту. Нить, которая записывает аудиовыход, не должна обрабатывать аудио.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню