Rtos API example

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers midi.py Source File

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