发送和接收Java Midi Sysex消息

发送和接收Java Midi Sysex消息,java,midi,Java,Midi,我想用Java声音API发送和接收SysEx消息 我可以向设备发送消息,但我希望在发送命令后接收从设备发送的SysEx消息 这是我的密码: try { MidiDevice device = MidiSystem.getMidiDevice(info); byte[] dataAlone = { (byte) 0xF0, (byte) 0xB0, (byte) 0x63, (byt

我想用Java声音API发送和接收SysEx消息

我可以向设备发送消息,但我希望在发送命令后接收从设备发送的SysEx消息

这是我的密码:

 try {
            MidiDevice device = MidiSystem.getMidiDevice(info);

            byte[] dataAlone = {
                    (byte) 0xF0,
            (byte) 0xB0, (byte) 0x63, (byte) 0x00,
            (byte) 0xB0, (byte) 0x62, (byte) 0x0C,
            (byte) 0xB0, (byte) 0x60, (byte) 0x7F,
            (byte) 0xF7
            };
            SysexMessage message1 = new SysexMessage(dataAlone, dataAlone.length);

            device.open();
            Receiver rcvr = device.getReceiver();

            rcvr.send(message1, -1);

            rcvr.close();
        } catch (InvalidMidiDataException | MidiUnavailableException e) {
            System.out.println(e);
        }

当我发送此消息时,设备将使用SysEx消息进行应答,我可以在计算机上运行的midi应用程序上看到该消息。

以下是缺失的代码:

  // To find the available Midi IN devices on your system, scan the available MidiDevices 
  // and test if (!(device instanceof Sequencer) && device.getMaxTransmitters() != 0)
  // ...
  inDevice.open();
 
 // tIn will transmit Midi IN data. Don't forget to close it when no longer used
  Transmitter tIn = inDevice.getTransmitter();
  
  // Connect it to our MidiMessage handler
  tIn.setReceiver(new MidiInMessageHandler());               

  // ...

  class MidiInMessageHandler implements Receiver
    {
        @Override
        public void send(MidiMessage message, long timeStamp)
        {
            if (message instanceof SysexMessage)
            {
                // Do something
            }
        }

        @Override
        public void close()
        {
            // Nothing
        }        
    }

如果您需要更多示例代码,请查看我的应用程序JJazzLab-X,特别是
Midi
模块中的
JJazzMidiSystem.java
MidiUtilities.java

您需要实现
接收器
接口。另请参阅,谢谢,我们确实实现了customReceiver,现在它正在工作。