Nucleo F401REでFM音源を実装するやつ の実装途中で32ポリ音源にしたやつ 外部DACとオペアンプを利用 現在はMCP4922とNJM2737
Dependencies: AOTTrigon I2CEEPROM MCP4922 mbed
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 }
Generated on Sat Jul 16 2022 07:34:51 by 1.7.2