Keyboard firmwares for Atmel AVR and Cortex-M
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

midi.py 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from __future__ import print_function
  2. import sys
  3. import re
  4. import time
  5. import mido
  6. from mido import Message
  7. def test_midi_in(port):
  8. expected_messages_count=0
  9. while expected_messages_count < 7:
  10. for message in port.iter_pending():
  11. if message.type in ('note_on', 'note_off', 'program_change', 'sysex'):
  12. yield message
  13. expected_messages_count+=1
  14. time.sleep(0.1)
  15. def test_midi_loopback(input_port):
  16. expected_messages_count=0
  17. while expected_messages_count < 1:
  18. for message in input_port.iter_pending():
  19. print('Test MIDI OUT loopback received {}'.format(message.hex()))
  20. expected_messages_count+=1
  21. def test_midi_out_loopback(output_port,input_port):
  22. print("Test MIDI OUT loopback")
  23. output_port.send(Message('program_change', program=1))
  24. test_midi_loopback(input_port)
  25. output_port.send(Message('note_on', note=21))
  26. test_midi_loopback(input_port)
  27. output_port.send(Message('note_off', note=21))
  28. test_midi_loopback(input_port)
  29. output_port.send(Message('sysex', data=[0x7E,0x7F,0x09,0x01]))
  30. test_midi_loopback(input_port)
  31. output_port.send(Message('sysex', data=[0x7F,0x7F,0x04,0x01,0x7F,0x7F]))
  32. test_midi_loopback(input_port)
  33. output_port.send(Message('sysex', data=[0x41,0x10,0x42,0x12,0x40,0x00,0x7F,0x00,0x41]))
  34. test_midi_loopback(input_port)
  35. output_port.send(Message('sysex', data=[0x41,0x10,0x42,0x12,0x40,0x00,0x04,0x7F,0x3D]))
  36. test_midi_loopback(input_port)
  37. portname=""
  38. while portname=="":
  39. print("Wait for MIDI IN plug ...")
  40. for name in mido.get_input_names():
  41. matchObj = re.match( r'Mbed', name)
  42. if matchObj:
  43. portname=name
  44. time.sleep( 1 )
  45. try:
  46. input_port = mido.open_input(portname)
  47. output_port = mido.open_output(portname)
  48. print('Using {}'.format(input_port))
  49. print("Test MIDI IN")
  50. for message in test_midi_in(input_port):
  51. print('Test MIDI IN received {}'.format(message.hex()))
  52. test_midi_out_loopback(output_port,input_port)
  53. except KeyboardInterrupt:
  54. pass