我在 WDK 8.0 的 MSVAD 的基础上编写了一个虚拟音频驱动程序。该驱动程序在 MS Win XP、Vista、8.x 和 10 上运行良好。但是在启动 Windows Creators Update (1703) 后,我注意到我的驱动程序开始丢失和滞后声音。
我做了一些研究并检测到以下情况:驱动程序复制的音频数据少于我的预期。例如:
CMiniportWaveCyclicStreamMSVAD::CopyTo() 收到 1920 个字节,CMiniportWaveCyclicStreamMSVAD::CopyFrom() 在输出时发送较少的音频数据 (1764)。为什么????
请有任何想法!
最佳答案
我只为我的项目编写解决方案。无论如何,这个发现的错误也可以帮助您修复驱动程序。
原因:
我的音频 channel 总是有一个带有 WAVEFORMATEX 参数的流:nSamplesPerSec = 44100 和 nAvgBytesPerSec = 176400。在 MS Win10 1703 中,MSVAD 驱动程序更改了流的输入参数:nSamplesPerSec = 48000 和 nAvgBytesPerSec = 192000。但输出参数仍然存在相同:nSamplesPerSec = 44100 和 nAvgBytesPerSec = 176400。因此驱动程序接收 1920 个字节并发出 1764 个字节。因此,驱动程序每 10 毫秒丢失 156 个字节的声音。
解决方法:
强制驱动程序选择源参数:nSamplesPerSec = 44100 和 nAvgBytesPerSec = 176400。为此,打开文件 kshelper.cpp 并找到函数 GetWaveFormatEx()。在 return pWfx;
之前添加检查:
if (pWfx->nSamplesPerSec != 44100)
{
DPF_ENTER(("[%s] - FAIL",__FUNCTION__));
return NULL;
}
else
{
DPF_ENTER(("[%s]-ok",__FUNCTION__));
return pWfx;
}
我希望 MS 在下一个 WDK 中修复该错误。
关于windows - MSVAD 虚拟驱动程序丢失用于在 MS Windows 10 1703 中呈现的音频数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45283442/