From 77dcf6b68434b9160b5533a5c6bace7d40b0db33 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Sun, 2 Dec 2012 02:48:07 +0000 Subject: [PATCH] first pass at speaker eq controls git-svn-id: https://svn.code.sf.net/p/freetel/code@1109 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2/src/dlg_filter.cpp | 83 ++++++++++++++++++++++++++++- fdmdv2/src/dlg_filter.h | 9 ++++ fdmdv2/src/fdmdv2_main.cpp | 8 +++ fdmdv2/src/fdmdv2_main.h | 9 ++++ fdmdv2/src/fdmdv2_plot_spectrum.cpp | 4 +- 5 files changed, 109 insertions(+), 4 deletions(-) diff --git a/fdmdv2/src/dlg_filter.cpp b/fdmdv2/src/dlg_filter.cpp index 321b9138..ff859a6a 100644 --- a/fdmdv2/src/dlg_filter.cpp +++ b/fdmdv2/src/dlg_filter.cpp @@ -92,7 +92,7 @@ FilterDlg::FilterDlg(wxWindow* parent, bool running, wxWindowID id, const wxStri newLPCPFControl(&m_codec2LPCPostFilterBeta, &m_staticTextBeta, right, "Beta"); newLPCPFControl(&m_codec2LPCPostFilterGamma, &m_staticTextGamma, right, "Gamma"); - lpcpfs->Add(right, 0, wxALL|wxBOTTOM, 5); + lpcpfs->Add(right, 0, wxALL, 5); #endif bSizer30->Add(lpcpfs, 0, wxALL, 0); @@ -177,6 +177,14 @@ FilterDlg::FilterDlg(wxWindow* parent, bool running, wxWindowID id, const wxStri m_MicInMid.sliderGain->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnMicInMidGainScroll), NULL, this); m_MicInMid.sliderQ->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnMicInMidQScroll), NULL, this); + m_SpkOutBass.sliderFreq->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutBassFreqScroll), NULL, this); + m_SpkOutBass.sliderGain->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutBassGainScroll), NULL, this); + m_SpkOutTreble.sliderFreq->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutTrebleFreqScroll), NULL, this); + m_SpkOutTreble.sliderGain->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutTrebleGainScroll), NULL, this); + m_SpkOutMid.sliderFreq->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutMidFreqScroll), NULL, this); + m_SpkOutMid.sliderGain->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutMidGainScroll), NULL, this); + m_SpkOutMid.sliderQ->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutMidQScroll), 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); @@ -210,6 +218,14 @@ FilterDlg::~FilterDlg() m_MicInMid.sliderGain->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnMicInMidGainScroll), NULL, this); m_MicInMid.sliderQ->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnMicInMidQScroll), NULL, this); + m_SpkOutBass.sliderFreq->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutBassFreqScroll), NULL, this); + m_SpkOutBass.sliderGain->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutBassGainScroll), NULL, this); + m_SpkOutTreble.sliderFreq->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutTrebleFreqScroll), NULL, this); + m_SpkOutTreble.sliderGain->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutTrebleGainScroll), NULL, this); + m_SpkOutMid.sliderFreq->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutMidFreqScroll), NULL, this); + m_SpkOutMid.sliderGain->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutMidGainScroll), NULL, this); + m_SpkOutMid.sliderQ->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnSpkOutMidQScroll), 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); @@ -299,6 +315,27 @@ void FilterDlg::ExchangeData(int inout) m_MicInMid.Q = limit(m_MicInMid.Q, pow(10.0,MIN_LOG10_Q), pow(10.0, MAX_LOG10_Q)); setFreq(&m_MicInBass); setGain(&m_MicInBass); plotMicInFilterSpectrum(); + + // Spk Out Equaliser + + m_SpkOutBass.freqHz = wxGetApp().m_SpkOutBassFreqHz; setFreq(&m_SpkOutBass); + m_SpkOutBass.freqHz = limit(m_SpkOutBass.freqHz, 1.0, MAX_FREQ_BASS); + m_SpkOutBass.gaindB = wxGetApp().m_SpkOutBassGaindB; setGain(&m_SpkOutBass); + m_SpkOutBass.gaindB = limit(m_SpkOutBass.gaindB, MIN_GAIN, MAX_GAIN); + + m_SpkOutTreble.freqHz = wxGetApp().m_SpkOutTrebleFreqHz; setFreq(&m_SpkOutTreble); + m_SpkOutTreble.freqHz = limit(m_SpkOutTreble.freqHz, 1.0, MAX_FREQ_TREBLE); + m_SpkOutTreble.gaindB = wxGetApp().m_SpkOutTrebleGaindB; setGain(&m_SpkOutTreble); + m_SpkOutTreble.gaindB = limit(m_SpkOutTreble.gaindB, MIN_GAIN, MAX_GAIN); + + m_SpkOutMid.freqHz = wxGetApp().m_SpkOutMidFreqHz; setFreq(&m_SpkOutMid); + m_SpkOutMid.freqHz = limit(m_SpkOutMid.freqHz, 1.0, MAX_FREQ_TREBLE); + m_SpkOutMid.gaindB = wxGetApp().m_SpkOutMidGaindB; setGain(&m_SpkOutMid); + m_SpkOutMid.gaindB = limit(m_SpkOutMid.gaindB, MIN_GAIN, MAX_GAIN); + m_SpkOutMid.Q = wxGetApp().m_SpkOutMidQ; setQ(&m_SpkOutMid); + m_SpkOutMid.Q = limit(m_SpkOutMid.Q, pow(10.0,MIN_LOG10_Q), pow(10.0, MAX_LOG10_Q)); + + setFreq(&m_SpkOutBass); setGain(&m_SpkOutBass); plotSpkOutFilterSpectrum(); } if(inout == EXCHANGE_DATA_OUT) { @@ -333,6 +370,25 @@ void FilterDlg::ExchangeData(int inout) wxGetApp().m_MicInMidQ = m_MicInMid.Q; pConfig->Write(wxT("/Filter/MicInMidQ"), (int)(100.0*m_MicInMid.Q)); + // Spk Out Equaliser + + wxGetApp().m_SpkOutBassFreqHz = m_SpkOutBass.freqHz; + pConfig->Write(wxT("/Filter/SpkOutBassFreqHz"), (int)m_SpkOutBass.freqHz); + wxGetApp().m_SpkOutBassGaindB = m_SpkOutBass.gaindB; + pConfig->Write(wxT("/Filter/SpkOutBassGaindB"), (int)(10.0*m_SpkOutBass.gaindB)); + + wxGetApp().m_SpkOutTrebleFreqHz = m_SpkOutTreble.freqHz; + pConfig->Write(wxT("/Filter/SpkOutTrebleFreqHz"), (int)m_SpkOutTreble.freqHz); + wxGetApp().m_SpkOutTrebleGaindB = m_SpkOutTreble.gaindB; + pConfig->Write(wxT("/Filter/SpkOutTrebleGaindB"), (int)(10.0*m_SpkOutTreble.gaindB)); + + wxGetApp().m_SpkOutMidFreqHz = m_SpkOutMid.freqHz; + pConfig->Write(wxT("/Filter/SpkOutMidFreqHz"), (int)m_SpkOutMid.freqHz); + wxGetApp().m_SpkOutMidGaindB = m_SpkOutMid.gaindB; + pConfig->Write(wxT("/Filter/SpkOutMidGaindB"), (int)(10.0*m_SpkOutMid.gaindB)); + wxGetApp().m_SpkOutMidQ = m_SpkOutMid.Q; + pConfig->Write(wxT("/Filter/SpkOutMidQ"), (int)(100.0*m_SpkOutMid.Q)); + pConfig->Flush(); } delete wxConfigBase::Set((wxConfigBase *) NULL); @@ -375,6 +431,19 @@ void FilterDlg::OnDefault(wxCommandEvent& event) m_MicInMid.Q = 1.0; setFreq(&m_MicInMid); setGain(&m_MicInMid); setQ(&m_MicInMid); + m_SpkOutBass.freqHz = 100.0; + m_SpkOutBass.gaindB = 0.0; + setFreq(&m_SpkOutBass); setGain(&m_SpkOutBass); + + m_SpkOutTreble.freqHz = 3000.0; + m_SpkOutTreble.gaindB = 0.0; + setFreq(&m_SpkOutTreble); setGain(&m_SpkOutTreble); + + m_SpkOutMid.freqHz = 1500.0; + m_SpkOutMid.gaindB = 0.0; + m_SpkOutMid.Q = 1.0; + setFreq(&m_SpkOutMid); setGain(&m_SpkOutMid); setQ(&m_SpkOutMid); + plotMicInFilterSpectrum(); } @@ -468,6 +537,8 @@ void FilterDlg::sliderToFreq(EQ *eq, bool micIn) setFreq(eq); if (micIn) plotMicInFilterSpectrum(); + else + plotSpkOutFilterSpectrum(); } void FilterDlg::setGain(EQ *eq) @@ -488,6 +559,8 @@ void FilterDlg::sliderToGain(EQ *eq, bool micIn) setGain(eq); if (micIn) plotMicInFilterSpectrum(); + else + plotSpkOutFilterSpectrum(); } void FilterDlg::setQ(EQ *eq) @@ -509,16 +582,22 @@ void FilterDlg::sliderToQ(EQ *eq, bool micIn) float sliderNorm = (float)eq->sliderQ->GetValue()/SLIDER_MAX; float log10Q = MIN_LOG10_Q + sliderNorm*(log10_range); eq->Q = pow(10.0, log10Q); - printf("log10Q: %f eq->Q: %f\n", log10Q, eq->Q); + //printf("log10Q: %f eq->Q: %f\n", log10Q, eq->Q); setQ(eq); if (micIn) plotMicInFilterSpectrum(); + else + plotSpkOutFilterSpectrum(); } 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::plotFilterSpectrum(EQ *eqBass, EQ *eqMid, EQ *eqTreble, PlotSpectrum* freqRespPlot, float *magdB) { char *argBass[10]; char *argTreble[10]; diff --git a/fdmdv2/src/dlg_filter.h b/fdmdv2/src/dlg_filter.h index 1fdf5921..402d9702 100644 --- a/fdmdv2/src/dlg_filter.h +++ b/fdmdv2/src/dlg_filter.h @@ -79,6 +79,14 @@ class FilterDlg : public wxDialog void OnMicInMidGainScroll(wxScrollEvent& event) { sliderToGain(&m_MicInMid, true); } void OnMicInMidQScroll(wxScrollEvent& event) { sliderToQ(&m_MicInMid, true); } + void OnSpkOutBassFreqScroll(wxScrollEvent& event) { sliderToFreq(&m_SpkOutBass, false); } + void OnSpkOutBassGainScroll(wxScrollEvent& event) { sliderToGain(&m_SpkOutBass, false); } + void OnSpkOutTrebleFreqScroll(wxScrollEvent& event) { sliderToFreq(&m_SpkOutTreble, false); } + void OnSpkOutTrebleGainScroll(wxScrollEvent& event) { sliderToGain(&m_SpkOutTreble, false); } + void OnSpkOutMidFreqScroll(wxScrollEvent& event) { sliderToFreq(&m_SpkOutMid, false); } + void OnSpkOutMidGainScroll(wxScrollEvent& event) { sliderToGain(&m_SpkOutMid, false); } + void OnSpkOutMidQScroll(wxScrollEvent& event) { sliderToQ(&m_SpkOutMid, false); } + wxStaticText* m_staticText8; wxCheckBox* m_codec2LPCPostFilterEnable; wxStaticText* m_staticText9; @@ -121,6 +129,7 @@ class FilterDlg : public wxDialog void plotFilterSpectrum(EQ *eqBass, EQ *eqMid, EQ* eqTreble, PlotSpectrum* freqRespPlot, float *magdB); void calcFilterSpectrum(float magdB[], int arc, char *argv[]); void plotMicInFilterSpectrum(void); + void plotSpkOutFilterSpectrum(void); EQ m_MicInBass; EQ m_MicInMid; diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index 416aaa2e..0eed1fb1 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -338,6 +338,14 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) wxGetApp().m_MicInMidGaindB = (float)pConfig->Read(wxT("/Filter/MicInMidGaindB"), (long)0)/10.0; wxGetApp().m_MicInMidQ = (float)pConfig->Read(wxT("/Filter/MicInMidQ"), (long)100)/100.0; + wxGetApp().m_SpkOutBassFreqHz = (float)pConfig->Read(wxT("/Filter/SpkOutBassFreqHz"), 1); + wxGetApp().m_SpkOutBassGaindB = (float)pConfig->Read(wxT("/Filter/SpkOutBassGaindB"), (long)0)/10.0; + wxGetApp().m_SpkOutTrebleFreqHz = (float)pConfig->Read(wxT("/Filter/SpkOutTrebleFreqHz"), 1); + wxGetApp().m_SpkOutTrebleGaindB = (float)pConfig->Read(wxT("/Filter/SpkOutTrebleGaindB"), (long)0)/10.0; + wxGetApp().m_SpkOutMidFreqHz = (float)pConfig->Read(wxT("/Filter/SpkOutMidFreqHz"), 1); + wxGetApp().m_SpkOutMidGaindB = (float)pConfig->Read(wxT("/Filter/SpkOutMidGaindB"), (long)0)/10.0; + wxGetApp().m_SpkOutMidQ = (float)pConfig->Read(wxT("/Filter/SpkOutMidQ"), (long)100)/100.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 6a06c825..d39b063b 100644 --- a/fdmdv2/src/fdmdv2_main.h +++ b/fdmdv2/src/fdmdv2_main.h @@ -161,6 +161,15 @@ class MainApp : public wxApp float m_MicInMidGaindB; float m_MicInMidQ; + // Spk Out Equaliser + float m_SpkOutBassFreqHz; + float m_SpkOutBassGaindB; + float m_SpkOutTrebleFreqHz; + float m_SpkOutTrebleGaindB; + float m_SpkOutMidFreqHz; + float m_SpkOutMidGaindB; + float m_SpkOutMidQ; + // Flags for displaying windows int m_show_wf; int m_show_spect; diff --git a/fdmdv2/src/fdmdv2_plot_spectrum.cpp b/fdmdv2/src/fdmdv2_plot_spectrum.cpp index 843beea1..a50f65c9 100644 --- a/fdmdv2/src/fdmdv2_plot_spectrum.cpp +++ b/fdmdv2/src/fdmdv2_plot_spectrum.cpp @@ -136,8 +136,8 @@ void PlotSpectrum::draw(wxAutoBufferedPaintDC& dc) mag_dB_to_py = (float)m_rGrid.GetHeight()/(m_max_mag_db - m_min_mag_db); int last_index = ((float)MAX_F_HZ/(float)FDMDV_MAX_F_HZ)*FDMDV_NSPEC; - //prev_x = PLOT_BORDER + XLEFT_OFFSET; - //prev_y = PLOT_BORDER; + prev_x = PLOT_BORDER + XLEFT_OFFSET; + prev_y = PLOT_BORDER; for(index = 0; index < m_n_magdB; index++) { x = index*index_to_px; -- 2.25.1