如果在midi序列中达到某个刻度,我如何得到通知?

时间:2014-08-27 17:32:28

标签: java midi javasound javax.sound.midi

我使用javax.sound.midi.Sequencer播放序列,当达到某个刻度时我需要跳转到序列的其他部分。想象一下当我们达到刻度数" y"我们跳回到刻度号" x"。但是我没有循环,所以内置的循环方法对我来说不起作用。

目前我正在使用一个摆动计时器,每隔毫秒触发一次getTickPosition(),直到达到我想要的刻度,但这会给我一些不一致的结果,我觉得它使用了大量的CPU一个相当简单的任务。

我希望有一个事件监听器会在顺控程序处理某个刻度线时通知我,但是没有AFAIK。任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我对midi只有很少的想法,但总是对计算机音乐着迷,所以我看了一下,发现你可以将MetaMessage添加到所需音轨的其中一个音轨并使用MetaEventListener进行通知何时处理邮件?

答案 1 :(得分:0)

我建议你减少你的

  

getTickPosition()每毫秒

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

MIDI定时时钟信息(每分钟120次)只有两次/秒 这是(每四分音符24个刻度)1/50秒(20 mSecs)捕获子节拍间隔 - 你需要做什么?

更好的解决方案可能是Sequencer告诉你何时到达但我不知道是否存在此机制

我很想知道什么修复适合你