Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
midi.py
00001 from __future__ import print_function 00002 import sys 00003 import re 00004 import time 00005 import mido 00006 from mido import Message 00007 00008 00009 def test_midi_in(port): 00010 expected_messages_count=0 00011 while expected_messages_count < 7: 00012 for message in port.iter_pending(): 00013 if message.type in ('note_on', 'note_off', 'program_change', 'sysex'): 00014 yield message 00015 expected_messages_count+=1 00016 time.sleep(0.1) 00017 00018 def test_midi_loopback(input_port): 00019 expected_messages_count=0 00020 while expected_messages_count < 1: 00021 for message in input_port.iter_pending(): 00022 print('Test MIDI OUT loopback received {}'.format(message.hex())) 00023 expected_messages_count+=1 00024 00025 def test_midi_out_loopback(output_port,input_port): 00026 print("Test MIDI OUT loopback") 00027 output_port.send(Message('program_change', program=1)) 00028 test_midi_loopback(input_port) 00029 00030 output_port.send(Message('note_on', note=21)) 00031 test_midi_loopback(input_port) 00032 00033 output_port.send(Message('note_off', note=21)) 00034 test_midi_loopback(input_port) 00035 00036 output_port.send(Message('sysex', data=[0x7E,0x7F,0x09,0x01])) 00037 test_midi_loopback(input_port) 00038 00039 output_port.send(Message('sysex', data=[0x7F,0x7F,0x04,0x01,0x7F,0x7F])) 00040 test_midi_loopback(input_port) 00041 00042 output_port.send(Message('sysex', data=[0x41,0x10,0x42,0x12,0x40,0x00,0x7F,0x00,0x41])) 00043 test_midi_loopback(input_port) 00044 00045 output_port.send(Message('sysex', data=[0x41,0x10,0x42,0x12,0x40,0x00,0x04,0x7F,0x3D])) 00046 test_midi_loopback(input_port) 00047 00048 portname="" 00049 00050 while portname=="": 00051 print("Wait for MIDI IN plug ...") 00052 for name in mido.get_input_names(): 00053 matchObj = re.match( r'Mbed', name) 00054 00055 if matchObj: 00056 portname=name 00057 time.sleep( 1 ) 00058 00059 try: 00060 input_port = mido.open_input(portname) 00061 output_port = mido.open_output(portname) 00062 00063 print('Using {}'.format(input_port)) 00064 00065 print("Test MIDI IN") 00066 00067 for message in test_midi_in(input_port): 00068 print('Test MIDI IN received {}'.format(message.hex())) 00069 00070 test_midi_out_loopback(output_port,input_port) 00071 except KeyboardInterrupt: 00072 pass
Generated on Tue Jul 12 2022 12:45:32 by
