Nucleo F401REでFM音源を実装するやつ の実装途中で32ポリ音源にしたやつ 外部DACとオペアンプを利用 現在はMCP4922とNJM2737

Dependencies:   AOTTrigon I2CEEPROM MCP4922 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MIDI.cpp Source File

MIDI.cpp

00001 #include "MIDI.h"
00002 
00003 char sysexData[128];
00004 
00005 void getMIDIMessage()
00006 {
00007     unsigned char st = midis.getc();
00008     switch(st >> 4) {
00009         case 0x8:
00010             midiNoteOff(st & 0xf, midis.getc(), midis.getc());
00011             break;
00012         case 0x9:
00013             midiNoteOn(st & 0xf, midis.getc(), midis.getc());
00014             break;
00015         case 0xa:
00016             midiPolyphonicKeyPressure(st & 0xf, midis.getc(), midis.getc());
00017             break;
00018         case 0xb:
00019             char b2 = midis.getc();
00020             if (b2 >= 120) {
00021                 midiChannelMode(st & 0xf, b2, midis.getc());
00022             } else {
00023                 midiControlChange(st & 0xf, b2, midis.getc());
00024             }
00025             break;
00026         case 0xc:
00027             midiProgramChange(st & 0xf, midis.getc());
00028             break;
00029         case 0xd:
00030             midiChannelPressure(st & 0xf, midis.getc());
00031             break;
00032         case 0xe:
00033             char LSB = midis.getc();
00034             char MSB = midis.getc();
00035             midiPitchBend(st & 0xf, ((LSB << 7) | (MSB << 7)) + 8192);
00036             break;
00037         case 0xf:
00038             int t2 = st & 0xf;
00039             if (t2 <= 7) {
00040                 getMIDISystemCommonMessage(t2);
00041             } else {
00042                 midiSystemRealtimeMessage(st);
00043             }
00044             break;
00045     }
00046 }
00047 
00048 void getMIDISystemCommonMessage(char t2)
00049 {
00050     switch(t2) {
00051         case 0:
00052             //もう面倒臭いから128byteのバッファに適当に放り込んでおこう
00053             sysexData[0] = 0xf0;
00054             int i = 1;
00055             char d = 0;
00056             do {
00057                 d = midis.getc();
00058                 sysexData[i]=d;
00059                 i++;
00060             } while(d != 0xf7);
00061 
00062             break;
00063         case 1:
00064             midis.getc();
00065             break;
00066         case 2:
00067             midis.getc();
00068             midis.getc();
00069             break;
00070         case 3:
00071             midis.getc();
00072             break;
00073         case 4:
00074             break;
00075         case 5:
00076             break;
00077         case 6:
00078             break;
00079         case 7:
00080             //どうしろと
00081             break;
00082     }
00083 }
00084 
00085 void midiSystemRealtimeMessage(char mes)
00086 {
00087 
00088 }
00089 
00090 
00091 void midiNoteOn(char ch, char note, char vel)
00092 {
00093     if (vel==0) {
00094         globalrelease((ch<<8)|note);
00095     } else {
00096         globalattack((ch<<8)|note,vel);
00097     }
00098 }
00099 
00100 void midiNoteOff(char ch, char note, char vel)
00101 {
00102     globalrelease((ch<<8)|note);
00103 }
00104 
00105 void midiPolyphonicKeyPressure(char ch, char note, char vel)
00106 {
00107 
00108 }
00109 
00110 void midiControlChange(char ch, char ctrl, char data)
00111 {
00112 
00113 }
00114 
00115 void midiChannelMode(char ch, char ctrl, char data)
00116 {
00117 
00118 }
00119 
00120 void midiProgramChange(char ch, char prg)
00121 {
00122 
00123 }
00124 
00125 void midiChannelPressure(char ch, char pres)
00126 {
00127 
00128 }
00129 
00130 void midiPitchBend(char ch, short pb)
00131 {
00132 
00133 }
00134 
00135 void midiSystemExclusiveMessage()
00136 {
00137 
00138 }