【问题标题】:How to check is transmitter is active?如何检查发射器是否处于活动状态?
【发布时间】:2013-03-12 09:40:59
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java midi


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 2019-12-10
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多