Блоки Windows Audio / WaveInAddBuffer ()

Мое приложение записывает аудио образцы с микрофона, подключенного к моему ПК. Поэтому я выбрал Windows WaveInXXX API, чтобы сделать работу.

После прочтения документации я решил не использовать механизм обратного вызова с WaveInProc чтобы избавить меня от хлопот, синхронизирующих потоки. В целом приложение довольно большое, и я подумал, что это упростит отладку. Когда приложение запрашивает блок сэмплов, я просто перебираю свою очередь в буфере, вынимаю одну, копирую данные, готовлю их, подготавливаю и добавляю обратно в очередь буфера. Базовая структура программы выглядит следующим образом, я надеюсь, что она прояснит основной поток программы:

WaveInOpen()
WaveInStart()
FunctionAddingPreparedBuffersToTheQueue()
while(someConditionThatEventuallyBecomesFalse)
if(NextBufferInQueueIsMarkedDone)
GetDataFromBuffer()
UnpreparePrepareHeaderAndAddBuffer()
else
WaitForAShortTime()
WaveInStop()
WaveInClose()

Теперь возникает проблема: через некоторое время (и я не могу воспроизвести точное условие), WaveInAddBuffer() вызывает тупик, хотя он находится в той же теме, что и все остальные. Подготовлен заголовок для буфера, который должен быть добавлен при возникновении взаимоблокировки. dwFlags == WHDR_PREPARED == 2,

Есть идеи, что может вызвать этот тупик?

0

Решение

Я не видел такой проблемы, но предположение могло бы быть чем-то вроде фрагментации, связанной со всеми циклами подготовки / подготовки. Они не нужны. Вы можете выполнить подготовку по одному разу для каждого буфера, а затем не подготовить, когда закончите запись. (Подготовка блокирует буфер в физической памяти.)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]