+// frequency doubles for every OCTAVE slots. OCTAVE must be divisible by 3
+// 27.5 is at i=1
+// 55 is at i=106
+// 110 is at i=211
+// 220 is at i=316
+// 440 is at i=421
+// 880 is at i=526
+double Freq::tofreq_f(double index)
+{
+ if( index < 0.5 ) return 0;
+ return 440.0 * pow(2, (double)(index - 421) / OCTAVE);
+}
+double Freq::fromfreq_f(double f)
+{
+ if( f < 0.5 ) return 0;
+ double result = log(f / 440) / log(2.0) * OCTAVE + 421;
+ return result < 0 ? 0 : result;
+}
+