📄 readmidi.c
字号:
case 0x0A: /* EQ frequency3 */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, 0, *body, ent); num_events++; break; case 0x0B: /* EQ Q3 */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, 0, *body, ent); num_events++; break; case 0x0D: /* EQ gain4 */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, 0, *body, ent); num_events++; break; case 0x0E: /* EQ frequency4 */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, 0, *body, ent); num_events++; break; case 0x0F: /* EQ Q4 */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, 0, *body, ent); num_events++; break; case 0x11: /* EQ gain5 */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, 0, *body, ent); num_events++; break; case 0x12: /* EQ frequency5 */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, 0, *body, ent); num_events++; break; case 0x13: /* EQ Q5 */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, 0, *body, ent); num_events++; break; case 0x14: /* EQ shape5 */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, 0, *body, ent); num_events++; break; default: break; } } } } /* Effect 2 (Insertion Effects) */ else if(len >= 8 && val[0] == 0x43 && /* Yamaha ID */ val[2] == 0x4C && /* XG Model ID */ ((val[1] < 0x10 && val[5] == 0x03) || /* Bulk Dump*/ (val[1] >= 0x10 && val[3] == 0x03))) /* Parameter Change */ { uint8 addhigh, addmid, addlow; /* Addresses */ uint8 *body; /* SysEx body */ int ent; /* Entry # of sub-event */ uint8 *body_end; /* End of SysEx body */ if (val[1] < 0x10) /* Bulk Dump */ { addhigh = val[5]; addmid = val[6]; addlow = val[7]; body = val + 8; body_end = val + len - 3; } else /* Parameter Change */ { addhigh = val[3]; addmid = val[4]; addlow = val[5]; body = val + 6; body_end = val + len - 2; } /* set the SYSEX_XG_MSB info */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_MSB, 0, addhigh, addmid); num_events++; for (ent = addlow; body <= body_end; body++, ent++) { SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, 0, *body, ent); num_events++; } } /* XG Multi Part Data parameter change */ else if(len >= 10 && val[0] == 0x43 && /* Yamaha ID */ val[2] == 0x4C && /* XG Model ID */ ((val[1] < 0x10 && val[5] == 0x08 && /* Bulk Dump */ val[4] == 0x29 || val[4] == 0x3F) || /* Blocks 1 or 2 */ (val[1] >= 0x10 && val[3] == 0x08))) /* Parameter Change */ { uint8 addhigh, addmid, addlow; /* Addresses */ uint8 *body; /* SysEx body */ uint8 p; /* Channel part number [0..15] */ int ent; /* Entry # of sub-event */ uint8 *body_end; /* End of SysEx body */ if (val[1] < 0x10) /* Bulk Dump */ { addhigh = val[5]; addmid = val[6]; addlow = val[7]; body = val + 8; p = addmid; body_end = val + len - 3; } else /* Parameter Change */ { addhigh = val[3]; addmid = val[4]; addlow = val[5]; body = val + 6; p = addmid; body_end = val + len - 2; } /* set the SYSEX_XG_MSB info */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_MSB, p, addhigh, addmid); num_events++; for (ent = addlow; body <= body_end; body++, ent++) { switch(ent) { case 0x00: /* Element Reserve *//* ctl->cmsg(CMSG_INFO, VERB_NOISY, "Element Reserve is not supported. (CH:%d VAL:%d)", p, *body); */ break; case 0x01: /* bank select MSB */ SETMIDIEVENT(evm[num_events], 0, ME_TONE_BANK_MSB, p, *body, SYSEX_TAG); num_events++; break; case 0x02: /* bank select LSB */ SETMIDIEVENT(evm[num_events], 0, ME_TONE_BANK_LSB, p, *body, SYSEX_TAG); num_events++; break; case 0x03: /* program number */ SETMIDIEVENT(evm[num_events], 0, ME_PROGRAM, p, *body, SYSEX_TAG); num_events++; break; case 0x04: /* Rcv CHANNEL */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, p, *body, 0x99); num_events++; break; case 0x05: /* mono/poly mode */ if(*body == 0) {SETMIDIEVENT(evm[num_events], 0, ME_MONO, p, 0, SYSEX_TAG);} else {SETMIDIEVENT(evm[num_events], 0, ME_POLY, p, 0, SYSEX_TAG);} num_events++; break; case 0x06: /* Same Note Number Key On Assign */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, p, *body, ent); num_events++; break; case 0x07: /* Part Mode */ drum_setup_xg[*body] = p; SETMIDIEVENT(evm[num_events], 0, ME_DRUMPART, p, *body, SYSEX_TAG); num_events++; break; case 0x08: /* note shift */ SETMIDIEVENT(evm[num_events], 0, ME_KEYSHIFT, p, *body, SYSEX_TAG); num_events++; break; case 0x09: /* Detune 1st bit */ ctl->cmsg(CMSG_INFO, VERB_NOISY, "Detune 1st bit is not supported. (CH:%d VAL:%d)", p, *body); break; case 0x0A: /* Detune 2nd bit */ ctl->cmsg(CMSG_INFO, VERB_NOISY, "Detune 2nd bit is not supported. (CH:%d VAL:%d)", p, *body); break; case 0x0B: /* volume */ SETMIDIEVENT(evm[num_events], 0, ME_MAINVOLUME, p, *body, SYSEX_TAG); num_events++; break; case 0x0C: /* Velocity Sense Depth */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_GS_LSB, p, *body, 0x21); num_events++; break; case 0x0D: /* Velocity Sense Offset */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_GS_LSB, p, *body, 0x22); num_events++; break; case 0x0E: /* pan */ if(*body == 0) { SETMIDIEVENT(evm[num_events], 0, ME_RANDOM_PAN, p, 0, SYSEX_TAG); } else { SETMIDIEVENT(evm[num_events], 0, ME_PAN, p, *body, SYSEX_TAG); } num_events++; break; case 0x0F: /* Note Limit Low */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x42); num_events++; break; case 0x10: /* Note Limit High */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x43); num_events++; break; case 0x11: /* Dry Level */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_XG_LSB, p, *body, ent); num_events++; break; case 0x12: /* chorus send */ SETMIDIEVENT(evm[num_events], 0, ME_CHORUS_EFFECT, p, *body, SYSEX_TAG); num_events++; break; case 0x13: /* reverb send */ SETMIDIEVENT(evm[num_events], 0, ME_REVERB_EFFECT, p, *body, SYSEX_TAG); num_events++; break; case 0x14: /* Variation Send */ SETMIDIEVENT(evm[num_events], 0, ME_CELESTE_EFFECT, p, *body, SYSEX_TAG); num_events++; break; case 0x15: /* Vibrato Rate */ SETMIDIEVENT(evm[num_events], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 1], 0, ME_NRPN_LSB, p, 0x08, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 2], 0, ME_DATA_ENTRY_MSB, p, *body, SYSEX_TAG); num_events += 3; break; case 0x16: /* Vibrato Depth */ SETMIDIEVENT(evm[num_events], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 1], 0, ME_NRPN_LSB, p, 0x09, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 2], 0, ME_DATA_ENTRY_MSB, p, *body, SYSEX_TAG); num_events += 3; break; case 0x17: /* Vibrato Delay */ SETMIDIEVENT(evm[num_events], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 1], 0, ME_NRPN_LSB, p, 0x0A, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 2], 0, ME_DATA_ENTRY_MSB, p, *body, SYSEX_TAG); num_events += 3; break; case 0x18: /* Filter Cutoff Frequency */ SETMIDIEVENT(evm[num_events], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 1], 0, ME_NRPN_LSB, p, 0x20, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 2], 0, ME_DATA_ENTRY_MSB, p, *body, SYSEX_TAG); num_events += 3; break; case 0x19: /* Filter Resonance */ SETMIDIEVENT(evm[num_events], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 1], 0, ME_NRPN_LSB, p, 0x21, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 2], 0, ME_DATA_ENTRY_MSB, p, *body, SYSEX_TAG); num_events += 3; break; case 0x1A: /* EG Attack Time */ SETMIDIEVENT(evm[num_events], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 1], 0, ME_NRPN_LSB, p, 0x63, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 2], 0, ME_DATA_ENTRY_MSB, p, *body, SYSEX_TAG); num_events += 3; break; case 0x1B: /* EG Decay Time */ SETMIDIEVENT(evm[num_events], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 1], 0, ME_NRPN_LSB, p, 0x64, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 2], 0, ME_DATA_ENTRY_MSB, p, *body, SYSEX_TAG); num_events += 3; break; case 0x1C: /* EG Release Time */ SETMIDIEVENT(evm[num_events], 0, ME_NRPN_MSB, p, 0x01, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 1], 0, ME_NRPN_LSB, p, 0x66, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 2], 0, ME_DATA_ENTRY_MSB, p, *body, SYSEX_TAG); num_events += 3; break; case 0x1D: /* MW Pitch Control */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x16); num_events++; break; case 0x1E: /* MW Filter Control */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x17); num_events++; break; case 0x1F: /* MW Amplitude Control */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x18); num_events++; break; case 0x20: /* MW LFO PMod Depth */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x1A); num_events++; break; case 0x21: /* MW LFO FMod Depth */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x1B); num_events++; break; case 0x22: /* MW LFO AMod Depth */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x1C); num_events++; break; case 0x23: /* bend pitch control */ SETMIDIEVENT(evm[num_events], 0, ME_RPN_MSB, p, 0, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 1], 0, ME_RPN_LSB, p, 0, SYSEX_TAG); SETMIDIEVENT(evm[num_events + 2], 0, ME_DATA_ENTRY_MSB, p, (*body - 0x40) & 0x7F, SYSEX_TAG); num_events += 3; break; case 0x24: /* Bend Filter Control */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x22); num_events++; break; case 0x25: /* Bend Amplitude Control */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x23); num_events++; break; case 0x26: /* Bend LFO PMod Depth */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x25); num_events++; break; case 0x27: /* Bend LFO FMod Depth */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x26); num_events++; break; case 0x28: /* Bend LFO AMod Depth */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x27); num_events++; break; case 0x30: /* Rcv Pitch Bend */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x48); num_events++; break; case 0x31: /* Rcv Channel Pressure */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x49); num_events++; break; case 0x32: /* Rcv Program Change */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x4A); num_events++; break; case 0x33: /* Rcv Control Change */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x4B); num_events++; break; case 0x34: /* Rcv Poly Pressure */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x4C); num_events++; break; case 0x35: /* Rcv Note Message */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x4D); num_events++; break; case 0x36: /* Rcv RPN */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x4E); num_events++; break; case 0x37: /* Rcv NRPN */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x4F); num_events++; break; case 0x38: /* Rcv Modulation */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x50); num_events++; break; case 0x39: /* Rcv Volume */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x51); num_events++; break; case 0x3A: /* Rcv Pan */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x52); num_events++; break; case 0x3B: /* Rcv Expression */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x53); num_events++; break; case 0x3C: /* Rcv Hold1 */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x54); num_events++; break; case 0x3D: /* Rcv Portamento */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x55); num_events++; break; case 0x3E: /* Rcv Sostenuto */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x56); num_events++; break; case 0x3F: /* Rcv Soft */ SETMIDIEVENT(evm[num_events], 0, ME_SYSEX_LSB, p, *body, 0x57); num_events++; break; case 0x40: /* Rcv Bank Select */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -