首页 文章

除非音乐播放器程序正在运行,否则 Playsound 首先跳过文件 half-second

提问于
浏览
0

我有一些非常短(<1-2 秒)的 WAV 文件无法可靠播放。在一台快速的 Windows 8 机器上,除非某种音频播放器(Windows Media Player,iTunes)碰巧打开并播放了某些东西(任何东西),然后它们每次播放,它们都不会播放。

我有其他(也很短)WAV 文件,每次都播放。从完全相同的电话。它们都驻留在程序的目录中。

当他们不玩时,Playsound 仍然会返回 true。这是 win32 C 调用:

Playsound( L"mfile.wav", NULL, SND_ASYNC | SND_FILENAME );

看来这台测试计算机(可能是其他 Windows 8 系统)有一些优化需要一段时间来“预热”音响系统。即使我要求 Windows Media Player 播放其中一个文件,也没有声音......第一次。但是当我从那时开始点击播放时,它每次播放都很好。 iTunes 需要很长时间才能决定播放该文件,然后它始终有效。通过控制面板转动 on/off 声音增强功能无效。

有任何想法吗?有没有什么可以像媒体播放器那样“激活”音响系统?因为除非其中一个程序正在运行,否则我的声音将不会第一次或永远播放。

1 回答

  • 0

    为了后人的缘故,我会在这里注意到“解决方案”,以及一些相关的事实。

    Playsound 和 mcisendstring 都无法在特定系统上播放某些短文件。我怀疑原因是 NVIDIA card/driver,因为不同的 Windows 8 系统没有出现这个问题。

    第三次尝试是魅力,当我通过 DirectShow 实现调用时,它可靠地工作。实际上,只需打开 DirectShow 连接就足以使 mcisendstring 能够自己成功运行(这必须是 WMP 或 iTunes 也在系统上运行时调用的原因)。太糟糕了,DirectShow(几乎所有其他东西)已被微软媒体基金会取代,但这对于简单地播放简短的 wav 文件来说太复杂了。

相关问题