1

我做了很多研究,但我不知道如何将 .wav 文件加载到内存中然后播放。另外,我希望能够同时播放多个加载的 .wav 文件。

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

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

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

我做错了什么/我可以做得更好吗?

编辑:我现在正在尝试使用 SFML。我按照这里的演练到了一个 T,但是当我尝试编译时,我得到了 9 个链接器错误。我使用静态或动态 dll 并不重要。

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

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

4

2 回答 2

1

我有理由相信它PlaySound不能混合同时播放的两种声音。你可以让一个声音打断另一个,你可以让它在你的代码做其他事情时“在后台”播放(使用SND_ASYNC),但是文档非常清楚地说明“如果播放另一种声音,当前的声音就会停止" - 在以下部分SND_NOSTOP

如果未指定此标志,则PlaySound尝试停止当前在同一进程中播放的任何声音

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

完整文档链接:PlaySound.

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

于 2013-05-26T05:44:03.350 回答
0

我让它工作了!我最终使用了直接声音。我根据我在这里找到的教程创建了一个类来加载和播放 .WAV 文件,这非常有帮助。

于 2013-05-26T10:15:49.950 回答