MIDI デバイス取得関連で少しはまったので備忘用にメモしておきます。
C++ MIDIインプットデバイスのリストアップ(Windows) と同じ処理ですが、以下のような関数で入力MIDIデバイスを取得しようとしました。
void PrintMidiInputDevices()
{
MMRESULT result;
MIDIINCAPS midi_in_caps;
const s32 BUFF_SIZE = 32;
u32 num_devices = midiInGetNumDevs();
std::string message = "number of devices: " + std::to_string(num_devices);
printf(message.c_str());
for( u32 dev_id=0; dev_id<num_devices; ++dev_id )
{
UINT cbMidiInCaps;
result = midiInGetDevCaps(
dev_id,
&midi_in_caps,
sizeof(midi_in_caps)
);
if (result != MMSYSERR_NOERROR)
{
printf("failed to get MIDI device of ID %u", dev_id);
continue;
}
message = "ID=" + std::to_string(dev_id) + ": " + midi_in_caps.szPname;
printf(message.c_str());
}
}
しかし、MIDI Yokeの入力デバイスが取得できませんでした。具体的には midiInGeNumDevs() が 0 を返してしまいます。調べてみたら、MIDI Yoke は 32 bitのアプリでしか取得できないとのことでした。32 bit でアプリをビルドし直したら取得できるようになりました。