首页 文章

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

提问于
浏览
4

我试图在用 opengl 构建的游戏的背景中播放一个 wav 文件。我使用以下行来播放 wav 文件:

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

问题是当音乐开始时动画停止。我尝试按下键盘按钮启动音乐,但是当我这样做时,音乐开始,所有动画停止。有办法避免这种情况吗?我只想在背景中播放一些音乐,PlaySound 似乎是实现这一目标的最简单方法,因为它只需要一行代码。

3 回答

  • 8

    你想传入

    SND_ASYNC

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

    总之,您的样本工作:

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

    请看这个

  • 1

    我不是 Windows 声音 API 的专家,但似乎函数PlaySound是一个阻塞操作,这意味着你的应用程序冻结,直到函数完成,i.e 声音一直播放到结束。也许有一面旗帜可以绕过这个?

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

  • 1

    如果你使用的格式是 playSound(“* .wav”,NULL,SND_SYNC | SND_LOOP),那么你几乎无法控制游戏的动画,它会被 playSound()函数中包含的循环冻结,这个函数是 SND_LOOP 但如果你改变了 SND_SYNC 与 SND_ASYNC 它将完全按照您的订单工作,但不要忘记这适用于 Windows 并且不要忘记在 project/opengl/visual c /link 下包含 WINMM.LIB(窗口多媒体库)

相关问题