diff --git a/midica.jar b/midica.jar index d56f1a8..8a77506 100644 Binary files a/midica.jar and b/midica.jar differ diff --git a/src/org/midica/Midica.java b/src/org/midica/Midica.java index 81bd9b6..f020526 100644 --- a/src/org/midica/Midica.java +++ b/src/org/midica/Midica.java @@ -33,10 +33,10 @@ public class Midica { * After switching to a new major version, this has to be set to "-1" manually, so that * precommit.pl starts with "0" again. */ - private static final int VERSION_MINOR = 9; + private static final int VERSION_MINOR = 10; /** UNIX timestamp of the last commit */ - public static final int COMMIT_TIME = 1694279716; + public static final int COMMIT_TIME = 1696410911; /** Branch name. Automatically changed by precommit.pl */ public static final String BRANCH = "master"; diff --git a/src/org/midica/config/Config.java b/src/org/midica/config/Config.java index 943b480..6543245 100644 --- a/src/org/midica/config/Config.java +++ b/src/org/midica/config/Config.java @@ -697,6 +697,11 @@ private static void restoreDefaultKeyBindings() { addDefaultKeyBinding( Dict.KEY_INFO_MIDI_BANKS_TOT_MIN, KeyEvent.VK_MINUS, ctrl ); addDefaultKeyBinding( Dict.KEY_INFO_MIDI_BANKS_TOT_MIN, KeyEvent.VK_SUBTRACT, ctrl ); addDefaultKeyBinding( Dict.KEY_INFO_MIDI_BANKS_TOT_TREE, KeyEvent.VK_T, ctrl ); + addDefaultKeyBinding( Dict.KEY_INFO_MIDI_BANKS_CH_PL, KeyEvent.VK_PLUS, ctrl | shift ); + addDefaultKeyBinding( Dict.KEY_INFO_MIDI_BANKS_CH_PL, KeyEvent.VK_ADD, ctrl | shift ); + addDefaultKeyBinding( Dict.KEY_INFO_MIDI_BANKS_CH_MIN, KeyEvent.VK_MINUS, ctrl | shift ); + addDefaultKeyBinding( Dict.KEY_INFO_MIDI_BANKS_CH_MIN, KeyEvent.VK_SUBTRACT, ctrl | shift ); + addDefaultKeyBinding( Dict.KEY_INFO_MIDI_BANKS_CH_TREE, KeyEvent.VK_T, alt ); addDefaultKeyBinding( Dict.KEY_INFO_MIDI_BANKS_CH_PL, KeyEvent.VK_PLUS, alt ); addDefaultKeyBinding( Dict.KEY_INFO_MIDI_BANKS_CH_PL, KeyEvent.VK_ADD, alt ); addDefaultKeyBinding( Dict.KEY_INFO_MIDI_BANKS_CH_MIN, KeyEvent.VK_MINUS, alt ); diff --git a/src/org/midica/config/Dict.java b/src/org/midica/config/Dict.java index d3aca94..76fb6b7 100644 --- a/src/org/midica/config/Dict.java +++ b/src/org/midica/config/Dict.java @@ -1766,6 +1766,9 @@ public class Dict { public static final String ERROR_CHANNEL = "error_channel"; public static final String ERROR_NOTE = "error_note"; + // MidiExporter + public static final String WARNING_ILLEGAL_SHORT_MESSAGE = "warning_illegal_short_message"; + // MidicaPLExporter public static final String WARNING_IGNORED_SHORT_MESSAGE = "warning_ignored_short_message"; public static final String WARNING_IGNORED_META_MESSAGE = "warning_ignored_meta_message"; @@ -3487,6 +3490,9 @@ private static void initLanguageEnglish() { set( ERROR_CHANNEL, "Channel" ); set( ERROR_NOTE, "Note" ); + // MidiExporter + set( WARNING_ILLEGAL_SHORT_MESSAGE, "Ignoring Short Message due to illegal data." ); + // MidicaPLExporter set( WARNING_IGNORED_SHORT_MESSAGE, "Ignored Short Message" ); set( WARNING_IGNORED_META_MESSAGE, "Ignored Meta Message" ); diff --git a/src/org/midica/file/write/MidiExporter.java b/src/org/midica/file/write/MidiExporter.java index b0e278b..a1fc828 100644 --- a/src/org/midica/file/write/MidiExporter.java +++ b/src/org/midica/file/write/MidiExporter.java @@ -16,9 +16,11 @@ import javax.sound.midi.MidiMessage; import javax.sound.midi.MidiSystem; import javax.sound.midi.Sequence; +import javax.sound.midi.ShortMessage; import javax.sound.midi.Track; import org.midica.config.Config; +import org.midica.config.Dict; import org.midica.file.CharsetUtils; import org.midica.midi.MidiDevices; import org.midica.midi.MidiListener; @@ -136,6 +138,22 @@ protected Sequence cloneSequence() throws InvalidMidiDataException { MidiEvent event = oldTrack.get(i); MidiMessage msg = event.getMessage(); + // illegal short message? - warn and ignore + if (msg instanceof ShortMessage) { + int data1 = ((ShortMessage) msg).getData1(); + int data2 = ((ShortMessage) msg).getData2(); + if (data1 > 0x7F || data2 > 0x7F) { + int channel = ((ShortMessage) msg).getChannel(); + byte[] bytes = ((ShortMessage) msg).getMessage(); + String msgStr = ""; + for (byte b : bytes) + msgStr += String.format(" %02X", b); + exportResult.addWarning(trackNum, event.getTick(), (byte) channel, Dict.get(Dict.WARNING_ILLEGAL_SHORT_MESSAGE)); + exportResult.setDetailsOfLastWarning(msgStr); + continue EVENT; + } + } + // manipulate some meta messages if (msg instanceof MetaMessage) { int type = ((MetaMessage) msg).getType(); diff --git a/src/org/midica/ui/tablesorter/ExportResultTableSorter.java b/src/org/midica/ui/tablesorter/ExportResultTableSorter.java index d828904..1c8ddc4 100644 --- a/src/org/midica/ui/tablesorter/ExportResultTableSorter.java +++ b/src/org/midica/ui/tablesorter/ExportResultTableSorter.java @@ -80,6 +80,8 @@ public boolean include(Entry