2012-03-09 162 views
-1

显然,Windows对Windows Vista中的音频体系结构进行了一些重大更改。据我了解,一些“遗留编解码器”不包括在Vista和以上,但我不确定这是否是问题的原因。Winmm.dll不会播放某些wav声音?

我在Delphi中进行编程,目前使用Windows库中的winmm.dll及其PlaySound方法来播放wav文件。这似乎有一些WAV文件,这个DLL无法播放。有趣的是,Windows Media Player可以播放失败的声音,但Windows控制面板声音小程序无法播放失败的声音,所以我怀疑它可能是我用来播放声音的库的一个限制,而不是直接导致我的应用程序。但是,这会导致用户体验不佳,导致声音文件在没有任何通知的情况下以静默方式失败,因为该文件在某种程度上存在缺陷并且无法使用。

因此......我应该使用不同的库函数来播放具有更高编解码器支持的WAV声音,并且能够播放像Windows Media Player那样的破碎文件,或者如果不是,则是还有另外一个函数调用我可以用来测试WAV是否有效/可播放,这样我就可以通知用户文件的内部格式不被支持?

+1

您是否尝试过在Audacity中打开这些Wav文件并找出它们使用的编解码器? – 2012-03-09 01:00:59

+0

你可以给我任何关于如何通过Audacity识别编解码器的指针吗?我能够将其中一个有缺陷的文件(从旧版AOL即时通讯软件中的声音文件)转换为WAV文件,该文件将在Windows和我的应用程序中播放。但我不知道如何识别编解码器 – 2012-03-09 01:29:47

+0

除非“32位浮点”是编码。但是,来自同一组的另一个声音剪辑具有相同的值,并且播放良好。 – 2012-03-09 01:31:41

回答

0

Window Media Player使用DirectShow,它比MCI下的PlaySound具有更好的性能和更大的灵活性。但是,与MCI相比,使用DirectShow播放声音似乎很费​​力。

查看Carlos Barbosa的cbAudioPlay组件,因为它提供了一个很好的使用DirectShow并包含所需的相关库的示例。