#include #define e1 82.4 #define e2 92.4986 #define e3 103.8262 #define e4 110.0 #define e5 123.4708 #define e6 138.5913 #define e7 155.5635 #define e8 164.8 float e_major::get_freq(float f) //match f to freqs in range 82.4 - 164.8 Hz corresponding to midi notes 40 - 52 { if (f == 0) return 0; //restrict f to be within the octave 82.4-164.8 Hz while(true) { if (f < 82.4) f *= 2; else break; } while (true) { if (f > 164.8) f *= 0.5; else break; } //find the pitch in e minor closest to freq f if (f >= e1 && f <= e2) { if (fabs(f - e1) < 5.05) return e1; else return e2; } if (f >= e2 && f <= e3) { if (fabs(f - e2) < 5.6638) return e2; else return e3; } if (f >= e3 && f <= e4) { if (fabs(f - e3) < 3.0869) return e3; else return e4; } if (f >= e4 && f <= e5) { if (fabs(f - e4) < 6.7) return e4; else return e5; } if (f >= e5 && f <= e6) { if (fabs(f - e5) < 7.5602) return e5; else return e6; } if (f >= e6 && f <= e7) { if (fabs(f - e6) < 8.4861) return e6; else return e7; } if (f >= e7 && f <= e8) { if (fabs(f - e7) < 4.6183) return e7; else return e8; } }