Example program for USBHostMIDI http://mbed.org/users/kshoji/code/USBHostMIDI/
Dependencies: USBHostMIDI mbed
USB MIDI event handling examples for this library.
http://mbed.org/users/kshoji/code/USBHostMIDI/
main.cpp
- Committer:
- kshoji
- Date:
- 2013-12-06
- Revision:
- 1:01305cc0e2a2
- Parent:
- 0:78ea62ee7eab
File content as of revision 1:01305cc0e2a2:
#include "mbed.h" #include "USBHostMIDI.h" // pots on the mbed application board AnalogIn pot1(p19); AnalogIn pot2(p20); unsigned int lastPot1; unsigned int lastPot2; void noteOn(unsigned char channel, unsigned char note, unsigned char velocity) { printf("note on channel: %d, note: %d, velocity: %d\r\n", channel, note, velocity); } void noteOff(unsigned char channel, unsigned char note, unsigned char velocity) { printf("note off channel: %d, note: %d, velocity: %d\r\n", channel, note, velocity); } void controlChange(unsigned char channel, unsigned char key, unsigned char value) { printf("control change channel: %d, key: %d, value: %d\r\n", channel, key, value); } void programChange(unsigned char channel, unsigned char program) { printf("progaram change channel: %d, program: %d\r\n", channel, program); } void pitchBend(unsigned char channel, unsigned int value) { printf("pitch bend channel: %d, value: %d\r\n", channel, value); } void midi_task(void const*) { USBHostMIDI midi; // attach midi event callbacks midi.attachNoteOn(noteOn); midi.attachNoteOff(noteOff); midi.attachControlChange(controlChange); midi.attachProgramChange(programChange); midi.attachPitchBend(pitchBend); while(1) { // try to connect a midi device while(!midi.connect()) Thread::wait(500); // if the device is disconnected, we try to connect it again while (1) { if (lastPot1 != pot1.read_u16() >> 9) { lastPot1 = pot1.read_u16() >> 9; // channel volume midi.sendControlChange(0, 7, lastPot1); } if (lastPot2 != pot2.read_u16() >> 9) { lastPot2 = pot2.read_u16() >> 9; // program change midi.sendProgramChange(0, lastPot2); } // midi.sendNoteOn(0, 60, 127); // midi.sendNoteOff(0, 60, 0); // if device disconnected, try to connect it again if (!midi.connected()) break; Thread::wait(50); } } } int main() { lastPot1 = pot1.read_u16() >> 9; lastPot2 = pot2.read_u16() >> 9; Thread midiTask(midi_task, NULL, osPriorityNormal, 256 * 4); while(1) { Thread::wait(500); } }