Platform SDK: DirectX

ステップ 3 : MIDI ファイルの演奏

[C++]

ここでは、DirectX for Visual Basic でのアプリケーション開発について説明する。C++ については、「DirectMusic C/C++ チュートリアル」を参照すること。

[Visual Basic]

ここまでのステップで、MIDI ファイルを表す DirectMusicSegment オブジェクトが作成されている。これを演奏するには、もう少し準備が必要である。

まず、セグメントに、スタンダード MIDI ファイルであることを通知する。このステップがなくてもセグメントを演奏することはできるが、再生に関する特定の項目が正しく処理されない可能性がある。次のコードでは、従来の MIDI ファイル拡張子を持つファイルに対して、この処理を実行している。

If StrConv(Right(FileName, 4), vbLowerCase) = ".mid" Then
    Call objSeg.SetStandardMidiFile 
End If

次に、音色の DLS データが、ポートに確実にダウンロードされるようにする。最も簡単な方法は、パフォーマンス全体で自動ダウンロードを有効にすることである。この処理は、セットアップ コードで次のように指定できる。

Call gObjDMPerformance.SetMasterAutoDownload(True)

この方法の欠点は、セグメントの停止と同時にポートから音色がアンロードされるため、もう一度音色をダウンロードしなければならない点である。アプリケーションが異なるセグメントを続けて演奏する場合、この処理により、容認できないほどの遅延が発生する可能性がある。処理をより完全に制御するために、セグメントが演奏される直前に、毎回音色をダウンロードするように指定することができる。音色をアンロードするように選択するまで、またはパフォーマンスが終了するまで、音色はポートに残ったままとなる。重複するダウンロードは無視される。

Call objSeg.Download(gObjDMPerformance)

ここまでの作業で、セグメントは演奏可能となった。

Call gObjDMPerformance.PlaySegment(objSeg, 0, 0)

再生の状態を (たとえば、一時停止や再開を行えるように) 追跡する場合は、DirectMusicSegmentState オブジェクトの DirectMusicPerformance.PlaySegment の戻り値を保存しておく。

Dim objSegState as DirectMusicSegmentState
Set objSegState = gObjDMPerformance.PlaySegment(gObjPrimarySeg, 0, 0)