Я написал небольшую программу, которая захватывает звук с устройства и затем передает его другому.Все это прекрасно работает, но я хочу уменьшить задержку.т.е. уменьшить размер буфера.
Когда я запускаю устройство со следующим кодом: _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, когда я запрашиваю наименьший возможный буфер в обоих случаях?