C++ プログラムで .wav ファイルを再生する方法を理解するために、PlaySound のさまざまな例をコピーペーストしてからいじっています。
現在、他のどのファイルよりも機能しているように見えるものがありますが、ファイルを実行すると .wav ファイルが再生されず、ウィンドウ内で .wav ファイルにファイル エラーがあることが通知されます。
繰り返しますが、プログラムは問題なくビルドおよび実行されます。エラーが表示されるのは、実行中のプログラム内です。何が問題なのかよくわかりません。単純に場所の問題でしょうか?
エラーは次のとおりです:「Wave::file error: drake.wav」
SDL をセットアップしましたが、間違っている可能性があります。Lazyfooのガイドを使用しました。Codeblocks と 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) 私は次の場所に行きました: プロジェクト プロパティ プロジェクトのビルド オプション 検索ディレクトリ リソース コンパイラ
そして、ファイルの場所をリソース コンパイラに配置しました。
**