2011-04-17 33 views
1

我正在從MIDI軌道中移除事件,並且我認爲這樣做總的軌道持續時間會相應減少,如果軌道中沒有事件,那麼我認爲軌道的大小將是0.跟蹤行爲 - Java MIDI

不幸的是,它似乎並非如此,即使事件已刪除,Ticks中的大小不會改變,只會隨着更多內容的增加而增加。

這是正常的MIDI/Java行爲?

編輯:

這是刪除所有來自跟蹤事件的方法:

public static boolean Remove() { 
    //TODO: Test the bejeezus out of it. 

    if(_sequencer.isRunning()){ 
     _sequencer.stop(); 
    } 

    for (int i = 0; i < _track.size(); i++) { 
     if (!_track.remove(_track.get(i))) { 
      Logger.Add("MIDI Event not removed"); 
      return false; 
     } 
    } 

    //Used for debugging purposes 
    long z = _track.ticks(); 
} 

然而,當我使用一些粗俗的調試技術和取出後直接檢查蜱量事件,我找到了;

enter image description here

這看似沒什麼區別,我真的不明白爲什麼它這樣做。我認爲Ticks的大小取決於Track中的事件數量,因此如果一個軌道中有10個事件,則Tick的大小將爲10(因爲我將它們添加到軌道時將tick長度設置爲1)沒有活動規模將是0

添加事件:

public static void AddMessage(int channel, int pitch, long tick, int velocity) { 
     _track.add(CreateNoteOnEvent(channel, pitch, tick, velocity)); 
     _track.add(CreateNoteOffEvent(channel, pitch tick, velocity)); 
    } 
+0

你能提供更多的信息嗎?你在做什麼的樣本? – Brad 2011-04-17 22:09:28

+0

好點,修正了這個問題! – 2011-04-18 08:40:21

回答

2

多小時的調試,我設法跟蹤bug了下來,我被刪除事件的方式意味着其中一半會後從來沒有被考慮過,導致軌道的大小從未達到零。

我添加的任何事件將會放在已經存在的事件之後,這將解釋爲什麼我在某些部分聽到多個筆記。

的問題的答案(這一個)可以在這裏找到:Unable to Remove Events from Track

感謝您的時間,我非常感激。