c - 独占模式下的 IAudioClient 初始化问题
问题描述
我正在尝试在 UWP 应用程序中以独占模式使用 WASAPI 访问特定的 USB 音频设备。首先,我正在创建一个WAVEFORMATEXTENSIBLE
并检查我的设备是否支持这种格式:
WAVEFORMATEXTENSIBLE wf;
wf.Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX);
wf.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
wf.Format.nChannels = 2;
wf.dwChannelMask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT;
// PCM 16
wf.Format.wBitsPerSample = 16;
wf.Samples.wValidBitsPerSample = wf.Format.wBitsPerSample;
wf.Format.nBlockAlign = wf.Format.nChannels * (wf.Format.wBitsPerSample / 8);
wf.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
wf.Format.nSamplesPerSec = 48000;
wf.Format.nAvgBytesPerSec = wf.Format.nSamplesPerSec * wf.Format.nBlockAlign;
hr = IAudioClient_IsFormatSupported(
pAudioClient,
AUDCLNT_SHAREMODE_EXCLUSIVE,
(WAVEFORMATEX*)&wf,
NULL);
IsFormatSupported
返回S_OK
。然后,我正在初始化AudioClient
这样的:
hr = IAudioClient_Initialize(
pAudioClient,
AUDCLNT_SHAREMODE_EXCLUSIVE,
AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
bufferDuration,
bufferDuration,
(WAVEFORMATEX*) &wf,
NULL);
问题就在这里:Initialize
返回E_INVALIDARG
。根据Microsoft 文档,这可能是由一些问题引起的,但在我的情况下,我怀疑这是“参数 pFormat 指向无效的格式描述”,因为我没有使用任何提到的标志,也没有调用SetClientProperty
.
我是否正确初始化WAVEFORMAT
?
解决方案
推荐阅读
- reactjs - 添加自动前缀后,社交登录(nextauth)无法使用
- r - 如何查看可能调用 C 代码的函数内部
- python - MongoDB Python: Unable to remove a field that has a . in it
- math - Somatory of "n" math operation results without VBA
- python - (-215:断言失败) corr.rows <= img.rows + templ.rows - 1 && corr.cols <= img.cols + templ.cols - 1 在函数 'cv::crossCorr' 中(matchTemplate)
- python - aiohttp check headers on every request and set them again if not correct
- c# - Try-Catch not catching exception in method in C#
- ruby-on-rails - 针对同时创建的另一个模型上的属性进行验证
- angular - 使用 ng 闪电遇到的角度错误
- python - BeautifulSoup:如何从此链接获取所有文章链接?