MSVAD 虚拟驱动程序丢失用于在 MS Windows 10 1703 中渲染的音频数据包

Posted

技术标签:

【中文标题】MSVAD 虚拟驱动程序丢失用于在 MS Windows 10 1703 中渲染的音频数据包【英文标题】:MSVAD virtual driver loses audio packets for rendering in MS Windows 10 1703 【发布时间】:2017-07-24 14:40:24 【问题描述】:

我在 WDK 8.0 的 MSVAD 基础上编写了一个虚拟音频驱动程序。该驱动程序在 MS Win XP、Vista、8.x 和 10 上运行良好。但在 Windows Creators Update (1703) 启动后,我注意到我的驱动程序开始失去声音并滞后。

我进行了一些研究并检测到以下情况:驱动程序复制的音频数据比我预期的要少。例如:

CMiniportWaveCyclicStreamMSVAD::CopyTo() 接收到 1920 字节,CMiniportWaveCyclicStreamMSVAD::CopyFrom() 在输出时发送的音频数据 (1764) 较少。为什么????

请有任何想法!

【问题讨论】:

【参考方案1】:

我只为我的项目编写解决方案。无论如何,这个发现的错误也可以帮助您修复驱动程序。

原因:

我的音频通道总是有一个带有 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 中修复该错误。

【讨论】:

以上是关于MSVAD 虚拟驱动程序丢失用于在 MS Windows 10 1703 中渲染的音频数据包的主要内容,如果未能解决你的问题,请参考以下文章

wind10里的虚拟机安装的Mac系统怎么连苹果手机?用苹果+数据线连接多次无效果,只连到wind桌面

MS Access 的 ODBC 驱动程序似乎丢失(Windows 64 位)

[Wind - E260] 关闭底部三个虚拟按键

win7 无法启动此程序,因为计算机丢失api-ms-win-crt-runtime-1-1-0.dll怎么办?

安装PScc2018后出现“无法启动此程序,因为计算机丢失api-ms-win-crt-string-1-1-0.dll

sketchup2017安装打开后无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime