我正在复制粘贴,然后修改 PlaySound 的各种示例,以便弄清楚如何在 C++ 程序中播放 .wav 文件。
现在我有一个似乎比其他任何一个都更有效,但是当文件执行时它不会播放 .wav 文件,并且在窗口内它告诉我 .wav 文件存在文件错误。
重申:程序构建和运行没有问题。错误出现在正在运行的程序中。我不太清楚问题是什么。会不会只是位置问题?
错误说:“Wave::file error: drake.wav”
我已经设置了 SDL,尽管我可能做错了。我使用了Lazyfoo上的指南。我正在使用代码块和 MinGW。
这是我在这里找到的代码:
#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)我去了:项目属性项目的构建选项搜索目录资源编译器
我将文件的位置放在资源编译器中。
**