我正在编写一个应用程序来控制Novation的启动板设备(对于熟悉的人)。启动板安装两个MIDI设备:一个用于输入(按下按钮),另一个用于输出(控制LED)。
这个想法是,一旦从启动板收到消息,我想发送一系列其他消息。最好的方法是什么?
现在,我将输入设备的发射器链接到输出设备的接收器,以便收到的每条消息都直接发送回启动板:
Transmitter lpTransmitter = inputDevice.getTransmitter();
lpTransmitter.setReceiver(outputDevice.getReceiver());
答案 0 :(得分:0)
javax.sound.midi
包具有一个接口,该接口由想要接收事件的代码实现。它被称为https://github.com/freebsd/freebsd/blob/master/usr.bin/procstat/procstat_rusage.c。
注意Receiver。
答案 1 :(得分:0)
我自己找到了解决方案。我所做的是使用我自己的Transmitter和Receiver实现链接设备。据我所知,midi消息是这样的:
启动板输入 - > inputDevice的接收器 - > inputDevice的发射器 - >我自己的接收器 - > (我的计算) - >我自己的发射器 - > outputDevice的接收器 - > outputDevice的发射器 - >启动板输出。
现在忍受我,因为我不知道这是正确的方式,但我的代码是这样的:
// main
// get launchpad devices, open them
MyMidiDevice myDevice = new MyMidiDevice();
inputDevice.getTransmitter().setReceiver(myDevice);
myDevice.setReceiver(outputDevice.getReceiver());
MyMidiDevice类的代码:
public class MyMidiDevice implements Transmitter, Receiver
{
private Receiver receiver;
@Override
public Receiver getReceiver()
{
return this.receiver;
}
@Override
public void setReceiver(Receiver receiver)
{
this.receiver = receiver;
}
@Override
public void close()
{
}
@Override
public void send(MidiMessage message, long timeStamp)
{
System.out.println(message); // computations
this.getReceiver().send(message, timeStamp);
}
}