e@1: /* e@1: * Parameter.h e@1: * e@1: * Created on: Dec 14, 2016 e@1: * Author: Emmanouil Theofanis Chourdakis e@1: * e@1: * For using that code in research please cite: e@1: * e@1: * e@1: @Article{dlib09, e@1: author = {Davis E. King}, e@1: title = {Dlib-ml: A Machine Learning Toolkit}, e@1: journal = {Journal of Machine Learning Research}, e@1: year = {2009}, e@1: volume = {10}, e@1: pages = {1755-1758}, e@1: } e@1: * e@1: * e@1: */ e@1: e@1: #ifndef PARAMETER_H_ e@1: #define PARAMETER_H_ e@1: e@1: #include "limits.hpp" e@1: #include e@1: #include e@1: e@1: /* e@1: * Normalization function e@1: */ e@1: e@1: #define _N(f, fmin, fmax) ((f-fmin) / (fmax-fmin)) e@1: e@1: using namespace dlib; e@1: using namespace std; e@1: e@1: typedef matrix column_vector; e@1: e@1: class Parameter { e@1: private: e@1: e@1: /* e@1: * D1: First Comb Filter Delay e@1: * G1: First Comb Filter Gain e@1: * DA: All-pass Filter Delay e@1: * GA (in limits.hpp): All-pass Filter gain e@1: * GC: Low-pass Filter Gain e@1: * G: Dry/Wet Mix e@1: * e@1: */ e@1: e@1: double D1, DA, G1, GC, G; e@1: e@1: /* e@1: * T60: Reverberation Time e@1: * ED: Echo Density e@1: * C: Clarity e@1: * TC: Central Time e@1: * SC: Spectral Centroid e@1: * SC_MAX: Maximum Spectral Centroid (depends on sample rate) e@1: * e@1: */ e@1: e@1: double T60, ED, C, TC, SC, SC_MAX; e@1: e@1: double SampleRate; e@1: e@1: friend std::ostream& operator<<(std::ostream &s, const Parameter &p); e@1: e@1: static double compute_T60(double _D1, double _G1, double _GC, double _G); e@1: static double compute_ED(double _D1, double _DA); e@1: static double compute_C(double _G1, double _GC, double _G); e@1: static double compute_TC(double _D1, double _G1, double _DA); e@1: static double compute_SC(double _GC, double _SR); e@1: e@1: /* e@1: * Functions used in computing the inverse mapping/ e@1: */ e@1: e@1: static double TC_G1_D1_ED(double _D1, double _G1, double _ED, double t=0.1); e@1: static double T60_D1_G1_C(double _D1, double _G1, double _GC, double _C); e@1: static double D1_G1_T60_C(double _G1, double _GC, double _T60, double _C); e@1: static double G_G1_C(double _G1, double _GC, double _C); e@1: static double DA_D1_ED(double _D1, double _ED, double t=0.1); e@1: e@1: /* e@1: * Function to minimize. e@1: */ e@1: e@1: static double GC_SC(double _SC, double SR); e@1: static double errorfunc(double _G1, double _GC, const matrix &Target); e@1: static matrix inverse_mapping(double _T60, double _ED, double _C, double _TC, double _SC, double SampleRate, double _G1); e@1: e@1: e@1: public: e@1: Parameter(double SR=44100.0, e@1: double _D1 = 0.05, e@1: double _DA = 0.006, e@1: double _G1 = 0.5, e@1: double _GC = 0.5, e@1: double _G = 0.5, e@1: double _T60 = 0.423289, e@1: double _ED = 6927.08, e@1: double _C = -0.107798, e@1: double _TC = 0.0490677, e@1: double _SC = 6419.15 e@1: ); e@1: virtual ~Parameter(); e@1: double getC() const; e@1: void setC(double c); e@1: double getD1() const; e@1: void setD1(double d1); e@1: double getDa() const; e@1: void setDa(double da); e@1: double getEd() const; e@1: void setEd(double ed); e@1: double getG() const; e@1: void setG(double g); e@1: double getG1() const; e@1: void setG1(double g1); e@1: double getGc() const; e@1: void setGc(double gc); e@1: double getSampleRate() const; e@1: void setSampleRate(double sampleRate); e@1: double getSc() const; e@1: void setSc(double sc); e@1: double getT60() const; e@1: void setT60(double t60); e@1: double getTc() const; e@1: void setTc(double tc); e@1: e@1: /* compute functions */ e@1: e@1: /* e@1: * Low level -> High level e@1: */ e@1: e@1: int set_low_and_compute(double D1, double DA, double G1, double GC, double G); e@1: int get_low_and_computer(); e@1: e@1: /* e@1: * High level -> Low level e@1: */ e@1: e@1: int set_high_and_compute(double T60, double ED, double C, double TC, double SC); e@1: int get_high_and_compute(); e@1: e@1: e@1: }; e@1: e@1: e@1: e@1: #endif /* PARAMETER_H_ */