see http://mbed.org/users/okini3939/notebook/midi/

Dependencies:   MIDI USBDevice mbed

Fork of MIDI_sample by Suga koubou

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "USBMIDI.h"
00003 #include "MIDI.h"
00004 
00005 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
00006 Serial pc(USBTX, USBRX);
00007 
00008 USBMIDI usbmidi;
00009 MIDI midi(p9, p10);
00010 
00011 void show_message(MIDIMessage msg) {
00012     switch (msg.type()) {
00013     case MIDIMessage::NoteOffType:
00014         midi.sendNoteOff(msg.key(), msg.pitch(), msg.channel());
00015         break;
00016     case MIDIMessage::NoteOnType:
00017         midi.sendNoteOn(msg.key(), msg.pitch(), msg.channel());
00018         break;
00019     case MIDIMessage::PolyphonicAftertouchType:
00020         midi.sendPolyPressure(msg.key(), msg.pressure(), msg.channel());
00021         break;
00022     case MIDIMessage::ControlChangeType:
00023         midi.sendControlChange(msg.controller(), msg.value(), msg.channel());
00024         break;
00025     case MIDIMessage::ProgramChangeType:
00026         midi.sendProgramChange(msg.program(), msg.channel());
00027         break;
00028     case MIDIMessage::ChannelAftertouchType:
00029         midi.sendAfterTouch(msg.pressure(), msg.channel());
00030         break;
00031     case MIDIMessage::PitchWheelType:
00032         midi.sendPitchBend(msg.pitch(), msg.channel());
00033         break;
00034     case MIDIMessage::AllNotesOffType:
00035         midi.sendControlChange(123, 0, msg.channel());
00036         break;
00037     case MIDIMessage::ErrorType:
00038     default:
00039         led4 = 1;
00040         break;
00041     }
00042     led3 = 1;
00043 }
00044 
00045 void isr_t () {
00046     led2 = 0;
00047     led3 = 0;
00048     led4 = 0;
00049 }
00050 
00051 int main() {
00052     Ticker t;
00053 
00054     led1 = 1;
00055     usbmidi.attach(show_message);
00056     midi.begin();   
00057     t.attach(isr_t, 0.1);
00058 
00059     for (;;) {
00060         if (midi.read()) {
00061             MIDIMessage msg;
00062             msg.data[0] = CABLE_NUM | (midi.getType() >> 4);
00063             msg.data[1] = midi.getType() | midi.getChannel();
00064             msg.data[2] = midi.getData1();
00065             msg.data[3] = midi.getData2();
00066             usbmidi.write(msg);
00067             led2 = 1;
00068         }
00069     }
00070 }