Rtos API example

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 
00004 USBMIDI midi;
00005 Serial pc(USBTX, USBRX);
00006 
00007 // MIDI IN
00008 void transmitMessage(MIDIMessage msg) {
00009     switch (msg.type()) {
00010         case MIDIMessage::NoteOnType:
00011             wait(0.1);
00012             midi.write(MIDIMessage::NoteOn(msg.key()));
00013             break;
00014         case MIDIMessage::NoteOffType:
00015             wait(0.1);
00016             midi.write(MIDIMessage::NoteOff(msg.key()));
00017             break;
00018         case MIDIMessage::ProgramChangeType:
00019             wait(0.1);
00020             midi.write(MIDIMessage::ProgramChange(msg.program()));
00021             break;
00022         case MIDIMessage::SysExType:
00023             wait(0.1);
00024             unsigned char tmp[64];
00025             for(int i=0;i<msg.length-1;i++) {
00026                 tmp[i]=msg.data[i+1];
00027             }
00028             midi.write(MIDIMessage::SysEx(tmp,msg.length-1));
00029             break;
00030         default:
00031             break;
00032     }    
00033 }
00034 
00035 int main(void)
00036 {
00037     wait(5);
00038     // MIDI OUT
00039 
00040     // set piano
00041     midi.write(MIDIMessage::ProgramChange(1));
00042     wait(0.1);
00043 
00044     // play A
00045     midi.write(MIDIMessage::NoteOn(21));
00046     wait(0.1);
00047     midi.write(MIDIMessage::NoteOff(21));
00048     wait(0.1);
00049 
00050     // GM reset
00051     unsigned char gm_reset[]={0xF0,0x7E,0x7F,0x09,0x01,0xF7};
00052     midi.write(MIDIMessage::SysEx(gm_reset,6));
00053     wait(0.1);
00054 
00055     // GM Master volume max
00056     unsigned char gm_master_vol_max[]={0xF0,0x7F,0x7F,0x04,0x01,0x7F,0x7F,0xF7};
00057     midi.write(MIDIMessage::SysEx(gm_master_vol_max,8));
00058     wait(0.1);
00059 
00060     // GS reset
00061     unsigned char gs_reset[]={0xF0,0x41,0x10,0x42,0x12,0x40,0x00,0x7F,0x00,0x41,0xF7};
00062     midi.write(MIDIMessage::SysEx(gs_reset,11));
00063     wait(0.1);
00064 
00065     // GS Master volume max
00066     unsigned char gs_master_vol_max[]={0xF0,0x41,0x10,0x42,0x12,0x40,0x00,0x04,0x7F,0x3D,0xF7};
00067     midi.write(MIDIMessage::SysEx(gs_master_vol_max,11));
00068     wait(0.1);
00069 
00070     midi.attach(transmitMessage);
00071 
00072     while(1);
00073 }