Skip to content

Commit 5564b3c

Browse files
committed
Fix crashing when having a invalid midi instrument id
1 parent a572807 commit 5564b3c

3 files changed

Lines changed: 33 additions & 11 deletions

File tree

scripts/draw_window_midi_import/draw_window_midi_import.gml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,8 @@ function draw_window_midi_import() {
220220
draw_text_dynamic(x1 + 12 + 4 + tabw[0] + tabw[1] + tabw[2] + tabw[3], y1 + 174 + 20 * a, "-")
221221
} else {
222222
draw_text_dynamic(x1 + 12 + 4 + tabw[0], y1 + 174 + 20 * a, string(midi_channelpatch[b] + 1))
223-
draw_text_dynamic(x1 + 12 + 4 + tabw[0] + tabw[1], y1 + 174 + 20 * a, midi_ins[midi_channelpatch[b], 0])
223+
if (midi_channelpatch[b] < 128) draw_text_dynamic(x1 + 12 + 4 + tabw[0] + tabw[1], y1 + 174 + 20 * a, midi_ins[midi_channelpatch[b], 0])
224+
else draw_text_dynamic(x1 + 12 + 4 + tabw[0] + tabw[1], y1 + 174 + 20 * a, condstr(language != 1, "Unknown", "未知"))
224225
if (midi_channelins[b] = -1) {
225226
draw_set_color(c_gray)
226227
if (language != 1) draw_text_dynamic(x1 + 12 + 4 + tabw[0] + tabw[1] + tabw[2], y1 + 174 + 20 * a, "Ignore")

scripts/import_midi/import_midi.gml

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,13 @@ function import_midi() {
152152
layerstereo[yy] = 100
153153
layername[yy] = "Channel " + string(a + 1)
154154
if (w_midi_name_patch) {
155-
layername[yy] = midi_ins[midi_channelpatch[a], 3]
156-
if (layername[yy] = "") layername[yy] = midi_ins[midi_channelpatch[a], 0]
155+
try {
156+
layername[yy] = midi_ins[midi_channelpatch[a], 3]
157+
if (layername[yy] = "") layername[yy] = midi_ins[midi_channelpatch[a], 0]
158+
}
159+
catch(e) {
160+
layername[yy] = "Unknown"
161+
}
157162
if (a = 9) layername[yy] = "Percussion"
158163
}
159164
layerlock[yy] = 0
@@ -165,12 +170,16 @@ function import_midi() {
165170
}
166171
if (w_midi_remember = 1) {
167172
for (a = 0; a < midi_channels; a += 1) {
168-
midi_ins[midi_channelpatch[a], 1] = midi_channelins[a]
169-
midi_ins[midi_channelpatch[a], 2] = midi_channeloctave[a]
173+
try {
174+
midi_ins[midi_channelpatch[a], 1] = midi_channelins[a]
175+
midi_ins[midi_channelpatch[a], 2] = midi_channeloctave[a]
176+
}
170177
}
171178
for (a = 0; a < midi_percamount; a += 1) {
172-
midi_drum[midi_percnote[a], 1] = midi_percins[a]
173-
midi_drum[midi_percnote[a], 2] = midi_percpitch[a] - 33
179+
try {
180+
midi_drum[midi_percnote[a], 1] = midi_percins[a]
181+
midi_drum[midi_percnote[a], 2] = midi_percpitch[a] - 33
182+
}
174183
}
175184
} else {
176185
w_midi_removesilent = 1

scripts/open_midi/open_midi.gml

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -204,12 +204,24 @@ function open_midi(argument0) {
204204
sb_val[midi_sb2] = 0
205205
sb_val[midi_sb3] = 0
206206
for (a = 0; a < 16; a += 1) { // Load channel settings from database
207-
midi_channelins[a] = midi_ins[midi_channelpatch[a], 1]
208-
midi_channeloctave[a] = midi_ins[midi_channelpatch[a], 2]
207+
try {
208+
midi_channelins[a] = midi_ins[midi_channelpatch[a], 1]
209+
midi_channeloctave[a] = midi_ins[midi_channelpatch[a], 2]
210+
}
211+
catch(e) {
212+
midi_channelins[a] = -1
213+
midi_channeloctave[a] = 0
214+
}
209215
}
210216
for (a = 0; a < midi_percamount; a += 1) { // Load percussion settings from database
211-
midi_percins[a] = midi_drum[midi_percnote[a], 1]
212-
midi_percpitch[a] = midi_drum[midi_percnote[a], 2] + 33
217+
try {
218+
midi_percins[a] = midi_drum[midi_percnote[a], 1]
219+
midi_percpitch[a] = midi_drum[midi_percnote[a], 2] + 33
220+
}
221+
catch(e) {
222+
midi_percins[a] = -1
223+
midi_percpitch[a] = 33
224+
}
213225
}
214226
/* // CODE FOR TESTING INSTRUMENTS
215227
midi_channels = 127

0 commit comments

Comments
 (0)