我正在从 MIDI 轨道中删除事件,并且我假设这样做会相应减少轨道的总持续时间,如果轨道中没有事件,那么我认为轨道的大小将为 0。
不幸的是,情况似乎并非如此,即使事件被删除,Ticks 的大小也不会改变,只会随着添加更多事件而增加。
这是正常的 MIDI/Java 行为吗?
编辑:
这是从 Track 中删除所有事件的方法:
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();
}
然而,当我使用一些粗略的调试技术并在删除事件后直接检查滴答数时,我发现了这一点;
看起来没什么区别,我真的不明白为什么要这样做。我假设刻度的大小取决于轨道中事件的数量,因此,如果轨道中有 10 个事件,则刻度大小将为 10(当我将它们添加到轨道时将刻度长度设置为 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));
}
最佳答案
经过几个小时的调试,我设法找到了错误,我删除事件的方式意味着其中一半永远不会被考虑,这导致轨道的大小永远不会达到零。
我添加的任何事件都会被放置在已经存在的事件之后,这可以解释为什么我在某些部分听到多个音符。
可以在这里找到该问题(以及这个问题)的答案:Unable to Remove Events from Track
感谢您抽出宝贵的时间,我非常感激。
关于java - 跟踪行为 - Java MIDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5696421/