2011-04-17 66 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

感谢您的时间,我非常感激。