You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
6.4 KiB
Python
211 lines
6.4 KiB
Python
15 years ago
|
# -*- 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
|
||
|
|
||
|
|