音楽を鳴らすプログラムを作ろうということになるとよく出てくるのがこの関数です。
今回は定義やら使い方よりも使用例を見たほうがよくわかると思うので使用例とその意味について書くことにします。
とりあえず今回もVB6で。
R = mciSendString("open A:\BGM.mid type sequencer alias MyMIDI", "", 0, 0)
これは"A:\BGM.mid"をsequencerとして開いて、その名前をMyMIDIとする、という意味です。
openの後にはファイル名が入りますが、途中に半角のスペースが入る可能性があるときはファイル名をダブルクォーテーションで囲みます。
typeの後にはファイルタイプを書くのですが、なんと、type~の部分を省略すると勝手にMCIがファイルタイプを判別して適切な方法で開いてくれるのです。
これは便利です。
しかし、ファイルタイプがわかっている場合は書いておいたほうがいいことは言うまでもありません。
aliasの後には自分で好きな名前を付けてあげましょう。
後ろの引数3つは今は関係ないので深く考えなくてもかまいません。
失敗した時にはRに0以外の数値が入ります。
R = mciSendString("play MyMIDI from 0", "", 0, 0)
MyMIDIを初めから再生します。
"from 0"を省略すると、現在の再生位置から再び再生します。
数値を変える事により色々な場所から再生することができます。
R = mciSendString("status MyMIDI mode", Buf, 256, 0)
MyMIDIの再生状態をBufに256バイト分格納します。
Bufが"stopped"で始まっていたら再生は止まっています。
"playing"なら再生中、"paused"ならポーズ中、"not ready"ならまだMyMIDIは開かれていません。
Bufには予め256バイト分文字を入れておきましょう。
Bufの左7文字が"stopped"だった時に、もう一度"play MyMIDI from 0"とすることでループ再生が可能になります。
R = mciSendString("stop MyMIDI", "", 0, 0)
MyMIDIの再生を停止します。
この時、再生位置は0に戻ります。
R = mciSendString("pause MyMIDI", "", 0, 0)
MyMIDIの再生を一時停止します。
再生位置はそのままです。
R = mciSendString("close MyMIDI", "", 0, 0)
MyMIDIの使用を終了します。
これを使わずにプログラムを終了した場合、いつまでもファイルの情報がメモリに残りコンピュータに負担をかけるので、必ず再生が終わったら使うようにしてください。
余談ですが……
"open"で、"type waveaudio"としてファイルを開けばWaveサウンドを再生することも可能ですが、実はよく似たAPIのsndPlaySoundとは少し働きが違うのです。
別のサウンドがなっている時にもう一度別の音を鳴らそうとしたときに、mciSendStringの場合は元々再生されていたサウンドの方が優先されて、後から再生しようとしたサウンドは再生されません。
これに対して、sndPlaySoundの場合は、前に再生されていたサウンドを停止させてから次のサウンドを再生します。
また、同じサウンドを何度も利用するとなれば、mciSendStringを利用する方が速いです(環境にもよりますが)。