OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

midiの再生

  • 暇なときにでも
  • 質問No.122278
  • 閲覧数150
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 68% (81/119)

道楽でVBを勉強してるものです。
VB5.0のLearning Editionを使っていますが、MIDIファイルを再生するにはどうしたらいいでしょうか。手探りで

Private Declare Function MciExecute Lib"winmm.dll"(ByVal IpstrCommand As String) As long

mciExecute ("play C:\~.mid")

を見つけてやってみたのですが再生が終わるまで鳴りっぱなしになってしまいました。

プログラムのBGMとして使用したいので、任意の時に止められて、繰り返し再生する方法を教えてください。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル13

ベストアンサー率 46% (643/1383)

止める方は、
Call mciExecute("Stop ファイル名")
ですね。

ゲームで使うんであれば、
Call mciExecute("Open ファイル名 Alias BGM01")
のようにして、あらかじめBGM01って名前でメモリ内にファイルを読み込んでおいて、

Call mciExecute("Play BGM01")
でそのファイルを再生するようにすると、再生時のタイムラグを少なくすることが出来ます。

で、BGM01が必要なくなれば
Call mciExecute("Stop BGM01")
Call mciExecute("Close BGM01")
として、メモリを開放してやります。

ちなみに、MidiだけでなくWav等のフォーマットにおいても上記の方法でOKです。


ループに関しては、MCIには「ループ再生」なる便利なコマンドはありません。
mciSendString コマンド(だったかな?)を使って逐次現在の再生位置を調べてやって、曲の末端になったら、再度 Play コマンドを使う。って処理になったと思います。

実際にプログラム書くのがメンドクサクなったんで、Googleで検索かけました。
以下のURLとかを参考にしてください。

○基本的な事柄
http://www.aqube.pos.to/fly/vb/mm1.html

○ループの具体例
http://www.aqube.pos.to/fly/vb/mm2.html

○ループの具体例
http://member.nifty.ne.jp/akis/game_log/log1/47.html


尚、VB6であればDirectXに含まれるDirectPlayが使用できます。
こっちの方には確かループ再生のコマンドがあったような・・・ 他にもフェードアウト等のより細かい制御が出来たと思います。
http://www.microsoft.com/japan/developer/directx/default.asp
のDirectX SDK を使えば、VBからでもDirectXを扱うことが出来るようになります。
お礼コメント
Ryuku

お礼率 68% (81/119)

どうもありがとうございました。ラーニングエディションでは出来ないように書いてあった本を見てあきらめていたのですが、お答えいただいて良かったです。おかげで無事解決し、新しい事に挑戦することが出来ました。
投稿日時 - 2001-08-24 03:02:56
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