0

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) 私は次の場所に行きました: プロジェクト プロパティ プロジェクトのビルド オプション 検索ディレクトリ リソース コンパイラ

そして、ファイルの場所をリソース コンパイラに配置しました。

**

4

1 に答える 1

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 ファイルをプログラムのディレクトリに配置する必要があります (IDE からプログラムを実行する場合、プログラムの現在のパスは、実行可能ファイルへのパスではなく、少し予期しないものになる可能性があります)。ファイルですが、プロジェクト ファイルへのパスなど)。

于 2016-08-22T13:08:08.490 に答える