- 締切済み
MIDIをBGMとして使いたい
ウインドウズでゲームを作ってみたいと思い立ち、1ヶ月ほど細々とプログラミングしている者です。環境はXPSP2、VC++6.0です。 このサイトの方たちには色々教えて頂いております。 今、BGMとしてMID(MIDI)ファイルを使いたいと思って色々やっているのですが、音を出すことが出来ません。 VCで作成したプロジェクトフォルダに、test.midというファイルを入れてあり、test.mid単独では音は鳴ります。 アプリケーションのクライアント領域上で右ボタンを押すと音が鳴ると思っていたのですが、メッセージボックスしか出ませんでした。 #include "windows.h" #include <mmsystem.h> #pragma comment(lib, "winmm.lib") LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch(uMsg) { case WM_CREATE: mciSendString("open test.mid type sequencer alias music",NULL,0,NULL); break; case WM_DESTROY: mciSendString("stop music",NULL,0,NULL); mciSendString("close music",NULL,0,NULL); PostQuitMessage(0); return 0; case WM_KEYUP: if(wParam==VK_RIGHT) { MessageBox(NULL,TEXT("MUSIC"),NULL,MB_OK); mciSendString("play music", NULL, 0, NULL); } } return DefWindowProc(hWnd,uMsg,wParam,lParam); } WINMAINは別段変わったことはやっておりません。ご存知の方が居ましたら宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- BearCave
- ベストアンサー率20% (189/909)
midファイルが「カレントパス」内に入っていないのが原因ではないでしょうか。ファイルをパス無しで指定した場合、カレントパスが自動的に使われますが、このカレントパスがクセモノで、必ずしも実行ファイルと同じパスであるとは限らないのです。Visual Studioからデバッグモードで実行したり、ショートカットから実行したりすると、カレントパスも変化します。 とりあえず「test.mid」の部分をフルパスにしてトライしてみてください。(例えば「C:\music\test.mid」など)これならカレントパスに影響されず、確実にmidファイルを指定できるので。 これでも音が鳴らなければ別の原因ということになりますが、少なくとも可能性の一つを潰せるので…
- php504
- ベストアンサー率42% (926/2160)
試しにコンパイルしてみましたがメッセージボックスの「OK」を押して消した後にちゃんと音が鳴りました。
補足
確認して頂き、有難う御座いました。 そうですか…宜しければ、動作環境を教えて頂けませんでしょうか?
- redfox63
- ベストアンサー率71% (1325/1856)
> アプリケーションのクライアント領域上で右ボタンを押すと の『右ボタン』とは マウスの右ボタンなのでしょうか お示しのコードでは キーボードの『右矢印』キーを離した際の処理内容です マウスの右ボタンなら WM_RBUTTONDOWN/WM_RBUTTONUPメッセージで処理しないといけにかと思います
補足
すみません。表現が不適切でした。 キーボードの右矢印キーです。 右矢印キーを押すと、メッセージボックス(MUSIC)は出るのですが、 音が出ないんです。
お礼
大分長く引っ張ってしまいました。 ひとまず終了させて頂きます。 アドバイスを下さったかた、有難う御座いました。
補足
情報有難う御座いました。 保存場所を変えたり色々やってみたのですが、フルパスでもうまくいかない様です。 以前回答下さった方が、私が書いたソースをコピペしたら音が鳴ったとのことなので、環境に依存しているとは思うのですが…。 うーん、VCは使う人を選ぶのか?