2013-03-11 135 views
1

我正在創建一個MIDI鋼琴,我在其中使用transmitter來接收MIDI鍵盤按鍵,並且receivers在一些字節操作後將這些消息發送到揚聲器。如何檢查變送器是否處於活動狀態?

我的問題是,我想檢測用戶是否按住一個鍵。如果用戶按住一個鍵,那麼該筆記應該被保持。如果他們不是,那麼這個音符應該逐漸消失。

Java MIDI沒有我可以調用的發送器的方法,例如isRunning()isActive()來告訴是發送器,即用戶正在按住一個鍵。有什麼辦法可以檢測到嗎?

在我的代碼,我有一個無限循環while如果transmitter已發送的任何數據到receiver(如果有),然後處理這些數據,否則什麼都不幹。這會不斷檢查。但是,當按下鍵並按住MIDI鍵盤上的按鍵時,MIDI數據將被髮送到接收機,但當while循環再次開始時,由於鍵保持原位,因此不會收到MIDI數據。

回答

1

當用戶按下某個鍵時,會發送Note On消息。鬆開鑰匙時,會發送一條音符關閉消息(或速度爲0的Note On消息)。您可以使用該信息來確定是否正在保存筆記。

一種方法:每次看到「注意」(速度> 0)時都會增加一個計數器。每當您看到一個音符關閉(或速度爲0的音符開啓)時,計數器就會減少。如果您看到所有註釋關閉,請將計數器設置爲零。只要計數器大於零,鍵就被保持。

相關問題