2013-05-26 41 views
1

我已经做了一堆研究,但我不知道如何将.wav文件加载到内存中,然后播放它。另外,我希望能够同时播放多个加载的.wav文件。C++ - 编码视频游戏的声音效果?

目前,我加载.wav文件到字符串缓冲区,然后调用:

PlaySound(stows(buffer).c_str(), NULL, SND_MEMORY); 

stows()是我创建了一个函数,其将字符串转换成宽字符串。

我在做什么错/我能做些什么更好?

编辑:我想现在使用SFML。我按照步骤here到T,但是当我尝试编译时,我收到了9个链接器错误。如果我使用静态或动态dll,则无关紧要。

编辑2:我必须有VS2010 32位。我为VS2010下载了SFML 2.0 32位,现在我下载了5个链接器错误。它说所有这些都发生在sfml-audio-s.lib中。

编辑3:我得到它编译!但是,它根本不会玩任何东西。我使用VS进行调试并确认我正确打开WAV文件并将其存储在Sound对象中,但是当我调用play()方法时,什么都不会发生。此外,每次关闭程序时都会收到未处理的异常。

+0

您可能正在使用实际的音频库。 –

+2

你可以使用[sfml](http://www.sfml-dev.org/tutorials/2.0/audio-sounds.php) – ninMonkey

+0

@ IgnacioVazquez-Abrams你会推荐什么实际的声音库? –

回答

0

我明白了!我结束了使用直接的声音。我做了一个类来加载和播放基于教程的WAV文件,我发现here,这非常有帮助。

1

我有理由相信PlaySound不能混合两个同时播放的声音。你可以让一个声音中断另一个声音,当你的代码正在做其他事情时(使用SND_ASYNC),你可以让它在后台播放,但是文档很清楚地表明“如果播放另一个声音,当前播放的声音停止” - 在SND_NOSTOP部分:如果未指定此标志,PlaySound试图阻止任何声音 当前正在播放在同一过程中

(如果指定SND_NOSTOP,它如果另一个人已经在播放,则不播放此声音)。

链接到完整文档:PlaySound

恐怕我不知道你是如何使用多个声音同时创建声音播放的,因为我从来没有在PC上做过这样的事情(我使用过硬件混音器,而且我还编写了合并代码两个声音从一个文件,但这几乎肯定不是你想要的)