Взгляните на javax.sound.midi. Последовательность состоит из треков. Треки содержат MidiEvents. MidiEvents - это комбинация метки времени и MidiMessage.
MidiMessage имеет подклассы ShortMessage, MetaMessage и SysexMessage.
Скорее всего, фильтрация SysexMessages на отметке 0 (MidiEvent.getTick () == 0) поможет. Если нет, попробуйте также отфильтровать MetaMessages на отметке 0. Примечание: информация, изменения в программе и т. Д. Выполняются через ShortMessages, не фильтруйте их.
for each track in sequence {
for all midievents in track at tick 0 {
remove from track if instanceof SysexMessage or MetaMessage
}
}
Другая часть заключается в создании последовательности инициализации. Просто создайте последовательность с тем же типом деления и разрешением. Достаточно одной дорожки, вы можете добавить все события, удаленные из последовательности зацикливания, в одну дорожку в последовательности инициализации.