equaliser: one slider partially connected
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 1 Dec 2012 01:09:11 +0000 (01:09 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 1 Dec 2012 01:09:11 +0000 (01:09 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1094 01035d8c-6547-0410-b346-abe4f91aad63

fdmdv2/src/dlg_filter.cpp
fdmdv2/src/dlg_filter.h
fdmdv2/src/fdmdv2_main.cpp
fdmdv2/src/fdmdv2_main.h

index 6a16b1f7399e5042ff3a577c0fb1eed0aefe3987..736d0ba91608c2544cc24a002fb2e4c84f230a59 100644 (file)
 #define SLIDER_MAX 100
 #define SLIDER_LENGTH 155
 
-#define MIN_MAG_DB -20.0
-#define MAX_MAG_DB  20.0
+#define FILTER_MIN_MAG_DB -20.0
+#define FILTER_MAX_MAG_DB  20.0
+
+#define MAX_FREQ_BASS      600.00
+#define MAX_FREQ_DEF      3000.00
 
 extern struct CODEC2      *g_pCodec2;
 
@@ -65,15 +68,15 @@ FilterDlg::FilterDlg(wxWindow* parent, bool running, wxWindowID id, const wxStri
 
     wxStaticBoxSizer* eqMicInSizer = new wxStaticBoxSizer(new wxStaticBox(this, wxID_ANY, _("Mic In Equaliser")), wxVERTICAL);
 
-    m_MicInBass   = newEQ(eqMicInSizer, "Bass"  , disableQ);
-    m_MicInMid    = newEQ(eqMicInSizer, "Mid"   , enableQ);
-    m_MicInTreble = newEQ(eqMicInSizer, "Treble", disableQ);
+    m_MicInBass   = newEQ(eqMicInSizer, "Bass"  , MAX_FREQ_BASS, disableQ);
+    m_MicInMid    = newEQ(eqMicInSizer, "Mid"   , MAX_FREQ_DEF, enableQ);
+    m_MicInTreble = newEQ(eqMicInSizer, "Treble", MAX_FREQ_DEF, disableQ);
 
     wxStaticBoxSizer* eqSpkOutSizer = new wxStaticBoxSizer(new wxStaticBox(this, wxID_ANY, _("Speaker Out Equaliser")), wxVERTICAL);
 
-    m_SpkOutBass   = newEQ(eqSpkOutSizer, "Bass"  , disableQ);
-    m_SpkOutMid    = newEQ(eqSpkOutSizer, "Mid"   , enableQ);
-    m_SpkOutTreble = newEQ(eqSpkOutSizer, "Treble", disableQ);
+    m_SpkOutBass   = newEQ(eqSpkOutSizer, "Bass"  , MAX_FREQ_BASS, disableQ);
+    m_SpkOutMid    = newEQ(eqSpkOutSizer, "Mid"   , MAX_FREQ_DEF, enableQ);
+    m_SpkOutTreble = newEQ(eqSpkOutSizer, "Treble", MAX_FREQ_DEF, disableQ);
     
     bSizer30->Add(eqMicInSizer, 0, wxALL|wxEXPAND, 5);
     bSizer30->Add(eqSpkOutSizer, 0, wxALL, 5);
@@ -86,9 +89,9 @@ FilterDlg::FilterDlg(wxWindow* parent, bool running, wxWindowID id, const wxStri
 
     bSizer30->Add(m_auiNotebook, 0, wxEXPAND|wxALL, 5);
     
-    m_MicInFreqRespPlot = new PlotSpectrum((wxFrame*) m_auiNotebook, MIN_MAG_DB, MAX_MAG_DB);
+    m_MicInFreqRespPlot = new PlotSpectrum((wxFrame*) m_auiNotebook, FILTER_MIN_MAG_DB, FILTER_MAX_MAG_DB);
     m_auiNotebook->AddPage(m_MicInFreqRespPlot, _("Microphone In Equaliser"));
-    m_SpkOutFreqRespPlot = new PlotSpectrum((wxFrame*)m_auiNotebook, MIN_MAG_DB, MAX_MAG_DB);
+    m_SpkOutFreqRespPlot = new PlotSpectrum((wxFrame*)m_auiNotebook, FILTER_MIN_MAG_DB, FILTER_MAX_MAG_DB);
     m_auiNotebook->AddPage(m_SpkOutFreqRespPlot, _("Speaker Out Equaliser"));
 
     // OK - Cancel - Default Buttons at the bottom --------------------------
@@ -117,6 +120,8 @@ FilterDlg::FilterDlg(wxWindow* parent, bool running, wxWindowID id, const wxStri
     m_codec2LPCPostFilterBeta->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnBetaScroll), NULL, this);
     m_codec2LPCPostFilterGamma->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnGammaScroll), NULL, this);
 
+    m_MicInBass.sliderFreq->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnMicInBassFreqScroll), NULL, this);
+
     m_sdbSizer5Cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnCancel), NULL, this);
     m_sdbSizer5Default->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnDefault), NULL, this);
     m_sdbSizer5OK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnOK), NULL, this);
