MIDIプログラミングをする際に、C#で接続中の機器をリストする際に使ったAPIの覚書。
midiInGetDevCaps
C#のライブラリには、それらしいのが見つからなかったのでWin32 APIで呼び出しました。(winmm.dll内のmidiInGetDevCaps関数で列挙ができました)
Visual Studioのコンソールアプリの場合は次の手順で列挙します。
1. C#のコンソールアプリを新規作成します。
2. 生成された[Program.cs]ファイルを以下のように編集します。
(クラス名は適当で大丈夫です)
// See https://aka.ms/new-console-template for more information
using System;
using System.Runtime.InteropServices;
class HogeHoge
{
[StructLayout(LayoutKind.Sequential)]
public struct MidiCaps
{
public ushort nMid;
public ushort nPid;
public uint nDriverVersion;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string sPname;
public uint nSupport;
}
[DllImport("winmm.dll")]
extern static uint midiInGetNumDevs();
[DllImport("winmm.dll")]
extern static uint midiInGetDevCaps(uint nDevID, out MidiCaps pMidiCaps, int nMidiCaps);
static void Main()
{
uint nMidiDeviceCount = midiInGetNumDevs();
Console.WriteLine("MIDI機器が {0} 個見つかりました", nMidiDeviceCount);
for (uint n = 0; n < nMidiDeviceCount; n++)
{
MidiCaps midiCaps = new MidiCaps();
midiInGetDevCaps(n, out midiCaps, Marshal.SizeOf(typeof(MidiCaps)));
Console.WriteLine("{0}: {1}", n, midiCaps.sPname);
}
}
}
実行すると、こんな感じで接続中のMIDIデバイスが表示されます。
まとめ
今回は短い記事ですが、Visual StudioのC#で接続中のMIDI機器を列挙する方法について書きました。
C#のライブラリでは適当なものが見つからず、Win32 APIで用意されている[midiInGetNumDevs]関数を呼び出すことでデバイス名が取得が可能でした。
MIDIプログラミングなどで機器の取得で困っている人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。