I want to use one of the custom MIDI drivers on my system in Java, but when I try to set it via this code:
MidiDevice midi_dev = MidiSystem.getMidiDevice(i);
midi_dev.open();
System.out.println(midi_dev.getReceivers());
MidiSystem.getTransmitter().setReceiver(midi_dev.getReceiver());
i
is a MidiDevice.Info for the requested MidiDevice. This code throws an exception:
(This code is around line 58 of MidiPlayer)
javax.sound.midi.MidiUnavailableException
at javax.sound.midi.MidiSystem.getDefaultDeviceWrapper(Unknown Source)
at javax.sound.midi.MidiSystem.getTransmitter(Unknown Source)
at com.k.midishapes.midi.MidiPlayer$MidiPlayThread.<init>(MidiPlayer.java:58)
at com.k.midishapes.midi.MidiPlayer.start(MidiPlayer.java:20)
at com.k.midishapes.MidiMain.init(MidiMain.java:70)
at crashcourse.k.library.lwjgl.DisplayLayer.initDisplay(DisplayLayer.java:62)
at crashcourse.k.library.lwjgl.DisplayLayer.initDisplay(DisplayLayer.java:25)
at com.k.midishapes.MidiMain.main(MidiMain.java:26)
Caused by: java.lang.IllegalArgumentException: Requested device not installed
at javax.sound.midi.MidiSystem.getDefaultDevice(Unknown Source)
... 8 more
How can I install the device?
I think the problem is
MidiSystem.getTransmitter()
... The default device/transmitter is unavailable. Try to create your desired MidiDevice and obtain a transmitter from it.Edit: Here is a little example. Just create a CustomReceiver with the transmittername and receivername. You get the string from for example
Info info[] = MidiSystem.getMidiDeviceInfo();
String firstDevice = info[0].getName();
Don't forget to close the CustomReceiver with
close()
.