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 需要很长时间才能决定播放该文件,然后它总是可以正常工作。通过控制面板打开/关闭声音增强无效。

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

4

1 回答 1

0

为了后人的缘故,我将在这里记录“解决方案”以及一些相关事实。

Playsound 和 mcisendstring 都因无法在特定系统上播放某些短文件而受到影响。我怀疑原因是 NVIDIA 卡/驱动程序,因为不同的 Windows 8 系统没有出现此问题。

然而,第三次尝试是魅力所在,当我通过 DirectShow 实现调用时,它工作可靠。事实上,仅仅打开一个 DirectShow 连接就足以让 mcisendstring 自己成功工作(这一定是当 WMP 或 iTunes 也在系统上运行时调用工作的原因)。太糟糕了 DirectShow(就像几乎所有其他东西一样)已被 Microsoft Media Foundation 取代,但这对于简单地播放短 wav 文件来说太复杂了。

于 2013-10-29T21:25:08.320 回答