WASAPI: невозможно изменить размер буфера - PullRequest
0 голосов
/ 23 октября 2018

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

Когда я запускаю устройство со следующим кодом: _pAudioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, 0, 0, 0, _pFormat, nullptr)
, я получаю буфер из 970 сэмплов, что составляет около 22 мс для потока 44,1 кГц.Это очень для моих нужд.

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

//Get current audio engine period WAVEFORMATEX *p; UINT32 pCurrentPeriodInFrames; _pAudioClient->GetCurrentSharedModeEnginePeriod(&p, &pCurrentPeriodInFrames);

pCurrentPeriodInFrames = 441

//Get audio engine period span UINT32 default_, fundamental, min, max; _pAudioClient->GetSharedModeEnginePeriod(_pFormat, &default_, &fundamental, &min, &max);

default_ = фундаментальный = min = max = 441

//Use the min period to init the device _pAudioClient->InitializeSharedAudioStream(0, min, _pFormat, nullptr); //Get current buffer size _pAudioClient->GetBufferSize(&_bufferFrameCount);

_bufferFrameCount = 970

Итак, мои вопросы следующие:
1) Почему все периоды работы двигателя одинаковы?Разве не должно быть промежутка между min и max?
2) Почему я получаю размер буфера 970 из Initialize и InitializeSharedAudioStream, когда я запрашиваю наименьший возможный буфер в обоих случаях?

...