Import upstream version 0.99.2
[fmit.git] / libs / Music / Music.h
index e319851..022932a 100644 (file)
@@ -25,6 +25,7 @@
 #include <string>
 #include <list>
 #include <vector>
+#include <limits>
 using namespace std;
 #include <CppAddons/CAMath.h>
 #include <CppAddons/StringAddons.h>
@@ -102,29 +103,20 @@ namespace Music
                if (relFreq < s_semitones[1])
                {
                        if (s_semitones[1] / relFreq > relFreq / s_semitones[0])
-                       {
                                return 0;
-                       }
                        else
-                       {
                                return 1;
-                       }
                }
                else
                {
                        int i;
                        for (i = 2; i < 12; i += 1)
-                       {
                                if (relFreq < s_semitones[i]) { break; }
-                       }
+
                        if (s_semitones[i] / relFreq > relFreq / s_semitones[i - 1])
-                       {
                                return i - 1;
-                       }
                        else
-                       {
                                return i;
-                       }
                }
        }
        // TODO VERIF
@@ -281,7 +273,23 @@ namespace Music
                return -1;
        }
 
-       std::vector<double> conv(const std::vector<double>& u, const std::vector<double>& v);
+    //! convert amplitude to dB
+    template<class TYPE>
+    TYPE lp(TYPE value)
+    {
+        return 20*log10(abs(value));
+//         return 20*log10(abs(value)+numeric_limits<TYPE>::epsilon());
+    }
+
+    //! convert dB to amplitude
+    // TODO cannot create a template so easily because the pow10 is not defined for all types
+    inline double invlp(double value)
+    {
+        return pow10(value/20.0);
+//         return pow(TYPE(10), value/TYPE(20));
+    }
+
+    std::vector<double> conv(const std::vector<double>& u, const std::vector<double>& v);
 
        // TODO freq reffinement
 }