windows - MSVAD 虚拟驱动程序丢失用于在 MS Windows 10 1703 中呈现的音频数据包

标签 windows audio driver wdk

我在 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/

相关文章:

c# - 如何在进程中使用msinfo32.exe命令行?

http - 当 Accept-Ranges 未在 http header 中设置时,浏览器音频播放失败;为什么?

linux - 如何检查 tasklet_init 调用是否失败?

c++ - Visual Studio 编译警告 : Using system operator==/! = 对于 GUID

java - 将音乐添加到 Java

android - 谁提供Android下的驱动,内核还是平台?

windows - 是否有适用于 x64 Windows 的 mem.exe 版本?

c# - 如何在 C# 中创建临时文件(用于写入)?

cmd.exe(批处理)脚本中的数组、链表等数据结构

html - 使用 html 音频制作播放暂停开关