p igmon
/
uGen4x
PCM Digital Synthesizer
midi_work.cpp@0:ad6637c36dc7, 2016-09-02 (annotated)
- Committer:
- p_igmon
- Date:
- Fri Sep 02 13:24:16 2016 +0000
- Revision:
- 0:ad6637c36dc7
for Micro Gen4 Synthesizer
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
p_igmon | 0:ad6637c36dc7 | 1 | #include "synthesizer.h" |
p_igmon | 0:ad6637c36dc7 | 2 | |
p_igmon | 0:ad6637c36dc7 | 3 | #define MIDI_IDLE 0 |
p_igmon | 0:ad6637c36dc7 | 4 | #define MIDI_NOTEON 1 |
p_igmon | 0:ad6637c36dc7 | 5 | #define MIDI_NOTEOFF 2 |
p_igmon | 0:ad6637c36dc7 | 6 | #define MIDI_VELOCITY 3 |
p_igmon | 0:ad6637c36dc7 | 7 | #define MIDI_VELOCITY0 4 |
p_igmon | 0:ad6637c36dc7 | 8 | #define MIDI_PGMCHG 5 |
p_igmon | 0:ad6637c36dc7 | 9 | #define MIDI_CONTCHG 6 |
p_igmon | 0:ad6637c36dc7 | 10 | #define MIDI_VOLH 7 |
p_igmon | 0:ad6637c36dc7 | 11 | #define MIDI_VOLL 8 |
p_igmon | 0:ad6637c36dc7 | 12 | #define MIDI_PORH 9 |
p_igmon | 0:ad6637c36dc7 | 13 | #define MIDI_PORL 10 |
p_igmon | 0:ad6637c36dc7 | 14 | #define MIDI_PORD 24 |
p_igmon | 0:ad6637c36dc7 | 15 | #define MIDI_LFO1H 11 |
p_igmon | 0:ad6637c36dc7 | 16 | #define MIDI_LFO1L 12 |
p_igmon | 0:ad6637c36dc7 | 17 | #define MIDI_NOTECHG 13 |
p_igmon | 0:ad6637c36dc7 | 18 | #define MIDI_OTHER 14 |
p_igmon | 0:ad6637c36dc7 | 19 | #define MIDI_PORSW 15 |
p_igmon | 0:ad6637c36dc7 | 20 | #define MIDI_SETMVOL 16 |
p_igmon | 0:ad6637c36dc7 | 21 | #define MIDI_INCMVOL 17 |
p_igmon | 0:ad6637c36dc7 | 22 | #define MIDI_DECMVOL 18 |
p_igmon | 0:ad6637c36dc7 | 23 | #define MIDI_INCMVOL2 19 |
p_igmon | 0:ad6637c36dc7 | 24 | #define MIDI_DECMVOL2 20 |
p_igmon | 0:ad6637c36dc7 | 25 | #define MIDI_ATTACKTIME 21 |
p_igmon | 0:ad6637c36dc7 | 26 | #define MIDI_RELEASETIME 22 |
p_igmon | 0:ad6637c36dc7 | 27 | #define MIDI_DECAYTIME 23 |
p_igmon | 0:ad6637c36dc7 | 28 | #define MIDI_BUFSIZE 256 |
p_igmon | 0:ad6637c36dc7 | 29 | |
p_igmon | 0:ad6637c36dc7 | 30 | extern DigitalOut myled; |
p_igmon | 0:ad6637c36dc7 | 31 | |
p_igmon | 0:ad6637c36dc7 | 32 | volatile U8 midi_com; |
p_igmon | 0:ad6637c36dc7 | 33 | volatile U8 midi_ch; |
p_igmon | 0:ad6637c36dc7 | 34 | volatile U8 notenum; |
p_igmon | 0:ad6637c36dc7 | 35 | volatile U8 *midi_rdptr; |
p_igmon | 0:ad6637c36dc7 | 36 | volatile U8 *midi_wrptr; |
p_igmon | 0:ad6637c36dc7 | 37 | volatile U16 md_voltemp; |
p_igmon | 0:ad6637c36dc7 | 38 | volatile U16 md_lfo1depth; |
p_igmon | 0:ad6637c36dc7 | 39 | volatile S16 md_portemp; |
p_igmon | 0:ad6637c36dc7 | 40 | volatile U8 midi_receivebuf[MIDI_BUFSIZE]; |
p_igmon | 0:ad6637c36dc7 | 41 | |
p_igmon | 0:ad6637c36dc7 | 42 | extern int portament; |
p_igmon | 0:ad6637c36dc7 | 43 | extern GENERATOR *pgen; |
p_igmon | 0:ad6637c36dc7 | 44 | extern GENERATOR *gen;// ProgramChangeによるテンポラリに変更する。 |
p_igmon | 0:ad6637c36dc7 | 45 | extern GENERATOR_TEMP *pgen_temp;// = &dgen_temp[0]; |
p_igmon | 0:ad6637c36dc7 | 46 | |
p_igmon | 0:ad6637c36dc7 | 47 | extern volatile U8 midi_base_ch; |
p_igmon | 0:ad6637c36dc7 | 48 | extern volatile U8 midi_note_ch; |
p_igmon | 0:ad6637c36dc7 | 49 | extern volatile U8 midi_prog_ch; |
p_igmon | 0:ad6637c36dc7 | 50 | extern volatile S16 interpovalue; |
p_igmon | 0:ad6637c36dc7 | 51 | extern volatile S16 MasterVolume; |
p_igmon | 0:ad6637c36dc7 | 52 | extern volatile S16 mvoldiv; |
p_igmon | 0:ad6637c36dc7 | 53 | |
p_igmon | 0:ad6637c36dc7 | 54 | void init_midi(void){ |
p_igmon | 0:ad6637c36dc7 | 55 | midi_com = MIDI_IDLE; |
p_igmon | 0:ad6637c36dc7 | 56 | midi_wrptr = midi_rdptr = &midi_receivebuf[0]; |
p_igmon | 0:ad6637c36dc7 | 57 | } |
p_igmon | 0:ad6637c36dc7 | 58 | |
p_igmon | 0:ad6637c36dc7 | 59 | void midi_work(void){ |
p_igmon | 0:ad6637c36dc7 | 60 | GENERATOR *gena;// 110824 |
p_igmon | 0:ad6637c36dc7 | 61 | GENERATOR_TEMP *gena_temp;// 110824 |
p_igmon | 0:ad6637c36dc7 | 62 | U8 i ,data; |
p_igmon | 0:ad6637c36dc7 | 63 | U16 temp16; |
p_igmon | 0:ad6637c36dc7 | 64 | |
p_igmon | 0:ad6637c36dc7 | 65 | while(midi_rdptr != midi_wrptr){ |
p_igmon | 0:ad6637c36dc7 | 66 | /* レシーブバッファが空なら、リターン */ |
p_igmon | 0:ad6637c36dc7 | 67 | data = *midi_rdptr; |
p_igmon | 0:ad6637c36dc7 | 68 | if (++midi_rdptr >&midi_receivebuf[255]) midi_rdptr = &midi_receivebuf[0];// |
p_igmon | 0:ad6637c36dc7 | 69 | if (data > 0xf7){ |
p_igmon | 0:ad6637c36dc7 | 70 | /* リアルタイムメッセージ */ |
p_igmon | 0:ad6637c36dc7 | 71 | if (data == 0xff){// 110824 システムリセット |
p_igmon | 0:ad6637c36dc7 | 72 | //prog_enable = 0; |
p_igmon | 0:ad6637c36dc7 | 73 | MasterVolume = 127 <<8 ;// s7e8f |
p_igmon | 0:ad6637c36dc7 | 74 | mvoldiv = 0; |
p_igmon | 0:ad6637c36dc7 | 75 | portament = 0; |
p_igmon | 0:ad6637c36dc7 | 76 | // gena = pgen; |
p_igmon | 0:ad6637c36dc7 | 77 | gena_temp = pgen_temp; |
p_igmon | 0:ad6637c36dc7 | 78 | for(i=0;i<GENMAX;i++){ |
p_igmon | 0:ad6637c36dc7 | 79 | gena_temp->status = GEN_IDLE; |
p_igmon | 0:ad6637c36dc7 | 80 | // ge_tempna->midich =255; |
p_igmon | 0:ad6637c36dc7 | 81 | gena_temp->voltemp = 0; |
p_igmon | 0:ad6637c36dc7 | 82 | // gena++; |
p_igmon | 0:ad6637c36dc7 | 83 | gena_temp++; |
p_igmon | 0:ad6637c36dc7 | 84 | } |
p_igmon | 0:ad6637c36dc7 | 85 | } |
p_igmon | 0:ad6637c36dc7 | 86 | }else if (data <0x80){ |
p_igmon | 0:ad6637c36dc7 | 87 | /* 何かしらの値 */ |
p_igmon | 0:ad6637c36dc7 | 88 | switch (midi_com){ // 有効になっているMIDIコマンドを適用する。 |
p_igmon | 0:ad6637c36dc7 | 89 | case MIDI_NOTEON: |
p_igmon | 0:ad6637c36dc7 | 90 | notenum = data; |
p_igmon | 0:ad6637c36dc7 | 91 | midi_com = MIDI_VELOCITY; |
p_igmon | 0:ad6637c36dc7 | 92 | break; |
p_igmon | 0:ad6637c36dc7 | 93 | case MIDI_VELOCITY: |
p_igmon | 0:ad6637c36dc7 | 94 | midi_com = MIDI_NOTEON; |
p_igmon | 0:ad6637c36dc7 | 95 | if (midi_ch == midi_base_ch) { |
p_igmon | 0:ad6637c36dc7 | 96 | if(data >0){ |
p_igmon | 0:ad6637c36dc7 | 97 | /* ノートONの処理 */ |
p_igmon | 0:ad6637c36dc7 | 98 | noteon(notenum ,data); |
p_igmon | 0:ad6637c36dc7 | 99 | }else{ |
p_igmon | 0:ad6637c36dc7 | 100 | /* ノートOFFの処理 */ |
p_igmon | 0:ad6637c36dc7 | 101 | noteoff(notenum ,0); |
p_igmon | 0:ad6637c36dc7 | 102 | } |
p_igmon | 0:ad6637c36dc7 | 103 | } |
p_igmon | 0:ad6637c36dc7 | 104 | break; |
p_igmon | 0:ad6637c36dc7 | 105 | case MIDI_NOTEOFF: |
p_igmon | 0:ad6637c36dc7 | 106 | notenum = data; |
p_igmon | 0:ad6637c36dc7 | 107 | midi_com = MIDI_VELOCITY0; |
p_igmon | 0:ad6637c36dc7 | 108 | break; |
p_igmon | 0:ad6637c36dc7 | 109 | case MIDI_VELOCITY0: |
p_igmon | 0:ad6637c36dc7 | 110 | midi_com = MIDI_NOTEON; |
p_igmon | 0:ad6637c36dc7 | 111 | if (midi_ch == midi_base_ch){ |
p_igmon | 0:ad6637c36dc7 | 112 | /* ノートOFFの処理 */ |
p_igmon | 0:ad6637c36dc7 | 113 | noteoff(notenum ,0); |
p_igmon | 0:ad6637c36dc7 | 114 | } |
p_igmon | 0:ad6637c36dc7 | 115 | break; |
p_igmon | 0:ad6637c36dc7 | 116 | case MIDI_PGMCHG: |
p_igmon | 0:ad6637c36dc7 | 117 | midi_com = MIDI_PGMCHG; |
p_igmon | 0:ad6637c36dc7 | 118 | if (midi_ch == midi_base_ch){ //やはり 戻す 131230 |
p_igmon | 0:ad6637c36dc7 | 119 | // if (midi_ch == midi_prog_ch){ |
p_igmon | 0:ad6637c36dc7 | 120 | /* 音色変更の処理 */ |
p_igmon | 0:ad6637c36dc7 | 121 | pgmchg(data); |
p_igmon | 0:ad6637c36dc7 | 122 | } |
p_igmon | 0:ad6637c36dc7 | 123 | break; |
p_igmon | 0:ad6637c36dc7 | 124 | case MIDI_CONTCHG: |
p_igmon | 0:ad6637c36dc7 | 125 | switch(data){ |
p_igmon | 0:ad6637c36dc7 | 126 | case 90:// 121125 |
p_igmon | 0:ad6637c36dc7 | 127 | // if ((midi_ch == midi_base_ch)||(midi_ch == midi_base_ch2)) midi_com = MIDI_NOTECHG; |
p_igmon | 0:ad6637c36dc7 | 128 | if (midi_ch == midi_base_ch) midi_com = MIDI_NOTECHG; |
p_igmon | 0:ad6637c36dc7 | 129 | break; |
p_igmon | 0:ad6637c36dc7 | 130 | case 1: |
p_igmon | 0:ad6637c36dc7 | 131 | midi_com = MIDI_LFO1H; |
p_igmon | 0:ad6637c36dc7 | 132 | break; |
p_igmon | 0:ad6637c36dc7 | 133 | case 1+32: |
p_igmon | 0:ad6637c36dc7 | 134 | midi_com = MIDI_LFO1L; |
p_igmon | 0:ad6637c36dc7 | 135 | break; |
p_igmon | 0:ad6637c36dc7 | 136 | case 5: |
p_igmon | 0:ad6637c36dc7 | 137 | midi_com = MIDI_PORH; |
p_igmon | 0:ad6637c36dc7 | 138 | break; |
p_igmon | 0:ad6637c36dc7 | 139 | case 5+32: |
p_igmon | 0:ad6637c36dc7 | 140 | midi_com = MIDI_PORL; |
p_igmon | 0:ad6637c36dc7 | 141 | break; |
p_igmon | 0:ad6637c36dc7 | 142 | case 38: |
p_igmon | 0:ad6637c36dc7 | 143 | midi_com = MIDI_PORD; |
p_igmon | 0:ad6637c36dc7 | 144 | break; |
p_igmon | 0:ad6637c36dc7 | 145 | case 65: |
p_igmon | 0:ad6637c36dc7 | 146 | if (midi_ch == midi_base_ch) midi_com = MIDI_PORSW; |
p_igmon | 0:ad6637c36dc7 | 147 | break; |
p_igmon | 0:ad6637c36dc7 | 148 | case 70: |
p_igmon | 0:ad6637c36dc7 | 149 | if (midi_ch == midi_base_ch) midi_com = MIDI_SETMVOL; |
p_igmon | 0:ad6637c36dc7 | 150 | break; |
p_igmon | 0:ad6637c36dc7 | 151 | case 71: |
p_igmon | 0:ad6637c36dc7 | 152 | if (midi_ch == midi_base_ch) midi_com = MIDI_INCMVOL; |
p_igmon | 0:ad6637c36dc7 | 153 | break; |
p_igmon | 0:ad6637c36dc7 | 154 | case 72: |
p_igmon | 0:ad6637c36dc7 | 155 | if (midi_ch == midi_base_ch) midi_com = MIDI_DECMVOL; |
p_igmon | 0:ad6637c36dc7 | 156 | break; |
p_igmon | 0:ad6637c36dc7 | 157 | case 73: |
p_igmon | 0:ad6637c36dc7 | 158 | if (midi_ch == midi_base_ch) midi_com = MIDI_INCMVOL2; |
p_igmon | 0:ad6637c36dc7 | 159 | break; |
p_igmon | 0:ad6637c36dc7 | 160 | case 74: |
p_igmon | 0:ad6637c36dc7 | 161 | if (midi_ch == midi_base_ch) midi_com = MIDI_DECMVOL2; |
p_igmon | 0:ad6637c36dc7 | 162 | break; |
p_igmon | 0:ad6637c36dc7 | 163 | case 50: |
p_igmon | 0:ad6637c36dc7 | 164 | if (midi_ch == midi_base_ch) midi_com = MIDI_ATTACKTIME; |
p_igmon | 0:ad6637c36dc7 | 165 | break; |
p_igmon | 0:ad6637c36dc7 | 166 | case 51: |
p_igmon | 0:ad6637c36dc7 | 167 | if (midi_ch == midi_base_ch) midi_com = MIDI_RELEASETIME; |
p_igmon | 0:ad6637c36dc7 | 168 | break; |
p_igmon | 0:ad6637c36dc7 | 169 | case 52: |
p_igmon | 0:ad6637c36dc7 | 170 | if (midi_ch == midi_base_ch) midi_com = MIDI_DECAYTIME; |
p_igmon | 0:ad6637c36dc7 | 171 | break; |
p_igmon | 0:ad6637c36dc7 | 172 | |
p_igmon | 0:ad6637c36dc7 | 173 | case 7: |
p_igmon | 0:ad6637c36dc7 | 174 | midi_com = MIDI_VOLH; |
p_igmon | 0:ad6637c36dc7 | 175 | break; |
p_igmon | 0:ad6637c36dc7 | 176 | case 7+32: |
p_igmon | 0:ad6637c36dc7 | 177 | midi_com = MIDI_VOLL; |
p_igmon | 0:ad6637c36dc7 | 178 | break; |
p_igmon | 0:ad6637c36dc7 | 179 | default: |
p_igmon | 0:ad6637c36dc7 | 180 | midi_com = MIDI_OTHER; |
p_igmon | 0:ad6637c36dc7 | 181 | break; |
p_igmon | 0:ad6637c36dc7 | 182 | } |
p_igmon | 0:ad6637c36dc7 | 183 | break; |
p_igmon | 0:ad6637c36dc7 | 184 | case MIDI_NOTECHG: |
p_igmon | 0:ad6637c36dc7 | 185 | midi_note_ch = data & 0x0f; |
p_igmon | 0:ad6637c36dc7 | 186 | break; |
p_igmon | 0:ad6637c36dc7 | 187 | case MIDI_LFO1H: |
p_igmon | 0:ad6637c36dc7 | 188 | md_lfo1depth = data<<7; |
p_igmon | 0:ad6637c36dc7 | 189 | break; |
p_igmon | 0:ad6637c36dc7 | 190 | case MIDI_LFO1L: |
p_igmon | 0:ad6637c36dc7 | 191 | md_lfo1depth |= data; |
p_igmon | 0:ad6637c36dc7 | 192 | gena = gen; |
p_igmon | 0:ad6637c36dc7 | 193 | for(i=0;i<PRGGENMAX;i++){ |
p_igmon | 0:ad6637c36dc7 | 194 | gena->lfo1depth = md_lfo1depth; |
p_igmon | 0:ad6637c36dc7 | 195 | gena++; |
p_igmon | 0:ad6637c36dc7 | 196 | } |
p_igmon | 0:ad6637c36dc7 | 197 | break; |
p_igmon | 0:ad6637c36dc7 | 198 | case MIDI_PORSW: |
p_igmon | 0:ad6637c36dc7 | 199 | if(data < 64){ |
p_igmon | 0:ad6637c36dc7 | 200 | portament = 0; |
p_igmon | 0:ad6637c36dc7 | 201 | }else{ |
p_igmon | 0:ad6637c36dc7 | 202 | portament = -1; |
p_igmon | 0:ad6637c36dc7 | 203 | } |
p_igmon | 0:ad6637c36dc7 | 204 | break; |
p_igmon | 0:ad6637c36dc7 | 205 | case MIDI_SETMVOL: |
p_igmon | 0:ad6637c36dc7 | 206 | mvoldiv = 0; |
p_igmon | 0:ad6637c36dc7 | 207 | MasterVolume = data<<8; |
p_igmon | 0:ad6637c36dc7 | 208 | break; |
p_igmon | 0:ad6637c36dc7 | 209 | case MIDI_INCMVOL: |
p_igmon | 0:ad6637c36dc7 | 210 | MasterVolume += (data<<16); |
p_igmon | 0:ad6637c36dc7 | 211 | if(MasterVolume >(127<<8)) MasterVolume = (127<<8); |
p_igmon | 0:ad6637c36dc7 | 212 | break; |
p_igmon | 0:ad6637c36dc7 | 213 | case MIDI_DECMVOL: |
p_igmon | 0:ad6637c36dc7 | 214 | MasterVolume -= (data<<16); |
p_igmon | 0:ad6637c36dc7 | 215 | if(MasterVolume < 0) MasterVolume = 0; |
p_igmon | 0:ad6637c36dc7 | 216 | break; |
p_igmon | 0:ad6637c36dc7 | 217 | case MIDI_INCMVOL2: |
p_igmon | 0:ad6637c36dc7 | 218 | mvoldiv = data; |
p_igmon | 0:ad6637c36dc7 | 219 | break; |
p_igmon | 0:ad6637c36dc7 | 220 | case MIDI_DECMVOL2: |
p_igmon | 0:ad6637c36dc7 | 221 | mvoldiv = data * (-1); |
p_igmon | 0:ad6637c36dc7 | 222 | break; |
p_igmon | 0:ad6637c36dc7 | 223 | |
p_igmon | 0:ad6637c36dc7 | 224 | case MIDI_ATTACKTIME: |
p_igmon | 0:ad6637c36dc7 | 225 | // gena = pgen;// 実体のほうで |
p_igmon | 0:ad6637c36dc7 | 226 | // for(i=0;i<GENMAX;i++){ |
p_igmon | 0:ad6637c36dc7 | 227 | gena = gen; |
p_igmon | 0:ad6637c36dc7 | 228 | for(i=0;i<PRGGENMAX;i++){ |
p_igmon | 0:ad6637c36dc7 | 229 | gena->attacktime = (1<<data); |
p_igmon | 0:ad6637c36dc7 | 230 | gena++; |
p_igmon | 0:ad6637c36dc7 | 231 | } |
p_igmon | 0:ad6637c36dc7 | 232 | break; |
p_igmon | 0:ad6637c36dc7 | 233 | |
p_igmon | 0:ad6637c36dc7 | 234 | case MIDI_RELEASETIME: |
p_igmon | 0:ad6637c36dc7 | 235 | temp16 = (528 + data) * 100; |
p_igmon | 0:ad6637c36dc7 | 236 | // gena = pgen;// 実体のほうで |
p_igmon | 0:ad6637c36dc7 | 237 | // for(i=0;i<GENMAX;i++){ |
p_igmon | 0:ad6637c36dc7 | 238 | gena = gen; |
p_igmon | 0:ad6637c36dc7 | 239 | for(i=0;i<PRGGENMAX;i++){ |
p_igmon | 0:ad6637c36dc7 | 240 | gena->releasetime = temp16; |
p_igmon | 0:ad6637c36dc7 | 241 | gena++; |
p_igmon | 0:ad6637c36dc7 | 242 | } |
p_igmon | 0:ad6637c36dc7 | 243 | break; |
p_igmon | 0:ad6637c36dc7 | 244 | |
p_igmon | 0:ad6637c36dc7 | 245 | case MIDI_DECAYTIME: |
p_igmon | 0:ad6637c36dc7 | 246 | // gena = pgen;// 実体のほうで |
p_igmon | 0:ad6637c36dc7 | 247 | // for(i=0;i<GENMAX;i++){ |
p_igmon | 0:ad6637c36dc7 | 248 | gena = gen; |
p_igmon | 0:ad6637c36dc7 | 249 | for(i=0;i<PRGGENMAX;i++){ |
p_igmon | 0:ad6637c36dc7 | 250 | gena->decaytime = (1<<data); |
p_igmon | 0:ad6637c36dc7 | 251 | gena++; |
p_igmon | 0:ad6637c36dc7 | 252 | } |
p_igmon | 0:ad6637c36dc7 | 253 | break; |
p_igmon | 0:ad6637c36dc7 | 254 | |
p_igmon | 0:ad6637c36dc7 | 255 | case MIDI_PORH: |
p_igmon | 0:ad6637c36dc7 | 256 | md_portemp = data<<9; |
p_igmon | 0:ad6637c36dc7 | 257 | break; |
p_igmon | 0:ad6637c36dc7 | 258 | case MIDI_PORL: |
p_igmon | 0:ad6637c36dc7 | 259 | // md_portemp |= data<<1; |
p_igmon | 0:ad6637c36dc7 | 260 | gena = pgen; |
p_igmon | 0:ad6637c36dc7 | 261 | // gena_temp = pgen_temp; |
p_igmon | 0:ad6637c36dc7 | 262 | for(i=0;i<GENMAX;i++){ |
p_igmon | 0:ad6637c36dc7 | 263 | gena_temp->dpf = (gena_temp->df >>14)* data; |
p_igmon | 0:ad6637c36dc7 | 264 | // gena++; |
p_igmon | 0:ad6637c36dc7 | 265 | gena_temp++; |
p_igmon | 0:ad6637c36dc7 | 266 | } |
p_igmon | 0:ad6637c36dc7 | 267 | break; |
p_igmon | 0:ad6637c36dc7 | 268 | case MIDI_PORD:// Portament Down |
p_igmon | 0:ad6637c36dc7 | 269 | // gena = pgen; |
p_igmon | 0:ad6637c36dc7 | 270 | gena_temp = pgen_temp; |
p_igmon | 0:ad6637c36dc7 | 271 | for(i=0;i<GENMAX;i++){ |
p_igmon | 0:ad6637c36dc7 | 272 | gena_temp->dpf = (gena_temp->df >>14)* data; |
p_igmon | 0:ad6637c36dc7 | 273 | gena_temp->dpf *= -1; |
p_igmon | 0:ad6637c36dc7 | 274 | // gena++; |
p_igmon | 0:ad6637c36dc7 | 275 | gena_temp++; |
p_igmon | 0:ad6637c36dc7 | 276 | } |
p_igmon | 0:ad6637c36dc7 | 277 | break; |
p_igmon | 0:ad6637c36dc7 | 278 | case MIDI_VOLH: |
p_igmon | 0:ad6637c36dc7 | 279 | md_voltemp = data<<9; |
p_igmon | 0:ad6637c36dc7 | 280 | break; |
p_igmon | 0:ad6637c36dc7 | 281 | case MIDI_VOLL: |
p_igmon | 0:ad6637c36dc7 | 282 | md_voltemp |= data<<1; |
p_igmon | 0:ad6637c36dc7 | 283 | gena = gen; |
p_igmon | 0:ad6637c36dc7 | 284 | for(i=0;i<PRGGENMAX;i++){ |
p_igmon | 0:ad6637c36dc7 | 285 | gena->lfo1depth = md_lfo1depth; |
p_igmon | 0:ad6637c36dc7 | 286 | gena++; |
p_igmon | 0:ad6637c36dc7 | 287 | } |
p_igmon | 0:ad6637c36dc7 | 288 | break; |
p_igmon | 0:ad6637c36dc7 | 289 | case MIDI_OTHER: |
p_igmon | 0:ad6637c36dc7 | 290 | default: |
p_igmon | 0:ad6637c36dc7 | 291 | break; |
p_igmon | 0:ad6637c36dc7 | 292 | } |
p_igmon | 0:ad6637c36dc7 | 293 | }else{ |
p_igmon | 0:ad6637c36dc7 | 294 | switch (data & 0xf0){ |
p_igmon | 0:ad6637c36dc7 | 295 | case 0x80:// NOTEOFF コマンド |
p_igmon | 0:ad6637c36dc7 | 296 | midi_com = MIDI_NOTEOFF; |
p_igmon | 0:ad6637c36dc7 | 297 | midi_ch = data & 0x0f; |
p_igmon | 0:ad6637c36dc7 | 298 | break; |
p_igmon | 0:ad6637c36dc7 | 299 | case 0x90:// NOTEON コマンド |
p_igmon | 0:ad6637c36dc7 | 300 | midi_com = MIDI_NOTEON; |
p_igmon | 0:ad6637c36dc7 | 301 | midi_ch = data & 0x0f; |
p_igmon | 0:ad6637c36dc7 | 302 | break; |
p_igmon | 0:ad6637c36dc7 | 303 | case 0xc0:// プログラムチェンジコマンド |
p_igmon | 0:ad6637c36dc7 | 304 | midi_com = MIDI_PGMCHG; |
p_igmon | 0:ad6637c36dc7 | 305 | midi_ch = data & 0x0f; |
p_igmon | 0:ad6637c36dc7 | 306 | break; |
p_igmon | 0:ad6637c36dc7 | 307 | case 0xb0:// コントロールチェンジコマンド |
p_igmon | 0:ad6637c36dc7 | 308 | midi_com = MIDI_CONTCHG; |
p_igmon | 0:ad6637c36dc7 | 309 | midi_ch = data & 0x0f; |
p_igmon | 0:ad6637c36dc7 | 310 | break; |
p_igmon | 0:ad6637c36dc7 | 311 | case 0xa0:// ポリフォニックキープレッシャーコマンド |
p_igmon | 0:ad6637c36dc7 | 312 | case 0xd0:// チャンネルプレッシャーコマンド |
p_igmon | 0:ad6637c36dc7 | 313 | case 0xe0:// ピッチベンドコマンド |
p_igmon | 0:ad6637c36dc7 | 314 | default:// エクスクルーシブメッセージ |
p_igmon | 0:ad6637c36dc7 | 315 | midi_com = MIDI_OTHER; |
p_igmon | 0:ad6637c36dc7 | 316 | break; |
p_igmon | 0:ad6637c36dc7 | 317 | } |
p_igmon | 0:ad6637c36dc7 | 318 | } |
p_igmon | 0:ad6637c36dc7 | 319 | } |
p_igmon | 0:ad6637c36dc7 | 320 | } |
p_igmon | 0:ad6637c36dc7 | 321 | |
p_igmon | 0:ad6637c36dc7 | 322 |