main.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "mbed.h"
  2. #include "USBMIDI.h"
  3. USBMIDI midi;
  4. Serial pc(USBTX, USBRX);
  5. // MIDI IN
  6. void transmitMessage(MIDIMessage msg) {
  7. switch (msg.type()) {
  8. case MIDIMessage::NoteOnType:
  9. wait(0.1);
  10. midi.write(MIDIMessage::NoteOn(msg.key()));
  11. break;
  12. case MIDIMessage::NoteOffType:
  13. wait(0.1);
  14. midi.write(MIDIMessage::NoteOff(msg.key()));
  15. break;
  16. case MIDIMessage::ProgramChangeType:
  17. wait(0.1);
  18. midi.write(MIDIMessage::ProgramChange(msg.program()));
  19. break;
  20. case MIDIMessage::SysExType:
  21. wait(0.1);
  22. unsigned char tmp[64];
  23. for(int i=0;i<msg.length-1;i++) {
  24. tmp[i]=msg.data[i+1];
  25. }
  26. midi.write(MIDIMessage::SysEx(tmp,msg.length-1));
  27. break;
  28. default:
  29. break;
  30. }
  31. }
  32. int main(void)
  33. {
  34. wait(5);
  35. // MIDI OUT
  36. // set piano
  37. midi.write(MIDIMessage::ProgramChange(1));
  38. wait(0.1);
  39. // play A
  40. midi.write(MIDIMessage::NoteOn(21));
  41. wait(0.1);
  42. midi.write(MIDIMessage::NoteOff(21));
  43. wait(0.1);
  44. // GM reset
  45. unsigned char gm_reset[]={0xF0,0x7E,0x7F,0x09,0x01,0xF7};
  46. midi.write(MIDIMessage::SysEx(gm_reset,6));
  47. wait(0.1);
  48. // GM Master volume max
  49. unsigned char gm_master_vol_max[]={0xF0,0x7F,0x7F,0x04,0x01,0x7F,0x7F,0xF7};
  50. midi.write(MIDIMessage::SysEx(gm_master_vol_max,8));
  51. wait(0.1);
  52. // GS reset
  53. unsigned char gs_reset[]={0xF0,0x41,0x10,0x42,0x12,0x40,0x00,0x7F,0x00,0x41,0xF7};
  54. midi.write(MIDIMessage::SysEx(gs_reset,11));
  55. wait(0.1);
  56. // GS Master volume max
  57. unsigned char gs_master_vol_max[]={0xF0,0x41,0x10,0x42,0x12,0x40,0x00,0x04,0x7F,0x3D,0xF7};
  58. midi.write(MIDIMessage::SysEx(gs_master_vol_max,11));
  59. wait(0.1);
  60. midi.attach(transmitMessage);
  61. while(1);
  62. }