C++プログラムで.wavファイルを再生する方法を理解するために、PlaySoundのさまざまなサンプルをコピペしています。Playsound in C++:.wavファイルのファイルエラー
今のところ、他のどのファイルよりも多く動作するようですが、ファイルを実行すると.wavファイルが再生されず、ウィンドウ内に.wavファイルエラーがありますファイル。
繰り返してください:プログラムは問題なくビルドして実行します。実行中のプログラムの中にエラーが表示されます。私はその問題が何であるかをかなり知ることができません。それは単に場所の問題かもしれませんか?
エラーは言う:「ウェーブ::ファイルエラー: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;
}
** EDIT:あなたの助けをありがとうみんな。これを理解するまでにはしばらく時間がかかりました。ここで
は、私がやったことだ:
1)私は、ルートフォルダ内の.wavファイルを置きました。 2)私はに行ってきました: プロジェクト プロパティ プロジェクトのビルドオプション 検索ディレクトリ リソースコンパイラ
と私は、リソースコンパイラでは、ファイルの場所を置きました。
**
はい、ファイルの場所の問題である可能性があります。 Code :: Blocks **はプロジェクトのルートディレクトリを現在のディレクトリとして実行可能ファイルを実行することを覚えています(または学ぶ!)。 Windowsエクスプローラ(またはLinux Equiv)からexeファイルを実行すると、現在のディレクトリ**のフォルダに**プログラムが実行されます。現在のディレクトリは、ファイルを開くときに使用され、フルパスが指定されていないか、または(1)相対パスが指定されていません。 – enhzflep
また、WAV形式はかなりシンプルです.Petzoldの本を読んだら、サウンドハードウェアの使用はかなり簡単です。約200行のコードで、ディスクからファイルを読み込んでサウンドカードに送信することができます。当然のことながら、あなたはPlaySoundがあなたに与えるものよりも大きなコントロールを持っています。例えば、ディスク上に存在しないサウンドを再生したり、再生スピードをスピードアップ/スローダウンさせることができます。音符を録音すると、再生レートを変更すると音程が変わります(残念ながら、残響音もあります)。 :) – enhzflep