我在WDK 8.0的MSVAD基础上编写了一个虚拟音频驱动程序。该驱动程序在MS Win XP,Vista,8.x和10井上运行。但是在Windows Creators Update(1703)启动后,我注意到声音开始失去并且滞后于我的驱动程序。
我做了一些研究并检测到以下情况:驱动程序复制的音频数据少于预期。例如:
CMiniportWaveCyclicStreamMSVAD :: CopyTo()接收1920字节,CMiniportWaveCyclicStreamMSVAD :: CopyFrom()在输出时发送较少的音频数据(1764)。为什么????
请有任何想法!
答案 0 :(得分:0)
我只为我的项目编写解决方案。无论如何,这个发现的bug也可以帮助你修复你的驱动程序。
原因:
我的音频通道始终有一个带有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中修复该错误。