【发布时间】:2011-07-17 11:44:14
【问题描述】:
我正在使用 Java Sequencer 播放 MIDI 歌曲。这首歌被设计为连续循环播放,我可以很容易地做到这一点sequencer.@987654322@(Sequencer.LOOP_CONTINUOUSLY)
当通过内部(声卡)合成器播放时,它可以正常工作并且(如果需要,可以添加 dummy event)循环时间是正确的。
但是,当通过外部(USB 或串行)合成器播放时,在输出循环点处会出现明显的间隙。这是因为在 .mid 文件的开头有许多设置事件需要一些时间才能通过串行线路发送。
我想尝试将一次性设置事件隔离到它们自己的Sequence 中,当歌曲加载时发送到设备一次,但不会进入主(循环)Sequence。
有没有简单的算法(或库函数)可以区分这两种事件?
需要提供:
- Registered parameter 更改,作为一组相关消息发送。
- 偶尔会在曲目中间发送频道节目更改(并且必须是循环序列的一部分),但如果在整个歌曲中保留相同的节目(大多数情况下),节目更改应该是曲目的一部分设置顺序。这同样适用于节奏变化。
【问题讨论】:
-
这是因为 .mid 文件开头有许多设置事件需要一些时间才能通过串行线路发送 - 这是一个假设或猜测,或者您是否有来源(技术文章或调试输出)来证明它?
-
@Charles Goodwin,不,我通过手动删除事件对此进行了测试