2014-01-26 3 views
0

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

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

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

ответ

0

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

Смежные вопросы