发送和接收 Java Midi Sysex 消息
Sending and receiving Java Midi Sysex message
我想发送和接收带有 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
}
}
如果您需要更多示例代码,请查看我在 GitHub 上的应用程序 JJazzLab-X,尤其是 Midi
模块中的 JJazzMidiSystem.java
和 MidiUtilities.java
。
我想发送和接收带有 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
}
}
如果您需要更多示例代码,请查看我在 GitHub 上的应用程序 JJazzLab-X,尤其是 Midi
模块中的 JJazzMidiSystem.java
和 MidiUtilities.java
。