我从WDK8.0编写了一个基于MSVAD的虚拟音频驱动程序。该驱动程序在MS Win XP、Vista、8.x和10上运行良好。但在Windows创建者更新(1703)开始后,我注意到我的驱动程序开始丢失和滞后的声音。
我做了一些研究,并检测到以下情况:驱动程序复制的音频数据比我预期的要少。例如:
CMiniportWaveCyclicStreamMSVAD::CopyTo()接收了1920个字节,CMiniportWaveCyclicStreamMSVAD::CopyFrom()在输出时发送的音频数据较少(1764)。为什么?
欢迎有任何想法!
发布于 2017-08-10 14:46:22
我只为我的项目写了一个解决方案。无论如何,这个发现的bug也可以帮助你修复你的驱动程序。
原因:
我的音频通道总是有一个带有nAvgBytesPerSec参数的流: WAVEFORMATEX = 44100和WAVEFORMATEX= 176400。在MSVAD1703中,Win10驱动程序更改流的输入参数: nSamplesPerSec = 48000和nAvgBytesPerSec = 192000。但是输出参数保持不变: nSamplesPerSec = 44100和nAvgBytesPerSec = 176400。因此,驱动器接收1920字节,发送1764字节。因此,驱动程序每10mS会丢失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;
}我希望微软能在下一个WDK修复这个bug。
https://stackoverflow.com/questions/45283442
复制相似问题