DirectX - DirectMusic

DirectX7からVBもサポートされるようになりました。そこで、DirectMusicを使ってMIDIを再生仕様と思います。DirectMusicを使うとソフトシンセにより通常のMIDI機器による再生のようにクォリティのばらつきがおこりません。

まずメニューのプロジェクト-参照設定を選び、DirectX7 for Visual Basic Type Liblary にチェックをいれてください。これでDirectX7が利用可能になります。

では、DirectMusicを利用する方法を解説します。
まず、標準モジュールにでも以下のように記述してください。

Dim DX7 As New DirectX7
Dim Perf As DirectMusicPerformance
Dim Seg As DirectMusicSegment
Dim SegState As DirectMusicSegmentState
Dim Loader As DirectMusicLoader

つぎにDirectMusic初期化関数、再生関数、終了関数を作ります。

'【 DirectMusicの初期化 】
' 最初によんでください
'

Public Sub OpenDirectMusic()
  Set Loader = DX7.DirectMusicLoaderCreate()
  Set Perf = DX7.DirectMusicPerformanceCreate()
  Call Perf.Init(Nothing, 0) '初期化する
  Perf.SetPort -1, 1 'MicrosoftSynthesizerを使う
  Call Perf.SetMasterAutoDownload(True) 'SoundFontを自動読み込みにする
End Sub


'【 MIDIファイルの再生 】
' 引数:再生したいFileのフルパス
'

Public Sub PlayDirectMusic(FileName As String)
  If Perf Is Nothing Then
    OpenDirectMusic
  End If
  '停止する。
  Call Perf.Stop(Seg, SegState, 0, 0)
  Call Perf.Reset(0) 'GMリセット
  Set Loader = Nothing
  Set Loader = DX7.DirectMusicLoaderCreate
  Set Seg = Loader.LoadSegment(FileName) 'ファイルを読み込む
  Seg.SetStandardMidiFile 'MIDI
  '再生開始位置を先頭にする
  Seg.SetStartPoint (0)
  '再生
  Set SegState = Perf.PlaySegment(Seg, 0, 0)
End Sub


'【 DirectMusicの破棄 】
' 終了時によんでください
'
Public Sub CloseDirectMusic()
  If Not (Perf Is Nothing) Then Perf.CloseDown
End Sub

プログラム開発室にSoftPlayというソースコード付きのサンプルを置いています。

使用例

Private Sub Form_Load()
  OpenDirectMusic
  PlayDirectMusic "C:\Media\Koto.mid"
End Sub

Private Sub Form_Unload(Cancel As Integer)
  CloseDirectMusic
End Sub

 

戻る