我使用javax.sound.midi.Sequencer播放序列,当达到某个刻度时我需要跳转到序列的其他部分。想象一下当我们达到刻度数" y"我们跳回到刻度号" x"。但是我没有循环,所以内置的循环方法对我来说不起作用。
目前我正在使用一个摆动计时器,每隔毫秒触发一次getTickPosition(),直到达到我想要的刻度,但这会给我一些不一致的结果,我觉得它使用了大量的CPU一个相当简单的任务。
我希望有一个事件监听器会在顺控程序处理某个刻度线时通知我,但是没有AFAIK。任何建议都将不胜感激。
答案 0 :(得分:0)
我对midi只有很少的想法,但总是对计算机音乐着迷,所以我看了一下,发现你可以将MetaMessage添加到所需音轨的其中一个音轨并使用MetaEventListener进行通知何时处理邮件?
答案 1 :(得分:0)
我建议你减少你的
getTickPosition()每毫秒
= 1000 x秒 - 太频繁了 您可以减少100到10 x秒 这会降低你的CPU使用率(达到目前的1%?)
MIDI定时时钟信息(每分钟120次)只有两次/秒 这是(每四分音符24个刻度)1/50秒(20 mSecs)捕获子节拍间隔 - 你需要做什么?
更好的解决方案可能是Sequencer告诉你何时到达但我不知道是否存在此机制
我很想知道什么修复适合你