diff --git a/src/main/java/com/khjxiaogu/factorio/composer/midi/MidiSheet.java b/src/main/java/com/khjxiaogu/factorio/composer/midi/MidiSheet.java index 29010ca..f7bf823 100644 --- a/src/main/java/com/khjxiaogu/factorio/composer/midi/MidiSheet.java +++ b/src/main/java/com/khjxiaogu/factorio/composer/midi/MidiSheet.java @@ -62,6 +62,8 @@ public MidiSheet(File f, int offset, float speed) throws InvalidMidiDataExceptio NoteTrack currentTrack = new NoteTrack(); double beatsPerMinute = 120; //int b = 0; + long lastOffset=0; + long lastTick=0; if (track.size() > 0) { for (int i = 0; i < track.size(); i++) { double millisPerMidiTick; @@ -75,9 +77,11 @@ public MidiSheet(File f, int offset, float speed) throws InvalidMidiDataExceptio MidiMessage message = event.getMessage(); if (message instanceof ShortMessage) { ShortMessage sm = (ShortMessage) message; - if ((sm.getCommand()&0x90)>0) {// Detect KEY_ON message - currentTrack.add(sm.getData1() + offset * 12, - Math.round(event.getTick() * millisPerMidiTick / MsPerGameTick), sm.getData2()); + if ((sm.getCommand() & ShortMessage.NOTE_ON) > 0) {// Detect KEY_ON message + long delta=event.getTick()-lastTick; + lastTick=event.getTick(); + lastOffset+=Math.round(delta * millisPerMidiTick / MsPerGameTick); + currentTrack.add(sm.getData1() + offset * 12,lastOffset, sm.getData2()); } } else if (message instanceof MetaMessage) { MetaMessage metaMessage = (MetaMessage) message;