0

我正在使用 javax.sound.midi.Sequencer 播放序列,当达到某个刻度时,我需要跳转到序列的另一部分。想象一个循环,当我们到达刻度数“y”时,我们跳回到刻度数“x”。但我没有做一个循环,所以内置的循环方法对我不起作用。

目前我正在使用一个摆动计时器,它每毫秒触发一次 getTickPosition() 直到我达到我想要的滴答声,但这给了我稍微不一致的结果,我感觉它正在使用大量 CPU 来完成一个相当简单的任务。

我希望有一个事件侦听器可以在音序器处理某个刻度但没有 AFAIK 时通知我。任何建议将不胜感激。

4

2 回答 2

0

我建议你减少你的

getTickPosition() 每毫秒

which = 1000 x 秒 - 太频繁了 您可以减少 100 到 10 x 秒这将减少您的 CPU 使用率(降低到当前的 1%?)

MIDI 定时时钟消息(在 120 bpm)只有两个节拍/每秒,即(在每四分音符 24 个节拍)1/50 秒(20 毫秒)来捕获子节拍间隔 - 这就是你需要做的?

更好的解决方案可能是让 Sequencer 告诉您它何时到达,但我不知道是否存在这种机制

我很想知道什么修复对你有用

于 2014-08-31T11:14:32.843 回答
0

我对 midi 几乎没有什么想法,但一直对计算机音乐很着迷,所以我环顾四周,发现您可以在所需的滴答声中将 MetaMessage 添加到其中一个轨道,并使用 MetaEventListener 在消息时收到通知被处理了吗?

于 2014-08-31T09:12:08.537 回答