When you create a midi output device like this:
MidiOutput::createNewDevice(“New Midi Output Device”);
It only shows up on the MidiInput::getDevices() list and not on the MidiOuput::getDevices() list.
It does successfully create a midi output device that other applications can see and receive MIDI from. But, I can’t easily access this output from my app since MidiOuput::getDevices() doesn’t retrieve it.
I’ve got a hack that allows me to create this output and show it in a combo box as an option, but it doesn’t seem like the right solution.
I’ve seen others have the same issue and haven’t seen a good explanation or resolution for it.
This will successfully send out midi messages to a DAW, for instance.
But, this newDevice will not appear on the MidiOutput::getDevices() list which makes it annoying to include this new device in a combobox list of available midi output devices.
if you look at how MidiOutput/input::GetDevices() works, it makes a system call. It seems that the problem is with apple’s code not updating the list of devices. Have you tried looking at Audio Midi Setup’s MIDI window when you create your device via that code to see if it shows up there? Another option is checking with Midi Monitor (https://www.snoize.com/MIDIMonitor/) to see if your MidiDevice shows up there when your app is executed.
probably should let @jules@timur know about this odd behavior.
when you create an output midi device is an output relative to your application, so it’s actually an input for other applications (even yours if your app scan system inputs) so it’s a normal behaviour.
Good call. It does not show up in the mac Midi Setup window. But, it does show up as an input in Ableton and I am able to send midi to ableton by specifically setting this new device as the output. But, it still refuses to show up on the getDevices() list. I feel like i’m missing something here. @jules, @timur, any help would be much appreciated!
Like kraken said, I don’t think there’s anything unexpected here. If you create an input then it’s an output from the perspective of any app (including yours).
I’m less worried about why my app sees the new output device as an input, that now makes sense to me. But, is there a reason why it doesn’t show up on the MidiOutput::getDevices() list? I would like this new device to be listed in the dropdown of available midi outs.
The list comes from the OS and is a list of the output devices available for all apps to use. Your custom device isn’t a publicly available output device, it’s just for your app to write to. So the OS doesn’t show it on the list.