speaker eq states now being preserved and can take eqs in and out at run time
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 3 Dec 2012 05:31:12 +0000 (05:31 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 3 Dec 2012 05:31:12 +0000 (05:31 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1113 01035d8c-6547-0410-b346-abe4f91aad63

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

index 96528e763852e01c92f7ff1dfd94139de8f45fb9..98aa8377558d33c26e4b4004df3bacee0bf3e0ae 100644 (file)
 
 // DFT parameters
 
-#define IMP_AMP           2000.0
-#define NIMP              50
-#define F_STEP_DFT        50.0
-#define F_MAG_N           (int)(MAX_F_HZ/F_STEP_DFT)
+#define IMP_AMP           2000.0                     // amplitude of impulse
+#define NIMP              50                         // number of samples in impulse response
+#define F_STEP_DFT        10.0                       // frequency steps to sample spectrum
+#define F_MAG_N           (int)(MAX_F_HZ/F_STEP_DFT) // number of frequency steps
 
 extern struct CODEC2      *g_pCodec2;
 
@@ -64,23 +64,6 @@ FilterDlg::FilterDlg(wxWindow* parent, bool running, bool *newMicInFilter, bool
 
     wxStaticBoxSizer* lpcpfs = new wxStaticBoxSizer(new wxStaticBox(this, wxID_ANY, _("LPC Post Filter")), wxHORIZONTAL);
 
-    //#define GRID
-#ifdef GRID
-   wxGridSizer* gs = new wxGridSizer(2,2,0,0);
-
-    m_codec2LPCPostFilterEnable = new wxCheckBox(this, wxID_ANY, _("Enable"), wxDefaultPosition,wxDefaultSize, wxCHK_2STATE);
-    gs->Add(m_codec2LPCPostFilterEnable);
-
-    newLPCPFControl(&m_codec2LPCPostFilterBeta, &m_staticTextBeta, gs, "Beta");
-
-    m_codec2LPCPostFilterBassBoost = new wxCheckBox(this, wxID_ANY, _("0-1 kHz 3dB Boost"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE);
-    gs->Add(m_codec2LPCPostFilterBassBoost);
-
-    newLPCPFControl(&m_codec2LPCPostFilterGamma, &m_staticTextGamma, gs, "Gamma");
-
-    lpcpfs->Add(gs, 0, wxALL, 0);
-
-#else
     wxBoxSizer* left = new wxBoxSizer(wxVERTICAL);
 
     m_codec2LPCPostFilterEnable = new wxCheckBox(this, wxID_ANY, _("Enable"), wxDefaultPosition,wxDefaultSize, wxCHK_2STATE);
@@ -98,7 +81,7 @@ FilterDlg::FilterDlg(wxWindow* parent, bool running, bool *newMicInFilter, bool
 
     m_LPCPostFilterDefault = new wxButton(this, wxID_ANY, wxT("Default"));
     lpcpfs->Add(m_LPCPostFilterDefault, 0, wxALL|wxALIGN_CENTRE_HORIZONTAL|wxALIGN_CENTRE_VERTICAL, 5);
-#endif
+
     bSizer30->Add(lpcpfs, 0, wxALL, 0);
 
     // EQ Filters -----------------------------------------------------------
@@ -318,49 +301,63 @@ void FilterDlg::ExchangeData(int inout, bool storePersistent)
 
         // Mic In Equaliser
 
-        m_MicInBass.freqHz = wxGetApp().m_MicInBassFreqHz; setFreq(&m_MicInBass);
+        m_MicInBass.freqHz = wxGetApp().m_MicInBassFreqHz; 
         m_MicInBass.freqHz = limit(m_MicInBass.freqHz, 1.0, MAX_FREQ_BASS);
-        m_MicInBass.gaindB = wxGetApp().m_MicInBassGaindB; setGain(&m_MicInBass);
+        setFreq(&m_MicInBass);
+        m_MicInBass.gaindB = wxGetApp().m_MicInBassGaindB;
         m_MicInBass.gaindB = limit(m_MicInBass.gaindB, MIN_GAIN, MAX_GAIN);
+        setGain(&m_MicInBass);
 
-        m_MicInTreble.freqHz = wxGetApp().m_MicInTrebleFreqHz; setFreq(&m_MicInTreble);
+        m_MicInTreble.freqHz = wxGetApp().m_MicInTrebleFreqHz;
         m_MicInTreble.freqHz = limit(m_MicInTreble.freqHz, 1.0, MAX_FREQ_TREBLE);
-        m_MicInTreble.gaindB = wxGetApp().m_MicInTrebleGaindB; setGain(&m_MicInTreble);
+        setFreq(&m_MicInTreble);
+        m_MicInTreble.gaindB = wxGetApp().m_MicInTrebleGaindB; 
         m_MicInTreble.gaindB = limit(m_MicInTreble.gaindB, MIN_GAIN, MAX_GAIN);
+        setGain(&m_MicInTreble);
 
-        m_MicInMid.freqHz = wxGetApp().m_MicInMidFreqHz; setFreq(&m_MicInMid);
+        m_MicInMid.freqHz = wxGetApp().m_MicInMidFreqHz; 
         m_MicInMid.freqHz = limit(m_MicInMid.freqHz, 1.0, MAX_FREQ_TREBLE);
-        m_MicInMid.gaindB = wxGetApp().m_MicInMidGaindB; setGain(&m_MicInMid);
+        setFreq(&m_MicInMid);
+        m_MicInMid.gaindB = wxGetApp().m_MicInMidGaindB; 
         m_MicInMid.gaindB = limit(m_MicInMid.gaindB, MIN_GAIN, MAX_GAIN);
-        m_MicInMid.Q = wxGetApp().m_MicInMidQ; setQ(&m_MicInMid);
+        setGain(&m_MicInMid);
+        m_MicInMid.Q = wxGetApp().m_MicInMidQ;
         m_MicInMid.Q = limit(m_MicInMid.Q, pow(10.0,MIN_LOG10_Q), pow(10.0, MAX_LOG10_Q));
+        setQ(&m_MicInMid);
 
         m_MicInEnable->SetValue(wxGetApp().m_MicInEQEnable);
 
-        setFreq(&m_MicInBass); setGain(&m_MicInBass); plotMicInFilterSpectrum();
+        plotMicInFilterSpectrum();
  
         // Spk Out Equaliser
 
-        m_SpkOutBass.freqHz = wxGetApp().m_SpkOutBassFreqHz; setFreq(&m_SpkOutBass);
+        m_SpkOutBass.freqHz = wxGetApp().m_SpkOutBassFreqHz;
         m_SpkOutBass.freqHz = limit(m_SpkOutBass.freqHz, 1.0, MAX_FREQ_BASS);
-        m_SpkOutBass.gaindB = wxGetApp().m_SpkOutBassGaindB; setGain(&m_SpkOutBass);
+        setFreq(&m_SpkOutBass);
+        m_SpkOutBass.gaindB = wxGetApp().m_SpkOutBassGaindB; 
         m_SpkOutBass.gaindB = limit(m_SpkOutBass.gaindB, MIN_GAIN, MAX_GAIN);
+        setGain(&m_SpkOutBass);
 
-        m_SpkOutTreble.freqHz = wxGetApp().m_SpkOutTrebleFreqHz; setFreq(&m_SpkOutTreble);
+        m_SpkOutTreble.freqHz = wxGetApp().m_SpkOutTrebleFreqHz; 
         m_SpkOutTreble.freqHz = limit(m_SpkOutTreble.freqHz, 1.0, MAX_FREQ_TREBLE);
-        m_SpkOutTreble.gaindB = wxGetApp().m_SpkOutTrebleGaindB; setGain(&m_SpkOutTreble);
+        setFreq(&m_SpkOutTreble);
+        m_SpkOutTreble.gaindB = wxGetApp().m_SpkOutTrebleGaindB; 
         m_SpkOutTreble.gaindB = limit(m_SpkOutTreble.gaindB, MIN_GAIN, MAX_GAIN);
+        setGain(&m_SpkOutTreble);
 
-        m_SpkOutMid.freqHz = wxGetApp().m_SpkOutMidFreqHz; setFreq(&m_SpkOutMid);
+        m_SpkOutMid.freqHz = wxGetApp().m_SpkOutMidFreqHz;
         m_SpkOutMid.freqHz = limit(m_SpkOutMid.freqHz, 1.0, MAX_FREQ_TREBLE);
-        m_SpkOutMid.gaindB = wxGetApp().m_SpkOutMidGaindB; setGain(&m_SpkOutMid);
+        setFreq(&m_SpkOutMid);
+        m_SpkOutMid.gaindB = wxGetApp().m_SpkOutMidGaindB;
         m_SpkOutMid.gaindB = limit(m_SpkOutMid.gaindB, MIN_GAIN, MAX_GAIN);
-        m_SpkOutMid.Q = wxGetApp().m_SpkOutMidQ; setQ(&m_SpkOutMid);
+        setGain(&m_SpkOutMid);
+        m_SpkOutMid.Q = wxGetApp().m_SpkOutMidQ;
         m_SpkOutMid.Q = limit(m_SpkOutMid.Q, pow(10.0,MIN_LOG10_Q), pow(10.0, MAX_LOG10_Q));
+        setQ(&m_SpkOutMid);
 
         m_SpkOutEnable->SetValue(wxGetApp().m_SpkOutEQEnable);
 
-        setFreq(&m_SpkOutBass); setGain(&m_SpkOutBass); plotSpkOutFilterSpectrum();
+        plotSpkOutFilterSpectrum();
     }
     if(inout == EXCHANGE_DATA_OUT)
     {
@@ -567,6 +564,7 @@ void FilterDlg::OnMicInEnable(wxScrollEvent& event) {
 
 void FilterDlg::OnSpkOutEnable(wxScrollEvent& event) {
     wxGetApp().m_SpkOutEQEnable = m_SpkOutEnable->GetValue();
+    printf("wxGetApp().m_SpkOutEQEnable: %d\n", wxGetApp().m_SpkOutEQEnable);
 }
 
 void FilterDlg::setFreq(EQ *eq)
@@ -583,10 +581,14 @@ void FilterDlg::sliderToFreq(EQ *eq, bool micIn)
     eq->freqHz = ((float)eq->sliderFreq->GetValue()/SLIDER_MAX)*eq->maxFreqHz;
     if (eq->freqHz < 1.0) eq->freqHz = 1.0; // sox doesn't like 0 Hz;
     setFreq(eq);
-    if (micIn)
+    if (micIn) {
         plotMicInFilterSpectrum();
-    else
+        adjRunTimeMicInFilter();
+    }
+    else {
         plotSpkOutFilterSpectrum();
+        adjRunTimeSpkOutFilter();
+    }
 }
 
 void FilterDlg::setGain(EQ *eq)
@@ -605,10 +607,15 @@ void FilterDlg::sliderToGain(EQ *eq, bool micIn)
     eq->gaindB = MIN_GAIN + range*((float)eq->sliderGain->GetValue()/SLIDER_MAX);
     //printf("gaindB: %f\n", eq->gaindB);
     setGain(eq);
-    if (micIn)
+    if (micIn) {
         plotMicInFilterSpectrum();
-    else
+        adjRunTimeMicInFilter();
+    }
+    else {
         plotSpkOutFilterSpectrum();
+        adjRunTimeSpkOutFilter();
+    }
+        
 }
 
 void FilterDlg::setQ(EQ *eq)
@@ -632,35 +639,42 @@ void FilterDlg::sliderToQ(EQ *eq, bool micIn)
     eq->Q = pow(10.0, log10Q);
     //printf("log10Q: %f eq->Q: %f\n", log10Q, eq->Q);
     setQ(eq);
-    if (micIn)
+    if (micIn) {
         plotMicInFilterSpectrum();
-    else
+        adjRunTimeMicInFilter();
+    }
+    else {
         plotSpkOutFilterSpectrum();
+        adjRunTimeSpkOutFilter();
+    }
 }
 
 void FilterDlg::plotMicInFilterSpectrum(void) {
     plotFilterSpectrum(&m_MicInBass, &m_MicInMid, &m_MicInTreble, m_MicInFreqRespPlot, m_MicInMagdB);
-    
+}
+
+void FilterDlg::plotSpkOutFilterSpectrum(void) {
+    plotFilterSpectrum(&m_SpkOutBass, &m_SpkOutMid, &m_SpkOutTreble, m_SpkOutFreqRespPlot, m_SpkOutMagdB);
+}
+
+void FilterDlg::adjRunTimeMicInFilter(void) {
     // signal an adjustment in running filter coeffs
 
     if (m_running) {
         ExchangeData(EXCHANGE_DATA_OUT, false);
         *m_newMicInFilter = true;
     }
-        
 }
-
-void FilterDlg::plotSpkOutFilterSpectrum(void) {
-    plotFilterSpectrum(&m_SpkOutBass, &m_SpkOutMid, &m_SpkOutTreble, m_SpkOutFreqRespPlot, m_SpkOutMagdB);
-
+        
+void FilterDlg::adjRunTimeSpkOutFilter(void) {
     // signal an adjustment in running filter coeffs
 
     if (m_running) {
         ExchangeData(EXCHANGE_DATA_OUT, false);
         *m_newSpkOutFilter = true;
     }
-        
 }
+        
 
 void FilterDlg::plotFilterSpectrum(EQ *eqBass, EQ *eqMid, EQ *eqTreble, PlotSpectrum* freqRespPlot, float *magdB) {
     char  *argBass[10];
index 4e7562833a7e57504d84a03e3392efde69a8feb1..ab43f7bdc3758e6d184620e35ac1bcd9c2f532f3 100644 (file)
@@ -141,6 +141,8 @@ class FilterDlg : public wxDialog
         void          calcFilterSpectrum(float magdB[], int arc, char *argv[]);
         void          plotMicInFilterSpectrum(void);
         void          plotSpkOutFilterSpectrum(void);
+        void          adjRunTimeMicInFilter(void);
+        void          adjRunTimeSpkOutFilter(void);
 
         EQ            m_MicInBass;
         EQ            m_MicInMid;
index 70d82c80c19ed7cea613f6d8af52812ac16b538e..93b00ae385f35e4935dcf631bb6a2c51544d733d 100644 (file)
@@ -722,10 +722,10 @@ void MainFrame::OnTimer(wxTimerEvent &evt)
         deleteEQFilters(g_rxUserdata);
         designEQFilters(g_rxUserdata);        
         g_mutexProtectingCallbackData.Unlock();
-        g_rxUserdata->micInEQEnable = wxGetApp().m_MicInEQEnable;
-        g_rxUserdata->spkOutEQEnable = wxGetApp().m_SpkOutEQEnable;
         m_newMicInFilter = m_newSpkOutFilter = false;
     }
+    g_rxUserdata->micInEQEnable = wxGetApp().m_MicInEQEnable;
+    g_rxUserdata->spkOutEQEnable = wxGetApp().m_SpkOutEQEnable;
 }
 
 #endif
@@ -1381,9 +1381,11 @@ void MainFrame::OnToolsAudio(wxCommandEvent& event)
 void MainFrame::OnToolsFilter(wxCommandEvent& event)
 {
     wxUnusedVar(event);
+    printf("OnToolsFilter Start: wxGetApp().m_SpkOutBassFreqHz: %f\n",wxGetApp().m_SpkOutBassFreqHz);
     FilterDlg *dlg = new FilterDlg(NULL, m_RxRunning, &m_newMicInFilter, &m_newSpkOutFilter);
     dlg->ShowModal();
     delete dlg;
+    printf("OnToolsFilter End: wxGetApp().m_SpkOutBassFreqHz: %f\n",wxGetApp().m_SpkOutBassFreqHz);
 }
 
 //-------------------------------------------------------------------------
@@ -1515,7 +1517,7 @@ void MainFrame::OnHelpAbout(wxCommandEvent& event)
 
     wxString msg;
     msg.Printf( wxT("FreeDV: Open Source Narrow Band Digital Voice over Radio\n\n")
-                wxT("http://freedv.org\n\n")
+                wxT("For Help and Support visit: http://freedv.org\n\n")
                 wxT("GNU Public License V2.1\n\n")
                 wxT("Copyright (c) David Witten KD0EAG and David Rowe VK5DGR\n\n")
                 wxT("svn revision: %s\n") + svnLatestRev, SVN_REVISION);
@@ -1604,6 +1606,9 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event)
         fdmdv_destroy(g_pFDMDV);
         codec2_destroy(g_pCodec2);
 
+        m_newMicInFilter = m_newSpkOutFilter = true;
+        deleteEQFilters(g_rxUserdata);
+
         m_togBtnSplit->Disable();
         m_togRxID->Disable();
         m_togTxID->Disable();
@@ -1820,6 +1825,7 @@ void MainFrame::startRxStream()
         
         // Init Equaliser Filters ------------------------------------------------------
 
+        m_newMicInFilter = m_newSpkOutFilter = true;
         designEQFilters(g_rxUserdata);
         g_rxUserdata->micInEQEnable = wxGetApp().m_MicInEQEnable;
         g_rxUserdata->spkOutEQEnable = wxGetApp().m_SpkOutEQEnable;
@@ -1960,7 +1966,7 @@ void  MainFrame::designEQFilters(paCallBackData *cb)
     // init Mic In Equaliser Filters
 
     if (m_newMicInFilter) {
-        printf("designing new Min In filters\n");
+        //printf("designing new Min In filters\n");
         cb->sbqMicInBass   = designAnEQFilter("bass", wxGetApp().m_MicInBassFreqHz, wxGetApp().m_MicInBassGaindB);
         cb->sbqMicInTreble = designAnEQFilter("treble", wxGetApp().m_MicInTrebleFreqHz, wxGetApp().m_MicInTrebleGaindB);
         cb->sbqMicInMid    = designAnEQFilter("equalizer", wxGetApp().m_MicInMidFreqHz, wxGetApp().m_MicInMidGaindB, wxGetApp().m_MicInMidQ);
@@ -1969,7 +1975,8 @@ void  MainFrame::designEQFilters(paCallBackData *cb)
     // init Spk Out Equaliser Filters
 
     if (m_newSpkOutFilter) {
-        printf("designing new Spk Out filters\n");
+        //printf("designing new Spk Out filters\n");
+        //printf("designEQFilters: wxGetApp().m_SpkOutBassFreqHz: %f\n",wxGetApp().m_SpkOutBassFreqHz);
         cb->sbqSpkOutBass   = designAnEQFilter("bass", wxGetApp().m_SpkOutBassFreqHz, wxGetApp().m_SpkOutBassGaindB);
         cb->sbqSpkOutTreble = designAnEQFilter("treble", wxGetApp().m_SpkOutTrebleFreqHz, wxGetApp().m_SpkOutTrebleGaindB);
         cb->sbqSpkOutMid    = designAnEQFilter("equalizer", wxGetApp().m_SpkOutMidFreqHz, wxGetApp().m_SpkOutMidGaindB, wxGetApp().m_SpkOutMidQ);