0

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?

Adi
  • 50
  • 1
  • 8
  • An OUTput port is for sending messages out of the computer. So why do you want to install a receiver for incoming mesages? – CL. Dec 09 '19 at 18:32
  • This is an foreign example. But the exception throws at **nkTransmitter = device.getTransmitter();** because there is supposedly no transmitter... – Adi Dec 09 '19 at 19:23
  • Does this answer your question? [Java send midi message to device](https://stackoverflow.com/questions/50411021/java-send-midi-message-to-device); [How can i send a Midi Message to a specific Midi Port](https://stackoverflow.com/questions/51232939/how-can-i-send-a-midi-message-to-a-specific-midi-port) – CL. Dec 09 '19 at 20:28
  • The first hint sends data direct to internal audio device. But the second hint shows me the other way to get Receiver for sending data to specific output and this works. Thx – Adi Dec 09 '19 at 21:39

0 Answers0