1

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

我的问题是我想检测用户是否按住键。如果用户按住一个键,则该音符应保持不变。如果不是,则该音符应逐渐消退为静音。

Java MIDI 没有我可以调用的发送器方法,例如isRunning(),或者isActive()说是发送器,即用户正在按住一个键。有什么办法可以检测到这个吗?

在我的代码中,我有一个无限while循环,它不断检查是否transmitter已向 发送任何数据receiver,是否已处理该数据,否则什么也不做。但是,当按下并按住 MIDI 键盘上的某个键时,MIDI 数据会在按下该键时发送到接收器,但是当 while 循环再次开始时,由于键被保持在原位,因此不会接收到 MIDI 数据。

4

1 回答 1

1

当用户按下一个键时,会发送一条 Note On 消息。释放键时,会发送 Note Off 消息(或具有力度 0 的 Note On 消息)。您可以使用该信息来确定是否持有笔记。

一种方法:每次看到 Note On(速度 > 0)时都会增加一个计数器。每次你看到一个音符关(或一个音符开,速度为 0)时,计数器就会递减。如果您看到 All Notes Off,请将计数器设置为零。每当计数器大于零时,就会按住一个键。

于 2013-03-12T00:16:15.120 回答