From d6895243f2ed381e8b3362cd8f974c3389e527b6 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Mon, 3 Dec 2012 05:31:12 +0000 Subject: [PATCH] speaker eq states now being preserved and can take eqs in and out at run time git-svn-id: https://svn.code.sf.net/p/freetel/code@1113 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2/src/dlg_filter.cpp | 116 +++++++++++++++++++++---------------- fdmdv2/src/dlg_filter.h | 2 + fdmdv2/src/fdmdv2_main.cpp | 17 ++++-- 3 files changed, 79 insertions(+), 56 deletions(-) diff --git a/fdmdv2/src/dlg_filter.cpp b/fdmdv2/src/dlg_filter.cpp index 96528e76..98aa8377 100644 --- a/fdmdv2/src/dlg_filter.cpp +++ b/fdmdv2/src/dlg_filter.cpp @@ -38,10 +38,10 @@ // 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]; diff --git a/fdmdv2/src/dlg_filter.h b/fdmdv2/src/dlg_filter.h index 4e756283..ab43f7bd 100644 --- a/fdmdv2/src/dlg_filter.h +++ b/fdmdv2/src/dlg_filter.h @@ -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; diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index 70d82c80..93b00ae3 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -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); -- 2.25.1