X-Git-Url: http://git.johnwright.org/?p=fmit.git;a=blobdiff_plain;f=libs%2FMusic%2FMusic.h;fp=libs%2FMusic%2FMusic.h;h=022932a2208b24d78ef3fbc0927a064f1740e9f3;hp=e319851675bed20cc2f73e7c7e6f345705fa7630;hb=49947d1cd4506f5574b3be62ee90e9f00227d9fd;hpb=82c9faab9421b3d87a0faa84a73f55aaccbbb689 diff --git a/libs/Music/Music.h b/libs/Music/Music.h index e319851..022932a 100644 --- a/libs/Music/Music.h +++ b/libs/Music/Music.h @@ -25,6 +25,7 @@ #include #include #include +#include using namespace std; #include #include @@ -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 conv(const std::vector& u, const std::vector& v); + //! convert amplitude to dB + template + TYPE lp(TYPE value) + { + return 20*log10(abs(value)); +// return 20*log10(abs(value)+numeric_limits::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 conv(const std::vector& u, const std::vector& v); // TODO freq reffinement }