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

Dependencies:   MIDI USBDevice mbed

Fork of MIDI_sample by Suga koubou

Committer:
okini3939
Date:
Tue Feb 05 00:12:25 2013 +0000
Revision:
1:ecf5c3927710
Parent:
0:1a4d28e63bef
usb bridge

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 1:ecf5c3927710 1 #include "mbed.h"
okini3939 1:ecf5c3927710 2 #include "USBMIDI.h"
okini3939 1:ecf5c3927710 3 #include "MIDI.h"
okini3939 1:ecf5c3927710 4
okini3939 1:ecf5c3927710 5 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
okini3939 1:ecf5c3927710 6 Serial pc(USBTX, USBRX);
okini3939 1:ecf5c3927710 7
okini3939 1:ecf5c3927710 8 USBMIDI usbmidi;
okini3939 1:ecf5c3927710 9 MIDI midi(p9, p10);
okini3939 1:ecf5c3927710 10
okini3939 1:ecf5c3927710 11 void show_message(MIDIMessage msg) {
okini3939 1:ecf5c3927710 12 switch (msg.type()) {
okini3939 1:ecf5c3927710 13 case MIDIMessage::NoteOffType:
okini3939 1:ecf5c3927710 14 midi.sendNoteOff(msg.key(), msg.pitch(), msg.channel());
okini3939 1:ecf5c3927710 15 break;
okini3939 1:ecf5c3927710 16 case MIDIMessage::NoteOnType:
okini3939 1:ecf5c3927710 17 midi.sendNoteOn(msg.key(), msg.pitch(), msg.channel());
okini3939 1:ecf5c3927710 18 break;
okini3939 1:ecf5c3927710 19 case MIDIMessage::PolyphonicAftertouchType:
okini3939 1:ecf5c3927710 20 midi.sendPolyPressure(msg.key(), msg.pressure(), msg.channel());
okini3939 1:ecf5c3927710 21 break;
okini3939 1:ecf5c3927710 22 case MIDIMessage::ControlChangeType:
okini3939 1:ecf5c3927710 23 midi.sendControlChange(msg.controller(), msg.value(), msg.channel());
okini3939 1:ecf5c3927710 24 break;
okini3939 1:ecf5c3927710 25 case MIDIMessage::ProgramChangeType:
okini3939 1:ecf5c3927710 26 midi.sendProgramChange(msg.program(), msg.channel());
okini3939 1:ecf5c3927710 27 break;
okini3939 1:ecf5c3927710 28 case MIDIMessage::ChannelAftertouchType:
okini3939 1:ecf5c3927710 29 midi.sendAfterTouch(msg.pressure(), msg.channel());
okini3939 1:ecf5c3927710 30 break;
okini3939 1:ecf5c3927710 31 case MIDIMessage::PitchWheelType:
okini3939 1:ecf5c3927710 32 midi.sendPitchBend(msg.pitch(), msg.channel());
okini3939 1:ecf5c3927710 33 break;
okini3939 1:ecf5c3927710 34 case MIDIMessage::AllNotesOffType:
okini3939 1:ecf5c3927710 35 midi.sendControlChange(123, 0, msg.channel());
okini3939 1:ecf5c3927710 36 break;
okini3939 1:ecf5c3927710 37 case MIDIMessage::ErrorType:
okini3939 1:ecf5c3927710 38 default:
okini3939 1:ecf5c3927710 39 led4 = 1;
okini3939 1:ecf5c3927710 40 break;
okini3939 1:ecf5c3927710 41 }
okini3939 1:ecf5c3927710 42 led3 = 1;
okini3939 1:ecf5c3927710 43 }
okini3939 1:ecf5c3927710 44
okini3939 1:ecf5c3927710 45 void isr_t () {
okini3939 1:ecf5c3927710 46 led2 = 0;
okini3939 1:ecf5c3927710 47 led3 = 0;
okini3939 1:ecf5c3927710 48 led4 = 0;
okini3939 1:ecf5c3927710 49 }
okini3939 1:ecf5c3927710 50
okini3939 1:ecf5c3927710 51 int main() {
okini3939 1:ecf5c3927710 52 Ticker t;
okini3939 1:ecf5c3927710 53
okini3939 1:ecf5c3927710 54 led1 = 1;
okini3939 1:ecf5c3927710 55 usbmidi.attach(show_message);
okini3939 1:ecf5c3927710 56 midi.begin();
okini3939 1:ecf5c3927710 57 t.attach(isr_t, 0.1);
okini3939 1:ecf5c3927710 58
okini3939 1:ecf5c3927710 59 for (;;) {
okini3939 1:ecf5c3927710 60 if (midi.read()) {
okini3939 1:ecf5c3927710 61 MIDIMessage msg;
okini3939 1:ecf5c3927710 62 msg.data[0] = CABLE_NUM | (midi.getType() >> 4);
okini3939 1:ecf5c3927710 63 msg.data[1] = midi.getType() | midi.getChannel();
okini3939 1:ecf5c3927710 64 msg.data[2] = midi.getData1();
okini3939 1:ecf5c3927710 65 msg.data[3] = midi.getData2();
okini3939 1:ecf5c3927710 66 usbmidi.write(msg);
okini3939 1:ecf5c3927710 67 led2 = 1;
okini3939 1:ecf5c3927710 68 }
okini3939 1:ecf5c3927710 69 }
okini3939 1:ecf5c3927710 70 }