• ベストアンサー

MCIを使ったMIDIの連続再生

c言語とMCIを使ってMIDI形式の音楽データを再生する事は出来るのですが、当然曲が終わると再生も終わります。しかしゲームのBGMとして使いたいので、曲をループさせたいのですがその方法が分かりません。 前にOKwebで同じ様な質問を見付けた覚えがありますが、その時はすぐに必要というわけではなかったので、完全には読みませんでした。そしていざ調べようと検索したのですが、今度はこれといったものが見付からず、質問させて頂きます。 MCI_NOTIFYの様な記述が必要だった様な気がするのですが、ご存知の方おられましたら回答を宜しくお願い致します。

noname#67169
noname#67169

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★mciSendString() ならアドバイス出来るけど。 ・MCI は mciSendCommand() それとも mciSendString() のどちらですか?  MCI_NOTIFY という事はやっぱ mciSendCommand() ですよね。  指定したウィンドウに MM_MCINOTIFY メッセージをポストするので  『MM_MCINOTIFY』を処理して再生するようにすればいいと思う。 ・mciSendString() の方なら次のような感じで簡単に出来ます。  mciSendString( TEXT("Play Music NOTIFY"), NULL, 0, hWnd );  ↑  『hWnd』がウインドウのハンドル。  『Play Music』が識別文字列。 ・下に mciSendString() 関数によるマクロ群を紹介します。 サンプル: #define FuncMCI_Open(s)    mciSendString(s,NULL,0,NULL) #define FuncMCI_Close()    mciSendString(TEXT("Close Music"),NULL,0,NULL) #define FuncMCI_CloseAll()   mciSendString(TEXT("Close All"),NULL,0,NULL) #define FuncMCI_PlayNotify(h) mciSendString(TEXT("Play Music NOTIFY"),NULL,0,h) #define FuncMCI_Play()    mciSendString(TEXT("Play Music"),NULL,0,NULL) #define FuncMCI_Stop()    mciSendString(TEXT("Stop Music"),NULL,0,NULL) #define FuncMCI_Pause()    mciSendString(TEXT("Pause Music"),NULL,0,NULL) #define FuncMCI_Resume()   mciSendString(TEXT("Resume Music"),NULL,0,NULL) 使い方: // 再生 FuncMCI_Open( ("abc.mid") ); FuncMCI_PlayNotify( hWnd ); ←再生を繰り返す指定 ※再生を繰り返さない場合は FuncMCI_Play() を使う。 // 停止 FuncMCI_Stop(); FuncMCI_Close(); // 一時停止 FuncMCI_Pause(); // 再開 FuncMCI_Resume(); その他: ・マルチメディアについてはあまり詳しくないので次のリンクを参考にして下さい。  私が以前ネット検索で見つけて参考としたものです。  未整理のためリンクだけ載せます。  http://tgws.fromc.jp/prog/prog10.html  http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9802/mci/  http://www.mb.ccnw.ne.jp/garger-studio/vbgame/112.html  http://hp.vector.co.jp/authors/VA030681/VBTips/Music.htm  http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200301/03010051.txt  http://homepage3.nifty.com/goldenchild/mci.htm  http://www007.upp.so-net.ne.jp/hama_d/newapi/chapters/c25.html  http://www.bekkoame.ne.jp/i/mr.manri/MCI/index.html  http://homepage1.nifty.com/rucio/main/technique/teq_1.htm  http://msdn.microsoft.com/library/en-us/multimed/htm/_win32_multimedia_command_strings.asp  上記のは主に mciSendString() 関数について調べた結果です。 最後に: ・調べるなら『MM_MCINOTIFY』で検索してみて下さい。 ・以上。下の『参考URL』もどうぞ。

参考URL:
http://wisdom.sakura.ne.jp/system/winapi/media/mm3.html
noname#67169
質問者

お礼

回答有難う御座います。 私が使用していたのはMCI は mciSendCommand()の方ですが、mciSendString()の方も知っていたので、試してみました。しかし音は出せますがループ再生させる事が出来ず、MM_MCINOTIFYで検索してみた所ようやくループが出来る様になりました。多くのサイトの紹介、有難う御座います。全て見て参考にさせて頂きました。 私と同じ疑問を持った人のために、下記に一応私がネットで知った書き方を載せておきます。 mciSendCommand(    0, MCI_OPEN, MCI_OPEN_TYPE |      ↓ここを足します    MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT | MCI_NOTIFY,    (DWORD)&mop);    mciSendCommand(mop.wDeviceID, MCI_PLAY, 0, 0); と書くと、MCIの処理が終了するとNOTIFYメッセージが来るらしい。 すると、来た時にMM_MCINOTIFYが呼び出されるらしい。 case MM_MCINOTIFY:   if(wp!=MCI_NOTIFY_SUCCESSFUL){   MessageBox(hWnd,"異常終了しました",NULL,MB_OK);   break;   }   mciSendCommand((MCIDEVICEID)lp,MCI_SEEK,MCI_SEEK_TO_START,0);   mciSendCommand((MCIDEVICEID)lp,MCI_PLAY,MCI_NOTIFY,(DWORD)&mop);   return 0; 上の二つを書いた所、MIDIのループ再生に成功しました。

