MidiCommDescriptionList MidiCommOut::GetDeviceList() { if (built_output_list) return out_list; MidiCommDescriptionList devices; // Add the built-in synth MidiCommDescription mac_synth; mac_synth.id = 0; mac_synth.name = L"Built-in MIDI Synthesizer"; devices.push_back(mac_synth); // Add any external devices ItemCount destinations = MIDIGetNumberOfDestinations(); for (int i = 0; i < destinations; ++i) { MIDIEndpointRef endpoint = MIDIGetDestination(i); CFStringRef cf_name = BuildEndpointName(endpoint); MidiCommDescription d; d.id = i + 1; d.name = WideFromMacString(cf_name); CFRelease(cf_name); devices.push_back(d); } built_output_list = true; return devices; }
MidiCommDescriptionList MidiCommOut::GetDeviceList() { MidiCommDescriptionList devices; unsigned int dev_count = midiOutGetNumDevs(); for (unsigned int i = 0; i < dev_count; ++i) { MIDIOUTCAPS dev; midi_check(midiOutGetDevCaps(i, &dev, sizeof(MIDIOUTCAPS))); MidiCommDescription d; d.id = i; d.name = dev.szPname; devices.push_back(d); } return devices; }
MidiCommDescriptionList MidiCommIn::GetDeviceList() { MidiCommDescriptionList devices; unsigned int dev_count = midiInGetNumDevs(); for (unsigned int i = 0; i < dev_count; ++i) { MIDIINCAPS dev; const static int MaxTries = 10; int tries = 0; while (tries++ < MaxTries) { try { midi_check(midiInGetDevCaps(i, &dev, sizeof(MIDIINCAPS))); break; } catch (MidiError ex) { // Sometimes input needs to take a quick break if (ex.m_error != MidiError_MM_NotEnabled) throw; Sleep(50); } } if (tries == MaxTries) throw MidiError_MM_NotEnabled; MidiCommDescription d; d.id = i; d.name = dev.szPname; devices.push_back(d); } return devices; }
MidiCommDescriptionList MidiCommIn::GetDeviceList() { if (built_input_list) return in_list; MidiCommDescriptionList devices; ItemCount sources = MIDIGetNumberOfSources(); for (int i = 0; i < sources; ++i) { MIDIEndpointRef endpoint = MIDIGetSource(i); CFStringRef cf_name = BuildEndpointName(endpoint); MidiCommDescription d; d.id = i; d.name = WideFromMacString(cf_name); CFRelease(cf_name); devices.push_back(d); } built_input_list = true; return devices; }