Guitar Effector using "mbed application board".

Dependencies:   C12832 mbed

Guitar Effector using "mbed application board".

/media/uploads/vaifreak/dscn0187.jpg

/media/uploads/vaifreak/schematic_00.jpg

/media/uploads/vaifreak/schematic_01.jpg

/media/uploads/vaifreak/schematic_02.jpg

Committer:
vaifreak
Date:
Fri Sep 18 16:57:32 2015 +0000
Revision:
3:1666e2d5bd46
Parent:
2:25adc1277b3e
Child:
4:dbd755f9fca6
implement LPF, HPF

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vaifreak 2:25adc1277b3e 1 //=============================================================================
vaifreak 2:25adc1277b3e 2 // @author vaifreak
vaifreak 2:25adc1277b3e 3 // @brief menu display & effect parameter Control.
vaifreak 2:25adc1277b3e 4 //=============================================================================
vaifreak 2:25adc1277b3e 5 #pragma once
vaifreak 2:25adc1277b3e 6
vaifreak 2:25adc1277b3e 7 #include "Filter.h"
vaifreak 2:25adc1277b3e 8 #include "Drive.h"
vaifreak 2:25adc1277b3e 9 #include "Delay.h"
vaifreak 2:25adc1277b3e 10 #include "MyInputUtil.h"
vaifreak 2:25adc1277b3e 11
vaifreak 3:1666e2d5bd46 12 #include "C12832.h"
vaifreak 3:1666e2d5bd46 13
vaifreak 3:1666e2d5bd46 14
vaifreak 2:25adc1277b3e 15 //---------------------------------------------
vaifreak 2:25adc1277b3e 16 //
vaifreak 2:25adc1277b3e 17 //---------------------------------------------
vaifreak 2:25adc1277b3e 18 class Menu
vaifreak 2:25adc1277b3e 19 {
vaifreak 2:25adc1277b3e 20 public:
vaifreak 3:1666e2d5bd46 21 float inputGain;
vaifreak 2:25adc1277b3e 22 float masterVolume;
vaifreak 2:25adc1277b3e 23
vaifreak 2:25adc1277b3e 24 private:
vaifreak 2:25adc1277b3e 25 //function type.
vaifreak 2:25adc1277b3e 26 enum {
vaifreak 3:1666e2d5bd46 27 FILTER_LPF,
vaifreak 3:1666e2d5bd46 28 FILTER_HPF,
vaifreak 2:25adc1277b3e 29 DRIVE,
vaifreak 2:25adc1277b3e 30 DELAY,
vaifreak 2:25adc1277b3e 31 MASTER,
vaifreak 2:25adc1277b3e 32
vaifreak 2:25adc1277b3e 33 FUNCTION_MAX
vaifreak 2:25adc1277b3e 34 };
vaifreak 2:25adc1277b3e 35
vaifreak 3:1666e2d5bd46 36 //param for LPF
vaifreak 3:1666e2d5bd46 37 float filter_lpf_freq;
vaifreak 3:1666e2d5bd46 38 float filter_lpf_Q;
vaifreak 2:25adc1277b3e 39
vaifreak 3:1666e2d5bd46 40 //param for HPF
vaifreak 3:1666e2d5bd46 41 float filter_hpf_freq;
vaifreak 3:1666e2d5bd46 42 float filter_hpf_Q;
vaifreak 2:25adc1277b3e 43
vaifreak 2:25adc1277b3e 44 //param for Drive
vaifreak 2:25adc1277b3e 45 float drive_gain;
vaifreak 2:25adc1277b3e 46 float drive_volume;
vaifreak 2:25adc1277b3e 47
vaifreak 2:25adc1277b3e 48 //param for delay
vaifreak 2:25adc1277b3e 49 float delay_time;
vaifreak 2:25adc1277b3e 50 float delay_feedback;
vaifreak 2:25adc1277b3e 51 float delay_mix;
vaifreak 2:25adc1277b3e 52
vaifreak 2:25adc1277b3e 53 float sample_rate;
vaifreak 2:25adc1277b3e 54
vaifreak 2:25adc1277b3e 55 bool isOn[FUNCTION_MAX];
vaifreak 2:25adc1277b3e 56
vaifreak 2:25adc1277b3e 57 bool dirtyFlag;
vaifreak 2:25adc1277b3e 58 void SetDirty(){ dirtyFlag = true; }
vaifreak 3:1666e2d5bd46 59 bool IsDirty(){ return dirtyFlag; }
vaifreak 2:25adc1277b3e 60 void ClearDirty(){ dirtyFlag = false; }
vaifreak 2:25adc1277b3e 61
vaifreak 2:25adc1277b3e 62 C12832 *lcd;
vaifreak 2:25adc1277b3e 63 MyVolume *pot1;
vaifreak 2:25adc1277b3e 64 MyVolume *pot2;
vaifreak 2:25adc1277b3e 65 MyButton *stick_U;
vaifreak 2:25adc1277b3e 66 MyButton *stick_D;
vaifreak 2:25adc1277b3e 67 MyButton *stick_L;
vaifreak 2:25adc1277b3e 68 MyButton *stick_R;
vaifreak 2:25adc1277b3e 69 MyButton *stick_C;
vaifreak 2:25adc1277b3e 70
vaifreak 3:1666e2d5bd46 71 Filter *filter_lpf;
vaifreak 3:1666e2d5bd46 72 Filter *filter_hpf;
vaifreak 2:25adc1277b3e 73 Drive *drive;
vaifreak 2:25adc1277b3e 74 Delay *delay;
vaifreak 2:25adc1277b3e 75
vaifreak 2:25adc1277b3e 76 int current_function;
vaifreak 2:25adc1277b3e 77
vaifreak 2:25adc1277b3e 78 public:
vaifreak 2:25adc1277b3e 79 //-----------------------------------------
vaifreak 2:25adc1277b3e 80 //
vaifreak 2:25adc1277b3e 81 //-----------------------------------------
vaifreak 2:25adc1277b3e 82 Menu()
vaifreak 2:25adc1277b3e 83 {
vaifreak 2:25adc1277b3e 84 lcd = new C12832(p5, p7, p6, p8, p11);
vaifreak 2:25adc1277b3e 85 pot1 = new MyVolume(p19);
vaifreak 2:25adc1277b3e 86 pot2 = new MyVolume(p20);
vaifreak 2:25adc1277b3e 87 stick_U = new MyButton(p15);
vaifreak 2:25adc1277b3e 88 stick_D = new MyButton(p12);
vaifreak 2:25adc1277b3e 89 stick_L = new MyButton(p13);
vaifreak 2:25adc1277b3e 90 stick_R = new MyButton(p16);
vaifreak 2:25adc1277b3e 91 stick_C = new MyButton(p14);
vaifreak 2:25adc1277b3e 92
vaifreak 2:25adc1277b3e 93 printf("Menu constructed.\n");
vaifreak 2:25adc1277b3e 94 }
vaifreak 2:25adc1277b3e 95
vaifreak 2:25adc1277b3e 96 //-----------------------------------------
vaifreak 2:25adc1277b3e 97 //
vaifreak 2:25adc1277b3e 98 //-----------------------------------------
vaifreak 2:25adc1277b3e 99 void Init(
vaifreak 2:25adc1277b3e 100 float sample_rate_,
vaifreak 3:1666e2d5bd46 101 Filter *filter_lpf_,
vaifreak 3:1666e2d5bd46 102 Filter *filter_hpf_,
vaifreak 2:25adc1277b3e 103 Drive *drive_,
vaifreak 2:25adc1277b3e 104 Delay *delay_ )
vaifreak 2:25adc1277b3e 105 {
vaifreak 2:25adc1277b3e 106 sample_rate = sample_rate_;
vaifreak 2:25adc1277b3e 107
vaifreak 3:1666e2d5bd46 108 filter_lpf = filter_lpf_;
vaifreak 3:1666e2d5bd46 109 filter_hpf = filter_hpf_;
vaifreak 2:25adc1277b3e 110 drive = drive_;
vaifreak 2:25adc1277b3e 111 delay = delay_;
vaifreak 2:25adc1277b3e 112
vaifreak 2:25adc1277b3e 113 for(int i=0; i<FUNCTION_MAX; i++){
vaifreak 2:25adc1277b3e 114 isOn[i] = true;
vaifreak 2:25adc1277b3e 115 }
vaifreak 2:25adc1277b3e 116
vaifreak 2:25adc1277b3e 117 current_function = 0;
vaifreak 2:25adc1277b3e 118
vaifreak 3:1666e2d5bd46 119 filter_lpf_freq = filter_lpf->GetFreq();
vaifreak 3:1666e2d5bd46 120 filter_lpf_Q = filter_lpf->GetQ();
vaifreak 3:1666e2d5bd46 121 UpdateLpfParam();
vaifreak 2:25adc1277b3e 122
vaifreak 3:1666e2d5bd46 123 filter_hpf_freq = filter_hpf->GetFreq();
vaifreak 3:1666e2d5bd46 124 filter_hpf_Q = filter_hpf->GetQ();
vaifreak 3:1666e2d5bd46 125 UpdateHpfParam();
vaifreak 3:1666e2d5bd46 126
vaifreak 3:1666e2d5bd46 127 drive_gain = 15.0f;
vaifreak 3:1666e2d5bd46 128 drive_volume = 0.35f;
vaifreak 2:25adc1277b3e 129 UpdateDriveParam();
vaifreak 2:25adc1277b3e 130
vaifreak 2:25adc1277b3e 131 delay_time = 0.8f;
vaifreak 2:25adc1277b3e 132 delay_feedback = 0.5f;
vaifreak 3:1666e2d5bd46 133 delay_mix = 0.5f;
vaifreak 2:25adc1277b3e 134 UpdateDelayParam();
vaifreak 2:25adc1277b3e 135
vaifreak 3:1666e2d5bd46 136 inputGain = 1.0f;
vaifreak 3:1666e2d5bd46 137 masterVolume = 1.0f;
vaifreak 2:25adc1277b3e 138
vaifreak 2:25adc1277b3e 139 UpdateDisplay();
vaifreak 2:25adc1277b3e 140 }
vaifreak 2:25adc1277b3e 141
vaifreak 2:25adc1277b3e 142 //-----------------------------------------
vaifreak 2:25adc1277b3e 143 //
vaifreak 2:25adc1277b3e 144 //-----------------------------------------
vaifreak 2:25adc1277b3e 145 void Update()
vaifreak 2:25adc1277b3e 146 {
vaifreak 2:25adc1277b3e 147 pot1->Update();
vaifreak 2:25adc1277b3e 148 pot2->Update();
vaifreak 2:25adc1277b3e 149 stick_U->Update();
vaifreak 2:25adc1277b3e 150 stick_D->Update();
vaifreak 2:25adc1277b3e 151 stick_L->Update();
vaifreak 2:25adc1277b3e 152 stick_R->Update();
vaifreak 2:25adc1277b3e 153 stick_C->Update();
vaifreak 2:25adc1277b3e 154
vaifreak 2:25adc1277b3e 155 //---- select function
vaifreak 2:25adc1277b3e 156 if( stick_U->trig_on ){
vaifreak 2:25adc1277b3e 157 current_function --;
vaifreak 2:25adc1277b3e 158 if(current_function < 0) current_function = FUNCTION_MAX - 1;
vaifreak 2:25adc1277b3e 159 SetDirty();
vaifreak 2:25adc1277b3e 160 }
vaifreak 2:25adc1277b3e 161 if( stick_D->trig_on ){
vaifreak 2:25adc1277b3e 162 current_function ++;
vaifreak 2:25adc1277b3e 163 if(current_function >= FUNCTION_MAX) current_function = 0;
vaifreak 2:25adc1277b3e 164 SetDirty();
vaifreak 2:25adc1277b3e 165 }
vaifreak 2:25adc1277b3e 166
vaifreak 2:25adc1277b3e 167 //---- effect ON/OFF
vaifreak 2:25adc1277b3e 168 if( stick_C->trig_on ){
vaifreak 2:25adc1277b3e 169 isOn[ current_function ] = !isOn[ current_function ];
vaifreak 2:25adc1277b3e 170 SetDirty();
vaifreak 2:25adc1277b3e 171 }
vaifreak 2:25adc1277b3e 172
vaifreak 2:25adc1277b3e 173 UpdateParameter();
vaifreak 2:25adc1277b3e 174
vaifreak 2:25adc1277b3e 175 // update display.
vaifreak 3:1666e2d5bd46 176 if( IsDirty() )
vaifreak 2:25adc1277b3e 177 {
vaifreak 2:25adc1277b3e 178 UpdateDisplay();
vaifreak 2:25adc1277b3e 179 ClearDirty();
vaifreak 2:25adc1277b3e 180 }
vaifreak 2:25adc1277b3e 181 }
vaifreak 2:25adc1277b3e 182
vaifreak 2:25adc1277b3e 183 private:
vaifreak 2:25adc1277b3e 184 //-----------------------------------------
vaifreak 2:25adc1277b3e 185 //
vaifreak 2:25adc1277b3e 186 //-----------------------------------------
vaifreak 2:25adc1277b3e 187 void UpdateDisplay()
vaifreak 2:25adc1277b3e 188 {
vaifreak 2:25adc1277b3e 189 lcd->cls();
vaifreak 2:25adc1277b3e 190 lcd->locate(0,0);
vaifreak 2:25adc1277b3e 191
vaifreak 3:1666e2d5bd46 192 bool is_on = isOn[current_function];
vaifreak 3:1666e2d5bd46 193
vaifreak 2:25adc1277b3e 194 switch( current_function )
vaifreak 2:25adc1277b3e 195 {
vaifreak 3:1666e2d5bd46 196 case FILTER_LPF:
vaifreak 3:1666e2d5bd46 197 lcd->printf("LowPass : %s", (is_on?"ON ":"off") );
vaifreak 2:25adc1277b3e 198 lcd->locate(0,10);
vaifreak 3:1666e2d5bd46 199 lcd->printf("Freq.:%.0f Q:%.2f ", filter_lpf_freq, filter_lpf_Q );
vaifreak 2:25adc1277b3e 200 break;
vaifreak 2:25adc1277b3e 201
vaifreak 3:1666e2d5bd46 202 case FILTER_HPF:
vaifreak 3:1666e2d5bd46 203 lcd->printf("HighPass: %s", (is_on?"ON ":"off") );
vaifreak 3:1666e2d5bd46 204 lcd->locate(0,10);
vaifreak 3:1666e2d5bd46 205 lcd->printf("Freq.:%.0f Q:%.2f ", filter_hpf_freq, filter_hpf_Q );
vaifreak 3:1666e2d5bd46 206 break;
vaifreak 3:1666e2d5bd46 207
vaifreak 2:25adc1277b3e 208 case DRIVE:
vaifreak 3:1666e2d5bd46 209 lcd->printf("Drive : %s", (is_on?"ON ":"off") );
vaifreak 2:25adc1277b3e 210 lcd->locate(0,10);
vaifreak 2:25adc1277b3e 211 lcd->printf("Gain:%.2f Vol.:%.2f ", drive_gain, drive_volume );
vaifreak 2:25adc1277b3e 212 break;
vaifreak 3:1666e2d5bd46 213
vaifreak 2:25adc1277b3e 214 case DELAY:
vaifreak 3:1666e2d5bd46 215 lcd->printf("Delay : %s", (is_on?"ON ":"off") );
vaifreak 2:25adc1277b3e 216 lcd->locate(0,10);
vaifreak 2:25adc1277b3e 217 lcd->printf("Time:%4dmsec Mix:%.2f ", delay->GetDelayTimeInMSec(sample_rate), delay_mix);
vaifreak 2:25adc1277b3e 218 break;
vaifreak 2:25adc1277b3e 219
vaifreak 2:25adc1277b3e 220 case MASTER:
vaifreak 3:1666e2d5bd46 221 lcd->printf("InputGain : %.2f", inputGain );
vaifreak 2:25adc1277b3e 222 lcd->locate(0,10);
vaifreak 3:1666e2d5bd46 223 lcd->printf("MasterVol: %.2f", masterVolume );
vaifreak 2:25adc1277b3e 224 break;
vaifreak 2:25adc1277b3e 225 }
vaifreak 2:25adc1277b3e 226
vaifreak 2:25adc1277b3e 227 }
vaifreak 2:25adc1277b3e 228
vaifreak 2:25adc1277b3e 229 //-----------------------------------------
vaifreak 2:25adc1277b3e 230 //
vaifreak 2:25adc1277b3e 231 //-----------------------------------------
vaifreak 2:25adc1277b3e 232 void UpdateParameter()
vaifreak 2:25adc1277b3e 233 {
vaifreak 2:25adc1277b3e 234 switch( current_function )
vaifreak 2:25adc1277b3e 235 {
vaifreak 3:1666e2d5bd46 236 case FILTER_LPF:
vaifreak 2:25adc1277b3e 237 {
vaifreak 2:25adc1277b3e 238 if( pot1->dirtyFlag ) {
vaifreak 3:1666e2d5bd46 239 filter_lpf_freq = RateToParam( 2000.0f, 6000.0f, pot1->val );
vaifreak 2:25adc1277b3e 240 SetDirty();
vaifreak 2:25adc1277b3e 241 }
vaifreak 2:25adc1277b3e 242 if( pot2->dirtyFlag ) {
vaifreak 3:1666e2d5bd46 243 filter_lpf_Q = RateToParam( 0.3f, 2.0f, pot2->val );
vaifreak 2:25adc1277b3e 244 SetDirty();
vaifreak 2:25adc1277b3e 245 }
vaifreak 3:1666e2d5bd46 246 if( IsDirty() ){
vaifreak 3:1666e2d5bd46 247 UpdateLpfParam();
vaifreak 2:25adc1277b3e 248 }
vaifreak 2:25adc1277b3e 249 }
vaifreak 2:25adc1277b3e 250 break;
vaifreak 3:1666e2d5bd46 251
vaifreak 3:1666e2d5bd46 252 case FILTER_HPF:
vaifreak 3:1666e2d5bd46 253 {
vaifreak 3:1666e2d5bd46 254 if( pot1->dirtyFlag ) {
vaifreak 3:1666e2d5bd46 255 filter_hpf_freq = RateToParam( 50.0f, 700.0f, pot1->val );
vaifreak 3:1666e2d5bd46 256 SetDirty();
vaifreak 3:1666e2d5bd46 257 }
vaifreak 3:1666e2d5bd46 258 if( pot2->dirtyFlag ) {
vaifreak 3:1666e2d5bd46 259 filter_hpf_Q = RateToParam( 0.3f, 2.0f, pot2->val );
vaifreak 3:1666e2d5bd46 260 SetDirty();
vaifreak 3:1666e2d5bd46 261 }
vaifreak 3:1666e2d5bd46 262 if( IsDirty() ){
vaifreak 3:1666e2d5bd46 263 UpdateHpfParam();
vaifreak 3:1666e2d5bd46 264 }
vaifreak 3:1666e2d5bd46 265 }
vaifreak 3:1666e2d5bd46 266 break;
vaifreak 3:1666e2d5bd46 267
vaifreak 2:25adc1277b3e 268 case DRIVE:
vaifreak 2:25adc1277b3e 269 {
vaifreak 2:25adc1277b3e 270 if( pot1->dirtyFlag ) {
vaifreak 2:25adc1277b3e 271 drive_gain = pot1->val * 20.0f;
vaifreak 2:25adc1277b3e 272 SetDirty();
vaifreak 2:25adc1277b3e 273 }
vaifreak 2:25adc1277b3e 274 if( pot2->dirtyFlag ) {
vaifreak 2:25adc1277b3e 275 drive_volume = pot2->val * 2.0f;
vaifreak 2:25adc1277b3e 276 SetDirty();
vaifreak 2:25adc1277b3e 277 }
vaifreak 3:1666e2d5bd46 278 if( IsDirty() ){
vaifreak 2:25adc1277b3e 279 UpdateDriveParam();
vaifreak 2:25adc1277b3e 280 }
vaifreak 2:25adc1277b3e 281 }
vaifreak 2:25adc1277b3e 282 break;
vaifreak 2:25adc1277b3e 283
vaifreak 3:1666e2d5bd46 284 case DELAY:
vaifreak 2:25adc1277b3e 285 {
vaifreak 2:25adc1277b3e 286 if( pot1->dirtyFlag ) {
vaifreak 2:25adc1277b3e 287 delay_time = pot1->val;
vaifreak 2:25adc1277b3e 288 SetDirty();
vaifreak 2:25adc1277b3e 289 }
vaifreak 2:25adc1277b3e 290 if( pot2->dirtyFlag ) {
vaifreak 2:25adc1277b3e 291 delay_mix = pot2->val;
vaifreak 2:25adc1277b3e 292 SetDirty();
vaifreak 2:25adc1277b3e 293 }
vaifreak 3:1666e2d5bd46 294 if( IsDirty() ){
vaifreak 2:25adc1277b3e 295 UpdateDelayParam();
vaifreak 2:25adc1277b3e 296 }
vaifreak 2:25adc1277b3e 297 }
vaifreak 2:25adc1277b3e 298 break;
vaifreak 2:25adc1277b3e 299
vaifreak 2:25adc1277b3e 300 case MASTER:
vaifreak 2:25adc1277b3e 301 if( pot1->dirtyFlag )
vaifreak 2:25adc1277b3e 302 {
vaifreak 3:1666e2d5bd46 303 inputGain = pot1->val * 4.0f;
vaifreak 3:1666e2d5bd46 304 SetDirty();
vaifreak 3:1666e2d5bd46 305 }
vaifreak 3:1666e2d5bd46 306 if( pot2->dirtyFlag )
vaifreak 3:1666e2d5bd46 307 {
vaifreak 3:1666e2d5bd46 308 masterVolume = pot2->val * 2.0f;
vaifreak 2:25adc1277b3e 309 SetDirty();
vaifreak 2:25adc1277b3e 310 }
vaifreak 2:25adc1277b3e 311 break;
vaifreak 2:25adc1277b3e 312 }
vaifreak 2:25adc1277b3e 313 }
vaifreak 2:25adc1277b3e 314
vaifreak 2:25adc1277b3e 315 //-----------------------------------------
vaifreak 2:25adc1277b3e 316 //
vaifreak 2:25adc1277b3e 317 //-----------------------------------------
vaifreak 3:1666e2d5bd46 318 void UpdateLpfParam()
vaifreak 2:25adc1277b3e 319 {
vaifreak 3:1666e2d5bd46 320 filter_lpf->isBypass = !isOn[FILTER_LPF];
vaifreak 3:1666e2d5bd46 321 filter_lpf->set_LPF( sample_rate, filter_lpf_freq, filter_lpf_Q );
vaifreak 2:25adc1277b3e 322 }
vaifreak 2:25adc1277b3e 323
vaifreak 2:25adc1277b3e 324 //-----------------------------------------
vaifreak 2:25adc1277b3e 325 //
vaifreak 2:25adc1277b3e 326 //-----------------------------------------
vaifreak 3:1666e2d5bd46 327 void UpdateHpfParam()
vaifreak 2:25adc1277b3e 328 {
vaifreak 3:1666e2d5bd46 329 filter_hpf->isBypass = !isOn[FILTER_HPF];
vaifreak 3:1666e2d5bd46 330 filter_hpf->set_HPF( sample_rate, filter_hpf_freq, filter_hpf_Q );
vaifreak 2:25adc1277b3e 331 }
vaifreak 2:25adc1277b3e 332
vaifreak 2:25adc1277b3e 333 //-----------------------------------------
vaifreak 2:25adc1277b3e 334 //
vaifreak 2:25adc1277b3e 335 //-----------------------------------------
vaifreak 2:25adc1277b3e 336 void UpdateDriveParam()
vaifreak 2:25adc1277b3e 337 {
vaifreak 2:25adc1277b3e 338 drive->isBypass = !isOn[DRIVE];
vaifreak 2:25adc1277b3e 339 drive->gain = drive_gain;
vaifreak 2:25adc1277b3e 340 drive->vol = drive_volume;
vaifreak 2:25adc1277b3e 341 }
vaifreak 2:25adc1277b3e 342
vaifreak 2:25adc1277b3e 343 //-----------------------------------------
vaifreak 2:25adc1277b3e 344 //
vaifreak 2:25adc1277b3e 345 //-----------------------------------------
vaifreak 2:25adc1277b3e 346 void UpdateDelayParam()
vaifreak 2:25adc1277b3e 347 {
vaifreak 2:25adc1277b3e 348 delay->isBypass = !isOn[DELAY];
vaifreak 2:25adc1277b3e 349 delay->delay_time = delay_time;
vaifreak 2:25adc1277b3e 350 delay->feedback = delay_feedback;
vaifreak 2:25adc1277b3e 351 delay->effect_level = delay_mix;
vaifreak 2:25adc1277b3e 352 }
vaifreak 2:25adc1277b3e 353
vaifreak 2:25adc1277b3e 354 //-----------------------------------------
vaifreak 2:25adc1277b3e 355 //
vaifreak 2:25adc1277b3e 356 //-----------------------------------------
vaifreak 2:25adc1277b3e 357 float RateToParam( float min, float max, float rate )
vaifreak 2:25adc1277b3e 358 {
vaifreak 2:25adc1277b3e 359 return (max - min) * rate + min;
vaifreak 2:25adc1277b3e 360 }
vaifreak 2:25adc1277b3e 361 };
vaifreak 2:25adc1277b3e 362