8 """returns (type, index, value)"""
9 midi_command = message[0][0]
10 midi_param1 = message[0][1]
11 midi_param2 = message[0][2]
12 timestamp = message[1]
13 command_type = MIDICommand.detect(midi_command)
14 midi_channel = MIDICommand.getChannel(midi_command)
15 if command_type == MIDICommand.NOTE_OFF:
16 return (MIDICommand.NOTE_ON, midi_param1, 0)
17 elif command_type == MIDICommand.NOTE_ON:
18 return (MIDICommand.NOTE_ON, midi_param1, midi_param2 / 127.0)
19 elif command_type == MIDICommand.AFTERTOUCH:
20 return (MIDICommand.AFTERTOUCH, midi_param1, midi_param2 / 127.0)
21 elif command_type == MIDICommand.CONTINUOUS_CONTROLLER:
22 return (MIDICommand.CONTINUOUS_CONTROLLER, midi_param1, midi_param2 / 127.0)
23 elif command_type == MIDICommand.PATCH_CHANGE:
24 return (MIDICommand.PATCH_CHANGE, midi_param1, midi_param2 / 127.0)
25 elif command_type == MIDICommand.CHANNEL_PRESSURE:
26 return (MIDICommand.CHANNEL_PRESSURE, midi_channel, midi_param1)
27 elif command_type == MIDICommand.PITCH_BEND:
28 return (MIDICommand.PITCH_BEND, midi_channel, midi_param1 / 127.0)
30 raise MIDIException(
"unknown command type: " + MIDICommand.toStr(command_type))
36 CONTINUOUS_CONTROLLER = 0xB0
38 CHANNEL_PRESSURE = 0xD0
57 return (ref >> 4) == (val >> 4)
70 return "ContinuousController"
74 return "Channel Pressure"
78 return "Non Musical Command"
89 devices = pygame.midi.get_count()
90 for i
in range(devices):
91 info = pygame.midi.get_device_info(i)
92 if info[1] == device_name
and info[2] == input_output:
94 return pygame.midi.Input(i)
96 return pygame.midi.Output(i)
97 raise MIDIException(
"Cannot find the device: %s" % (device_name))