Java JackMidi.eventWrite-时间参数
我正在使用这个库: 我创建了一个简单的项目来重现我的问题: 我有一个JackPort outputPort正在运行,并出现在QjackCtl的“输出端口”中 在QjackCtl中,此输出端口连接到GMIDImonitor,以观察Midi通信量。 我通过下面的方法向GMIDImonitor发送MIDI消息。 我无法计算时间参数的值。 当我设置Java JackMidi.eventWrite-时间参数,java,jna,midi,jack,Java,Jna,Midi,Jack,我正在使用这个库: 我创建了一个简单的项目来重现我的问题: 我有一个JackPort outputPort正在运行,并出现在QjackCtl的“输出端口”中 在QjackCtl中,此输出端口连接到GMIDImonitor,以观察Midi通信量。 我通过下面的方法向GMIDImonitor发送MIDI消息。 我无法计算时间参数的值。 当我设置time=jackClient.getFrameTime()时,消息不会到达GMIDImonitor。 例如,当我将其设置为300时,一条消息将在循环中永久发
time=jackClient.getFrameTime()
时,消息不会到达GMIDImonitor。
例如,当我将其设置为300时,一条消息将在循环中永久发送
有什么帮助吗?谢谢
public void processMidiMessage(ShortMessage shortMessage) {
System.out.println("processMidiMessage: " + shortMessage + ", on port: " + this.outputPort.getName());
try {
JackMidi.clearBuffer(this.outputPort);
} catch (JackException e) {
e.printStackTrace();
}
try {
int time = 300;
JackMidi.eventWrite(this.outputPort, time, shortMessage.getMessage(), shortMessage.getLength());
} catch (JackException e) {
e.printStackTrace();
}
}
看起来
time
是一个偏移量,因此getFrameTime()
是一个相当大的数字,“永不到达”可能意味着未来很长一段时间。会议讨论了按顺序发送邮件的问题。您是否尝试过使用0
或1
?这是否回答了您的问题@DanielWiddis谢谢你抽出时间。我尝试了0和1,这些值也会导致循环。我会看看你提到的链接。有一些基本的东西我不明白。我创建了一个简单的项目。我认为MIDI消息应该在ProcessCallBack上处理,但我不知道如何处理。通过向队列添加消息并在ProcessCallBack中处理队列解决了这个问题。0是一个有效的时间值。看起来time
是一个偏移量,因此getFrameTime()
是一个相当大的数字,“永不到达”可能意味着未来很长一段时间。会议讨论了按顺序发送邮件的问题。您是否尝试过使用0
或1
?这是否回答了您的问题@DanielWiddis谢谢你抽出时间。我尝试了0和1,这些值也会导致循环。我会看看你提到的链接。有一些基本的东西我不明白。我创建了一个简单的项目。我认为MIDI消息应该在ProcessCallBack上处理,但我不知道如何处理。通过向队列添加消息并在ProcessCallBack中处理队列解决了这个问题。0是时间的有效值