From 5b2d9f030dff444fcc62a81b1ce16db9324bb4ab Mon Sep 17 00:00:00 2001 From: drowe67 Date: Sat, 1 Dec 2012 01:09:11 +0000 Subject: [PATCH] equaliser: one slider partially connected git-svn-id: https://svn.code.sf.net/p/freetel/code@1094 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2/src/dlg_filter.cpp | 87 ++++++++++++++++++++++++++++---------- fdmdv2/src/dlg_filter.h | 20 ++++++--- fdmdv2/src/fdmdv2_main.cpp | 2 + fdmdv2/src/fdmdv2_main.h | 6 ++- 4 files changed, 86 insertions(+), 29 deletions(-) diff --git a/fdmdv2/src/dlg_filter.cpp b/fdmdv2/src/dlg_filter.cpp index 6a16b1f7..736d0ba9 100644 --- a/fdmdv2/src/dlg_filter.cpp +++ b/fdmdv2/src/dlg_filter.cpp @@ -23,8 +23,11 @@ #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); +} + diff --git a/fdmdv2/src/dlg_filter.h b/fdmdv2/src/dlg_filter.h index e643d813..542616a8 100644 --- a/fdmdv2/src/dlg_filter.h +++ b/fdmdv2/src/dlg_filter.h @@ -27,9 +27,12 @@ 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; diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index 01a893f2..c5ddaa04 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -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("/")); diff --git a/fdmdv2/src/fdmdv2_main.h b/fdmdv2/src/fdmdv2_main.h index 039dadb0..55660be1 100644 --- a/fdmdv2/src/fdmdv2_main.h +++ b/fdmdv2/src/fdmdv2_main.h @@ -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; -- 2.25.1