p igmon
/
uGen4x
PCM Digital Synthesizer
lcd_sw.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 | U8 PresetVoiceNum; |
p_igmon | 0:ad6637c36dc7 | 4 | U8 MidiChannel; |
p_igmon | 0:ad6637c36dc7 | 5 | S8 MasterTune; |
p_igmon | 0:ad6637c36dc7 | 6 | int rch_pol; |
p_igmon | 0:ad6637c36dc7 | 7 | |
p_igmon | 0:ad6637c36dc7 | 8 | extern S16 limit; |
p_igmon | 0:ad6637c36dc7 | 9 | |
p_igmon | 0:ad6637c36dc7 | 10 | extern S16 MasterVolume; |
p_igmon | 0:ad6637c36dc7 | 11 | U8 midi_base_ch; |
p_igmon | 0:ad6637c36dc7 | 12 | extern volatile int KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 13 | |
p_igmon | 0:ad6637c36dc7 | 14 | char lcd_string[20]; |
p_igmon | 0:ad6637c36dc7 | 15 | U8 selectsw = 0; |
p_igmon | 0:ad6637c36dc7 | 16 | extern int menu_index; |
p_igmon | 0:ad6637c36dc7 | 17 | char str[5]; |
p_igmon | 0:ad6637c36dc7 | 18 | char wave_type[5][5]={"Sine","Saw1","Saw2","Tri ","Squr"}; |
p_igmon | 0:ad6637c36dc7 | 19 | |
p_igmon | 0:ad6637c36dc7 | 20 | extern volatile U8 key; |
p_igmon | 0:ad6637c36dc7 | 21 | extern KeyState_TypeDef keystate; |
p_igmon | 0:ad6637c36dc7 | 22 | |
p_igmon | 0:ad6637c36dc7 | 23 | extern GENERATOR sgen[]; |
p_igmon | 0:ad6637c36dc7 | 24 | extern GENERATOR dgen[]; |
p_igmon | 0:ad6637c36dc7 | 25 | extern GENERATOR_TEMP dgen_temp[]; |
p_igmon | 0:ad6637c36dc7 | 26 | extern GENERATOR *gen ;// = &sgen[(PresetVoiceNum - 1)*PRGGENMAX] set by Menu PresetVoice |
p_igmon | 0:ad6637c36dc7 | 27 | extern GENERATOR *pgen;// = &dgen[0]; |
p_igmon | 0:ad6637c36dc7 | 28 | extern GENERATOR_TEMP *pgen_temp;// = &dgen_temp[0]; |
p_igmon | 0:ad6637c36dc7 | 29 | |
p_igmon | 0:ad6637c36dc7 | 30 | extern PresetVoiceDef PresetVoice[]; |
p_igmon | 0:ad6637c36dc7 | 31 | extern WaveDef Wave[]; |
p_igmon | 0:ad6637c36dc7 | 32 | |
p_igmon | 0:ad6637c36dc7 | 33 | MenuListDef MenuList[] ={ |
p_igmon | 0:ad6637c36dc7 | 34 | {"Parameter" ,param ,0 ,0}, // index 0 |
p_igmon | 0:ad6637c36dc7 | 35 | {"RchOut Polarity" ,rch_polarity ,-1 ,1}, |
p_igmon | 0:ad6637c36dc7 | 36 | {"Voice " ,presetvoice ,1 ,64}, |
p_igmon | 0:ad6637c36dc7 | 37 | {"Midi Channel" ,midichannel ,1 ,16}, |
p_igmon | 0:ad6637c36dc7 | 38 | {"MasterTune " ,mastertune ,-128 ,127}, |
p_igmon | 0:ad6637c36dc7 | 39 | // {"DCFF Q FE QE" ,dcfcontrol ,0 ,0}, |
p_igmon | 0:ad6637c36dc7 | 40 | {"Generator Switch" ,gen_sw ,0 ,0}, |
p_igmon | 0:ad6637c36dc7 | 41 | {"Gen WaveNumber" ,gen_wave ,1 ,100}, |
p_igmon | 0:ad6637c36dc7 | 42 | {"Gen NoteShift" ,gen_notebias ,-128 ,127}, |
p_igmon | 0:ad6637c36dc7 | 43 | {"Gen OutputLevel" ,gen_outlevel ,0 ,127}, |
p_igmon | 0:ad6637c36dc7 | 44 | {"Gen Detune" ,gen_detune ,-512 ,511}, |
p_igmon | 0:ad6637c36dc7 | 45 | {"Gen AttackTime" ,gen_attacktime ,1 ,9999}, |
p_igmon | 0:ad6637c36dc7 | 46 | {"Gen DecayTime" ,gen_decaytime ,1 ,9999}, |
p_igmon | 0:ad6637c36dc7 | 47 | {"Gen SustainLevel" ,gen_sustainlevel ,0 ,100}, |
p_igmon | 0:ad6637c36dc7 | 48 | {"Gen ReleaseTime" ,gen_relesetime ,0 ,21}, // 13 |
p_igmon | 0:ad6637c36dc7 | 49 | |
p_igmon | 0:ad6637c36dc7 | 50 | {"Gen LFO1 WavForm" ,gen_lfo1_wavetype ,0 ,4}, // 14 Sine Saw1 Saw2 Tri Rect |
p_igmon | 0:ad6637c36dc7 | 51 | {"Gen LFO1 Speed" ,gen_lfo1_speed ,0 ,127}, |
p_igmon | 0:ad6637c36dc7 | 52 | {"Gen LFO1 Depth" ,gen_lfo1_depth ,0 ,999}, |
p_igmon | 0:ad6637c36dc7 | 53 | {"Gen LFO1 Delay" ,gen_lfo1_delaytime ,0 ,3000}, |
p_igmon | 0:ad6637c36dc7 | 54 | |
p_igmon | 0:ad6637c36dc7 | 55 | {"Gen LFO2 Speed" ,gen_lfo2_speed ,0 ,127}, |
p_igmon | 0:ad6637c36dc7 | 56 | {"Gen LFO2 Depth" ,gen_lfo2_depth ,0 ,127}, // 19 |
p_igmon | 0:ad6637c36dc7 | 57 | {"Gen LFO2 Delay" ,gen_lfo2_delaytime ,0 ,3000}, // 20 |
p_igmon | 0:ad6637c36dc7 | 58 | {"Gen Limit" ,gen_limit ,0 ,127} // 21 |
p_igmon | 0:ad6637c36dc7 | 59 | }; |
p_igmon | 0:ad6637c36dc7 | 60 | |
p_igmon | 0:ad6637c36dc7 | 61 | void lcd_print(char *str){ |
p_igmon | 0:ad6637c36dc7 | 62 | lcd.printf(str); |
p_igmon | 0:ad6637c36dc7 | 63 | } |
p_igmon | 0:ad6637c36dc7 | 64 | |
p_igmon | 0:ad6637c36dc7 | 65 | void lcd_print1(char *str){ |
p_igmon | 0:ad6637c36dc7 | 66 | lcd.cls(); |
p_igmon | 0:ad6637c36dc7 | 67 | lcd.printf(str); |
p_igmon | 0:ad6637c36dc7 | 68 | } |
p_igmon | 0:ad6637c36dc7 | 69 | |
p_igmon | 0:ad6637c36dc7 | 70 | void lcd_print2(char *str){ |
p_igmon | 0:ad6637c36dc7 | 71 | lcd.locate(0,1); |
p_igmon | 0:ad6637c36dc7 | 72 | lcd.printf(str); |
p_igmon | 0:ad6637c36dc7 | 73 | } |
p_igmon | 0:ad6637c36dc7 | 74 | |
p_igmon | 0:ad6637c36dc7 | 75 | /* Title "μGen4" */ |
p_igmon | 0:ad6637c36dc7 | 76 | void lcd_print_title(void){ |
p_igmon | 0:ad6637c36dc7 | 77 | lcd.setCGRAM(1<<3,&cgfont[0]); |
p_igmon | 0:ad6637c36dc7 | 78 | lcd_string[0] = 1;// 'μ' |
p_igmon | 0:ad6637c36dc7 | 79 | lcd_string[1] = 0;// NULL |
p_igmon | 0:ad6637c36dc7 | 80 | strcat ((char *)lcd_string,"Gen4 "); |
p_igmon | 0:ad6637c36dc7 | 81 | |
p_igmon | 0:ad6637c36dc7 | 82 | // strcpy ((char *)lcd_string,"uGen4 "); |
p_igmon | 0:ad6637c36dc7 | 83 | strcat ((char *)lcd_string,FWVERSION); |
p_igmon | 0:ad6637c36dc7 | 84 | lcd_print1((char *)lcd_string); |
p_igmon | 0:ad6637c36dc7 | 85 | strcpy((char *)lcd_string," Synthesizer"); |
p_igmon | 0:ad6637c36dc7 | 86 | lcd_print2((char *)lcd_string); |
p_igmon | 0:ad6637c36dc7 | 87 | |
p_igmon | 0:ad6637c36dc7 | 88 | } |
p_igmon | 0:ad6637c36dc7 | 89 | |
p_igmon | 0:ad6637c36dc7 | 90 | void gen_limit(void){ |
p_igmon | 0:ad6637c36dc7 | 91 | int value = limit; |
p_igmon | 0:ad6637c36dc7 | 92 | if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 93 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 94 | if(value < MenuList[menu_index].min) value = MenuList[menu_index].min; |
p_igmon | 0:ad6637c36dc7 | 95 | }else if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 96 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 97 | if(value > MenuList[menu_index].max) value = MenuList[menu_index].max; |
p_igmon | 0:ad6637c36dc7 | 98 | |
p_igmon | 0:ad6637c36dc7 | 99 | } |
p_igmon | 0:ad6637c36dc7 | 100 | limit = value; |
p_igmon | 0:ad6637c36dc7 | 101 | val2str4(limit); |
p_igmon | 0:ad6637c36dc7 | 102 | lcd_print(&str[0]); |
p_igmon | 0:ad6637c36dc7 | 103 | } |
p_igmon | 0:ad6637c36dc7 | 104 | |
p_igmon | 0:ad6637c36dc7 | 105 | void presetvoice(void){ |
p_igmon | 0:ad6637c36dc7 | 106 | int value = PresetVoiceNum; |
p_igmon | 0:ad6637c36dc7 | 107 | if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 108 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 109 | if(value < MenuList[menu_index].min) value = MenuList[menu_index].min; |
p_igmon | 0:ad6637c36dc7 | 110 | }else if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 111 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 112 | if(value > MenuList[menu_index].max) value = MenuList[menu_index].max; |
p_igmon | 0:ad6637c36dc7 | 113 | |
p_igmon | 0:ad6637c36dc7 | 114 | } |
p_igmon | 0:ad6637c36dc7 | 115 | lcd_print1("Voice "); |
p_igmon | 0:ad6637c36dc7 | 116 | PresetVoiceNum = value; |
p_igmon | 0:ad6637c36dc7 | 117 | gen = (GENERATOR *)&sgen[(PresetVoiceNum - 1)*PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 118 | val2str4(PresetVoiceNum); |
p_igmon | 0:ad6637c36dc7 | 119 | lcd_print(&str[0]); |
p_igmon | 0:ad6637c36dc7 | 120 | lcd_print2(PresetVoice[PresetVoiceNum-1].name); |
p_igmon | 0:ad6637c36dc7 | 121 | } |
p_igmon | 0:ad6637c36dc7 | 122 | |
p_igmon | 0:ad6637c36dc7 | 123 | void param(void){ |
p_igmon | 0:ad6637c36dc7 | 124 | lcd_print2("SaveLoad PC"); |
p_igmon | 0:ad6637c36dc7 | 125 | if(SELECTSW1){ |
p_igmon | 0:ad6637c36dc7 | 126 | save2from(); |
p_igmon | 0:ad6637c36dc7 | 127 | lcd_print2("Saved Parameter "); |
p_igmon | 0:ad6637c36dc7 | 128 | }else if(SELECTSW2){ |
p_igmon | 0:ad6637c36dc7 | 129 | load2from(); |
p_igmon | 0:ad6637c36dc7 | 130 | lcd_print2("Loaded Parameter"); |
p_igmon | 0:ad6637c36dc7 | 131 | }else if(SELECTSW3){ |
p_igmon | 0:ad6637c36dc7 | 132 | lcd_print2("DumppingToSerial"); |
p_igmon | 0:ad6637c36dc7 | 133 | dump2serial(); |
p_igmon | 0:ad6637c36dc7 | 134 | lcd_print2("Complete "); |
p_igmon | 0:ad6637c36dc7 | 135 | } |
p_igmon | 0:ad6637c36dc7 | 136 | } |
p_igmon | 0:ad6637c36dc7 | 137 | |
p_igmon | 0:ad6637c36dc7 | 138 | void mastertune(void){ |
p_igmon | 0:ad6637c36dc7 | 139 | int value = MasterTune; |
p_igmon | 0:ad6637c36dc7 | 140 | if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 141 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 142 | if(value < MenuList[menu_index].min) value = MenuList[menu_index].min; |
p_igmon | 0:ad6637c36dc7 | 143 | }else if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 144 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 145 | if(value > MenuList[menu_index].max) value = MenuList[menu_index].max; |
p_igmon | 0:ad6637c36dc7 | 146 | |
p_igmon | 0:ad6637c36dc7 | 147 | } |
p_igmon | 0:ad6637c36dc7 | 148 | MasterTune = value; |
p_igmon | 0:ad6637c36dc7 | 149 | val2str4(MasterTune); |
p_igmon | 0:ad6637c36dc7 | 150 | lcd_print(&str[0]); |
p_igmon | 0:ad6637c36dc7 | 151 | } |
p_igmon | 0:ad6637c36dc7 | 152 | |
p_igmon | 0:ad6637c36dc7 | 153 | void rch_polarity(void){ |
p_igmon | 0:ad6637c36dc7 | 154 | int value = rch_pol; |
p_igmon | 0:ad6637c36dc7 | 155 | if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 156 | value = -1; |
p_igmon | 0:ad6637c36dc7 | 157 | }else if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 158 | value = 1; |
p_igmon | 0:ad6637c36dc7 | 159 | } |
p_igmon | 0:ad6637c36dc7 | 160 | rch_pol = value; |
p_igmon | 0:ad6637c36dc7 | 161 | |
p_igmon | 0:ad6637c36dc7 | 162 | if (rch_pol > 0){ |
p_igmon | 0:ad6637c36dc7 | 163 | strcpy(lcd_string,"Same as LchOut"); |
p_igmon | 0:ad6637c36dc7 | 164 | }else{ |
p_igmon | 0:ad6637c36dc7 | 165 | strcpy(lcd_string,"Invert"); |
p_igmon | 0:ad6637c36dc7 | 166 | } |
p_igmon | 0:ad6637c36dc7 | 167 | lcd_print1("RchOut Polarity"); |
p_igmon | 0:ad6637c36dc7 | 168 | lcd_print2(lcd_string); |
p_igmon | 0:ad6637c36dc7 | 169 | } |
p_igmon | 0:ad6637c36dc7 | 170 | |
p_igmon | 0:ad6637c36dc7 | 171 | void dcfcontrol(void){ |
p_igmon | 0:ad6637c36dc7 | 172 | /* DCFF Q FE QE */ |
p_igmon | 0:ad6637c36dc7 | 173 | int value = PresetVoice[PresetVoiceNum - 1].dcf_freq; |
p_igmon | 0:ad6637c36dc7 | 174 | if (selectsw & 1){ |
p_igmon | 0:ad6637c36dc7 | 175 | if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 176 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 177 | if(value > 30) value = 30; |
p_igmon | 0:ad6637c36dc7 | 178 | }else if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 179 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 180 | if(value < 0) value = 0; |
p_igmon | 0:ad6637c36dc7 | 181 | } |
p_igmon | 0:ad6637c36dc7 | 182 | PresetVoice[PresetVoiceNum - 1].dcf_freq = value; |
p_igmon | 0:ad6637c36dc7 | 183 | } |
p_igmon | 0:ad6637c36dc7 | 184 | val2str4(value); |
p_igmon | 0:ad6637c36dc7 | 185 | strcat(lcd_string, &str[0]); |
p_igmon | 0:ad6637c36dc7 | 186 | |
p_igmon | 0:ad6637c36dc7 | 187 | value = PresetVoice[PresetVoiceNum - 1].dcf_q; |
p_igmon | 0:ad6637c36dc7 | 188 | if (selectsw & 2){ |
p_igmon | 0:ad6637c36dc7 | 189 | if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 190 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 191 | if(value > 10) value = 10; |
p_igmon | 0:ad6637c36dc7 | 192 | }else if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 193 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 194 | if(value < 0) value = 0; |
p_igmon | 0:ad6637c36dc7 | 195 | } |
p_igmon | 0:ad6637c36dc7 | 196 | PresetVoice[PresetVoiceNum - 1].dcf_q = value; |
p_igmon | 0:ad6637c36dc7 | 197 | } |
p_igmon | 0:ad6637c36dc7 | 198 | val2str4(value); |
p_igmon | 0:ad6637c36dc7 | 199 | strcat(lcd_string, &str[0]); |
p_igmon | 0:ad6637c36dc7 | 200 | |
p_igmon | 0:ad6637c36dc7 | 201 | value = PresetVoice[PresetVoiceNum - 1].dcf_freqsence; |
p_igmon | 0:ad6637c36dc7 | 202 | if (selectsw & 4){ |
p_igmon | 0:ad6637c36dc7 | 203 | if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 204 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 205 | if(value > 10) value = 10; |
p_igmon | 0:ad6637c36dc7 | 206 | }else if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 207 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 208 | if(value < 0) value = 0; |
p_igmon | 0:ad6637c36dc7 | 209 | } |
p_igmon | 0:ad6637c36dc7 | 210 | PresetVoice[PresetVoiceNum - 1].dcf_freqsence = value; |
p_igmon | 0:ad6637c36dc7 | 211 | } |
p_igmon | 0:ad6637c36dc7 | 212 | val2str4(value); |
p_igmon | 0:ad6637c36dc7 | 213 | strcat(lcd_string, &str[0]); |
p_igmon | 0:ad6637c36dc7 | 214 | |
p_igmon | 0:ad6637c36dc7 | 215 | |
p_igmon | 0:ad6637c36dc7 | 216 | value = PresetVoice[PresetVoiceNum - 1].dcf_qsence; |
p_igmon | 0:ad6637c36dc7 | 217 | if (selectsw & 8){ |
p_igmon | 0:ad6637c36dc7 | 218 | if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 219 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 220 | if(value > 10) value = 10; |
p_igmon | 0:ad6637c36dc7 | 221 | }else if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 222 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 223 | if(value < 0) value = 0; |
p_igmon | 0:ad6637c36dc7 | 224 | } |
p_igmon | 0:ad6637c36dc7 | 225 | PresetVoice[PresetVoiceNum - 1].dcf_qsence = value; |
p_igmon | 0:ad6637c36dc7 | 226 | } |
p_igmon | 0:ad6637c36dc7 | 227 | val2str4(value); |
p_igmon | 0:ad6637c36dc7 | 228 | strcat(lcd_string, &str[0]); |
p_igmon | 0:ad6637c36dc7 | 229 | |
p_igmon | 0:ad6637c36dc7 | 230 | lcd_print2(lcd_string); |
p_igmon | 0:ad6637c36dc7 | 231 | } |
p_igmon | 0:ad6637c36dc7 | 232 | |
p_igmon | 0:ad6637c36dc7 | 233 | void gen_sw(void){ |
p_igmon | 0:ad6637c36dc7 | 234 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 235 | U8 bitsw = 1; |
p_igmon | 0:ad6637c36dc7 | 236 | int n = PRGGENMAX; |
p_igmon | 0:ad6637c36dc7 | 237 | while(n--){ |
p_igmon | 0:ad6637c36dc7 | 238 | if(key & bitsw){ |
p_igmon | 0:ad6637c36dc7 | 239 | gena->sw ^= 1; |
p_igmon | 0:ad6637c36dc7 | 240 | gena->sw &= 1; |
p_igmon | 0:ad6637c36dc7 | 241 | } |
p_igmon | 0:ad6637c36dc7 | 242 | if(gena->sw){ |
p_igmon | 0:ad6637c36dc7 | 243 | strcat(lcd_string," On "); |
p_igmon | 0:ad6637c36dc7 | 244 | }else{ |
p_igmon | 0:ad6637c36dc7 | 245 | strcat(lcd_string," Off"); |
p_igmon | 0:ad6637c36dc7 | 246 | } |
p_igmon | 0:ad6637c36dc7 | 247 | bitsw <<= 1; |
p_igmon | 0:ad6637c36dc7 | 248 | gena++; |
p_igmon | 0:ad6637c36dc7 | 249 | } |
p_igmon | 0:ad6637c36dc7 | 250 | lcd_print2(lcd_string); |
p_igmon | 0:ad6637c36dc7 | 251 | } |
p_igmon | 0:ad6637c36dc7 | 252 | |
p_igmon | 0:ad6637c36dc7 | 253 | void midichannel(void){ |
p_igmon | 0:ad6637c36dc7 | 254 | int value = MidiChannel; |
p_igmon | 0:ad6637c36dc7 | 255 | if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 256 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 257 | if(value < MenuList[menu_index].min) value = MenuList[menu_index].min; |
p_igmon | 0:ad6637c36dc7 | 258 | }else if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 259 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 260 | if(value > MenuList[menu_index].max) value = MenuList[menu_index].max; |
p_igmon | 0:ad6637c36dc7 | 261 | |
p_igmon | 0:ad6637c36dc7 | 262 | } |
p_igmon | 0:ad6637c36dc7 | 263 | MidiChannel = value; |
p_igmon | 0:ad6637c36dc7 | 264 | midi_base_ch = value -1; |
p_igmon | 0:ad6637c36dc7 | 265 | val2str4(MidiChannel); |
p_igmon | 0:ad6637c36dc7 | 266 | lcd_print(&str[0]); |
p_igmon | 0:ad6637c36dc7 | 267 | } |
p_igmon | 0:ad6637c36dc7 | 268 | |
p_igmon | 0:ad6637c36dc7 | 269 | void gen_outlevel(void){ |
p_igmon | 0:ad6637c36dc7 | 270 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 271 | int n = PRGGENMAX; |
p_igmon | 0:ad6637c36dc7 | 272 | U8 bitsw = 1; |
p_igmon | 0:ad6637c36dc7 | 273 | while(n--){ |
p_igmon | 0:ad6637c36dc7 | 274 | int value = (gena->volume>>8); |
p_igmon | 0:ad6637c36dc7 | 275 | if (gena->sw){ |
p_igmon | 0:ad6637c36dc7 | 276 | if(selectsw & bitsw){ |
p_igmon | 0:ad6637c36dc7 | 277 | if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 278 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 279 | if(value > MenuList[menu_index].max) value = MenuList[menu_index].max; |
p_igmon | 0:ad6637c36dc7 | 280 | }else if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 281 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 282 | if(value < MenuList[menu_index].min) value = MenuList[menu_index].min; |
p_igmon | 0:ad6637c36dc7 | 283 | } |
p_igmon | 0:ad6637c36dc7 | 284 | gena->volume = (value<<8); |
p_igmon | 0:ad6637c36dc7 | 285 | } |
p_igmon | 0:ad6637c36dc7 | 286 | val2str4((gena->volume)>>8); |
p_igmon | 0:ad6637c36dc7 | 287 | strcat(lcd_string, &str[0]); |
p_igmon | 0:ad6637c36dc7 | 288 | }else{ |
p_igmon | 0:ad6637c36dc7 | 289 | strcat(lcd_string," Off"); |
p_igmon | 0:ad6637c36dc7 | 290 | } |
p_igmon | 0:ad6637c36dc7 | 291 | bitsw <<= 1; |
p_igmon | 0:ad6637c36dc7 | 292 | gena++; |
p_igmon | 0:ad6637c36dc7 | 293 | } |
p_igmon | 0:ad6637c36dc7 | 294 | |
p_igmon | 0:ad6637c36dc7 | 295 | lcd_print2(lcd_string); |
p_igmon | 0:ad6637c36dc7 | 296 | } |
p_igmon | 0:ad6637c36dc7 | 297 | |
p_igmon | 0:ad6637c36dc7 | 298 | void gen_lfo1_wavetype(void){ |
p_igmon | 0:ad6637c36dc7 | 299 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 300 | int n = PRGGENMAX; |
p_igmon | 0:ad6637c36dc7 | 301 | U8 bitsw = 1; |
p_igmon | 0:ad6637c36dc7 | 302 | while(n--){ |
p_igmon | 0:ad6637c36dc7 | 303 | int value = gena->lfo1type; |
p_igmon | 0:ad6637c36dc7 | 304 | if (gena->sw){ |
p_igmon | 0:ad6637c36dc7 | 305 | if(selectsw & bitsw){ |
p_igmon | 0:ad6637c36dc7 | 306 | if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 307 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 308 | if(value < MenuList[menu_index].min) value = MenuList[menu_index].min; |
p_igmon | 0:ad6637c36dc7 | 309 | }else if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 310 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 311 | if(value > MenuList[menu_index].max) value = MenuList[menu_index].max; |
p_igmon | 0:ad6637c36dc7 | 312 | } |
p_igmon | 0:ad6637c36dc7 | 313 | } |
p_igmon | 0:ad6637c36dc7 | 314 | gena->lfo1type = value; |
p_igmon | 0:ad6637c36dc7 | 315 | strcat(lcd_string, &wave_type[value][0]); |
p_igmon | 0:ad6637c36dc7 | 316 | }else{ |
p_igmon | 0:ad6637c36dc7 | 317 | strcat(lcd_string," Off"); |
p_igmon | 0:ad6637c36dc7 | 318 | } |
p_igmon | 0:ad6637c36dc7 | 319 | gena++; |
p_igmon | 0:ad6637c36dc7 | 320 | bitsw <<= 1; |
p_igmon | 0:ad6637c36dc7 | 321 | } |
p_igmon | 0:ad6637c36dc7 | 322 | lcd_print2(lcd_string); |
p_igmon | 0:ad6637c36dc7 | 323 | } |
p_igmon | 0:ad6637c36dc7 | 324 | |
p_igmon | 0:ad6637c36dc7 | 325 | |
p_igmon | 0:ad6637c36dc7 | 326 | U8 gen_function_type_byte(GENERATOR *gena_value){ |
p_igmon | 0:ad6637c36dc7 | 327 | int value ,value1; |
p_igmon | 0:ad6637c36dc7 | 328 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 329 | U32 temp = (U32)gena_value - (U32)gena; |
p_igmon | 0:ad6637c36dc7 | 330 | int n = PRGGENMAX; |
p_igmon | 0:ad6637c36dc7 | 331 | U8 bitsw = 1; |
p_igmon | 0:ad6637c36dc7 | 332 | while(n--){ |
p_igmon | 0:ad6637c36dc7 | 333 | value = *(U8 *)( (U32)gena + temp ); |
p_igmon | 0:ad6637c36dc7 | 334 | if(gena->sw){ |
p_igmon | 0:ad6637c36dc7 | 335 | if (selectsw & bitsw){ |
p_igmon | 0:ad6637c36dc7 | 336 | if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 337 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 338 | if(value > MenuList[menu_index].max) value = MenuList[menu_index].max; |
p_igmon | 0:ad6637c36dc7 | 339 | }else if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 340 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 341 | if(value < MenuList[menu_index].min) value = MenuList[menu_index].min; |
p_igmon | 0:ad6637c36dc7 | 342 | } |
p_igmon | 0:ad6637c36dc7 | 343 | *(U8 *)( (U32)gena + temp )= value; |
p_igmon | 0:ad6637c36dc7 | 344 | value1 = value; |
p_igmon | 0:ad6637c36dc7 | 345 | } |
p_igmon | 0:ad6637c36dc7 | 346 | val2str4(value); |
p_igmon | 0:ad6637c36dc7 | 347 | strcat(lcd_string, &str[0]); |
p_igmon | 0:ad6637c36dc7 | 348 | }else{ |
p_igmon | 0:ad6637c36dc7 | 349 | strcat(lcd_string," Off"); |
p_igmon | 0:ad6637c36dc7 | 350 | } |
p_igmon | 0:ad6637c36dc7 | 351 | gena++; |
p_igmon | 0:ad6637c36dc7 | 352 | gena_value++; |
p_igmon | 0:ad6637c36dc7 | 353 | bitsw <<= 1; |
p_igmon | 0:ad6637c36dc7 | 354 | } |
p_igmon | 0:ad6637c36dc7 | 355 | |
p_igmon | 0:ad6637c36dc7 | 356 | lcd_print2(lcd_string); |
p_igmon | 0:ad6637c36dc7 | 357 | return (U8)value1; |
p_igmon | 0:ad6637c36dc7 | 358 | } |
p_igmon | 0:ad6637c36dc7 | 359 | |
p_igmon | 0:ad6637c36dc7 | 360 | void gen_function_type_word(GENERATOR *gena_value){ |
p_igmon | 0:ad6637c36dc7 | 361 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 362 | U32 temp = (U32)gena_value - (U32)gena; |
p_igmon | 0:ad6637c36dc7 | 363 | int n = PRGGENMAX; |
p_igmon | 0:ad6637c36dc7 | 364 | U8 bitsw = 1; |
p_igmon | 0:ad6637c36dc7 | 365 | while(n--){ |
p_igmon | 0:ad6637c36dc7 | 366 | int value = *(U16 *)( (U32)gena + temp ); |
p_igmon | 0:ad6637c36dc7 | 367 | if(gena->sw){ |
p_igmon | 0:ad6637c36dc7 | 368 | if (selectsw & bitsw){ |
p_igmon | 0:ad6637c36dc7 | 369 | if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 370 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 371 | if(value > MenuList[menu_index].max) value = MenuList[menu_index].max; |
p_igmon | 0:ad6637c36dc7 | 372 | }else if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 373 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 374 | if(value < MenuList[menu_index].min) value = MenuList[menu_index].min; |
p_igmon | 0:ad6637c36dc7 | 375 | } |
p_igmon | 0:ad6637c36dc7 | 376 | *(U16 *)( (U32)gena + temp )= value; |
p_igmon | 0:ad6637c36dc7 | 377 | } |
p_igmon | 0:ad6637c36dc7 | 378 | val2str4(value); |
p_igmon | 0:ad6637c36dc7 | 379 | strcat(lcd_string, &str[0]); |
p_igmon | 0:ad6637c36dc7 | 380 | }else{ |
p_igmon | 0:ad6637c36dc7 | 381 | strcat(lcd_string," Off"); |
p_igmon | 0:ad6637c36dc7 | 382 | } |
p_igmon | 0:ad6637c36dc7 | 383 | gena++; |
p_igmon | 0:ad6637c36dc7 | 384 | gena_value++; |
p_igmon | 0:ad6637c36dc7 | 385 | bitsw <<= 1; |
p_igmon | 0:ad6637c36dc7 | 386 | } |
p_igmon | 0:ad6637c36dc7 | 387 | |
p_igmon | 0:ad6637c36dc7 | 388 | lcd_print2(lcd_string); |
p_igmon | 0:ad6637c36dc7 | 389 | } |
p_igmon | 0:ad6637c36dc7 | 390 | |
p_igmon | 0:ad6637c36dc7 | 391 | void gen_function_type_sbyte(GENERATOR *gena_value){ |
p_igmon | 0:ad6637c36dc7 | 392 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 393 | U32 temp = (U32)gena_value - (U32)gena; |
p_igmon | 0:ad6637c36dc7 | 394 | int n = PRGGENMAX; |
p_igmon | 0:ad6637c36dc7 | 395 | U8 bitsw = 1; |
p_igmon | 0:ad6637c36dc7 | 396 | while(n--){ |
p_igmon | 0:ad6637c36dc7 | 397 | int value = *(S8 *)( (U32)gena + temp ); |
p_igmon | 0:ad6637c36dc7 | 398 | if(gena->sw){ |
p_igmon | 0:ad6637c36dc7 | 399 | if (selectsw & bitsw){ |
p_igmon | 0:ad6637c36dc7 | 400 | if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 401 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 402 | if(value > MenuList[menu_index].max) value = MenuList[menu_index].max; |
p_igmon | 0:ad6637c36dc7 | 403 | }else if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 404 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 405 | if(value < MenuList[menu_index].min) value = MenuList[menu_index].min; |
p_igmon | 0:ad6637c36dc7 | 406 | } |
p_igmon | 0:ad6637c36dc7 | 407 | *(S8 *)( (U32)gena + temp )= value; |
p_igmon | 0:ad6637c36dc7 | 408 | |
p_igmon | 0:ad6637c36dc7 | 409 | } |
p_igmon | 0:ad6637c36dc7 | 410 | val2str4(value); |
p_igmon | 0:ad6637c36dc7 | 411 | strcat(lcd_string, &str[0]); |
p_igmon | 0:ad6637c36dc7 | 412 | }else{ |
p_igmon | 0:ad6637c36dc7 | 413 | strcat(lcd_string," Off"); |
p_igmon | 0:ad6637c36dc7 | 414 | } |
p_igmon | 0:ad6637c36dc7 | 415 | gena++; |
p_igmon | 0:ad6637c36dc7 | 416 | gena_value++; |
p_igmon | 0:ad6637c36dc7 | 417 | bitsw <<= 1; |
p_igmon | 0:ad6637c36dc7 | 418 | } |
p_igmon | 0:ad6637c36dc7 | 419 | |
p_igmon | 0:ad6637c36dc7 | 420 | lcd_print2(lcd_string); |
p_igmon | 0:ad6637c36dc7 | 421 | |
p_igmon | 0:ad6637c36dc7 | 422 | } |
p_igmon | 0:ad6637c36dc7 | 423 | void gen_function_type_sword(GENERATOR *gena_value){ |
p_igmon | 0:ad6637c36dc7 | 424 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 425 | U32 temp = (U32)gena_value - (U32)gena; |
p_igmon | 0:ad6637c36dc7 | 426 | int n = PRGGENMAX; |
p_igmon | 0:ad6637c36dc7 | 427 | U8 bitsw = 1; |
p_igmon | 0:ad6637c36dc7 | 428 | while(n--){ |
p_igmon | 0:ad6637c36dc7 | 429 | int value = *(S16 *)( (U32)gena + temp ); |
p_igmon | 0:ad6637c36dc7 | 430 | if(gena->sw){ |
p_igmon | 0:ad6637c36dc7 | 431 | if (selectsw & bitsw){ |
p_igmon | 0:ad6637c36dc7 | 432 | if(key & 0x20){ |
p_igmon | 0:ad6637c36dc7 | 433 | value += KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 434 | if(value > MenuList[menu_index].max) value = MenuList[menu_index].max; |
p_igmon | 0:ad6637c36dc7 | 435 | }else if(key & 0x10){ |
p_igmon | 0:ad6637c36dc7 | 436 | value -= KeyValDiv; |
p_igmon | 0:ad6637c36dc7 | 437 | if(value < MenuList[menu_index].min) value = MenuList[menu_index].min; |
p_igmon | 0:ad6637c36dc7 | 438 | } |
p_igmon | 0:ad6637c36dc7 | 439 | *(S16 *)( (U32)gena + temp )= value; |
p_igmon | 0:ad6637c36dc7 | 440 | |
p_igmon | 0:ad6637c36dc7 | 441 | } |
p_igmon | 0:ad6637c36dc7 | 442 | val2str4(value); |
p_igmon | 0:ad6637c36dc7 | 443 | strcat(lcd_string, &str[0]); |
p_igmon | 0:ad6637c36dc7 | 444 | }else{ |
p_igmon | 0:ad6637c36dc7 | 445 | strcat(lcd_string," Off"); |
p_igmon | 0:ad6637c36dc7 | 446 | } |
p_igmon | 0:ad6637c36dc7 | 447 | gena++; |
p_igmon | 0:ad6637c36dc7 | 448 | gena_value++; |
p_igmon | 0:ad6637c36dc7 | 449 | bitsw <<= 1; |
p_igmon | 0:ad6637c36dc7 | 450 | } |
p_igmon | 0:ad6637c36dc7 | 451 | |
p_igmon | 0:ad6637c36dc7 | 452 | lcd_print2(lcd_string); |
p_igmon | 0:ad6637c36dc7 | 453 | |
p_igmon | 0:ad6637c36dc7 | 454 | } |
p_igmon | 0:ad6637c36dc7 | 455 | |
p_igmon | 0:ad6637c36dc7 | 456 | |
p_igmon | 0:ad6637c36dc7 | 457 | void gen_attacktime(void){ |
p_igmon | 0:ad6637c36dc7 | 458 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 459 | GENERATOR *gena_value = (GENERATOR *)&gena->attacktime; |
p_igmon | 0:ad6637c36dc7 | 460 | gen_function_type_word(gena_value); |
p_igmon | 0:ad6637c36dc7 | 461 | } |
p_igmon | 0:ad6637c36dc7 | 462 | |
p_igmon | 0:ad6637c36dc7 | 463 | void gen_wave (void){ |
p_igmon | 0:ad6637c36dc7 | 464 | // pc.printf("PresetVoiceNum = %d\r\n",PresetVoiceNum); |
p_igmon | 0:ad6637c36dc7 | 465 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 466 | GENERATOR *gena_value = (GENERATOR *)&gena->wave_num; |
p_igmon | 0:ad6637c36dc7 | 467 | U8 value = gen_function_type_byte(gena_value); |
p_igmon | 0:ad6637c36dc7 | 468 | if(key & 0x30){// when push Value+- key |
p_igmon | 0:ad6637c36dc7 | 469 | lcd_print2(" "); |
p_igmon | 0:ad6637c36dc7 | 470 | lcd_print2(Wave[value - 1].name); |
p_igmon | 0:ad6637c36dc7 | 471 | // keystate = KEY_GEN_WAVE1; |
p_igmon | 0:ad6637c36dc7 | 472 | // TimerCount10mS= 100;// 1000mS Wait |
p_igmon | 0:ad6637c36dc7 | 473 | } |
p_igmon | 0:ad6637c36dc7 | 474 | } |
p_igmon | 0:ad6637c36dc7 | 475 | |
p_igmon | 0:ad6637c36dc7 | 476 | void gen_notebias(void){ |
p_igmon | 0:ad6637c36dc7 | 477 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 478 | GENERATOR *gena_value = (GENERATOR *)&gena->notebias; |
p_igmon | 0:ad6637c36dc7 | 479 | gen_function_type_sbyte(gena_value); |
p_igmon | 0:ad6637c36dc7 | 480 | } |
p_igmon | 0:ad6637c36dc7 | 481 | |
p_igmon | 0:ad6637c36dc7 | 482 | void gen_detune(void){ |
p_igmon | 0:ad6637c36dc7 | 483 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 484 | GENERATOR *gena_value = (GENERATOR *)&gena->detune; |
p_igmon | 0:ad6637c36dc7 | 485 | gen_function_type_sword(gena_value); |
p_igmon | 0:ad6637c36dc7 | 486 | } |
p_igmon | 0:ad6637c36dc7 | 487 | |
p_igmon | 0:ad6637c36dc7 | 488 | void gen_decaytime(void){ |
p_igmon | 0:ad6637c36dc7 | 489 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 490 | GENERATOR *gena_value = (GENERATOR *)&gena->decaytime; |
p_igmon | 0:ad6637c36dc7 | 491 | gen_function_type_word(gena_value); |
p_igmon | 0:ad6637c36dc7 | 492 | } |
p_igmon | 0:ad6637c36dc7 | 493 | void gen_sustainlevel(void){ |
p_igmon | 0:ad6637c36dc7 | 494 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 495 | GENERATOR *gena_value = (GENERATOR *)&gena->sustainlevel; |
p_igmon | 0:ad6637c36dc7 | 496 | gen_function_type_byte(gena_value); |
p_igmon | 0:ad6637c36dc7 | 497 | } |
p_igmon | 0:ad6637c36dc7 | 498 | void gen_relesetime(void){ |
p_igmon | 0:ad6637c36dc7 | 499 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 500 | GENERATOR *gena_value = (GENERATOR *)&gena->releasetime; |
p_igmon | 0:ad6637c36dc7 | 501 | gen_function_type_word(gena_value); |
p_igmon | 0:ad6637c36dc7 | 502 | } |
p_igmon | 0:ad6637c36dc7 | 503 | |
p_igmon | 0:ad6637c36dc7 | 504 | void gen_lfo1_speed (void){ |
p_igmon | 0:ad6637c36dc7 | 505 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 506 | GENERATOR *gena_value = (GENERATOR *)&gena->lfo1speed; |
p_igmon | 0:ad6637c36dc7 | 507 | gen_function_type_byte(gena_value); |
p_igmon | 0:ad6637c36dc7 | 508 | } |
p_igmon | 0:ad6637c36dc7 | 509 | |
p_igmon | 0:ad6637c36dc7 | 510 | |
p_igmon | 0:ad6637c36dc7 | 511 | void gen_lfo1_depth(void){ |
p_igmon | 0:ad6637c36dc7 | 512 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 513 | GENERATOR *gena_value = (GENERATOR *)&gena->lfo1depth; |
p_igmon | 0:ad6637c36dc7 | 514 | gen_function_type_word(gena_value); |
p_igmon | 0:ad6637c36dc7 | 515 | } |
p_igmon | 0:ad6637c36dc7 | 516 | |
p_igmon | 0:ad6637c36dc7 | 517 | void gen_lfo1_delaytime(void){ |
p_igmon | 0:ad6637c36dc7 | 518 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 519 | GENERATOR *gena_value = (GENERATOR *)&gena->lfo1delaytime; |
p_igmon | 0:ad6637c36dc7 | 520 | gen_function_type_word(gena_value); |
p_igmon | 0:ad6637c36dc7 | 521 | } |
p_igmon | 0:ad6637c36dc7 | 522 | |
p_igmon | 0:ad6637c36dc7 | 523 | void gen_lfo2_delaytime(void){ |
p_igmon | 0:ad6637c36dc7 | 524 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 525 | GENERATOR *gena_value = (GENERATOR *)&gena->lfo2delaytime; |
p_igmon | 0:ad6637c36dc7 | 526 | gen_function_type_word(gena_value); |
p_igmon | 0:ad6637c36dc7 | 527 | } |
p_igmon | 0:ad6637c36dc7 | 528 | |
p_igmon | 0:ad6637c36dc7 | 529 | void gen_lfo2_speed (void){ |
p_igmon | 0:ad6637c36dc7 | 530 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 531 | GENERATOR *gena_value = (GENERATOR *)&gena->lfo2speed; |
p_igmon | 0:ad6637c36dc7 | 532 | gen_function_type_byte(gena_value); |
p_igmon | 0:ad6637c36dc7 | 533 | } |
p_igmon | 0:ad6637c36dc7 | 534 | |
p_igmon | 0:ad6637c36dc7 | 535 | void gen_lfo2_depth(void){ |
p_igmon | 0:ad6637c36dc7 | 536 | GENERATOR *gena = &sgen[(PresetVoiceNum-1) * PRGGENMAX]; |
p_igmon | 0:ad6637c36dc7 | 537 | GENERATOR *gena_value = (GENERATOR *)&gena->lfo2depth; |
p_igmon | 0:ad6637c36dc7 | 538 | gen_function_type_word(gena_value); |
p_igmon | 0:ad6637c36dc7 | 539 | } |
p_igmon | 0:ad6637c36dc7 | 540 | |
p_igmon | 0:ad6637c36dc7 | 541 | char *val2str4(int value){ |
p_igmon | 0:ad6637c36dc7 | 542 | uint8_t n; |
p_igmon | 0:ad6637c36dc7 | 543 | char *c; |
p_igmon | 0:ad6637c36dc7 | 544 | int value_temp = value; |
p_igmon | 0:ad6637c36dc7 | 545 | if (value < 0){ |
p_igmon | 0:ad6637c36dc7 | 546 | str[0] = '-'; |
p_igmon | 0:ad6637c36dc7 | 547 | value_temp *= -1; |
p_igmon | 0:ad6637c36dc7 | 548 | |
p_igmon | 0:ad6637c36dc7 | 549 | n = 0; |
p_igmon | 0:ad6637c36dc7 | 550 | while(value_temp >= 100){ |
p_igmon | 0:ad6637c36dc7 | 551 | value_temp -= 100; |
p_igmon | 0:ad6637c36dc7 | 552 | n++; |
p_igmon | 0:ad6637c36dc7 | 553 | } |
p_igmon | 0:ad6637c36dc7 | 554 | str[1] = 0x30 + n; |
p_igmon | 0:ad6637c36dc7 | 555 | n = 0; |
p_igmon | 0:ad6637c36dc7 | 556 | while(value_temp >= 10){ |
p_igmon | 0:ad6637c36dc7 | 557 | value_temp -= 10; |
p_igmon | 0:ad6637c36dc7 | 558 | n++; |
p_igmon | 0:ad6637c36dc7 | 559 | } |
p_igmon | 0:ad6637c36dc7 | 560 | str[2] = 0x30 + n; |
p_igmon | 0:ad6637c36dc7 | 561 | str[3] = 0x30 + value_temp; |
p_igmon | 0:ad6637c36dc7 | 562 | /* |
p_igmon | 0:ad6637c36dc7 | 563 | if (value_temp >99){ |
p_igmon | 0:ad6637c36dc7 | 564 | str[1] = '1'; |
p_igmon | 0:ad6637c36dc7 | 565 | value_temp -= 100; |
p_igmon | 0:ad6637c36dc7 | 566 | }else{ |
p_igmon | 0:ad6637c36dc7 | 567 | str[1] = '0'; |
p_igmon | 0:ad6637c36dc7 | 568 | } |
p_igmon | 0:ad6637c36dc7 | 569 | n = 0; |
p_igmon | 0:ad6637c36dc7 | 570 | while(value_temp >= 10){ |
p_igmon | 0:ad6637c36dc7 | 571 | value_temp -= 10; |
p_igmon | 0:ad6637c36dc7 | 572 | n++; |
p_igmon | 0:ad6637c36dc7 | 573 | } |
p_igmon | 0:ad6637c36dc7 | 574 | str[2] = 0x30 + n; |
p_igmon | 0:ad6637c36dc7 | 575 | str[3] = 0x30 + value_temp; |
p_igmon | 0:ad6637c36dc7 | 576 | */ |
p_igmon | 0:ad6637c36dc7 | 577 | }else{ |
p_igmon | 0:ad6637c36dc7 | 578 | n = 0; |
p_igmon | 0:ad6637c36dc7 | 579 | while(value_temp >= 1000){ |
p_igmon | 0:ad6637c36dc7 | 580 | value_temp -= 1000; |
p_igmon | 0:ad6637c36dc7 | 581 | n++; |
p_igmon | 0:ad6637c36dc7 | 582 | } |
p_igmon | 0:ad6637c36dc7 | 583 | str[0] = 0x30 + n; |
p_igmon | 0:ad6637c36dc7 | 584 | n = 0; |
p_igmon | 0:ad6637c36dc7 | 585 | while(value_temp >= 100){ |
p_igmon | 0:ad6637c36dc7 | 586 | value_temp -= 100; |
p_igmon | 0:ad6637c36dc7 | 587 | n++; |
p_igmon | 0:ad6637c36dc7 | 588 | } |
p_igmon | 0:ad6637c36dc7 | 589 | str[1] = 0x30 + n; |
p_igmon | 0:ad6637c36dc7 | 590 | n = 0; |
p_igmon | 0:ad6637c36dc7 | 591 | while(value_temp >= 10){ |
p_igmon | 0:ad6637c36dc7 | 592 | value_temp -= 10; |
p_igmon | 0:ad6637c36dc7 | 593 | n++; |
p_igmon | 0:ad6637c36dc7 | 594 | } |
p_igmon | 0:ad6637c36dc7 | 595 | str[2] = 0x30 + n; |
p_igmon | 0:ad6637c36dc7 | 596 | str[3] = 0x30 + value_temp; |
p_igmon | 0:ad6637c36dc7 | 597 | } |
p_igmon | 0:ad6637c36dc7 | 598 | |
p_igmon | 0:ad6637c36dc7 | 599 | n = 3; |
p_igmon | 0:ad6637c36dc7 | 600 | c = &str[0]; |
p_igmon | 0:ad6637c36dc7 | 601 | while(n-- >0){ |
p_igmon | 0:ad6637c36dc7 | 602 | if ((*c != '0')&&(*c != '-')) break; |
p_igmon | 0:ad6637c36dc7 | 603 | if (*c != '-') *c = ' '; |
p_igmon | 0:ad6637c36dc7 | 604 | c++; |
p_igmon | 0:ad6637c36dc7 | 605 | } |
p_igmon | 0:ad6637c36dc7 | 606 | if (str[0] == '-'){ |
p_igmon | 0:ad6637c36dc7 | 607 | if (str[2] == ' '){// - n -> -n |
p_igmon | 0:ad6637c36dc7 | 608 | str[0] = str[1] = ' '; |
p_igmon | 0:ad6637c36dc7 | 609 | str[2] = '-'; |
p_igmon | 0:ad6637c36dc7 | 610 | }else if (str[1] == ' '){// - mn -> -mn |
p_igmon | 0:ad6637c36dc7 | 611 | str[0] = ' '; |
p_igmon | 0:ad6637c36dc7 | 612 | str[1] = '-'; |
p_igmon | 0:ad6637c36dc7 | 613 | } |
p_igmon | 0:ad6637c36dc7 | 614 | } |
p_igmon | 0:ad6637c36dc7 | 615 | str[4] = 0; |
p_igmon | 0:ad6637c36dc7 | 616 | return &str[4]; |
p_igmon | 0:ad6637c36dc7 | 617 | } |
p_igmon | 0:ad6637c36dc7 | 618 | |
p_igmon | 0:ad6637c36dc7 | 619 |