ページ 11

VC++ wav ファイルの再生

Posted: 2014年12月02日(火) 17:45
by Hituji
こんばんは,C++を始めたばかりの者です.

wavファイルの再生を行いたいと思い,調べてコードを作成したのですがエラーが発生します.
エラー内容は
・”const char*”の引数は型”LPCWSTR”のパラメーターと互換性がありません
と表示されます.

以下にソースコードを示します.

#pragma comment(lib,"winmm.lib")
#include <Windows.h>
#include <stdio.h>
#include <mmsystem.h>

int main()
{
PlaySound("test.wav",NULL,SND_ASYNC); /*test.wavを再生*/

// PlaySound(NULL, NULL, NULL);

return 0;
}


ご指導よろしくお願いします.

Re: VC++ wav ファイルの再生

Posted: 2014年12月02日(火) 17:55
by Blue
たぶんVisual Studioだと思いますが、コンパイルオプションの文字オプションが「Unicode文字セットを使用する」となっていると、
PlaySound関数の第1引数は、LPCWSTR(≒const wchar_t*)型を要求します。

単に、「"test.wav"」とするとLPCSTR(≒const char*)型になるので、型が一致しないというエラーになるわけです。

回避方法としては、TEXTマクロ(もしくは_Tマクロ)を使用するか、
L"test.wav"」と明示的にUnicode文字列のリテラルであると指定するかどちらかにします。

TEXTマクロを使うほうがベターだと思います。

コード:

PlaySound(TEXT("test.wav"),NULL,SND_ASYNC);

Re: VC++ wav ファイルの再生

Posted: 2014年12月02日(火) 18:20
by Hituji
>Blueさん


「L"〇〇〇〇"」と入力しているものを見たことがあったのですが,そういうことなのですね.
TEXTマクロを使ったところ,プログラム実行できました.
ありがとうございます.

Re: VC++ wav ファイルの再生

Posted: 2014年12月02日(火) 18:22
by Hituji
追加の問題なのですが,wavファイルの再生が実行されません.
プロジェクトファイルのあるフォルダにwavファイルを入れています.

原因のわかる方がいらっしゃいましたらご指導よろしくお願いします.

Re: VC++ wav ファイルの再生

Posted: 2014年12月02日(火) 18:26
by Hituji
度々連絡を入れてしまい申し訳ありません.

PlaySound関数の同期・非同期の問題でした.再生をすぐに打ち切られていた,という認識をしています.
ASY_NC⇒SY_NC にしたところ解決しました.