我做了很多研究,但我无法弄清楚如何将.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()方法时,没有任何反应。此外,每次关闭程序时,我都会收到一个未处理的异常。
答案 0 :(得分:1)
我有理由相信PlaySound
无法同时播放两种声音。你可以让一个声音中断另一个声音,你可以在你的代码正在做其他事情的时候“在后台”播放它(使用SND_ASYNC
),但文档很清楚地说“如果播放了另一个声音” ,当前的一个停止“ - 在SND_NOSTOP
:
如果未指定此标志,
PlaySound
会尝试停止任何声音 目前正在同一个过程中播放
(如果您指定SND_NOSTOP
,如果另一个人已经在播放,则不播放此声音)。
链接到完整文档:PlaySound
。
我恐怕我不确切地知道你是如何使用多个声音同时创建声音的,因为我从来没有在PC上做过(我使用过硬件混音器,而且我还编写了代码来合并两个来自文件的声音,但这几乎肯定不是你想要的那样)
答案 1 :(得分:0)
我搞定了!我最终使用了直接声音。我根据我发现here的教程创建了一个加载和播放.WAV文件的课程,这非常有帮助。