📄 readmidi.c
字号:
addr_h = 0x41; } addr = (((int32)addr_h)<<16 | ((int32)addr_m)<<8 | (int32)addr_l); switch(addr_h) { case 0x40: if((addr & 0xFFF000) == 0x401000) { switch(addr & 0xFF) { case 0x00: /* Tone Number */ SETMIDIEVENT(evm[0], 0, ME_TONE_BANK_MSB, p,val[7], SYSEX_TAG); SETMIDIEVENT(evm[1], 0, ME_PROGRAM, p, val[8], SYSEX_TAG); num_events += 2; break; case 0x02: /* Rx. Channel */ if (val[7] == 0x10) { SETMIDIEVENT(evm[0], 0, ME_SYSEX_GS_LSB, block_to_part(val[5], midi_port_number ^ port), 0x80, 0x45); } else { SETMIDIEVENT(evm[0], 0, ME_SYSEX_GS_LSB, block_to_part(val[5], midi_port_number ^ port), MERGE_CHANNEL_PORT2(val[7], midi_port_number ^ port), 0x45); } num_events++; break; case 0x03: /* Rx. Pitch Bend */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x48); num_events++; break; case 0x04: /* Rx. Channel Pressure */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x49); num_events++; break; case 0x05: /* Rx. Program Change */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x4A); num_events++; break; case 0x06: /* Rx. Control Change */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x4B); num_events++; break; case 0x07: /* Rx. Poly Pressure */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x4C); num_events++; break; case 0x08: /* Rx. Note Message */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x4D); num_events++; break; case 0x09: /* Rx. RPN */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x4E); num_events++; break; case 0x0A: /* Rx. NRPN */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x4F); num_events++; break; case 0x0B: /* Rx. Modulation */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x50); num_events++; break; case 0x0C: /* Rx. Volume */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x51); num_events++; break; case 0x0D: /* Rx. Panpot */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x52); num_events++; break; case 0x0E: /* Rx. Expression */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x53); num_events++; break; case 0x0F: /* Rx. Hold1 */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x54); num_events++; break; case 0x10: /* Rx. Portamento */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x55); num_events++; break; case 0x11: /* Rx. Sostenuto */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x56); num_events++; break; case 0x12: /* Rx. Soft */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x57); num_events++; break; case 0x13: /* MONO/POLY Mode */ if(val[7] == 0) {SETMIDIEVENT(evm[0], 0, ME_MONO, p, val[7], SYSEX_TAG);} else {SETMIDIEVENT(evm[0], 0, ME_POLY, p, val[7], SYSEX_TAG);} num_events++; break; case 0x14: /* Assign Mode */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_GS_LSB, p, val[7], 0x24); num_events++; break; case 0x15: /* Use for Rhythm Part */ if(val[7]) { rhythm_part[val[7] - 1] = p; } break; case 0x16: /* Pitch Key Shift (dummy. see parse_sysex_event()) */ break; case 0x17: /* Pitch Offset Fine */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_GS_LSB, p, val[7], 0x26); num_events++; break; case 0x19: /* Part Level */ SETMIDIEVENT(evm[0], 0, ME_MAINVOLUME, p, val[7], SYSEX_TAG); num_events++; break; case 0x1A: /* Velocity Sense Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_GS_LSB, p, val[7], 0x21); num_events++; break; case 0x1B: /* Velocity Sense Offset */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_GS_LSB, p, val[7], 0x22); num_events++; break; case 0x1C: /* Part Panpot */ if (val[7] == 0) { SETMIDIEVENT(evm[0], 0, ME_RANDOM_PAN, p, 0, SYSEX_TAG); } else { SETMIDIEVENT(evm[0], 0, ME_PAN, p, val[7], SYSEX_TAG); } num_events++; break; case 0x1D: /* Keyboard Range Low */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x42); num_events++; break; case 0x1E: /* Keyboard Range High */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x43); num_events++; break; case 0x1F: /* CC1 Controller Number */ ctl->cmsg(CMSG_INFO, VERB_NOISY, "CC1 Controller Number is not supported. (CH:%d VAL:%d)", p, val[7]); break; case 0x20: /* CC2 Controller Number */ ctl->cmsg(CMSG_INFO, VERB_NOISY, "CC2 Controller Number is not supported. (CH:%d VAL:%d)", p, val[7]); break; case 0x21: /* Chorus Send Level */ SETMIDIEVENT(evm[0], 0, ME_CHORUS_EFFECT, p, val[7], SYSEX_TAG); num_events++; break; case 0x22: /* Reverb Send Level */ SETMIDIEVENT(evm[0], 0, ME_REVERB_EFFECT, p, val[7], SYSEX_TAG); num_events++; break; case 0x23: /* Rx. Bank Select */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x58); num_events++; break; case 0x24: /* Rx. Bank Select LSB */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x59); num_events++; break; case 0x2C: /* Delay Send Level */ SETMIDIEVENT(evm[0], 0, ME_CELESTE_EFFECT, p, val[7], SYSEX_TAG); num_events++; break; case 0x2A: /* Pitch Fine Tune */ SETMIDIEVENT(evm[0], 0, ME_NRPN_MSB, p, 0x00, SYSEX_TAG); SETMIDIEVENT(evm[1], 0, ME_NRPN_LSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[2], 0, ME_DATA_ENTRY_MSB, p, val[7], SYSEX_TAG); SETMIDIEVENT(evm[3], 0, ME_DATA_ENTRY_LSB, p, val[8], SYSEX_TAG); num_events += 4; break; case 0x30: /* TONE MODIFY1: Vibrato Rate */ SETMIDIEVENT(evm[0], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[1], 0, ME_NRPN_LSB, p, 0x08, SYSEX_TAG); SETMIDIEVENT(evm[2], 0, ME_DATA_ENTRY_MSB, p, val[7], SYSEX_TAG); num_events += 3; break; case 0x31: /* TONE MODIFY2: Vibrato Depth */ SETMIDIEVENT(evm[0], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[1], 0, ME_NRPN_LSB, p, 0x09, SYSEX_TAG); SETMIDIEVENT(evm[2], 0, ME_DATA_ENTRY_MSB, p, val[7], SYSEX_TAG); num_events += 3; break; case 0x32: /* TONE MODIFY3: TVF Cutoff Freq */ SETMIDIEVENT(evm[0], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[1], 0, ME_NRPN_LSB, p, 0x20, SYSEX_TAG); SETMIDIEVENT(evm[2], 0, ME_DATA_ENTRY_MSB, p, val[7], SYSEX_TAG); num_events += 3; break; case 0x33: /* TONE MODIFY4: TVF Resonance */ SETMIDIEVENT(evm[0], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[1], 0, ME_NRPN_LSB, p, 0x21, SYSEX_TAG); SETMIDIEVENT(evm[2], 0, ME_DATA_ENTRY_MSB, p, val[7], SYSEX_TAG); num_events += 3; break; case 0x34: /* TONE MODIFY5: TVF&TVA Env.attack */ SETMIDIEVENT(evm[0], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[1], 0, ME_NRPN_LSB, p, 0x63, SYSEX_TAG); SETMIDIEVENT(evm[2], 0, ME_DATA_ENTRY_MSB, p, val[7], SYSEX_TAG); num_events += 3; break; case 0x35: /* TONE MODIFY6: TVF&TVA Env.decay */ SETMIDIEVENT(evm[0], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[1], 0, ME_NRPN_LSB, p, 0x64, SYSEX_TAG); SETMIDIEVENT(evm[2], 0, ME_DATA_ENTRY_MSB, p, val[7], SYSEX_TAG); num_events += 3; break; case 0x36: /* TONE MODIFY7: TVF&TVA Env.release */ SETMIDIEVENT(evm[0], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[1], 0, ME_NRPN_LSB, p, 0x66, SYSEX_TAG); SETMIDIEVENT(evm[2], 0, ME_DATA_ENTRY_MSB, p, val[7], SYSEX_TAG); num_events += 3; break; case 0x37: /* TONE MODIFY8: Vibrato Delay */ SETMIDIEVENT(evm[0], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[1], 0, ME_NRPN_LSB, p, 0x0A, SYSEX_TAG); SETMIDIEVENT(evm[2], 0, ME_DATA_ENTRY_MSB, p, val[7], SYSEX_TAG); num_events += 3; break; case 0x40: /* Scale Tuning */ for (i = 0; i < 12; i++) { SETMIDIEVENT(evm[i], 0, ME_SCALE_TUNING, p, i, val[i + 7] - 64); ctl->cmsg(CMSG_INFO, VERB_NOISY, "Scale Tuning %s (CH:%d %d cent)", note_name[i], p, val[i + 7] - 64); } num_events += 12; break; default: ctl->cmsg(CMSG_INFO,VERB_NOISY,"Unsupported GS SysEx. (ADDR:%02X %02X %02X VAL:%02X %02X)",addr_h,addr_m,addr_l,val[7],val[8]); break; } } else if((addr & 0xFFF000) == 0x402000) { switch(addr & 0xFF) { case 0x00: /* MOD Pitch Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x16); num_events++; break; case 0x01: /* MOD TVF Cutoff Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x17); num_events++; break; case 0x02: /* MOD Amplitude Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x18); num_events++; break; case 0x03: /* MOD LFO1 Rate Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x19); num_events++; break; case 0x04: /* MOD LFO1 Pitch Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x1A); num_events++; break; case 0x05: /* MOD LFO1 TVF Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x1B); num_events++; break; case 0x06: /* MOD LFO1 TVA Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x1C); num_events++; break; case 0x07: /* MOD LFO2 Rate Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x1D); num_events++; break; case 0x08: /* MOD LFO2 Pitch Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x1E); num_events++; break; case 0x09: /* MOD LFO2 TVF Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x1F); num_events++; break; case 0x0A: /* MOD LFO2 TVA Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x20); num_events++; break; case 0x10: /* !!!FIXME!!! Bend Pitch Control */ SETMIDIEVENT(evm[0], 0, ME_RPN_MSB, p, 0, SYSEX_TAG); SETMIDIEVENT(evm[1], 0, ME_RPN_LSB, p, 0, SYSEX_TAG); SETMIDIEVENT(evm[2], 0, ME_DATA_ENTRY_MSB, p, (val[7] - 0x40) & 0x7F, SYSEX_TAG); SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x21); num_events += 4; break; case 0x11: /* Bend TVF Cutoff Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x22); num_events++; break; case 0x12: /* Bend Amplitude Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x23); num_events++; break; case 0x13: /* Bend LFO1 Rate Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x24); num_events++; break; case 0x14: /* Bend LFO1 Pitch Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x25); num_events++; break; case 0x15: /* Bend LFO1 TVF Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x26); num_events++; break; case 0x16: /* Bend LFO1 TVA Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x27); num_events++; break; case 0x17: /* Bend LFO2 Rate Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x28); num_events++; break; case 0x18: /* Bend LFO2 Pitch Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x29); num_events++; break; case 0x19: /* Bend LFO2 TVF Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x2A); num_events++; break; case 0x1A: /* Bend LFO2 TVA Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x2B); num_events++; break; case 0x20: /* CAf Pitch Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x00); num_events++; break; case 0x21: /* CAf TVF Cutoff Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x01); num_events++; break; case 0x22: /* CAf Amplitude Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x02); num_events++; break; case 0x23: /* CAf LFO1 Rate Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x03); num_events++; break; case 0x24: /* CAf LFO1 Pitch Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x04); num_events++; break; case 0x25: /* CAf LFO1 TVF Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x05); num_events++; break; case 0x26: /* CAf LFO1 TVA Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x06); num_events++; break; case 0x27: /* CAf LFO2 Rate Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x07); num_events++; break; case 0x28: /* CAf LFO2 Pitch Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x08); num_events++; break; case 0x29: /* CAf LFO2 TVF Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x09); num_events++; break; case 0x2A: /* CAf LFO2 TVA Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x0A); num_events++; break; case 0x30: /* PAf Pitch Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x0B); num_events++; break; case 0x31: /* PAf TVF Cutoff Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x0C); num_events++; break; case 0x32: /* PAf Amplitude Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x0D); num_events++; break; case 0x33: /* PAf LFO1 Rate Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x0E); num_events++; break; case 0x34: /* PAf LFO1 Pitch Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x0F); num_events++; break; case 0x35: /* PAf LFO1 TVF Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x10); num_events++; break; case 0x36: /* PAf LFO1 TVA Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x11); num_events++; break; case 0x37: /* PAf LFO2 Rate Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x12); num_events++; break; case 0x38: /* PAf LFO2 Pitch Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x13); num_events++; break; case 0x39: /* PAf LFO2 TVF Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x14); num_events++; break; case 0x3A: /* PAf LFO2 TVA Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x15); num_events++; break; case 0x40: /* CC1 Pitch Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x2C); num_events++; break; case 0x41: /* CC1 TVF Cutoff Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x2D); num_events++; break; case 0x42: /* CC1 Amplitude Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x2E); num_events++; break; case 0x43: /* CC1 LFO1 Rate Control */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x2F); num_events++; break; case 0x44: /* CC1 LFO1 Pitch Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x30); num_events++; break; case 0x45: /* CC1 LFO1 TVF Depth */ SETMIDIEVENT(evm[0], 0, ME_SYSEX_LSB, p, val[7], 0x31); nu
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -