A sample program to play eVY1 shield/module using USB-MIDI keyboard. USB-MIDIキーボードでeVY1 shield/moduleを演奏する単純なサンプルプログラムです。 See also following movie: mbedで簡単! USB-MIDIキーボードの利用法 http://www.nicovideo.jp/watch/sm25151897
main.cpp@0:649db6499897, 2014-12-20 (annotated)
- Committer:
- ccutchy
- Date:
- Sat Dec 20 02:37:56 2014 +0000
- Revision:
- 0:649db6499897
Initial version.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ccutchy | 0:649db6499897 | 1 | #include "mbed.h" |
ccutchy | 0:649db6499897 | 2 | #include "USBHostMIDI.h" |
ccutchy | 0:649db6499897 | 3 | DigitalOut led(LED1); |
ccutchy | 0:649db6499897 | 4 | RawSerial midi(p28, NC); |
ccutchy | 0:649db6499897 | 5 | void onMidNoteOff (uint8_t ch, uint8_t key, uint8_t vel) { midi.putc(0x80|ch); midi.putc(key); midi.putc(vel); led = !led; } |
ccutchy | 0:649db6499897 | 6 | void onMidNoteOn (uint8_t ch, uint8_t key, uint8_t vel) { midi.putc(0x90|ch); midi.putc(key); midi.putc(vel); led = !led; } |
ccutchy | 0:649db6499897 | 7 | void onMidCtrlChg (uint8_t ch, uint8_t cc, uint8_t val) { midi.putc(0xB0|ch); midi.putc(cc); midi.putc(val); } |
ccutchy | 0:649db6499897 | 8 | void onMidPitchBend (uint8_t ch, uint16_t val) { midi.putc(0xE0|ch); midi.putc(val&0x7F); midi.putc(val>>7); } |
ccutchy | 0:649db6499897 | 9 | void onMidExclusive (uint8_t*, uint16_t, bool) {} |
ccutchy | 0:649db6499897 | 10 | void onMid1byte (uint8_t) {} |
ccutchy | 0:649db6499897 | 11 | void onMid2bytes (uint8_t, uint8_t) {} |
ccutchy | 0:649db6499897 | 12 | void onMid3bytes (uint8_t, uint8_t, uint8_t) {} |
ccutchy | 0:649db6499897 | 13 | void mid_task(void const *) { |
ccutchy | 0:649db6499897 | 14 | USBHostMIDI mid; |
ccutchy | 0:649db6499897 | 15 | mid.attachNoteOff (onMidNoteOff ); mid.attachNoteOn (onMidNoteOn ); |
ccutchy | 0:649db6499897 | 16 | mid.attachPolyKeyPress (onMid3bytes ); mid.attachControlChange (onMidCtrlChg ); |
ccutchy | 0:649db6499897 | 17 | mid.attachProgramChange (onMid2bytes ); mid.attachChannelPressure(onMid2bytes ); |
ccutchy | 0:649db6499897 | 18 | mid.attachPitchBend (onMidPitchBend ); mid.attachSystemExclusive(onMidExclusive ); |
ccutchy | 0:649db6499897 | 19 | mid.attachSystemCommonTwoBytes (onMid2bytes ); mid.attachSingleByte (onMid1byte ); |
ccutchy | 0:649db6499897 | 20 | mid.attachSystemCommonThreeBytes (onMid3bytes ); mid.attachCableEvent (onMid3bytes ); |
ccutchy | 0:649db6499897 | 21 | mid.attachMiscellaneousFunctionCode (onMid3bytes ); |
ccutchy | 0:649db6499897 | 22 | for(;;) { while(!mid.connect()) { Thread::wait(250); } led = 1; |
ccutchy | 0:649db6499897 | 23 | while(mid.connected()) { Thread::wait(250); } led = 0; } |
ccutchy | 0:649db6499897 | 24 | } |
ccutchy | 0:649db6499897 | 25 | int main() { |
ccutchy | 0:649db6499897 | 26 | midi.baud(31250); |
ccutchy | 0:649db6499897 | 27 | DigitalOut hoge(P2_9); hoge = 1; // disable usb d+ pullup |
ccutchy | 0:649db6499897 | 28 | Thread midTask(mid_task, NULL, osPriorityNormal, 1024); |
ccutchy | 0:649db6499897 | 29 | const char aMsg[] = "\xF0\x43\x79\x09\x00\x50\x10" "j M,M,e,s M,b' i,i\0" "\xF7"; |
ccutchy | 0:649db6499897 | 30 | Thread::wait(3500); for(int i = 0; i < sizeof(aMsg)-1; midi.putc(aMsg[i++])); |
ccutchy | 0:649db6499897 | 31 | for(;;) { Thread::wait(250); } |
ccutchy | 0:649db6499897 | 32 | } |