# -*- coding: ISO-8859-1 -*- ################################################### ## Definitions of the different midi events ################################################### ## Midi channel events (The most usual events) ## also called "Channel Voice Messages" NOTE_OFF = 0x80 # 1000cccc 0nnnnnnn 0vvvvvvv (channel, note, velocity) NOTE_ON = 0x90 # 1001cccc 0nnnnnnn 0vvvvvvv (channel, note, velocity) AFTERTOUCH = 0xA0 # 1010cccc 0nnnnnnn 0vvvvvvv (channel, note, velocity) CONTINUOUS_CONTROLLER = 0xB0 # see Channel Mode Messages!!! # 1011cccc 0ccccccc 0vvvvvvv (channel, controller, value) PATCH_CHANGE = 0xC0 # 1100cccc 0ppppppp (channel, program) CHANNEL_PRESSURE = 0xD0 # 1101cccc 0ppppppp (channel, pressure) PITCH_BEND = 0xE0 # 1110cccc 0vvvvvvv 0wwwwwww (channel, value-lo, value-hi) ################################################### ## Channel Mode Messages (Continuous Controller) ## They share a status byte. ## The controller makes the difference here # High resolution continuous controllers (MSB) BANK_SELECT = 0x00 MODULATION_WHEEL = 0x01 BREATH_CONTROLLER = 0x02 FOOT_CONTROLLER = 0x04 PORTAMENTO_TIME = 0x05 DATA_ENTRY = 0x06 CHANNEL_VOLUME = 0x07 BALANCE = 0x08 PAN = 0x0A EXPRESSION_CONTROLLER = 0x0B EFFECT_CONTROL_1 = 0x0C EFFECT_CONTROL_2 = 0x0D GEN_PURPOSE_CONTROLLER_1 = 0x10 GEN_PURPOSE_CONTROLLER_2 = 0x11 GEN_PURPOSE_CONTROLLER_3 = 0x12 GEN_PURPOSE_CONTROLLER_4 = 0x13 # High resolution continuous controllers (LSB) BANK_SELECT = 0x20 MODULATION_WHEEL = 0x21 BREATH_CONTROLLER = 0x22 FOOT_CONTROLLER = 0x24 PORTAMENTO_TIME = 0x25 DATA_ENTRY = 0x26 CHANNEL_VOLUME = 0x27 BALANCE = 0x28 PAN = 0x2A EXPRESSION_CONTROLLER = 0x2B EFFECT_CONTROL_1 = 0x2C EFFECT_CONTROL_2 = 0x2D GENERAL_PURPOSE_CONTROLLER_1 = 0x30 GENERAL_PURPOSE_CONTROLLER_2 = 0x31 GENERAL_PURPOSE_CONTROLLER_3 = 0x32 GENERAL_PURPOSE_CONTROLLER_4 = 0x33 # Switches SUSTAIN_ONOFF = 0x40 PORTAMENTO_ONOFF = 0x41 SOSTENUTO_ONOFF = 0x42 SOFT_PEDAL_ONOFF = 0x43 LEGATO_ONOFF = 0x44 HOLD_2_ONOFF = 0x45 # Low resolution continuous controllers SOUND_CONTROLLER_1 = 0x46 # (TG: Sound Variation; FX: Exciter On/Off) SOUND_CONTROLLER_2 = 0x47 # (TG: Harmonic Content; FX: Compressor On/Off) SOUND_CONTROLLER_3 = 0x48 # (TG: Release Time; FX: Distortion On/Off) SOUND_CONTROLLER_4 = 0x49 # (TG: Attack Time; FX: EQ On/Off) SOUND_CONTROLLER_5 = 0x4A # (TG: Brightness; FX: Expander On/Off)75 SOUND_CONTROLLER_6 (TG: Undefined; FX: Reverb OnOff) SOUND_CONTROLLER_7 = 0x4C # (TG: Undefined; FX: Delay OnOff) SOUND_CONTROLLER_8 = 0x4D # (TG: Undefined; FX: Pitch Transpose OnOff) SOUND_CONTROLLER_9 = 0x4E # (TG: Undefined; FX: Flange/Chorus OnOff) SOUND_CONTROLLER_10 = 0x4F # (TG: Undefined; FX: Special Effects OnOff) GENERAL_PURPOSE_CONTROLLER_5 = 0x50 GENERAL_PURPOSE_CONTROLLER_6 = 0x51 GENERAL_PURPOSE_CONTROLLER_7 = 0x52 GENERAL_PURPOSE_CONTROLLER_8 = 0x53 PORTAMENTO_CONTROL = 0x54 # (PTC) (0vvvvvvv is the source Note number) (Detail) EFFECTS_1 = 0x5B # (Ext. Effects Depth) EFFECTS_2 = 0x5C # (Tremelo Depth) EFFECTS_3 = 0x5D # (Chorus Depth) EFFECTS_4 = 0x5E # (Celeste Depth) EFFECTS_5 = 0x5F # (Phaser Depth) DATA_INCREMENT = 0x60 # (0vvvvvvv is n/a; use 0) DATA_DECREMENT = 0x61 # (0vvvvvvv is n/a; use 0) NON_REGISTERED_PARAMETER_NUMBER = 0x62 # (LSB) NON_REGISTERED_PARAMETER_NUMBER = 0x63 # (MSB) REGISTERED_PARAMETER_NUMBER = 0x64 # (LSB) REGISTERED_PARAMETER_NUMBER = 0x65 # (MSB) # Channel Mode messages - (Detail) ALL_SOUND_OFF = 0x78 RESET_ALL_CONTROLLERS = 0x79 LOCAL_CONTROL_ONOFF = 0x7A ALL_NOTES_OFF = 0x7B OMNI_MODE_OFF = 0x7C # (also causes ANO) OMNI_MODE_ON = 0x7D # (also causes ANO) MONO_MODE_ON = 0x7E # (Poly Off; also causes ANO) POLY_MODE_ON = 0x7F # (Mono Off; also causes ANO) ################################################### ## System Common Messages, for all channels SYSTEM_EXCLUSIVE = 0xF0 # 11110000 0iiiiiii 0ddddddd ... 11110111 MTC = 0xF1 # MIDI Time Code Quarter Frame # 11110001 SONG_POSITION_POINTER = 0xF2 # 11110010 0vvvvvvv 0wwwwwww (lo-position, hi-position) SONG_SELECT = 0xF3 # 11110011 0sssssss (songnumber) #UNDEFINED = 0xF4 ## 11110100 #UNDEFINED = 0xF5 ## 11110101 TUNING_REQUEST = 0xF6 # 11110110 END_OFF_EXCLUSIVE = 0xF7 # terminator # 11110111 # End of system exclusive ################################################### ## Midifile meta-events SEQUENCE_NUMBER = 0x00 # 00 02 ss ss (seq-number) TEXT = 0x01 # 01 len text... COPYRIGHT = 0x02 # 02 len text... SEQUENCE_NAME = 0x03 # 03 len text... INSTRUMENT_NAME = 0x04 # 04 len text... LYRIC = 0x05 # 05 len text... MARKER = 0x06 # 06 len text... CUEPOINT = 0x07 # 07 len text... PROGRAM_NAME = 0x08 # 08 len text... DEVICE_NAME = 0x09 # 09 len text... MIDI_CH_PREFIX = 0x20 # MIDI channel prefix assignment (unofficial) MIDI_PORT = 0x21 # 21 01 port, legacy stuff but still used END_OF_TRACK = 0x2F # 2f 00 TEMPO = 0x51 # 51 03 tt tt tt (tempo in us/quarternote) SMTP_OFFSET = 0x54 # 54 05 hh mm ss ff xx TIME_SIGNATURE = 0x58 # 58 04 nn dd cc bb KEY_SIGNATURE = 0x59 # ??? len text... SPECIFIC = 0x7F # Sequencer specific event FILE_HEADER = 'MThd' TRACK_HEADER = 'MTrk' ################################################### ## System Realtime messages ## I don't supose these are to be found in midi files?! TIMING_CLOCK = 0xF8 # undefined = 0xF9 SONG_START = 0xFA SONG_CONTINUE = 0xFB SONG_STOP = 0xFC # undefined = 0xFD ACTIVE_SENSING = 0xFE SYSTEM_RESET = 0xFF ################################################### ## META EVENT, it is used only in midi files. ## In transmitted data it means system reset!!! META_EVENT = 0xFF # 11111111 ################################################### ## Helper functions def is_status(byte): return (byte & 0x80) == 0x80 # 1000 0000