@@ -128,9 +133,16 @@ FilterDlg::FilterDlg(wxWindow* parent, bool running, wxWindowID id, const wxStri
 FilterDlg::~FilterDlg()
 {
     // Disconnect Events
+
     this->Disconnect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(FilterDlg::OnInitDialog));
+
+    m_codec2LPCPostFilterEnable->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxScrollEventHandler(FilterDlg::OnEnable), NULL, this);
+    m_codec2LPCPostFilterBassBoost->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxScrollEventHandler(FilterDlg::OnBassBoost), NULL, this);
     m_codec2LPCPostFilterBeta->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnBetaScroll), NULL, this);
     m_codec2LPCPostFilterGamma->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnGammaScroll), NULL, this);
+
+    m_MicInBass.sliderFreq->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnMicInBassFreqScroll), NULL, this);
+
     m_sdbSizer5Cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnCancel), NULL, this);
     m_sdbSizer5Default->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnDefault), NULL, this);
     m_sdbSizer5OK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnOK), NULL, this);
@@ -152,27 +164,31 @@ void FilterDlg::newLPCPFControl(wxSlider **slider, wxStaticText **stValue, wxSiz
     s->Add(bs, 1);
 }
 
-wxSlider *FilterDlg::newEQControl(wxStaticBoxSizer *bs, wxString controlName)
+void FilterDlg::newEQControl(wxSlider** slider, wxStaticText** value, wxStaticBoxSizer *bs, wxString controlName)
 {
-    wxStaticText* st = new wxStaticText(this, wxID_ANY, controlName, wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT);
-    bs->Add(st, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 2);
+    wxStaticText* label = new wxStaticText(this, wxID_ANY, controlName, wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT);
+    bs->Add(label, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 2);
 
-    wxSlider* slider = new wxSlider(this, wxID_ANY, 0, 0, SLIDER_MAX, wxDefaultPosition, wxSize(SLIDER_LENGTH,wxDefaultCoord));
-    bs->Add(slider, 1, wxALIGN_CENTER_VERTICAL|wxALL, 2);
+    *slider = new wxSlider(this, wxID_ANY, 0, 0, SLIDER_MAX, wxDefaultPosition, wxSize(SLIDER_LENGTH,wxDefaultCoord));
+    bs->Add(*slider, 1, wxALIGN_CENTER_VERTICAL|wxALL, 2);
 
-    return slider;
+    *value = new wxStaticText(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
+    bs->Add(*value, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5);
 }
 
-EQ FilterDlg::newEQ(wxStaticBoxSizer *bs, wxString eqName, bool enableQ)
+EQ FilterDlg::newEQ(wxStaticBoxSizer *bs, wxString eqName, float maxFreqHz, bool enableQ)
 {
     EQ eq;
 
     wxStaticBoxSizer *bsEQ = new wxStaticBoxSizer(new wxStaticBox(this, wxID_ANY, eqName), wxHORIZONTAL);
 
-    eq.sliderFreq = newEQControl(bsEQ, "Freq"); eq.sliderFreqId = eq.sliderFreq->GetId();
-    eq.sliderGain = newEQControl(bsEQ, "Gain");
+    newEQControl(&eq.sliderFreq, &eq.valueFreq, bsEQ, "Freq"); 
+    eq.maxFreqHz = maxFreqHz; 
+    eq.sliderFreqId = eq.sliderFreq->GetId();
+
+    newEQControl(&eq.sliderGain, &eq.valueGain, bsEQ, "Gain");
     if (enableQ)
-        eq.sliderQ = newEQControl(bsEQ, "Q");
+        newEQControl(&eq.sliderQ, &eq.valueQ, bsEQ, "Q");
     else
         eq.sliderQ = NULL;
 
@@ -189,15 +205,21 @@ void FilterDlg::ExchangeData(int inout)
     wxConfigBase *pConfig = wxConfigBase::Get();
     if(inout == EXCHANGE_DATA_IN)
     {
-        //printf("EXCHANGE_DATA_IN\n");
+        // LPC Post filter
+
         m_codec2LPCPostFilterEnable->SetValue(wxGetApp().m_codec2LPCPostFilterEnable);
         m_codec2LPCPostFilterBassBoost->SetValue(wxGetApp().m_codec2LPCPostFilterBassBoost);
         m_beta = wxGetApp().m_codec2LPCPostFilterBeta; setBeta();
         m_gamma = wxGetApp().m_codec2LPCPostFilterGamma; setGamma();
+
+        // Mic In Equaliser
+
+        m_MicInBass.freqHz = wxGetApp().m_MicInBassFreqHz; setFreq(&m_MicInBass);
     }
     if(inout == EXCHANGE_DATA_OUT)
     {
-        //printf("EXCHANGE_DATA_OUT\n");
+        // LPC Post filter
+
         wxGetApp().m_codec2LPCPostFilterEnable     = m_codec2LPCPostFilterEnable->GetValue();
         wxGetApp().m_codec2LPCPostFilterBassBoost  = m_codec2LPCPostFilterBassBoost->GetValue();
         wxGetApp().m_codec2LPCPostFilterBeta       = m_beta;
@@ -208,6 +230,11 @@ void FilterDlg::ExchangeData(int inout)
         pConfig->Write(wxT("/Filter/codec2LPCPostFilterBeta"),       m_beta*100.0);
         pConfig->Write(wxT("/Filter/codec2LPCPostFilterGamma"),      m_gamma*100.0);
 
+        // Mic In Equaliser
+
+        wxGetApp().m_MicInBassFreqHz = m_MicInBass.freqHz;
+        pConfig->Write(wxT("/Filter/MicInBassFreqHz"), m_MicInBass.freqHz);
+
         pConfig->Flush();
     }
     delete wxConfigBase::Set((wxConfigBase *) NULL);
@@ -306,3 +333,19 @@ void FilterDlg::OnGammaScroll(wxScrollEvent& event) {
     setCodec2();
 }
 
+void FilterDlg::setFreq(EQ *eq)
+{
+    wxString buf;
+    buf.Printf(wxT("%3.2f"), eq->freqHz);
+    eq->valueFreq->SetLabel(buf);
+    int slider = (int)((eq->freqHz/eq->maxFreqHz)*SLIDER_MAX + 0.5);
+    eq->sliderFreq->SetValue(slider);
+}
+
+void FilterDlg::OnMicInBassFreqScroll(wxScrollEvent& event)
+{
+    m_MicInBass.freqHz = ((float)m_MicInBass.sliderFreq->GetValue()/SLIDER_MAX)*m_MicInBass.maxFreqHz;
+    printf("FilterDlg::OnMicInBassFreqScroll m_MicInBass.freqHz: %f\n", m_MicInBass.freqHz);
+    setFreq(&m_MicInBass);
+}
+
index e643d813666f800fd02359cb5c6d37f2f509a3aa..542616a88e09c63a508d2340967cff371aae008c 100644 (file)
 enum {disableQ = false, enableQ = true};
 
 typedef struct { 
-    wxSlider *sliderFreq;
-    wxSlider *sliderGain;
-    wxSlider *sliderQ;
+    wxSlider     *sliderFreq;
+    wxStaticText *valueFreq;
+    wxSlider     *sliderGain;
+    wxStaticText *valueGain;
+    wxSlider     *sliderQ;
+    wxStaticText *valueQ;
 
     int       sliderFreqId;
     int       sliderGainId;
@@ -38,6 +41,8 @@ typedef struct {
     float     freqHz;
     float     gaindB;
     float     Q;
+
+    float     maxFreqHz;
     
 } EQ;
 
@@ -48,7 +53,7 @@ class FilterDlg : public wxDialog
 {
     public:
         FilterDlg( wxWindow* parent, bool running, wxWindowID id = wxID_ANY, const wxString& title = _("Filter"), 
-                   const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 800,800 ), 
+                   const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 800,900 ), 
                    long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
         ~FilterDlg();
 
@@ -67,6 +72,8 @@ class FilterDlg : public wxDialog
         void    OnEnable(wxScrollEvent& event);
         void    OnBassBoost(wxScrollEvent& event);
 
+        void    OnMicInBassFreqScroll(wxScrollEvent& event);
+
         wxStaticText* m_staticText8;
         wxCheckBox*   m_codec2LPCPostFilterEnable;
         wxStaticText* m_staticText9;
@@ -93,10 +100,11 @@ class FilterDlg : public wxDialog
         void          setGamma(void); // sets slider and static text from m_gamma
         void          setCodec2(void);
  
-        EQ            newEQ(wxStaticBoxSizer *bs, wxString eqName, bool enable);
-        wxSlider*     newEQControl(wxStaticBoxSizer *bs, wxString controlName);
+        void          newEQControl(wxSlider** slider, wxStaticText** value, wxStaticBoxSizer *bs, wxString controlName);
+        EQ            newEQ(wxStaticBoxSizer *bs, wxString eqName, float maxFreqHz, bool enableQ);
         void          newLPCPFControl(wxSlider **slider, wxStaticText **stValue, wxSizer *sbs, wxString controlName);
         wxAuiNotebook *m_auiNotebook;
+        void          setFreq(EQ *eq);
 
         EQ            m_MicInBass;
         EQ            m_MicInMid;
index 01a893f2440e9c0a2703dd648a3ec3dff5a27016..c5ddaa040b20e67c9041f46b6b9dc045d2112459 100644 (file)
@@ -329,6 +329,8 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent)
     wxGetApp().m_codec2LPCPostFilterBeta       = (float)pConfig->Read(wxT("/Filter/codec2LPCPostFilterBeta"),      CODEC2_LPC_PF_BETA*100)/100.0;
     //printf("main(): m_codec2LPCPostFilterBeta: %f\n", wxGetApp().m_codec2LPCPostFilterBeta);
 
+    wxGetApp().m_MicInBassFreqHz = pConfig->Read(wxT("/Filter/MicInBassFreqHz"),    0.0);
+
     wxGetApp().m_callSign = pConfig->Read("/Data/CallSign", wxT(""));
 
     pConfig->SetPath(wxT("/"));
index 039dadb0f15175a30b4b1310462f2fa40661c8c8..55660be168e0c1b79160db750e3f12e970762a98 100644 (file)
@@ -145,12 +145,16 @@ class MainApp : public wxApp
 
         bool                m_snrSlow;
 
-        // Codec 2 Post Filter
+        // LPC Post Filter
+
         bool                m_codec2LPCPostFilterEnable;
         bool                m_codec2LPCPostFilterBassBoost;
         float               m_codec2LPCPostFilterGamma;
         float               m_codec2LPCPostFilterBeta;
         
+        // Mic In Equaliser
+        float               m_MicInBassFreqHz;
+
         int                 m_show_wf;
         int                 m_show_spect;
         int                 m_show_scatter;