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);
    }
}