Можно ли повторно использовать буферы с волновым аудиовходом Windows? - PullRequest
2 голосов
/ 21 ноября 2010

Я использую мультимедийные API-интерфейсы Windows для записи и обработки волнового звука (waveInOpen и друзья).Я хотел бы использовать небольшое количество буферов в циклическом режиме.

Я знаю, что вы должны использовать waveInPrepareHeader перед добавлением буфера на устройство, и что вы должнывызовите waveInUnprepareHeader после того, как устройство Wave «вернуло буфер в приложение» и перед тем, как вы его освободите.

Мой вопрос: нужно ли готовить и заново готовить, чтобы повторно использовать буфер?Или я могу просто добавить ранее использованный буфер обратно на устройство?

Кроме того, имеет ли значение, в каком потоке я делаю это?Я использую функцию обратного вызова, которая, кажется, вызывается в рабочем потоке, который принадлежит аудиосистеме.Могу ли я позвонить waveInUnprepareHeader, waveInPrepareHeader и waveInAddBuffer в этом потоке во время обратного вызова?

Ответы [ 2 ]

2 голосов
/ 21 ноября 2010

Да, по моему опыту, вам нужно каждый раз звонить, готовиться и не готовиться.По памяти возвращается ошибка, если вы пытаетесь повторно использовать одну и ту же.

И вы обычно вызываете prepare и unprepare для любого потока, в котором вы обрабатываете обратные вызовы.

0 голосов
/ 22 ноября 2010

Когда вы создаете буферы, вызывайте waveInPrepareHeader.Затем вы можете просто установить флаг подготовленный перед вызовом waveInAddBuffer в буфере, который был возвращен с устройства.

pHdr->dwFlags = WHDR_PREPARED;

Вы можете сделать это в потоке обратного вызова (или вобработчик сообщений).

...