如何检查变送器是否有效?

时间:2013-03-11 18:03:38

标签: java midi

我正在创建一个MIDI钢琴,在其中我使用transmitter来接收MIDI键盘按键,并receivers在一些字节操作后将这些消息发送到扬声器。

我的问题是我想检测用户是否按住某个键。如果用户按住某个键,则应该持续该音符。如果它们不是,那么音符应该逐渐淡化为沉默。

Java MIDI没有我可以调用的发送器的方法,例如isRunning(),或isActive()来告诉发送器,即用户按住一个键。有什么方法可以发现这个吗?

在我的代码中,我有一个无限while循环,它会不断检查transmitter是否已将任何数据发送到receiver,如果它已经处理了该数据,否则不会没做什么。但是,当按下并按住MIDI键盘上的琴键时,按下琴键会将MIDI数据发送到接收器,但是当while循环再次启动时,由于琴键保持不动,因此不会收到MIDI数据。

1 个答案:

答案 0 :(得分:1)

当用户按下某个键时,会发送Note On消息。释放密钥后,将发送Note Off消息(或速度为0的Note On消息)。您可以使用该信息来确定是否正在保留记事。

一种方法:每次看到Note On(速度> 0)都会增加一个计数器。每当您看到音符关闭(或速度为0的音符开)时,计数器会递减。如果您看到All Notes Off,请将计数器设置为零。只要计数器大于零,就会持有一把钥匙。