C ++中的Playsound:.wav文件出现文件错误

时间:2016-08-22 12:58:50

标签: c++ sdl wav playsound

我进行了copypasting,然后修改了各种PlaySound示例,以便弄清楚如何在C ++程序中播放.wav文件。

现在我有一个看起来比其他任何一个更有效,但是当文件执行时它没有播放.wav文件,而在窗口内它告诉我文件有错误。 wav文件。

重申:程序构建并运行没有问题。正在运行的程序中出现错误。我无法弄清问题是什么。它可能只是一个位置问题吗?

错误说:" Wave :: file error:drake.wav"

我已经设置了SDL,虽然我可能做错了。我在Lazyfoo上使用了指南。我正在使用Codeblocks和MinGW。

这是代码,我找到了here

#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <mmsystem.h>
#include <iostream>
#include <fstream>
#include <conio.h>

using namespace std;

class Wave {

public:
    Wave(char * filename);
    ~Wave();
    void play(bool async=true);
    bool isok();

private:
    char * buffer;
    bool ok;
    HINSTANCE HInstance;
};

Wave::Wave(char * filename)
{
    ok = false;
    buffer = 0;
    HInstance = GetModuleHandle(0);

    ifstream infile(filename, ios::binary);

    if (!infile)
    {
        std::cout << "Wave::file error: " << filename << std::endl;
        return;
    }

    infile.seekg (0, ios::end);
    int length = infile.tellg();
    buffer = new char[length];
    infile.seekg (0, ios::beg);
    infile.read (buffer, length);

    infile.close();
    ok = true;
}

Wave::~Wave()
{
    PlaySound(NULL, 0, 0);
    delete [] buffer;
}

void Wave::play(bool async)
{
    if (!ok)
        return;

    if (async)
        PlaySound(buffer, HInstance, SND_MEMORY | SND_ASYNC);
    else
        PlaySound(buffer, HInstance, SND_MEMORY);
}

bool Wave::isok()
{
    return ok;
}

int main(int argc, char *argv[]) {
    std::cout << "Trying to play sound...\n";

    Wave one("drake.wav");

    one.play();

    std::cout << "press key to exit";
    getch();

    return 0;
}

**编辑:谢谢大家的帮助。我花了一段时间来弄明白这一点。

这就是我的所作所为:

1)我将.wav文件放在根文件夹中。 2)我去了: 项目 属性 项目的构建选项 搜索目录 资源编译器

我将文件的位置放在资源编译器中。

**

1 个答案:

答案 0 :(得分:0)

检查代码:

ifstream infile(filename, ios::binary);
if (!infile)
{
    std::cout << "Wave::file error: " << filename << std::endl;
    return;
}

所以,似乎问题很简单:找不到文件。这意味着这个问题不是关于PlaySound,而是关于打开文件。

您需要使用完整路径(类似Wave one("c:\\project\\drake.wav");)或将wav-file放在程序目录中(如果从IDE运行程序,程序的当前路径可能会有点意外对你而言 - 不是可执行文件的路径,而是项目文件的路径或类似的东西。)