我正在创建一个MIDI钢琴,在其中我使用transmitter
来接收MIDI键盘按键,并receivers
在一些字节操作后将这些消息发送到扬声器。
我的问题是我想检测用户是否按住某个键。如果用户按住某个键,则应该持续该音符。如果它们不是,那么音符应该逐渐淡化为沉默。
Java MIDI没有我可以调用的发送器的方法,例如isRunning()
,或isActive()
来告诉发送器,即用户按住一个键。有什么方法可以发现这个吗?
在我的代码中,我有一个无限while
循环,它会不断检查transmitter
是否已将任何数据发送到receiver
,如果它已经处理了该数据,否则不会没做什么。但是,当按下并按住MIDI键盘上的琴键时,按下琴键会将MIDI数据发送到接收器,但是当while循环再次启动时,由于琴键保持不动,因此不会收到MIDI数据。
答案 0 :(得分:1)
当用户按下某个键时,会发送Note On消息。释放密钥后,将发送Note Off消息(或速度为0的Note On消息)。您可以使用该信息来确定是否正在保留记事。
一种方法:每次看到Note On(速度> 0)都会增加一个计数器。每当您看到音符关闭(或速度为0的音符开)时,计数器会递减。如果您看到All Notes Off,请将计数器设置为零。只要计数器大于零,就会持有一把钥匙。