A synthesizer that is controlled by a USB MIDI Keyboard. Also displays corresponding frequencies via a simple spectrum analyzer on a LCD. Uses a watchdog timer to reset Mbed in case it freezes.

Dependencies:   4DGL-uLCD-SE USBHostMIDI mbed

Fork of USBHostMIDI_example by Kaoru Shoji

Committer:
kshoji
Date:
Thu Dec 05 09:45:08 2013 +0000
Revision:
0:78ea62ee7eab
Child:
1:01305cc0e2a2
wrote example code.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kshoji 0:78ea62ee7eab 1 #include "mbed.h"
kshoji 0:78ea62ee7eab 2 #include "USBHostMIDI.h"
kshoji 0:78ea62ee7eab 3
kshoji 0:78ea62ee7eab 4 void noteOn(unsigned char channel, unsigned char note, unsigned char velocity) {
kshoji 0:78ea62ee7eab 5 printf("note on channel: %d, note: %d, velocity: %d\r\n", channel, note, velocity);
kshoji 0:78ea62ee7eab 6 }
kshoji 0:78ea62ee7eab 7
kshoji 0:78ea62ee7eab 8 void noteOff(unsigned char channel, unsigned char note, unsigned char velocity) {
kshoji 0:78ea62ee7eab 9 printf("note off channel: %d, note: %d, velocity: %d\r\n", channel, note, velocity);
kshoji 0:78ea62ee7eab 10 }
kshoji 0:78ea62ee7eab 11
kshoji 0:78ea62ee7eab 12 void controlChange(unsigned char channel, unsigned char key, unsigned char value) {
kshoji 0:78ea62ee7eab 13 printf("control change channel: %d, key: %d, value: %d\r\n", channel, key, value);
kshoji 0:78ea62ee7eab 14 }
kshoji 0:78ea62ee7eab 15
kshoji 0:78ea62ee7eab 16 void programChange(unsigned char channel, unsigned char program) {
kshoji 0:78ea62ee7eab 17 printf("progaram change channel: %d, program: %d\r\n", channel, program);
kshoji 0:78ea62ee7eab 18 }
kshoji 0:78ea62ee7eab 19
kshoji 0:78ea62ee7eab 20 void pitchBend(unsigned char channel, unsigned int value) {
kshoji 0:78ea62ee7eab 21 printf("pitch bend channel: %d, value: %d\r\n", channel, value);
kshoji 0:78ea62ee7eab 22 }
kshoji 0:78ea62ee7eab 23
kshoji 0:78ea62ee7eab 24 void midi_task(void const*) {
kshoji 0:78ea62ee7eab 25 USBHostMIDI midi;
kshoji 0:78ea62ee7eab 26
kshoji 0:78ea62ee7eab 27 // attach midi event callbacks
kshoji 0:78ea62ee7eab 28 midi.attachNoteOn(noteOn);
kshoji 0:78ea62ee7eab 29 midi.attachNoteOff(noteOff);
kshoji 0:78ea62ee7eab 30 midi.attachControlChange(controlChange);
kshoji 0:78ea62ee7eab 31 midi.attachProgramChange(programChange);
kshoji 0:78ea62ee7eab 32 midi.attachPitchBend(pitchBend);
kshoji 0:78ea62ee7eab 33
kshoji 0:78ea62ee7eab 34 while(1) {
kshoji 0:78ea62ee7eab 35 // try to connect a midi device
kshoji 0:78ea62ee7eab 36 while(!midi.connect())
kshoji 0:78ea62ee7eab 37 Thread::wait(500);
kshoji 0:78ea62ee7eab 38
kshoji 0:78ea62ee7eab 39 // if the device is disconnected, we try to connect it again
kshoji 0:78ea62ee7eab 40 while (1) {
kshoji 0:78ea62ee7eab 41 // if device disconnected, try to connect it again
kshoji 0:78ea62ee7eab 42 if (!midi.connected())
kshoji 0:78ea62ee7eab 43 break;
kshoji 0:78ea62ee7eab 44
kshoji 0:78ea62ee7eab 45 Thread::wait(50);
kshoji 0:78ea62ee7eab 46 }
kshoji 0:78ea62ee7eab 47 }
kshoji 0:78ea62ee7eab 48 }
kshoji 0:78ea62ee7eab 49
kshoji 0:78ea62ee7eab 50 int main() {
kshoji 0:78ea62ee7eab 51 Thread midiTask(midi_task, NULL, osPriorityNormal, 256 * 4);
kshoji 0:78ea62ee7eab 52 while(1) {
kshoji 0:78ea62ee7eab 53 Thread::wait(500);
kshoji 0:78ea62ee7eab 54 }
kshoji 0:78ea62ee7eab 55 }