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.
mbed-os/tools/host_tests/midi.py
- Committer:
- glebiuskv
- Date:
- 2018-04-13
- Revision:
- 0:2f0e1e23c242
File content as of revision 0:2f0e1e23c242:
from __future__ import print_function
import sys
import re
import time
import mido
from mido import Message
def test_midi_in(port):
	expected_messages_count=0
	while expected_messages_count < 7:
		for message in port.iter_pending():
			if message.type in ('note_on', 'note_off', 'program_change', 'sysex'):
				yield message
				expected_messages_count+=1
		time.sleep(0.1)
def test_midi_loopback(input_port):
	expected_messages_count=0
	while expected_messages_count < 1:
		for message in input_port.iter_pending():
			print('Test MIDI OUT loopback received {}'.format(message.hex()))
			expected_messages_count+=1
def test_midi_out_loopback(output_port,input_port):
	print("Test MIDI OUT loopback")
	output_port.send(Message('program_change', program=1))
	test_midi_loopback(input_port)
	output_port.send(Message('note_on', note=21))
	test_midi_loopback(input_port)
	output_port.send(Message('note_off', note=21))
	test_midi_loopback(input_port)
	output_port.send(Message('sysex', data=[0x7E,0x7F,0x09,0x01]))
	test_midi_loopback(input_port)
	output_port.send(Message('sysex', data=[0x7F,0x7F,0x04,0x01,0x7F,0x7F]))
	test_midi_loopback(input_port)
	output_port.send(Message('sysex', data=[0x41,0x10,0x42,0x12,0x40,0x00,0x7F,0x00,0x41]))
	test_midi_loopback(input_port)
	output_port.send(Message('sysex', data=[0x41,0x10,0x42,0x12,0x40,0x00,0x04,0x7F,0x3D]))
	test_midi_loopback(input_port)
portname=""
while portname=="":
	print("Wait for MIDI IN plug ...")
	for name in mido.get_input_names():
		matchObj = re.match( r'Mbed', name)
		if matchObj:
			portname=name
	time.sleep( 1 )
try:
	input_port = mido.open_input(portname)
	output_port = mido.open_output(portname)
	
	print('Using {}'.format(input_port))
	print("Test MIDI IN")
	for message in test_midi_in(input_port):
		print('Test MIDI IN received {}'.format(message.hex()))
	test_midi_out_loopback(output_port,input_port)
except KeyboardInterrupt:
    pass