#include #define e1 82.4 #define e2 87.3071 #define e3 92.4986 #define e4 97.9989 #define e5 103.8262 #define e6 110 #define e7 116.5409 #define e8 123.4708 #define e9 130.8128 #define e10 138.5913 #define e11 146.8324 #define e12 155.5635 #define e13 164.8 #define e14 174.6142 #define e15 184.9972 #define e16 195.9978 #define e17 207.6524 #define e18 220 #define e19 233.0818 #define e20 246.9416 #define e21 261.6256 #define e22 277.1826 #define e23 293.6648 #define e24 311.127 #define e25 329.6 float e_gypsy::get_freq(float f) //match f to freqs in range 82.4 - 164.8 Hz corresponding to midi notes 40 - 52 { if (f < 77) return 0; //restrict f to be within the octave 82.4-164.8 Hz while(true) { if (f < 77.7817) f *= 2; else break; } while (true) { if (f > 174.6141) f *= 0.5; else break; } if (f < e1) return e1; if (f >= e1 && f <= e2) { if (fabs(f - e1) < 2.4535) return e1; else return e2; } if (f >= e2 && f <= e5) { if (fabs(f - e2) < 8.2595) return e2; else return e5; } if (f >= e5 && f <= e6) { if (fabs(f - e5) < 3.0869) return e5; else return e6; } if (f >= e6 && f <= e8) { if (fabs(f - e6) < 9.8223) return e6; else return e8; } if (f >= e8 && f <= e9) { if ((f-e8) < 3.671) return e8; else return e9; } if (f >= e9 && f <= e11) { if ((f-e9) < 8.0098) return e9; else return e11; } if (f >= e11 && f <= e12) { if ((f-e11) < 4.3655) return e11; else return e12; } if (f >= e12 && f <= e13) { if ((f-e12) < 4.6183) return e12; else return e13; } ////////////////////////////////////////////////////// if (f >= e13 && f <= e14) { if (fabs(f - e13) < 4.907) return e13; else return e14; } if (f >= e14 && f <= e17) { if (fabs(f - e14) < 16.519) return e14; else return e17; } if (f >= e17 && f <= e18) { if (fabs(f - e17) < 6.1738) return e17; else return e18; } if (f >= e18 && f <= e20) { if (fabs(f - e18) < 19.6446) return e18; else return e20; } if (f >= e20 && f <= e21) { if ((f-e20) < 7.342) return e20; else return e21; } if (f >= e21 && f <= e23) { if ((f-e21) < 16.0196) return e21; else return e23; } if (f >= e23 && f <= e24) { if ((f-e23) < 8.731) return e23; else return e24; } if (f >= e24 && f <= e25) { if ((f-e24) < 9.2366) return e24; else return e25; } }