在C ++ / OpenGL中使用PlaySound()在后台播放声音

我正在用opengl在c ++中build立的游戏背景中播放wav文件。 我正在使用下面的行来播放wav文件:

PlaySound("starwars.wav", NULL, SND_FILENAME|SND_LOOP); 

问题是音乐何时开始animation停止。 我试着按键盘button开始播放音乐,但是当我这样做时,音乐开始播放,所有的animation都停止了。 有没有办法避免这种情况? 我只是想在后台播放一些音乐,而PlaySound似乎是最简单的方法来实现,因为它只需要一行代码。

你想通过

SND_ASYNC

这将使PlaySound立即返回,而不是等待声音完成播放,这在你的情况下不会像循环播放。 IIRC PlaySound只允许一次播放一个声音,所以最好是寻找一个声音库,特别是如果你正在做一个游戏。

最后你的样品工作:

PlaySound("starwars.wav", NULL, SND_ASYNC|SND_FILENAME|SND_LOOP);

请看这个

我不是windows声音API的专家,但是PlaySound的功能好像是一个阻塞操作,这意味着你的应用程序会冻结,直到函数结束,也就是声音播放到最后。 也许有一个标志来绕过这个?

您可以启动声音的线程,声音停止后结束。 或者你可能想看看一个简单的声音API。

如果你正在使用格式playSound(“*。wav”,NULL,SND_SYNC | SND_LOOP),那么你几乎已经失去了游戏动画的控制,这个动画将被包含在playSound()函数中的循环中,该函数是SND_LOOP如果使用SND_ASYNC更改SND_SYNC,它将按照您的命令完成,但是请不要忘记这适用于Windows,并且不要忘记在项目/ opengl / visual c ++ / link下包含WINMM.LIB(窗口多媒体库)