WASAPI захватил размер буфера в Windows

Я использую WASAPI для захвата аудио-буферов в режиме совместного использования в Windows 7. Я использую свои динамики, которые могут иметь частоту дискретизации 48 кГц, 96 кГц, 192 кГц или 44,1 кГц.
Моя звуковая карта Realtek High Definition.

Мне нужно знать, будет ли WASAPI вести себя по-другому, если я выполню свою программу на другой ОС, такой как Windows Vista или Windows 8.
Кроме того, мне нужно знать, будет ли getBuffer извлекать одинаковый размер для захваченных буферов с различным оборудованием (разными звуковыми картами).

Я не могу проверить это самостоятельно и не могу найти много подробностей в Интернете. Но моя программа должна работать на разных компьютерах с разными версиями Windows и разным оборудованием.
Моя программа не будет работать правильно на другом компьютере, если размер захваченного буфера будет другим.

Если кто-нибудь знает об этом, дайте мне знать, пожалуйста. Спасибо.

2

Решение

Захват потока на MSDN предлагает фрагмент кода, который показывает, как захватывать данные, не полагаясь на определенное количество байтов (сэмплов), возвращаемых с аудиоустройства. Ваша логика захвата должна копировать из буферов во ваш внутренний буфер, где вы накапливаете достаточное количество непрерывных данных для дальнейшей обработки. Также обратите внимание, что при определенных обстоятельствах ваш цикл захвата может потерять выборки, и у вас есть разрыв в потоке данных. Это может в основном происходить в любой части потока и уменьшать количество имеющихся у вас байтов / буферов. Вы заинтересованы в том, чтобы справиться и с этим изящно.

// Get the available data in the shared buffer.
hr = pCaptureClient->GetBuffer(&pData, &numFramesAvailable, &flags, NULL, NULL);
if (flags & AUDCLNT_BUFFERFLAGS_SILENT)
{
// TODO: Tell CopyData to write silence.
}
// Copy the available capture data to the audio sink.
hr = pMySink->CopyData(pData, numFramesAvailable, &bDone);
2

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


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