|

|
|
 |
4.2.3 演奏と停止、後処理 |
 |
|
|
|
|
|
眠気を誘うような前置きが続きましたが、これでやっとMIDIファイルを演奏する準備ができました。今度は、MIDIファイルを演奏する方法と停止する方法、それと演奏中かを調べる方法です。
|
|
|
|
|
|
|
|
|
|
MIDIファイルを再生する場合は、MusicPerformanceオブジェクト(例ではobjDMPerf)のPlaySegment(DirectX8の場合はPlaySegmentEx)を使います。以下は再生する例で、PlaySegment(PlaySegmentEx)メソッドを使い、MusicSegmentStateオブジェクト(例ではobjDMSgtSt)を作ることで再生が始まります。
PlaySegment(PlaySegmentEx)メソッドの引数は3つで、1つめの引数に読み込んだMIDIファイルの情報(MusicSegmentオブジェクト)を指定、あとの2つは0でOKです。
'再生(DirectX 7のとき)
Set objDMSgtSt = objDMPerf.PlaySegment(objDMSgmnt, 0, 0)
または
'再生(DirectX 8のとき)
Set objDMSgtSt = objDMPerf.PlaySegmentEx(objDMSgmnt, 0, 0)
|
|
|
|
|
|
|
|
|
|
|
演奏を停止する場合は、MusicPerformanceオブジェクト(例では)のStop(DirectX8の場合はStopEx)メソッドを使います。
引数はDirectX 7とDirectX 8で多少違っています。
'演奏を停止(DirectX 8のとき)
objDMPerf.Stop segment:=objDMSgmnt _
, segmentState:=objDMSgtSt _
, mtTime:=0 _
, lFlags:=0
または
'演奏を停止(DirectX 8のとき)
objDMPerf.StopEx ObjectToStop:=objDMSgtSt _
, lStopTime:=0 _
, lFlags:=0
|
◆DirectX 7のときのオプション
| segment:= |
演奏中のDirectMusicSegmentオブジェクト(例ではobjDMSgmnt) |
| segmentState:= |
演奏中のDirectMusicSegmentStateオブジェクト(例ではobjDMSgtSt) |
| mtTime:= |
何秒後に演奏を停止するかを指定します。単位は知りません(汗)。すぐに停止する場合は0です。(例では0) |
| lFlags:= |
停止する位置を指定します。すぐに停止する場合は0です。(例では0)
なお、一部ですが次の物があり、これらはDirectX 8でも同じです。
DMUS_SEGF_MEASURE:mtTime:=で指定した時間経過後の次の小節の終わり
DMUS_SEGF_BEAT:mtTime:=で指定した時間経過後の次の拍子
|
◆DirectX 8のときのオプション
| ObjectToStop:= |
演奏中のDirectMusicSegmentState8オブジェクト(例ではobjDMSgtSt) |
| lStopTime:= |
何秒後に演奏を停止するかを指定します。単位は知りません(汗)。すぐに停止する場合は0です。(例では0) |
| lFlags:= |
停止する位置を指定します。すぐに停止する場合は0です。(例では0)
なお、一部ですが次の物があり、これらはDirectX 7でも同じです。
DMUS_SEGF_MEASURE:lStopTime:=で指定した時間経過後の次の小節の終わり
DMUS_SEGF_BEAT:lStopTime:=で指定した時間経過後の次の拍子
|
|
|
|
|
|
|
|
|
|
|
演奏中かを知りたいときは、DirectMusicPerformanceオブジェクト(例ではobjDMPerf)のIsPlayingメソッドの結果から知ることができます。Trueなら演奏中、Falseなら止まっています。
引数には、演奏中のDirectMusicSegment(DirectMusicSegment8)オブジェクト(例ではobjDMSgmnt)と、DirectMusicSegmentState(DirectMusicSegmentState8)オブジェクト(例ではobjDMSgtSt)を指定します。
'演奏が終了するまで待つ
Do Until objDMPerf.IsPlaying(objDMSgmnt, objDMSgtSt) = False
DoEvents
Loop
|
|
|
|
|
|
|
|
|
|
|
DirectMusicの終了処理、早い話が後片づけです。MusicPerformance(MusicPerformance8)オブジェクト(例ではobjDMPerf)のResetメソッドで設定をリセットし、最後にCloseDownメソッドで全てを終わらせます。プログラムの終了処理などで念のためやっておきましょう。なお、この記述はDirectX7と8で同じです。
'DirectMusicPerformanceをリセット
objDMPerf.Reset resetflags:=0
'DirectMusicPerformanceを終了
objDMPerf.CloseDown
|
|
|
|
|
|