WASAPI:无法更改缓冲区大小

时间:2018-10-22 23:04:37

标签: audio windows-10 wasapi audio-capture

我编写了一个小程序,可以捕获设备上的音频,然后将其呈现给另一个。所有这些工作正常,但我想减少延迟。即减小缓冲区大小。

当我使用以下代码初始化设备时: _pAudioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, 0, 0, 0, _pFormat, nullptr)
我得到970samples的缓冲区,对于44.1kHz流来说大约是22ms。这对我来说很重要。

我已经尝试过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);

  

默认值=基本=最小值=最大值= 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)为什么所有引擎周期都相同?最大值和最小值之间应该没有跨度吗?
2)为什么在两种情况下都要求最小的缓冲区时,为什么从Initialize和InitializeSharedAudioStream都获得970的缓冲区大小?

0 个答案:

没有答案