関連するQ&A

  • MIDIが聞けません。

    音楽視聴の出来るHPでのMIDIが聞けなくなりました。 今までは良かったのですが、McAfeeを更新していくうちにセキュリティーが強くなったのかもしれないかも?  音楽を再生するスライダーが表示されなくなりました。  HPのBGMに使用していた曲も聞こえないところもあります。

  • ポータブルプレーヤーでMIDIを再生するには?

    ポータブルプレーヤーでMIDI形式の音楽を再生するのはどうすれば良いでしょうか? やはり一度MP3形式に直さなければ再生できないですか? また、今までにMIDIを再生できるポータブルプレーヤーを見たことがありません。 販売されていないのでしょうか?

  • [C言語、Win32API] 音楽を途中から再生する

    Visual C++ 6.0 でWindowsアプリケーションプログラミングをしています。 音楽(mp3形式)を再生するのは高レベルMCIまたは中レベルMCIで出来るのですが、曲を途中から再生する、ということは可能なのでしょうか? もし、やり方があれば、教えていただけると有難いです。 よろしくお願いします。

  • MIDI再生

    超初心者で恐縮ですが、MIDI音源の再生の仕方について教えてください。 ネットからフリーのゲームをダウンロードしたところ、効果音等は鳴るのですがBGMが流れません。 作者様に確認したところ、BGMはMIDI音源なのでその設定をしてくださいといわれました。 今の環境ですが、windowsXPのデスクトップPC、UA-25EX、KX61が接続されています。 接続方法は、 KX61→PC(USB接続) PC→UA-25EX(USB接続) UA-25EX→スピーカー となっています。 BGMを再生するにあたり、必要なものがあるのでしょうか。 また、設定方法等詳しく教えていただければ幸いです。 宜しくお願いします。

  • Firefox、Safariで、midiをBGMとして流したいのですが

    Firefox、Safariで、midiをBGMとして流したいのですが、、 midiの再生にはQuickTimeのプラグインが必要みたいですが、 midiサイトをどのブラウザで試聴しても、再生されました。 ということは、プラグインはされているということでよろしいのでしょうか? 私のソースの記述がおかしいから、FirefoxやSafariでは音が再生されない だけだと思うのですが、勉強不足で何がなんやらわかりません。。 各ブラウザ、それぞれ違った記述でも構いません。 各ブラウザ用にhtmlを作ろうと思いますので、 埋め込みタグのobjectかembedだと思うのですが、違いますでしょうか? スライドショーのページにどうしてもBGMを流せたら…と、、 どうかアドバイス宜しくお願いします。

  • win8 midi再生

    win8のメトロ画面のIEからWebを閲覧すると、BGMのmidi音楽が再生されません。 デスクトップからのIE10からは問題なく聞くことが出来ます。 解決策をご教示ください。

  • yahooブログでMIDI再生

    yahooブログでMIDI形式の音楽流したいんですが・・ 自動再生での流し方わかるかた教えてください<m(__)m>

  • 音楽ファイルを再生できません

    音楽ファイルを再生したいのですが、「Sing MCI Error」として、以下のようなエラーメッセージが出てしまいます。 「MMSYSTEM326 現在の形式のファイルを再生できるWAVEデバイスがインストールされていません。」 WAVEデバイスとはどのようなものかわからず困っています。ちなみに今までmp3、midi、wavなどいろいろな形式の音楽ファイルは再生できていたのですが。 この音楽ファイルが入っているCD-ROMにはInstall.exeというファイルも入っているのですが、これを実行すると 「Install.exeは有効なWin32アプリケーションではありません」 というエラーメッセージが出ます。 音楽を再生するにはどうすればいいのでしょうか? よろしくお願いします。

  • ゲーム音楽について教えて下さい(アマ・ゲームクリエイター様へ)

    アマチュア・ゲームクリエイターさん向けに、 RPG音楽の素材HPを立ち上げようと思っております。 そこで、公開する音楽をMIDIにするかMP3にするか 悩んでいるのですが、 (1) MIDIとMP3では需要としてはどちらが多いと思いますか?   軽いという意外に、音質の悪いMIDIの利点って何でしょう? (2) 例えばRPGツクールでは、2000、2003、XPのどれでも   MP3形式が使えますか? (3) 同じくツクールで、曲の途中からループ再生できるものが   あるらしいですが、MP3でもできるのですか? (4) MP3でゲーム音楽を公開している方の曲は、どれも完結してるか、   フェイドアウトしているものが多く、MIDIのようにループ再生用に   作られているものが殆どないような気がしますが、   何故でしょうか?MP3では、ループ再生対応の曲でも  フェイドアウトさせる必要があるのですか? (5) RPGゲーム作成ソフトってツクールしか知らないのですが、   他に人気があるのがあるのでしょうか?ソフトによって、   MIDIが便利とかそうでないとかあるのでしょうか? 質問が多いようですいません。 (1)~(5)の質問のどれか1つでも答えて頂けるとすごく助かります。 (本当はMIDIとMP3の両方作ればよいのでしょうが、 楽器設定や加工が全く異なってくるので、できればどちらかに 統一したいと思っています・・) どうぞ宜しくお願い致します。!!

  • IE7でMIDIが再生されない

    こんにちは。 よく、ネットサーフィンしているとMIDIの音楽がBGMとして流れているページがありますが、その音楽が鳴らなくなりました。 この前までなっていたと思うのですが、気付くといつの間にか鳴らなく なっていました。 ちなみに、他のブラウザ(Sleipnir(エンジンはIEです))なら普通に鳴ります。 また、PC内に保存してあるMIDIファイルもウインドウズメディアプレイヤーで普通に再生されます。 今、IE7でMIDIのBGMがなっているページへ行って、Temporary Internet Filesに 一時ファイルが残るか確認したところ、残っていないようです(これはIE7の仕様なんでしょうか?)。 Sleipnir(エンジンはIEです)だとTemporary Internet Filesに一時ファイルが残ります。 そして、ウェブページのサウンドを再生する というIEの設定項目も 確認済みです。 解決方法を探したのですが、どうしても見つからず質問させていただきました。よろしくお願い致します。 機種:富士通 NF70X OS:vista ホームプレミアム ブラウザ:InternetExplorer7

専門家に質問してみよう