【问题标题】:How do i play sound in my C++ Windows Game?如何在我的 C++ Windows 游戏中播放声音?
【发布时间】:2016-07-25 22:29:03
【问题描述】:

Windows 7 Ultimate 64Bit,我使用的是 CodeBlocks 16.01。我正在处理我的 OpenGL 大学项目,我正在尝试在玩家使用“空格键”键射击时添加枪声效果。

只有当我创建控制台项目或空项目并且声音播放正常时,声音才有效,我知道我必须链接库“winmm.lib”,它作为控制台项目工作得很好,这是代码。

#include <iostream>
#include <windows.h>
#include <mmsystem.h>

using namespace std;

int main()
{
    PlaySound("shotgun.wav",NULL,SND_SYNC);
    return 0;
}

当我现在在我的 Glut 项目中使用此代码时,问题就开始了,当拍摄按钮“空格键”是按下。游戏在声音结束之前冻结了几秒钟,但是我通过将上面的行替换为这个来解决了这个问题:

PlaySound(TEXT("shotgun.wav"), NULL, SND_FILENAME | SND_ASYNC);

它不再冻结,但它仍然继续播放 Windows 系统声音,而不是 shotgun.wav。 .wav 文件在项目中,我很确定它在正确的位置。这是我的 Glut 项目中的拍摄代码示例(我只复制了相关的代码):

void Keys(unsigned char key, int x, int y) {
key = tolower(key); //Just in case CAPS LOCK is ON.

    if(key==27)
        exit(0); //Escape key, Exit the game

    switch(key){ 
    case ' ':  //SPACE BAR

            /* some code here */

            PlaySound(TEXT("shotgun.wav"), NULL, SND_FILENAME | SND_ASYNC);
        break; //.....Code continues to the next case....

为了强制使用枪声效果,我不得不去 Windows 声音设置和“更改系统声音”,哈哈,是的,我实际上不得不用我的“Shotgun.wav”替换“默认哔声”,然后我回到了游戏并编译,哇!它正在工作。但当然这不是我想要的,因为很明显这只能在我的电脑上运行,我们不希望这样。

【问题讨论】:

  • 你可以使用 OpenAL 或 SDL 来播放声音,因为它是独立于操作系统的。
  • 再次检查 shotgun.wav 文件是否在您的应用程序正在执行的文件夹中。它可能找不到文件。
  • 这也是我的默认猜测:Codeblocks 可能会将可执行文件构建到一个临时目录并从那里运行,而无需复制资源?
  • @Dan 文件在正确的文件夹中
  • @Nasso,你能告诉我怎么做吗?

标签: c++ windows winapi codeblocks playsound


【解决方案1】:

您需要指定完整的文件路径。在两者之间使用双斜杠\\。例如:

sndPlaySound("D:\\New folder(2)\\poiuy\\sound.wav",SND_ASYNC|SND_LOOP);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多