I Would like to send midi message through usb midi device MIDIOUT2 (USB Midi 2i2o), but I get "MIDI OUT transmitter not available" (Java version 1.8.0_211). This is definitely an output (other application works with that). I could not find any helpful hints on internet. Demo code, taken from examples in the web and stackoverflow:
public class MidiExample {
private MidiDevice nkDevice;
private Transmitter nkTransmitter;
public static void main(String[] args) throws Exception {
new MidiExample().start();
}
public void start() throws Exception {
openDevice();
}
private void openDevice()
{
// Obtain information about all the installed synthesizers.
nkDevice = null;
nkTransmitter = null;
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
for (int i = 0; i < infos.length; i++)
{
try
{
System.out.println(infos[i].toString());
String deviceName = "MIDIOUT2 (USB Midi 2i2o)";
MidiDevice device = MidiSystem.getMidiDevice(infos[i]);
MidiDevice.Info d = infos[i];
if( d.getName().contains(deviceName) )
{
System.out.println("Opening " + d.getName());
System.out.println(" max receivers: " + device.getMaxReceivers());
System.out.println(" max transmitters: " + device.getMaxTransmitters());
nkDevice = device;
nkTransmitter = device.getTransmitter();
nkTransmitter.setReceiver(new MidiInputReceiver(device.getDeviceInfo().getName()));
nkDevice.open();
}
}
catch (MidiUnavailableException e)
{
// Handle or throw exception...
System.out.println("Exception occurred while getting MIDI devices!");
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
}
class MidiInputReceiver implements Receiver {
public MidiInputReceiver(String name) {
System.out.println(name);
}
@Override
public void send(MidiMessage message, long timeStamp) {
}
@Override
public void close() {
}
}
Output:
USB Midi 2i2o
MIDIIN2 (USB Midi 2i2o)
USB Midi 2i2o
MIDIOUT2 (USB Midi 2i2o)
Opening MIDIOUT2 (USB Midi 2i2o)
max receivers: -1
max transmitters: 0
javax.sound.midi.MidiUnavailableException: MIDI OUT transmitter not available
Exception occurred while getting MIDI devices!
MIDI OUT transmitter not available
Real Time Sequencer
at com.sun.media.sound.AbstractMidiDevice.createTransmitter(AbstractMidiDevice.java:456)
at com.sun.media.sound.AbstractMidiDevice.getTransmitter(AbstractMidiDevice.java:309)
at ch.mead.stagedesk.inputcontrol.MidiExample.openDevice(MidiExample.java:50)
at ch.mead.stagedesk.inputcontrol.MidiExample.start(MidiExample.java:24)
at ch.mead.stagedesk.inputcontrol.MidiExample.main(MidiExample.java:20)
Why there is no transmitter and how can I fix this?