MIDIデバイスを列挙す

システムにインストールされているMIDIデバイスを列挙する関数を作ろうと思います。

まずWin32API関数の定義をします。

Private Const MAXPNAMELEN = 32
Private Type MIDIOUTCAPS
    wMid As Integer
    wPid As Integer
    vDriverVersion As Long
    szPname As String * MAXPNAMELEN
    wTechnology As Integer
    wVoices As Integer
    wNotes As Integer
    wChannelMask As Integer
    dwSupport As Long
End Type

Private Declare Function midiOutGetDevCaps Lib "winmm.dll" Alias "midiOutGetDevCapsA" _
    (ByVal uDeviceID As Long, _
    lpCaps As MIDIOUTCAPS, _
    ByVal uSize As Long) As Long

Private Declare Function midiOutGetNumDevs Lib "winmm.dll" () As Long

つぎにGetMidiDevice関数を作ります。

Public Sub GetMidiDevice(Device As Collection)

  Dim lngCount As Long
  Dim MaxCount As Long
  Dim strBuff As String
  Dim lngRC As Long
  Dim MidiCaps as MIDIOUTCAPS

  MaxCount = midiOutGetNumDevs()

  'MIDI出力デバイスが使用できない場合
  If MaxCount <= 0 Then Exit Sub

  For lngCount = 0 To MaxCount - 1
    lngRC = midiOutGetDevCaps(lngCount, MidiCaps, Len(MidiCaps))
    strBuff = MidiCaps.szPname
    strBuff = Left(strBuff, InStr(strBuff, vbNullChar) - 1)
    Device.Add strBuff
  Next

End Sub

使い方はMIDIデバイス名を格納するコレクションを引数に指定すればOKです。

使用例

フォームにリストボックスを貼り付けた状態で行ってください。

Dim MDev As New Collection
Dim I As Long
GetMidiDevice MDev
For I = 1 To MDev.Count
  List1.AddItem MDev(I)
Next

 

戻る