2009-10-14 56 views
0

我正在用Java編寫程序將與音樂輸入有關。我想用我的電腦鍵盤作爲樂器。非常喜歡它,就像我玩的按鈕手風琴一樣。我會通過2個八度開始在鍵和音符之間進行映射。我正在考慮按時間排定按鍵的時間是什麼樣的設計。我使用JFugue框架根據播放的內容生成音樂串,然後可以輕鬆導出爲MIDI。爲了生成這些字符串,我將不得不測量多少音調被按下,然後給它一些音符長度。這個關於音符長度的信息也被附加到字符串中。如果你認爲我甚至不需要這個,請讓我知道,因爲我是Java初學者。KeyListener和計時

回答

0

您可以實施KeyListener並依靠兩個keyPressedkeyReleased方法來記錄您的筆記。

您的KeyListener實現將需要維護狀態,可能是MapVK_代碼 - >事件時間。您可以使用開始時間在keyPressed處理中填充地圖,通過其getKeyCode()識別KeyEvent中的密鑰。您可以通過使用密鑰代碼將開始時間拉出地圖,然後通過keyReleased事件觸發筆記的持續時間。

如果你還沒有找到它,here is Sun's tutorial on KeyListeners

+0

嘿,我設法編寫一些代碼。到目前爲止它是好的。我設置了節奏,節奏並給JFugue播放器播放它必須播放的字符串序列。如果我打開節拍器並以同樣的速度播放,我會發送給播放器,但它確實對音調長度進行了採樣。但是......但是......我對KeyEvents沒什麼問題。如果我長時間按下某個鍵,它會生成一個KeyEvent,而不是等待一段時間,然後開始生成許多相同的KeyEvent。這種行爲可能是由操作系統造成的。如果我按住這個鍵,它開始打字的速度非常快......做什麼... – Zec 2009-10-25 17:31:49

+0

這聽起來與操作系統相關。重複的'KeyEvent'動作是否都來自'keyPressed' /'keyReleased'對,還是隻是重複'keyPressed'?如果後者,你有希望。您可以測試您的密鑰開始時間的集合是否已經有相關密鑰的條目,如果是,請不要覆蓋作爲該值保存的開始時間。 – akf 2009-10-26 18:09:55