gpt4 book ai didi

java - 跟踪行为 - Java MIDI

转载 作者:行者123 更新时间:2023-11-30 05:04:07 24 4
gpt4 key购买 nike

我正在从 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();
}

然而,当我使用一些粗略的调试技术并在删除事件后直接检查滴答数时,我发现了这一点;

enter image description here

看起来没什么区别,我真的不明白为什么要这样做。我假设刻度的大小取决于轨道中事件的数量,因此,如果轨道中有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com