C ++ - 编码视频游戏音效?

时间:2013-05-26 04:14:46

标签: c++ winapi audio

我做了很多研究,但我无法弄清楚如何将.wav文件加载到内存然后播放它。此外,我希望能够同时播放多个加载的.wav文件。

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

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

stows()是我创建的一个函数,它将字符串转换为宽字符串。

我做错了什么/我能做得更好?

编辑:我现在正在尝试使用SFML。我跟着演练here到了T,但是当我尝试编译时,我得到了9个链接器错误。如果我使用静态或动态dll并不重要。

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

EDIT3:我把它编译好了!但是,它根本就没有播放任何东西。我使用VS来调试并确认我正确打开WAV文件并将其存储在Sound对象中,但是当我调用play()方法时,没有任何反应。此外,每次关闭程序时,我都会收到一个未处理的异常。

2 个答案:

答案 0 :(得分:1)

我有理由相信PlaySound无法同时播放两种声音。你可以让一个声音中断另一个声音,你可以在你的代码正在做其他事情的时候“在后台”播放它(使用SND_ASYNC),但文档很清楚地说“如果播放了另一个声音” ,当前的一个停止“ - 在SND_NOSTOP

的部分
  

如果未指定此标志,PlaySound会尝试停止任何声音   目前正在同一个过程中播放

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

链接到完整文档:PlaySound

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

答案 1 :(得分:0)

我搞定了!我最终使用了直接声音。我根据我发现here的教程创建了一个加载和播放.WAV文件的课程,这非常有帮助。