#include <string>
#include <list>
#include <vector>
+#include <limits>
using namespace std;
#include <CppAddons/CAMath.h>
#include <CppAddons/StringAddons.h>
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
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
}