Skip to content

Commit 0169690

Browse files
committed
Added option to import full MIDI key range (By default only 88 keys are imported)
1 parent 908c32c commit 0169690

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

src/main/java/net/raphimc/noteblocklib/format/midi/MidiIo.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import net.raphimc.noteblocklib.format.midi.mapping.MidiMappings;
2222
import net.raphimc.noteblocklib.format.midi.mapping.PercussionMapping;
2323
import net.raphimc.noteblocklib.format.midi.model.MidiSong;
24+
import net.raphimc.noteblocklib.format.nbs.NbsDefinitions;
2425
import net.raphimc.noteblocklib.model.Note;
2526
import net.raphimc.noteblocklib.util.MathUtil;
2627
import net.raphimc.noteblocklib.util.SongResampler;
@@ -37,10 +38,18 @@
3738
public class MidiIo {
3839

3940
public static MidiSong readSong(final InputStream is, final String fileName) throws IOException, InvalidMidiDataException {
40-
return parseSong(MidiSystem.getSequence(is), fileName);
41+
return readSong(is, fileName, true);
42+
}
43+
44+
public static MidiSong readSong(final InputStream is, final String fileName, final boolean skipOutOfRangeNotes) throws IOException, InvalidMidiDataException {
45+
return parseSong(MidiSystem.getSequence(is), fileName, skipOutOfRangeNotes);
4146
}
4247

4348
public static MidiSong parseSong(final Sequence sequence, final String fileName) {
49+
return parseSong(sequence, fileName, true);
50+
}
51+
52+
public static MidiSong parseSong(final Sequence sequence, final String fileName, final boolean skipOutOfRangeNotes) {
4453
final MidiSong song = new MidiSong(fileName);
4554

4655
if (sequence.getTickLength() > Integer.MAX_VALUE) {
@@ -91,6 +100,10 @@ public static MidiSong parseSong(final Sequence sequence, final String fileName)
91100
note.setVolume(((float) velocity / MAX_VELOCITY) * (float) channelVolumes[shortMessage.getChannel()] / MAX_VELOCITY);
92101
note.setPanning((float) (pan - CENTER_PAN) / CENTER_PAN);
93102

103+
if (skipOutOfRangeNotes && (note.getMidiKey() < NbsDefinitions.LOWEST_MIDI_KEY || note.getMidiKey() > NbsDefinitions.HIGHEST_MIDI_KEY)) {
104+
continue;
105+
}
106+
94107
song.getNotes().add((int) event.getTick(), note);
95108
break;
96109
case NOTE_OFF:

src/main/java/net/raphimc/noteblocklib/format/nbs/NbsDefinitions.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class NbsDefinitions {
2626
public static final int HIGHEST_MIDI_KEY = 108;
2727
public static final int LOWEST_KEY = 0;
2828
public static final int HIGHEST_KEY = 87;
29+
public static final int KEY_COUNT = 88;
2930
public static final int F_SHARP_4_KEY = 45;
3031

3132
public static final int PITCHES_PER_KEY = 100;

0 commit comments

Comments
 (0)