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 位)
win7 无法启动此程序,因为计算机丢失api-ms-win-crt-runtime-1-1-0.dll怎么办?
安装PScc2018后出现“无法启动此程序,因为计算机丢失api-ms-win-crt-string-1-1-0.dll