From 1595c2728e4652d75f1ffc512cd0e227bbb68f74 Mon Sep 17 00:00:00 2001 From: dave Date: Wed, 10 Dec 2014 08:44:25 +0000 Subject: [PATCH 01/81] re initial, no working fft, faders, checkboxes --- plugins/CMakeLists.txt | 1 + plugins/eq/CMakeLists.txt | 3 + plugins/eq/artwork.png | Bin 0 -> 50584 bytes plugins/eq/eqcontrols.cpp | 201 ++++++++++++++++++++ plugins/eq/eqcontrols.h | 127 +++++++++++++ plugins/eq/eqcontrolsdialog.cpp | 164 ++++++++++++++++ plugins/eq/eqcontrolsdialog.h | 94 +++++++++ plugins/eq/eqeffect.cpp | 314 ++++++++++++++++++++++++++++++ plugins/eq/eqeffect.h | 80 ++++++++ plugins/eq/eqfader.cpp | 0 plugins/eq/eqfader.h | 111 +++++++++++ plugins/eq/eqfilter.cpp | 5 + plugins/eq/eqfilter.h | 315 +++++++++++++++++++++++++++++++ plugins/eq/eqhighshelffileter.h | 1 + plugins/eq/eqhp12.h | 0 plugins/eq/eqlowshelffilter.h | 3 + plugins/eq/eqlp12.h | 0 plugins/eq/eqparameterwidget.cpp | 197 +++++++++++++++++++ plugins/eq/eqparameterwidget.h | 158 ++++++++++++++++ plugins/eq/eqpeekfilter.cpp | 3 + plugins/eq/eqpeekfilter.h | 3 + plugins/eq/eqspectrumview.h | 80 ++++++++ plugins/eq/logo.png | Bin 0 -> 3225 bytes 23 files changed, 1860 insertions(+) create mode 100644 plugins/eq/CMakeLists.txt create mode 100644 plugins/eq/artwork.png create mode 100644 plugins/eq/eqcontrols.cpp create mode 100644 plugins/eq/eqcontrols.h create mode 100644 plugins/eq/eqcontrolsdialog.cpp create mode 100644 plugins/eq/eqcontrolsdialog.h create mode 100644 plugins/eq/eqeffect.cpp create mode 100644 plugins/eq/eqeffect.h create mode 100644 plugins/eq/eqfader.cpp create mode 100644 plugins/eq/eqfader.h create mode 100644 plugins/eq/eqfilter.cpp create mode 100644 plugins/eq/eqfilter.h create mode 100644 plugins/eq/eqhighshelffileter.h create mode 100644 plugins/eq/eqhp12.h create mode 100644 plugins/eq/eqlowshelffilter.h create mode 100644 plugins/eq/eqlp12.h create mode 100644 plugins/eq/eqparameterwidget.cpp create mode 100644 plugins/eq/eqparameterwidget.h create mode 100644 plugins/eq/eqpeekfilter.cpp create mode 100644 plugins/eq/eqpeekfilter.h create mode 100644 plugins/eq/eqspectrumview.h create mode 100644 plugins/eq/logo.png diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 4df760ecd..e08e37079 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -9,6 +9,7 @@ ADD_SUBDIRECTORY(carlarack) ADD_SUBDIRECTORY(delay) ADD_SUBDIRECTORY(DualFilter) ADD_SUBDIRECTORY(dynamics_processor) +ADD_SUBDIRECTORY(eq) ADD_SUBDIRECTORY(flanger) ADD_SUBDIRECTORY(flp_import) ADD_SUBDIRECTORY(HydrogenImport) diff --git a/plugins/eq/CMakeLists.txt b/plugins/eq/CMakeLists.txt new file mode 100644 index 000000000..72dc8bb5e --- /dev/null +++ b/plugins/eq/CMakeLists.txt @@ -0,0 +1,3 @@ +INCLUDE(BuildPlugin) + +BUILD_PLUGIN(eq eqeffect.cpp eqcontrols.cpp eqcontrolsdialog.cpp eqfilter.h eqparameterwidget.cpp eqfader.h MOCFILES eqcontrols.h eqparameterwidget.h eqfader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/eq/artwork.png b/plugins/eq/artwork.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4a0418b87ed04c2670276d2cd4b4e5c506439a GIT binary patch literal 50584 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
-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 literal 0 HcmV?d00001 diff --git a/plugins/eq/eqcontrols.cpp b/plugins/eq/eqcontrols.cpp new file mode 100644 index 000000000..efb89a245 --- /dev/null +++ b/plugins/eq/eqcontrols.cpp @@ -0,0 +1,201 @@ +/* + * eqcontrols.cpp - defination of EqControls class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include + +#include "eqcontrols.h" +#include "eqeffect.h" + + + + +EqControls::EqControls( EqEffect *effect ) : + EffectControls( effect ), + m_effect( effect ), + m_inGainModel( 1.0, 0.0, 2.0, 0.001, this, tr( "Input gain") ), + m_outGainModel( 1.0, 0.0, 2.0, 0.001, this, tr( "Output gain" ) ), + m_lowShelfGainModel( 0.0 , -20, 20, 0.001, this, tr( "Low shelf gain" ) ), + m_para1GainModel( 0.0 , -20, 20, 0.001, this, tr( "Peak 1 gain" ) ), + m_para2GainModel( 0.0 , -20, 20, 0.001, this, tr( "Peak 2 gain" ) ), + m_para3GainModel( 0.0 , -20, 20, 0.001, this, tr( "Peak 3 gain" ) ), + m_para4GainModel( 0.0 , -20, 20, 0.001, this, tr( "Peak 4 gain" ) ), + m_highShelfGainModel( 0.0 , -20, 20, 0.001, this, tr( "High Shelf gain" ) ), + m_hpResModel( 0.707,0.003, 10.0 , 0.001, this, tr( "HP res" ) ), + m_lowShelfResModel( 1.4,0.0, 10.0 , 0.001, this , tr( "Low Shelf res" ) ), + m_para1ResModel( 1.4 ,0.55, 10.0 , 0.001, this , tr( "Peak 1 res" ) ), + m_para2ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 2 res" ) ), + m_para3ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 3 res" ) ), + m_para4ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 4 res" ) ), + m_highShelfResModel( 1.4, 0.001, 10.0 , 0.001, this , tr( "High Shelf res" ) ), + m_lpResModel( 0.707,0.003, 10.0 , 0.001, this , tr( "LP res" ) ), + m_hpFeqModel( 31.0, 30.0, 20000, 0.001, this , tr( "HP freq" ) ), + m_lowShelfFreqModel( 80.0, 25.0, 20000, 0.001, this , tr( "Low Shelf freq" ) ), + m_para1FreqModel( 120.0, 27.0, 20000, 0.001, this , tr( "Peak 1 freq" ) ), + m_para2FreqModel( 250.0, 27.0, 20000, 0.001, this, tr( "Peak 2 freq" ) ), + m_para3FreqModel( 2000.0, 27.0, 20000, 0.001, this , tr( "Peak 3 freq" ) ), + m_para4FreqModel( 4000.0, 27.0, 20000, 0.001, this , tr( "Peak 4 freq" ) ), + m_highShelfFreqModel( 12000.0, 27.0, 20000, 0.001, this , tr( "High shelf freq" ) ), + m_lpFreqModel( 18000.0, 27.0, 20000, 0.001, this , tr( "LP freq" ) ), + m_hpActiveModel( false, this , tr( "HP active" ) ), + m_lowShelfActiveModel( false, this , tr( "Low shelf active" ) ), + m_para1ActiveModel(false, this , tr( "Peak 1 active" ) ), + m_para2ActiveModel( false, this , tr( "Peak 2 active" ) ), + m_para3ActiveModel( false, this , tr( "Peak 3 active" ) ), + m_para4ActiveModel( false, this , tr( "Peak 4 active" ) ), + m_highShelfActiveModel( false, this , tr( "High shelf active" ) ), + m_lpActiveModel( false, this , tr( "LP active" ) ), + m_lp12Model( true, this , tr( "LP 12" ) ), + m_lp24Model( false, this , tr( "LP 24" ) ), + m_lp48Model( false, this , tr( "LP 48" ) ), + m_hp12Model( true, this , tr( "HP 12" ) ), + m_hp24Model( false, this , tr( "HP 24" ) ), + m_hp48Model( false, this , tr( "HP 48" ) ), + m_analyzeModel( true, this , tr( "Analyze enable" ) ) + +{ + m_hpFeqModel.setScaleLogarithmic( true ); + m_lowShelfFreqModel.setScaleLogarithmic( true ); + m_para1FreqModel.setScaleLogarithmic( true ); + m_para2FreqModel.setScaleLogarithmic( true ); + m_para3FreqModel.setScaleLogarithmic( true ); + m_para4FreqModel.setScaleLogarithmic( true ); + m_highShelfFreqModel.setScaleLogarithmic( true ); + m_lpFreqModel.setScaleLogarithmic( true ); + + m_para1GainModel.setScaleLogarithmic( true ); + m_inPeakL = 0; + m_inPeakR = 0; + m_lowShelfPeakL = 0; m_lowShelfPeakR = 0; + m_para1PeakL = 0; m_para1PeakR = 0; + m_para2PeakL = 0; m_para2PeakR = 0; + m_para3PeakL = 0; m_para3PeakR = 0; + m_para4PeakL = 0; m_para4PeakR = 0; + m_highShelfPeakL = 0; m_highShelfPeakR = 0; + +} + + + + +void EqControls::loadSettings( const QDomElement &_this ) +{ + m_inGainModel.loadSettings( _this, "Inputgain" ); + m_outGainModel.loadSettings( _this, "Outputgain"); + m_lowShelfGainModel.loadSettings( _this , "Lowshelfgain" ); + m_para1GainModel.loadSettings( _this, "Peak1gain" ); + m_para2GainModel.loadSettings( _this, "Peak2gain" ); + m_para3GainModel.loadSettings( _this, "Peak3gain" ); + m_para4GainModel.loadSettings( _this, "Peak4gain" ); + m_highShelfGainModel.loadSettings( _this , "HighShelfgain"); + + m_hpResModel.loadSettings( _this ,"HPres"); + m_lowShelfResModel.loadSettings( _this, "LowShelfres" ); + m_para1ResModel.loadSettings( _this ,"Peak1res" ); + m_para2ResModel.loadSettings( _this ,"Peak2res" ); + m_para3ResModel.loadSettings( _this ,"Peak3res" ); + m_para4ResModel.loadSettings( _this ,"Peak4res" ); + m_highShelfResModel.loadSettings( _this, "HighShelfres" ); + m_lpResModel.loadSettings( _this, "LPres"); + + m_hpFeqModel.loadSettings( _this, "HPfreq" ); + m_lowShelfFreqModel.loadSettings( _this, "LowShelffreq" ); + m_para1FreqModel.loadSettings( _this, "Peak1freq" ); + m_para2FreqModel.loadSettings( _this, "Peak2freq" ); + m_para3FreqModel.loadSettings( _this, "Peak3freq" ); + m_para4FreqModel.loadSettings( _this, "Peak4freq" ); + m_highShelfFreqModel.loadSettings( _this, "Highshelffreq" ); + m_lpFreqModel.loadSettings( _this, "LPfreq" ); + + m_hpActiveModel.loadSettings( _this, "HPactive" ); + m_lowShelfActiveModel.loadSettings( _this, "Lowshelfactive" ); + m_para1ActiveModel.loadSettings( _this, "Peak1active"); + m_para2ActiveModel.loadSettings( _this, "Peak2active"); + m_para3ActiveModel.loadSettings( _this, "Peak3active"); + m_para4ActiveModel.loadSettings( _this, "Peak4active"); + m_highShelfActiveModel.loadSettings( _this, "Highshelfactive" ); + m_lpActiveModel.loadSettings( _this, "LPactive" ); + + m_lp12Model.loadSettings( _this , "LP12" ); + m_lp24Model.loadSettings( _this , "LP24" ); + m_lp48Model.loadSettings( _this , "LP48" ); + + m_hp12Model.loadSettings( _this , "HP12" ); + m_hp24Model.loadSettings( _this , "HP24" ); + m_hp48Model.loadSettings( _this , "HP48" ); + m_analyzeModel.loadSettings( _this, "Analyzeenable"); +} + + + + +void EqControls::saveSettings( QDomDocument &doc, QDomElement &parent ) +{ + + m_inGainModel.saveSettings( doc, parent, "Inputgain" ); + m_outGainModel.saveSettings( doc, parent, "Outputgain"); + m_lowShelfGainModel.saveSettings( doc, parent , "Lowshelfgain" ); + m_para1GainModel.saveSettings( doc, parent, "Peak1gain" ); + m_para2GainModel.saveSettings( doc, parent, "Peak2gain" ); + m_para3GainModel.saveSettings( doc, parent, "Peak3gain" ); + m_para4GainModel.saveSettings( doc, parent, "Peak4gain" ); + m_highShelfGainModel.saveSettings( doc, parent, "HighShelfgain"); + + m_hpResModel.saveSettings( doc, parent ,"HPres"); + m_lowShelfResModel.saveSettings( doc, parent, "LowShelfres" ); + m_para1ResModel.saveSettings( doc, parent,"Peak1res" ); + m_para2ResModel.saveSettings( doc, parent,"Peak2res" ); + m_para3ResModel.saveSettings( doc, parent,"Peak3res" ); + m_para4ResModel.saveSettings( doc, parent,"Peak4res" ); + m_highShelfResModel.saveSettings( doc, parent, "HighShelfres" ); + m_lpResModel.saveSettings( doc, parent, "LPres"); + + m_hpFeqModel.saveSettings( doc, parent, "HPfreq" ); + m_lowShelfFreqModel.saveSettings( doc, parent, "LowShelffreq" ); + m_para1FreqModel.saveSettings( doc, parent, "Peak1freq" ); + m_para2FreqModel.saveSettings( doc, parent, "Peak2freq" ); + m_para3FreqModel.saveSettings( doc, parent, "Peak3freq" ); + m_para4FreqModel.saveSettings( doc, parent, "Peak4freq" ); + m_highShelfFreqModel.saveSettings( doc, parent, "Highshelffreq" ); + m_lpFreqModel.saveSettings( doc, parent, "LPfreq" ); + + m_hpActiveModel.saveSettings( doc, parent, "HPactive" ); + m_lowShelfActiveModel.saveSettings( doc, parent, "Lowshelfactive" ); + m_para1ActiveModel.saveSettings( doc, parent, "Peak1active" ); + m_para2ActiveModel.saveSettings( doc, parent, "Peak2active" ); + m_para3ActiveModel.saveSettings( doc, parent, "Peak3active" ); + m_para4ActiveModel.saveSettings( doc, parent, "Peak4active" ); + m_highShelfActiveModel.saveSettings( doc, parent, "Highshelfactive" ); + m_lpActiveModel.saveSettings( doc, parent, "LPactive" ); + + m_lp12Model.saveSettings( doc, parent, "LP12" ); + m_lp24Model.saveSettings( doc, parent, "LP24" ); + m_lp48Model.saveSettings( doc, parent, "LP48" ); + + m_hp12Model.saveSettings( doc, parent, "HP12" ); + m_hp24Model.saveSettings( doc, parent, "HP24" ); + m_hp48Model.saveSettings( doc, parent, "HP48" ); + m_analyzeModel.saveSettings( doc, parent, "Analyzeenable"); + +} + diff --git a/plugins/eq/eqcontrols.h b/plugins/eq/eqcontrols.h new file mode 100644 index 000000000..f6703919e --- /dev/null +++ b/plugins/eq/eqcontrols.h @@ -0,0 +1,127 @@ +/* + * eqcontrols.h - defination of EqControls class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef EQCONTROLS_H +#define EQCONTROLS_H + +#include "EffectControls.h" +#include "eqcontrolsdialog.h" +#include "Knob.h" + +class EqEffect; + +class EqControls : public EffectControls +{ + Q_OBJECT +public: + EqControls( EqEffect* effect ); + virtual ~EqControls() + { + } + virtual void saveSettings ( QDomDocument& doc, QDomElement& parent ); + virtual void loadSettings ( const QDomElement &_this ); + inline virtual QString nodeName() const + { + return "Eq"; + } + virtual int controlCount() + { + return 39; + } + virtual EffectControlDialog* createView() + { + printf("create dialog\n"); + return new EqControlsDialog( this ); + } + + float m_inPeakL; + float m_inPeakR; + float m_outPeakL; + float m_outPeakR; + float m_lowShelfPeakL, m_lowShelfPeakR; + float m_para1PeakL, m_para1PeakR; + float m_para2PeakL, m_para2PeakR; + float m_para3PeakL, m_para3PeakR; + float m_para4PeakL, m_para4PeakR; + float m_highShelfPeakL, m_highShelfPeakR; + + + + + +private: + EqEffect* m_effect; + + FloatModel m_inGainModel; + FloatModel m_outGainModel; + FloatModel m_lowShelfGainModel; + FloatModel m_para1GainModel; + FloatModel m_para2GainModel; + FloatModel m_para3GainModel; + FloatModel m_para4GainModel; + FloatModel m_highShelfGainModel; + + FloatModel m_hpResModel; + FloatModel m_lowShelfResModel; + FloatModel m_para1ResModel; + FloatModel m_para2ResModel; + FloatModel m_para3ResModel; + FloatModel m_para4ResModel; + FloatModel m_highShelfResModel; + FloatModel m_lpResModel; + + FloatModel m_hpFeqModel; + FloatModel m_lowShelfFreqModel; + FloatModel m_para1FreqModel; + FloatModel m_para2FreqModel; + FloatModel m_para3FreqModel; + FloatModel m_para4FreqModel; + FloatModel m_highShelfFreqModel; + FloatModel m_lpFreqModel; + + BoolModel m_hpActiveModel; + BoolModel m_lowShelfActiveModel; + BoolModel m_para1ActiveModel; + BoolModel m_para2ActiveModel; + BoolModel m_para3ActiveModel; + BoolModel m_para4ActiveModel; + BoolModel m_highShelfActiveModel; + BoolModel m_lpActiveModel; + + BoolModel m_lp12Model; + BoolModel m_lp24Model; + BoolModel m_lp48Model; + + BoolModel m_hp12Model; + BoolModel m_hp24Model; + BoolModel m_hp48Model; + + BoolModel m_analyzeModel; + + friend class EqControlsDialog; + friend class EqEffect; + +}; + +#endif // EQCONTROLS_H diff --git a/plugins/eq/eqcontrolsdialog.cpp b/plugins/eq/eqcontrolsdialog.cpp new file mode 100644 index 000000000..704e81f00 --- /dev/null +++ b/plugins/eq/eqcontrolsdialog.cpp @@ -0,0 +1,164 @@ +/* + * eqcontrolsdialog.cpp - defination of EqControlsDialog class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#include "eqcontrolsdialog.h" +#include "eqcontrols.h" +#include "embed.h" +#include "Fader.h" +#include "eqfader.h" +#include "Engine.h" +#include "AutomatableButton.h" +#include "QWidget" +#include "MainWindow.h" +#include "LedCheckbox.h" + + + + +EqControlsDialog::EqControlsDialog(EqControls *controls) : + EffectControlDialog( controls ) + +{ + m_controls = controls; + setAutoFillBackground( true ); + QPalette pal; + pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); + setPalette( pal ); + setFixedSize( 350, 275 ); + + m_parameterWidget = new EqParameterWidget( this ); + m_parameterWidget->move( 50, 5 ); +// m_inSpec = new EqSpectrumView( controls->m_effect, this); + + setBand( 0, &controls->m_hpActiveModel, &controls->m_hpFeqModel, &controls->m_hpResModel, 0, QColor(173, 115, 57), tr( "HP" ) ,0,0); + setBand( 1, &controls->m_lowShelfActiveModel, &controls->m_lowShelfFreqModel, &controls->m_lowShelfResModel, &controls->m_lowShelfGainModel, QColor(255, 0, 0), tr( "Low Shelf" ), &controls->m_lowShelfPeakL , &controls->m_lowShelfPeakR ); + setBand( 2, &controls->m_para1ActiveModel, &controls->m_para1FreqModel, &controls->m_para1ResModel, &controls->m_para1GainModel, QColor(255, 173, 115), tr( "Peak 1" ), &controls->m_para1PeakL, &controls->m_para1PeakR ); + setBand( 3, &controls->m_para2ActiveModel, &controls->m_para2FreqModel, &controls->m_para2ResModel, &controls->m_para2GainModel, QColor(255, 255, 0), tr( "Peak 2" ), &controls->m_para2PeakL, &controls->m_para2PeakR ); + setBand( 4, &controls->m_para3ActiveModel, &controls->m_para3FreqModel, &controls->m_para3ResModel, &controls->m_para3GainModel, QColor(0, 255, 0), tr( "Peak 3" ), &controls->m_para3PeakL, &controls->m_para3PeakR ); + setBand( 5, &controls->m_para4ActiveModel, &controls->m_para4FreqModel, &controls->m_para4ResModel, &controls->m_para4GainModel, QColor(0, 186, 255), tr( "Peak 4" ), &controls->m_para4PeakL, &controls->m_para4PeakR ); + setBand( 6, &controls->m_highShelfActiveModel, &controls->m_highShelfFreqModel, &controls->m_highShelfResModel, &controls->m_highShelfGainModel, QColor(222, 0, 222 ), tr( "High Shelf" ), &controls->m_highShelfPeakL, &controls->m_highShelfPeakR ); + setBand( 7, &controls->m_lpActiveModel, &controls->m_lpFreqModel, &controls->m_lpResModel, 0, QColor(156, 156, 156 ), tr( "LP" ) ,0,0); + int cw = width()/8; //the chanel width in pixels + int ko = ( cw * 0.5 ) - ((new Knob( knobBright_26, 0 ))->width() * 0.5 ); + + m_inGainFader = new EqFader( &controls->m_inGainModel, tr( "In Gain" ), this, &controls->m_inPeakL, &controls->m_inPeakR); + m_inGainFader->move( 10, 5 ); + + m_outGainFader = new EqFader( &controls->m_outGainModel, tr( "Out Gain" ), this, &controls->m_outPeakL, &controls->m_outPeakR ); + m_outGainFader->move( 315, 5 ); + //gain faders + + int fo = (cw * 0.5) - (m_outGainFader->width() * 0.5 ); + + for( int i = 1; i < m_parameterWidget->bandCount() - 1; i++) + { + m_gainFader = new EqFader( m_parameterWidget->getBandModels(i)->gain, tr( "" ), this ,m_parameterWidget->getBandModels( i )->peakL, m_parameterWidget->getBandModels( i )->peakR ); + m_gainFader->move( cw * i + fo , 123 ); + m_gainFader->setMinimumHeight(80); + m_gainFader->resize(m_gainFader->width() , 80); + } + + for( int i = 0; i < m_parameterWidget->bandCount() ; i++) + { + m_resKnob = new Knob( knobBright_26, this ); + m_resKnob->move(cw * i + ko , 205 ); + m_resKnob->setVolumeKnob(false); + m_resKnob->setModel( m_parameterWidget->getBandModels( i )->res ); + + m_freqKnob = new Knob( knobBright_26, this ); + m_freqKnob->move(cw * i + ko, 235 ); + m_freqKnob->setVolumeKnob( false ); + m_freqKnob->setModel( m_parameterWidget->getBandModels( i )->freq ); + + m_activeBox = new LedCheckBox( m_parameterWidget->getBandModels( i )->name , this ); + m_activeBox->move( cw * i + fo + 3, 260 ); + m_activeBox->setModel( m_parameterWidget->getBandModels( i )->active ); + } + + //hp filter type + + m_hp12Box = new LedCheckBox( tr( "12dB" ), this ); + m_hp12Box->move( cw*0 + ko, 175 ); + m_hp12Box->setModel( &controls->m_hp12Model ); + m_hp24Box = new LedCheckBox( tr( "24dB" ), this ); + m_hp24Box->move( cw*0 + ko, 155 ); + m_hp24Box->setModel( &controls->m_hp24Model ); + + m_hp48Box = new LedCheckBox( tr( "48dB" ), this ); + m_hp48Box->move( cw*0 + ko, 135 ); + m_hp48Box->setModel( &controls->m_hp48Model ); + + //LP filter type + + m_lp12Box = new LedCheckBox( tr( "12dB"), this ); + m_lp12Box->move( cw*7 + ko -5 , 175 ); + m_lp12Box->setModel( &controls->m_lp12Model ); + m_lp24Box = new LedCheckBox( tr( "24dB"), this ); + m_lp24Box->move( cw*7 + ko - 5, 155 ); + m_lp24Box->setModel( &controls->m_lp24Model ); + m_lp48Box = new LedCheckBox( tr( "48dB"), this ); + m_lp48Box->move( cw*7 + ko - 5, 135 ); + m_lp48Box->setModel( &controls->m_lp48Model ); + + automatableButtonGroup *lpBtnGrp = new automatableButtonGroup(this,tr ( "lp grp" ) ); + lpBtnGrp->addButton(m_lp12Box); + lpBtnGrp->addButton(m_lp24Box ); + lpBtnGrp->addButton(m_lp48Box ); + connect( m_lp12Box, SIGNAL( clicked() ), lpBtnGrp , SLOT( updateButtons() ) ); + connect( m_lp24Box, SIGNAL( clicked() ), lpBtnGrp , SLOT( updateButtons() ) ); + connect( m_lp48Box, SIGNAL( clicked() ), lpBtnGrp , SLOT( updateButtons() ) ); + connect( &controls->m_lp12Model, SIGNAL( dataChanged() ), lpBtnGrp, SLOT( updateButtons() ) ); + connect( &controls->m_lp24Model, SIGNAL( dataChanged() ), lpBtnGrp, SLOT( updateButtons() ) ); + connect( &controls->m_lp48Model, SIGNAL( dataChanged() ), lpBtnGrp, SLOT( updateButtons() ) ); + + + + automatableButtonGroup *hpBtnGrp = new automatableButtonGroup( this, tr( "hp grp" ) ); + hpBtnGrp->addButton(m_hp12Box ); + hpBtnGrp->addButton(m_hp24Box ); + hpBtnGrp->addButton(m_hp48Box ); + connect( m_hp12Box, SIGNAL ( clicked() ), hpBtnGrp, SLOT( updateButtons() ) ); + connect( m_hp24Box, SIGNAL ( clicked() ), hpBtnGrp, SLOT( updateButtons() ) ); + connect( m_hp48Box, SIGNAL ( clicked() ), hpBtnGrp, SLOT( updateButtons() ) ); + connect( &controls->m_hp12Model, SIGNAL( dataChanged() ), hpBtnGrp, SLOT( updateButtons() ) ); + connect( &controls->m_hp24Model, SIGNAL( dataChanged() ), hpBtnGrp, SLOT( updateButtons() ) ); + connect( &controls->m_hp48Model, SIGNAL( dataChanged() ), hpBtnGrp, SLOT( updateButtons() ) ); + + + + + //Analize Box + m_analyzeBox = new LedCheckBox( tr( "Analyze" ), this ); + m_analyzeBox->move( cw*1 + ko + 5, 10 ); + m_analyzeBox->setModel( &controls->m_analyzeModel ); + +} + +void EqControlsDialog::mouseDoubleClickEvent(QMouseEvent *event) +{ + m_originalHeight = parentWidget()->height() == 150 ? m_originalHeight : parentWidget()->height() ; + parentWidget()->setFixedHeight( parentWidget()->height() == m_originalHeight ? 150 : m_originalHeight ); + update(); +} diff --git a/plugins/eq/eqcontrolsdialog.h b/plugins/eq/eqcontrolsdialog.h new file mode 100644 index 000000000..bb4c0cfad --- /dev/null +++ b/plugins/eq/eqcontrolsdialog.h @@ -0,0 +1,94 @@ +/* + * eqcontrolsdialog.h - defination of EqControlsDialog class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef EQCONTROLSDIALOG_H +#define EQCONTROLSDIALOG_H + +#include "EffectControlDialog.h" +#include "Fader.h" +#include "Knob.h" +#include "LedCheckbox.h" +#include "eqparameterwidget.h" +#include "MainWindow.h" +#include "qpushbutton.h" +//#include "eqspectrumview.h" + +class EqControls; + +class EqControlsDialog : public EffectControlDialog +{ + +public: + EqControlsDialog( EqControls* controls ); + virtual ~EqControlsDialog() + { + } + + EqBand * setBand(EqControls *controls); + +private slots: + void updateVuMeters(); + +private: + EqControls * m_controls; + + Fader* m_inGainFader; + Fader* m_outGainFader; + Fader* m_gainFader; + Knob* m_resKnob; + Knob* m_freqKnob; + LedCheckBox* m_activeBox; + LedCheckBox* m_lp12Box; + LedCheckBox* m_lp24Box; + LedCheckBox* m_lp48Box; + LedCheckBox* m_hp12Box; + LedCheckBox* m_hp24Box; + LedCheckBox* m_hp48Box; + + LedCheckBox* m_analyzeBox; + + EqParameterWidget* m_parameterWidget; +// EqSpectrumView* m_inSpec; + + virtual void mouseDoubleClickEvent(QMouseEvent *event); + + EqBand* setBand( int index, BoolModel* active, FloatModel* freq, FloatModel* res, FloatModel* gain, QColor color, QString name, float* peakL, float* peakR) + { + EqBand* filterModels = m_parameterWidget->getBandModels( index ); + filterModels->active = active; + filterModels->freq = freq; + filterModels->res = res; + filterModels->color = color; + filterModels->gain = gain; + filterModels->peakL = peakL; + filterModels->peakR = peakR; + return filterModels; + } + + int m_originalHeight; + + +}; + +#endif // EQCONTROLSDIALOG_H diff --git a/plugins/eq/eqeffect.cpp b/plugins/eq/eqeffect.cpp new file mode 100644 index 000000000..20be28000 --- /dev/null +++ b/plugins/eq/eqeffect.cpp @@ -0,0 +1,314 @@ +/* + * eqeffect.cpp - defination of EqEffect class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "eqeffect.h" +#include "embed.cpp" +#include "lmms_math.h" +#include "BasicFilters.h" +#include "interpolation.h" +#include "Engine.h" +#include "MainWindow.h" + +//TODO +//re write to store data from each filter(models,name, storeage name ) in a class, stored in array +//then just loop ever array for each section + +const int MAX_BANDS = 249; + +extern "C" +{ + +Plugin::Descriptor PLUGIN_EXPORT eq_plugin_descriptor = +{ + STRINGIFY( PLUGIN_NAME ), + "Eq", + QT_TRANSLATE_NOOP( "pluginBrowser", "A native eq plugin" ), + "Dave French ", + 0x0100, + Plugin::Effect, + new PluginPixmapLoader( "logo" ), + NULL, + NULL +} ; + + + + +EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::Key *key) : + Effect( &eq_plugin_descriptor, parent, key ), + m_eqControls( this ) + + + +{ + m_dFilterCount = 4; + m_downsampleFilters = new EqLp12Filter[m_dFilterCount]; + for( int i = 0; i < m_dFilterCount; i++) + { + m_downsampleFilters[i].setFrequency(20000); + m_downsampleFilters[i].setQ(0.66); + m_downsampleFilters[i].setGain(0); + m_downsampleFilters[i].setSampleRate(Engine::mixer()->processingSampleRate() * 2 ); + } + m_upBuf = 0; +} + + + + +EqEffect::~EqEffect() +{ + +} + + + + +bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) +{ + if( !isEnabled() || !isRunning () ) + { + return( false ); + } + double outSum = 0.0; + const float d = dryLevel(); + const float w = wetLevel(); + const float outGain = m_eqControls.m_outGainModel.value(); + const int sampleRate = Engine::mixer()->processingSampleRate() * 2; + sample_t dryS[2]; + sampleFrame m_inPeak; + + //TODO UPSAMPLE + upsample( buf, frames ); + + gain(m_upBuf , m_upBufFrames, m_eqControls.m_inGainModel.value(), &m_inPeak ); + m_eqControls.m_inPeakL = m_eqControls.m_inPeakL < m_inPeak[0] ? m_inPeak[0] : m_eqControls.m_inPeakL; + m_eqControls.m_inPeakR = m_eqControls.m_inPeakR < m_inPeak[1] ? m_inPeak[0] : m_eqControls.m_inPeakR; + + if(m_eqControls.m_hpActiveModel.value() ){ + m_hp12.setSampleRate( sampleRate ); + m_hp12.setFrequency( m_eqControls.m_hpFeqModel.value() ); + m_hp12.setQ( m_eqControls.m_hpResModel.value() ); + m_hp12.processBuffer( m_upBuf , m_upBufFrames ); + + if( m_eqControls.m_hp24Model.value() || m_eqControls.m_hp48Model.value() ) + { + m_hp24.setSampleRate( sampleRate ); + m_hp24.setFrequency( m_eqControls.m_hpFeqModel.value() ); + m_hp24.setQ( m_eqControls.m_hpResModel.value() ); + m_hp24.processBuffer( m_upBuf , m_upBufFrames ); + } + + if( m_eqControls.m_hp48Model.value() ) + { + m_hp480.setSampleRate( sampleRate ); + m_hp480.setFrequency( m_eqControls.m_hpFeqModel.value() ); + m_hp480.setQ( m_eqControls.m_hpResModel.value() ); + m_hp480.processBuffer( m_upBuf , m_upBufFrames ); + + m_hp481.setSampleRate( sampleRate ); + m_hp481.setFrequency( m_eqControls.m_hpFeqModel.value() ); + m_hp481.setQ( m_eqControls.m_hpResModel.value() ); + m_hp481.processBuffer( m_upBuf , m_upBufFrames ); + } + } + + if( m_eqControls.m_lowShelfActiveModel.value() ) + { + m_lowShelf.setSampleRate( sampleRate ); + m_lowShelf.setFrequency( m_eqControls.m_lowShelfFreqModel.value() ); + m_lowShelf.setQ( m_eqControls.m_lowShelfResModel .value() ); + m_lowShelf.setGain( m_eqControls.m_lowShelfGainModel.value() ); + m_lowShelf.processBuffer( m_upBuf , m_upBufFrames ); + } + + if( m_eqControls.m_para1ActiveModel.value() ) + { + m_para1.setSampleRate(sampleRate ); + m_para1.setFrequency( m_eqControls.m_para1FreqModel.value() ); + m_para1.setQ( m_eqControls.m_para1ResModel.value() ); + m_para1.setGain( m_eqControls.m_para1GainModel.value() ); + m_para1.processBuffer( m_upBuf , m_upBufFrames ); + } + + if( m_eqControls.m_para2ActiveModel.value() ) + { + m_para2.setSampleRate( sampleRate ); + m_para2.setFrequency( m_eqControls.m_para2FreqModel.value() ); + m_para2.setQ( m_eqControls.m_para2ResModel.value() ); + m_para2.setGain( m_eqControls.m_para2GainModel.value() ); + m_para2.processBuffer( m_upBuf , m_upBufFrames ); + } + + if( m_eqControls.m_para3ActiveModel.value() ) + { + m_para3.setSampleRate( sampleRate); + m_para3.setFrequency( m_eqControls.m_para3FreqModel.value() ); + m_para3.setQ( m_eqControls.m_para3ResModel.value() ); + m_para3.setGain( m_eqControls.m_para3GainModel.value() ); + m_para3.processBuffer( m_upBuf , m_upBufFrames ); + } + + if( m_eqControls.m_para4ActiveModel.value() ) + { + m_para4.setSampleRate( sampleRate ); + m_para4.setFrequency( m_eqControls.m_para4FreqModel.value() ); + m_para4.setQ( m_eqControls.m_para4ResModel.value() ); + m_para4.setGain( m_eqControls.m_para4GainModel.value() ); + m_para4.processBuffer( m_upBuf , m_upBufFrames ); + } + + if( m_eqControls.m_highShelfActiveModel.value() ) + { + m_highShelf.setSampleRate( sampleRate ); + m_highShelf.setFrequency( m_eqControls.m_highShelfFreqModel.value() ); + m_highShelf.setQ( m_eqControls.m_highShelfResModel.value() ); + m_highShelf.setGain( m_eqControls.m_highShelfGainModel.value() ); + m_highShelf.processBuffer( m_upBuf , m_upBufFrames ); + } + + if(m_eqControls.m_lpActiveModel.value() ){ + m_lp12.setSampleRate( sampleRate ); + m_lp12.setFrequency( m_eqControls.m_lpFreqModel.value() ); + m_lp12.setQ( m_eqControls.m_lpResModel.value() ); + m_lp12.processBuffer( m_upBuf , m_upBufFrames ); + + if( m_eqControls.m_lp24Model.value() || m_eqControls.m_lp48Model.value() ) + { + m_lp24.setSampleRate( sampleRate ); + m_lp24.setFrequency( m_eqControls.m_lpFreqModel.value() ); + m_lp24.setQ( m_eqControls.m_lpResModel.value() ); + m_lp24.processBuffer( m_upBuf , m_upBufFrames ); + } + + if( m_eqControls.m_lp48Model.value() ) + { + m_lp480.setSampleRate( sampleRate ); + m_lp480.setFrequency( m_eqControls.m_lpFreqModel.value() ); + m_lp480.setQ( m_eqControls.m_lpResModel.value() ); + m_lp480.processBuffer( m_upBuf , m_upBufFrames ); + + m_lp481.setSampleRate( sampleRate ); + m_lp481.setFrequency( m_eqControls.m_lpFreqModel.value() ); + m_lp481.setQ( m_eqControls.m_lpResModel.value() ); + m_lp481.processBuffer( m_upBuf , m_upBufFrames ); + } + } + + sampleFrame outPeak; + gain( m_upBuf , m_upBufFrames, outGain, &outPeak ); + m_eqControls.m_outPeakL = m_eqControls.m_outPeakL < outPeak[0] ? outPeak[0] : m_eqControls.m_outPeakL; + m_eqControls.m_outPeakR = m_eqControls.m_outPeakR < outPeak[1] ? outPeak[0] : m_eqControls.m_outPeakR; + + //TODO lp filter before downsample + for( int i =0; i < m_dFilterCount; i++) + { + m_downsampleFilters[i].processBuffer(m_upBuf , m_upBufFrames ); + } + + downSample( buf, frames ); + + for( fpp_t f = 0; f < frames; ++f ) + { + buf[f][0] = ( d * dryS[0] ) + ( w * buf[f][0] ); + buf[f][1] = ( d * dryS[1] ) + ( w * buf[f][1] ); + outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; + } + checkGate( outSum / frames ); + + return isRunning(); +} + + + + +void EqEffect::gain(sampleFrame *buf, const fpp_t frames, float scale, sampleFrame* peak) +{ + peak[0][0] = 0.0f; peak[0][1] = 0.0f; + for( fpp_t f = 0; f < frames; ++f ) + { + buf[f][0] *= scale; + buf[f][1] *= scale; + + if( fabs( buf[f][0] ) > peak[0][0] ) + { + peak[0][0] = fabs( buf[f][0] ); + } + if( fabs( buf[f][1] ) > peak[0][1] ) + { + peak[0][1] = fabs( buf[f][0] ); + } + } + +} + +sampleFrame m_lastUpFrame; +void EqEffect::upsample(sampleFrame *buf, const fpp_t frames) +{ + + if(m_upBufFrames != frames * 2 ) + { + if( m_upBuf ) + { + delete m_upBuf; + } + m_upBuf = new sampleFrame[frames * 2]; + m_upBufFrames = frames * 2; + } + + for( int f = 0, f2 = 0; f < frames; ++f, f2 += 2 ) + { + m_upBuf[f2][0] = linearInterpolate(m_lastUpFrame[0],buf[f][0], 0.5); + m_upBuf[f2][1] = linearInterpolate(m_lastUpFrame[1],buf[f][1], 0.5); + m_upBuf[f2+1][0] = buf[f][0]; + m_upBuf[f2+1][1] = buf[f][1]; + + m_lastUpFrame[0] = buf[f][0]; + m_lastUpFrame[1] = buf[f][1]; + } +} + +void EqEffect::downSample(sampleFrame *buf, const fpp_t frames) +{ + for( int f = 0, f2 = 0; f < frames; ++f, f2 += 2 ) + { + buf[f][0] = m_upBuf[f2][0]; + buf[f][1] = m_upBuf[f2][1]; + } +} + + + + + +extern "C" +{ + +//needed for getting plugin out of shared lib +Plugin * PLUGIN_EXPORT lmms_plugin_main( Model* parent, void* data ) +{ + return new EqEffect( parent , static_cast( data ) ); +} + +}} diff --git a/plugins/eq/eqeffect.h b/plugins/eq/eqeffect.h new file mode 100644 index 000000000..987eac9c4 --- /dev/null +++ b/plugins/eq/eqeffect.h @@ -0,0 +1,80 @@ +/* eqeffect.h - defination of EqEffect class. +* +* Copyright (c) 2014 David French +* +* This file is part of LMMS - http://lmms.io +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public +* License as published by the Free Software Foundation; either +* version 2 of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public +* License along with this program (see COPYING); if not, write to the +* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +* Boston, MA 02110-1301 USA. +* +*/ + + +#ifndef EQEFFECT_H +#define EQEFFECT_H + +#include "Effect.h" +#include "eqcontrols.h" +#include "lmms_math.h" +#include "BasicFilters.h" +#include "eqfilter.h" + +class EqEffect : public Effect +{ +public: + EqEffect( Model* parent , const Descriptor::SubPluginFeatures::Key* key ); + virtual ~EqEffect(); + virtual bool processAudioBuffer( sampleFrame *buf, const fpp_t frames ); + virtual EffectControls* controls() + { + return &m_eqControls; + } + void gain( sampleFrame *buf, const fpp_t frames, float scale, sampleFrame* peak ); + +private: + EqControls m_eqControls; + + EqHp12Filter m_hp12; + EqHp12Filter m_hp24; + EqHp12Filter m_hp480; + EqHp12Filter m_hp481; + + EqLowShelfFilter m_lowShelf; + + EqPeakFilter m_para1; + EqPeakFilter m_para2; + EqPeakFilter m_para3; + EqPeakFilter m_para4; + + EqHighShelfFilter m_highShelf; + + EqLp12Filter m_lp12; + EqLp12Filter m_lp24; + EqLp12Filter m_lp480; + EqLp12Filter m_lp481; + EqLp12Filter* m_downsampleFilters; + int m_dFilterCount; + sampleFrame* m_upBuf; + fpp_t m_upBufFrames; + +// const static int MAX_BANDS = 249; + void upsample( sampleFrame *buf, const fpp_t frames ); + void downSample( sampleFrame *buf, const fpp_t frames ); +// float m_bands[MAX_BANDS]; +// float m_energy; + +}; + +#endif // EQEFFECT_H diff --git a/plugins/eq/eqfader.cpp b/plugins/eq/eqfader.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/eq/eqfader.h b/plugins/eq/eqfader.h new file mode 100644 index 000000000..65c7a55a0 --- /dev/null +++ b/plugins/eq/eqfader.h @@ -0,0 +1,111 @@ +/* eqfader.h - defination of EqFader class. +* +* Copyright (c) 2014 David French +* +* This file is part of LMMS - http://lmms.io +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public +* License as published by the Free Software Foundation; either +* version 2 of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public +* License along with this program (see COPYING); if not, write to the +* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +* Boston, MA 02110-1301 USA. +* +*/ + +#ifndef EQFADER_H +#define EQFADER_H +#include "Fader.h" +#include "EffectControls.h" +#include "MainWindow.h" +#include "qwidget.h" +#include "TextFloat.h" +#include "qlist.h" + + + +class EqFader : public Fader +{ + +public: + Q_OBJECT +public: + EqFader( FloatModel * model, const QString & name, QWidget * parent, float* lPeak, float* rPeak ) : + Fader( model, name, parent) + { + setMinimumSize( 23, 116 ); + setMaximumSize( 23, 116 ); + resize( 23, 116 ); + m_lPeak = lPeak; + m_rPeak = rPeak; + connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( updateVuMeters() ) ); + m_text = 0; + QList tfs = Engine::mainWindow()->findChildren(); + m_text = tfs.last(); + if(m_text) + { + printf("found text float\n"); + } + connect(model , SIGNAL (dataChanged()) , this, SLOT (updateText () )); + m_model = model; + } + + + + + ~EqFader() + { + } + + +private slots: + + void updateVuMeters() + { + const float opl = getPeak_L(); + const float opr = getPeak_R(); + const float fall_off = 1.2; + if( *m_lPeak > opl ) + { + setPeak_L( *m_lPeak ); + *m_lPeak = 0; + } + else + { + setPeak_L( opl/fall_off ); + } + + if( *m_rPeak > opr ) + { + setPeak_R( *m_rPeak ); + *m_rPeak = 0; + } + else + { + setPeak_R( opr/fall_off ); + } + update(); + } + + void updateText() + { + m_text->setText(QString()+m_model->value()); + } + + +private: + float* m_lPeak; + float* m_rPeak; + TextFloat* m_text; + FloatModel* m_model; + +}; +#endif // EQFADER_H diff --git a/plugins/eq/eqfilter.cpp b/plugins/eq/eqfilter.cpp new file mode 100644 index 000000000..7407377b9 --- /dev/null +++ b/plugins/eq/eqfilter.cpp @@ -0,0 +1,5 @@ +#include "eqfilter.h" + + + + diff --git a/plugins/eq/eqfilter.h b/plugins/eq/eqfilter.h new file mode 100644 index 000000000..69ee49c8b --- /dev/null +++ b/plugins/eq/eqfilter.h @@ -0,0 +1,315 @@ +/* + * eqfilter.cpp - defination of EqFilterclass. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef EQFILTER_H +#define EQFILTER_H + +#include "BasicFilters.h" +#include "lmms_math.h" + +/// +/// \brief The EqFilter class. +/// A wrapper for the StereoBiQuad class, giving it freq, res, and gain controls. +/// It is designed to process periods in one pass, with recalculation of coefficents +/// upon parameter changes. The intention is to use this as a bass class, children override +/// the calcCoefficents() function, providing the coefficents a1, a2, b0, b1, b2. +/// +class EqFilter : public StereoBiQuad +{ +public: + EqFilter() + { + + } + + virtual inline void setSampleRate( int sampleRate ) + { + if( sampleRate != m_sampleRate ) + { + m_sampleRate = sampleRate; + calcCoefficents(); + } + } + + virtual inline void setFrequency( float freq ){ + if ( freq != m_freq ) + { + m_freq = freq; + calcCoefficents(); + } + } + + virtual void setQ( float res ) + { + if ( res != m_res ) + { + m_res = res; + calcCoefficents(); + } + } + + virtual void setGain( float gain ) + { + if ( gain != m_gain ) + { + m_gain = gain; + calcCoefficents(); + } + } + + /// + /// \brief processBuffer + /// \param buf Audio Buffer + /// \param frames Count of sampleFrames in Audio Buffer + /// + virtual void processBuffer( sampleFrame* buf, const fpp_t frames ) + { + for ( fpp_t f = 0 ; f < frames ; ++f) + { + buf[f][0] = update( buf[f][0] , 0); + buf[f][1] = update( buf[f][1] , 1); + } + } + +protected: + /// + /// \brief calcCoefficents + /// Override this in child classes to provide the coefficents, based on + /// Freq, Res and Gain + virtual void calcCoefficents(){ + setCoeffs( 0, 0, 0, 0, 0 ); + + } + + float m_sampleRate; + float m_freq; + float m_res; + float m_gain; +}; + + + + +/// +/// \brief The EqHp12Filter class +/// A 2 pole High Pass Filter +/// Coefficent calculations from http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt +class EqHp12Filter : public EqFilter +{ +public : + virtual void calcCoefficents() + { + + // calc intermediate + float w0 = F_2PI * m_freq / m_sampleRate; + float c = cosf( w0 ); + float s = sinf( w0 ); + float alpha = s / ( 2 * m_res ); + + float a0, a1, a2, b0, b1, b2; // coeffs to calculate + + //calc coefficents + b0 = ( 1 + c ) * 0.5; + b1 = ( -( 1 + c ) ); + b2 = ( 1 + c ) * 0.5; + a0 = 1 + alpha; + a1 = ( -2 * c ); + a2 = 1 - alpha; + + //normalise + b0 /= a0; + b1 /= a0; + b2 /= a0; + a1 /= a0; + a2 /= a0; + + a0 = 1; + + setCoeffs( a1, a2, b0, b1, b2 ); + + + } +}; + + +/// +/// \brief The EqLp12Filter class. +/// A 2 pole low pass filter +/// Coefficent calculations from http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt +/// +class EqLp12Filter : public EqFilter +{ +public : + virtual void calcCoefficents() + { + + // calc intermediate + float w0 = F_2PI * m_freq / m_sampleRate; + float c = cosf( w0 ); + float s = sinf( w0 ); + float alpha = s / ( 2 * m_res ); + + float a0, a1, a2, b0, b1, b2; // coeffs to calculate + + //calc coefficents + b0 = ( 1 - c ) * 0.5; + b1 = 1 - c; + b2 = ( 1 - c ) * 0.5; + a0 = 1 + alpha; + a1 = -2 * c; + a2 = 1 - alpha; + + //normalise + b0 /= a0; + b1 /= a0; + b2 /= a0; + a1 /= a0; + a2 /= a0; + + a0 = 1; + + setCoeffs( a1, a2, b0, b1, b2 ); + } +}; + + + +/// +/// \brief The EqPeakFilter class +/// A Peak Filter +/// Coefficent calculations from http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt +/// +class EqPeakFilter : public EqFilter +{ +public: + + + virtual void calcCoefficents() + { + // calc intermediate + float w0 = F_2PI * m_freq / m_sampleRate; + float c = cosf( w0 ); + float s = sinf( w0 ); + float A = pow( 10, m_gain * 0.025); + float alpha = s / ( 2 * m_res ); + + float a0, a1, a2, b0, b1, b2; // coeffs to calculate + + //calc coefficents + b0 = 1 + alpha*A; + b1 = -2*c; + b2 = 1 - alpha*A; + a0 = 1 + alpha/A; + a1 = -2*c; + a2 = 1 - alpha/A; + + //normalise + b0 /= a0; + b1 /= a0; + b2 /= a0; + a1 /= a0; + a2 /= a0; + a0 = 1; + + setCoeffs( a1, a2, b0, b1, b2 ); + } +}; + +class EqLowShelfFilter : public EqFilter +{ +public : + virtual void calcCoefficents() + { + + // calc intermediate + float w0 = F_2PI * m_freq / m_sampleRate; + float c = cosf( w0 ); + float s = sinf( w0 ); + float A = pow( 10, m_gain * 0.025); +// float alpha = s / ( 2 * m_res ); + float beta = sqrt( A ) / m_res; + + float a0, a1, a2, b0, b1, b2; // coeffs to calculate + + //calc coefficents + b0 = A * ( ( A+1 ) - ( A-1 ) * c + beta * s ); + b1 = 2 * A * ( ( A - 1 ) - ( A + 1 ) * c) ; + b2 = A * ( ( A + 1 ) - ( A - 1 ) * c - beta * s); + a0 = ( A + 1 ) + ( A - 1 ) * c + beta * s; + a1 = -2 * ( ( A - 1 ) + ( A + 1 ) * c ); + a2 = ( A + 1 ) + ( A - 1) * c - beta * s; + + //normalise + b0 /= a0; + b1 /= a0; + b2 /= a0; + a1 /= a0; + a2 /= a0; + + a0 = 1; + + setCoeffs( a1, a2, b0, b1, b2 ); + + + } +}; + +class EqHighShelfFilter : public EqFilter +{ +public : + virtual void calcCoefficents() + { + + // calc intermediate + float w0 = F_2PI * m_freq / m_sampleRate; + float c = cosf( w0 ); + float s = sinf( w0 ); + float A = pow( 10, m_gain * 0.025 ); + float beta = sqrt( A ) / m_res; + + float a0, a1, a2, b0, b1, b2; // coeffs to calculate + + //calc coefficents + b0 = A *( ( A +1 ) + ( A - 1 ) * c + beta * s); + b1 = -2 * A * ( ( A - 1 ) + ( A + 1 ) * c ); + b2 = A * ( ( A + 1 ) + ( A - 1 ) * c - beta * s); + a0 = ( A + 1 ) - ( A - 1 ) * c + beta * s; + a1 = 2 * ( ( A - 1 ) - ( A + 1 ) * c ); + a2 = ( A + 1) - ( A - 1 ) * c - beta * s; + //normalise + b0 /= a0; + b1 /= a0; + b2 /= a0; + a1 /= a0; + a2 /= a0; + a0 = 1; + + setCoeffs( a1, a2, b0, b1, b2 ); + } +}; + + + + +#endif // EQFILTER_H diff --git a/plugins/eq/eqhighshelffileter.h b/plugins/eq/eqhighshelffileter.h new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/plugins/eq/eqhighshelffileter.h @@ -0,0 +1 @@ + diff --git a/plugins/eq/eqhp12.h b/plugins/eq/eqhp12.h new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/eq/eqlowshelffilter.h b/plugins/eq/eqlowshelffilter.h new file mode 100644 index 000000000..b28b04f64 --- /dev/null +++ b/plugins/eq/eqlowshelffilter.h @@ -0,0 +1,3 @@ + + + diff --git a/plugins/eq/eqlp12.h b/plugins/eq/eqlp12.h new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/eq/eqparameterwidget.cpp b/plugins/eq/eqparameterwidget.cpp new file mode 100644 index 000000000..eb329460b --- /dev/null +++ b/plugins/eq/eqparameterwidget.cpp @@ -0,0 +1,197 @@ +/* + * eqparameterwidget.cpp - defination of EqParameterWidget class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "eqparameterwidget.h" +#include "QPainter" +#include "qwidget.h" +#include "lmms_math.h" + +#include "MainWindow.h" +#include "QMouseEvent" + +EqParameterWidget::EqParameterWidget( QWidget *parent ) : + QWidget( parent ), + m_bands ( 0 ), + m_selectedBand ( 0 ) +{ + m_bands = new EqBand[8]; + resize( 250, 116 ); + connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); + float totalLength = log10( 21000 ); + m_pixelsPerUnitWidth = width( ) / totalLength ; + float totalHeight = 40; + m_pixelsPerUnitHeight = (height() - 4) / ( totalHeight ); + m_scale = 1.5; + m_pixelsPerOctave = freqToXPixel( 10000 ) - freqToXPixel( 5000 ); +} + + + + +EqParameterWidget::~EqParameterWidget() +{ + +} + + + + +void EqParameterWidget::paintEvent( QPaintEvent *event ) +{ + QPainter painter( this ); + for( int i = 0 ; i < bandCount() ; i++ ) + { + m_bands[i].color.setAlpha(m_bands[i].active->value() ? activeAplha() : inactiveAlpha()); + painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); + float x = freqToXPixel( m_bands[i].freq->value() ); + float y = height() * 0.5; + float gain = 1; + if( m_bands[i].gain ) + { + gain = m_bands[i].gain->value(); + } + y = gainToYPixel( gain ) + 3; + float bw = m_bands[i].freq->value() / m_bands[i].res->value(); + m_bands[i].x = x; m_bands[i].y = y; + painter.drawPoint( x, y ); + painter.setPen( QPen( m_bands[i].color, 1, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); + if(i == 0 || i == bandCount() - 1 ){ + painter.drawLine(x, y, x, y - (m_bands[i].res->value() * 4 ) ); + } + else + { + painter.drawLine(freqToXPixel(m_bands[i].freq->value()-(bw * 0.5)),y,freqToXPixel(m_bands[i].freq->value()+(bw * 0.5)),y); + } + } + //Draw color band + int sectionLength = width() / bandCount(); + for( int i = 0; i < bandCount(); i++) + { + m_bands[i].color.setAlpha( 255 ); + painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); + painter.drawLine(sectionLength * i , 1, sectionLength * (i+1) , 1); + } +} + + + + +void EqParameterWidget::mousePressEvent( QMouseEvent *event ) +{ + m_oldX = event->x(); m_oldY = event->y(); + m_selectedBand = selectNearestHandle( event->x(), event->y() ); + m_mouseAction = none; + if ( event->button() == Qt::LeftButton ) m_mouseAction = drag; + if ( event->button() == Qt::RightButton ) m_mouseAction = res; +} + + + + +void EqParameterWidget::mouseReleaseEvent( QMouseEvent *event ) +{ + m_selectedBand = 0; + m_mouseAction = none; +} + + + + +void EqParameterWidget::mouseMoveEvent( QMouseEvent *event ) +{ + int deltaX = event->x() - m_oldX; + int deltaR = event->y() - m_oldY; + m_oldX = event->x(); m_oldY = event->y(); + if(m_selectedBand && m_selectedBand->active->value() ) + { + switch ( m_mouseAction ) { + case none : + break; + case drag: + if( m_selectedBand->freq ) m_selectedBand->freq->setValue( xPixelToFreq( m_oldX ) ); + if( m_selectedBand->gain )m_selectedBand->gain->setValue( yPixelToGain( m_oldY ) ); + break; + case res: + if( m_selectedBand->res )m_selectedBand->res->incValue( deltaX * resPixelMultiplyer() ); + if( m_selectedBand->res )m_selectedBand->res->incValue( (-deltaR) * resPixelMultiplyer() ); + break; + default: + break; + } + } +} + + + + +void EqParameterWidget::mouseDoubleClickEvent( QMouseEvent *event ) +{ + EqBand* selected = selectNearestHandle( event->x() , event->y() ); + if( selected ) + { + selected->active->setValue( selected->active->value() ? 0 : 1 ); + } +} + + + + +EqBand* EqParameterWidget::selectNearestHandle( const int x, const int y ) +{ + EqBand* selectedModel = 0; + float* distanceToHandles = new float[bandCount()]; + //calc distance to each handle + for( int i = 0 ; i < bandCount() ; i++) + { + int xOffset = m_bands[i].x - x; + int yOffset = m_bands[i].y - y; + distanceToHandles[i] = fabs(sqrt((xOffset * xOffset ) + ( yOffset * yOffset ) ) ); + } + //select band + int shortestBand = 0; + for (int i = 1 ; i < bandCount() ; i++ ) + { + if ( distanceToHandles [i] < distanceToHandles[shortestBand] ){ + shortestBand = i; + } + } + if(distanceToHandles[shortestBand] < maxDistanceFromHandle() ) + { + selectedModel = &m_bands[shortestBand]; + } + delete distanceToHandles; + return selectedModel; +} + + + + +EqBand::EqBand() : + gain ( 0 ), + res ( 0 ), + freq ( 0 ), + color ( QColor( 255, 255, 255 ) ), + name ( QString( "" ) ) +{ +} diff --git a/plugins/eq/eqparameterwidget.h b/plugins/eq/eqparameterwidget.h new file mode 100644 index 000000000..cb14154b3 --- /dev/null +++ b/plugins/eq/eqparameterwidget.h @@ -0,0 +1,158 @@ +/* + * eqparameterwidget.cpp - defination of EqParameterWidget class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#ifndef EQPARAMETERWIDGET_H +#define EQPARAMETERWIDGET_H +#include +#include "EffectControls.h" + + +class EqBand +{ +public : + EqBand(); + FloatModel* gain; + FloatModel* res; + FloatModel* freq; + BoolModel* active; + QColor color; + int x; + int y; + QString name; + float* peakL; + float* peakR; + +}; + + + +class EqParameterWidget : public QWidget +{ + +public: + explicit EqParameterWidget( QWidget *parent = 0 ); + ~EqParameterWidget(); + const int bandCount() + { + return 8; + } + + + + const int maxDistanceFromHandle() + { + return 20; + } + + + + + EqBand* getBandModels( int i ) + { + return &m_bands[i]; + } + + + + + const int activeAplha() + { + return 200; + } + + + + + const int inactiveAlpha() + { + return 100; + } + + + + + const float resPixelMultiplyer() + { + return 100; + } + + +signals: + +public slots: + +protected: + virtual void paintEvent ( QPaintEvent * event ); + virtual void mousePressEvent(QMouseEvent * event ); + virtual void mouseReleaseEvent(QMouseEvent * event); + virtual void mouseMoveEvent(QMouseEvent * event); + virtual void mouseDoubleClickEvent(QMouseEvent * event); + +private: + EqBand* m_bands; + float m_pixelsPerUnitWidth; + float m_pixelsPerUnitHeight; + float m_pixelsPerOctave; + float m_scale; + EqBand* m_selectedBand; + + EqBand* selectNearestHandle( const int x, const int y ); + + enum MouseAction { none, drag, res } m_mouseAction; + int m_oldX, m_oldY; + + inline int freqToXPixel( float freq ) + { + return ( log10( freq ) * m_pixelsPerUnitWidth * m_scale ) - ( width() * 0.5 ); + } + + + + + inline float xPixelToFreq( int x ) + { + return pow( 10, ( x + ( width() * 0.5 ) ) / ( m_pixelsPerUnitWidth * m_scale ) ); + } + + + + + inline int gainToYPixel( float gain ) + { + return ( height() - 3) - ( gain * m_pixelsPerUnitHeight ) - ( (height() -3 ) * 0.5); + } + + + + + inline float yPixelToGain( int y ) + { + return ( ( 0.5 * height() ) - y) / m_pixelsPerUnitHeight; + } + +}; + + +#endif // EQPARAMETERWIDGET_H diff --git a/plugins/eq/eqpeekfilter.cpp b/plugins/eq/eqpeekfilter.cpp new file mode 100644 index 000000000..1cc60cf4c --- /dev/null +++ b/plugins/eq/eqpeekfilter.cpp @@ -0,0 +1,3 @@ +#include "eqpeekfilter.h" + + diff --git a/plugins/eq/eqpeekfilter.h b/plugins/eq/eqpeekfilter.h new file mode 100644 index 000000000..b28b04f64 --- /dev/null +++ b/plugins/eq/eqpeekfilter.h @@ -0,0 +1,3 @@ + + + diff --git a/plugins/eq/eqspectrumview.h b/plugins/eq/eqspectrumview.h new file mode 100644 index 000000000..542ba6b52 --- /dev/null +++ b/plugins/eq/eqspectrumview.h @@ -0,0 +1,80 @@ +#ifndef EQSPECTRUMVIEW_H +#define EQSPECTRUMVIEW_H + +#include "qpainter.h" +#include "eqeffect.h" +#include "qwidget.h" + +class EqParams +{ +public: + const static int MAX_BANDS = 249; + float m_bands[MAX_BANDS]; + float m_energy; +}; + + +class EqSpectrumView : public QWidget +{ +public: + EqSpectrumView( EqParams* s, QWidget * _parent = 0) : + QWidget( _parent ), + m_sa( s ) + { + setFixedSize( 240, 116 ); + connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); + setAttribute( Qt::WA_OpaquePaintEvent, true ); + } + + virtual ~EqSpectrumView() + { + } +EqParams *m_sa; + virtual void paintEvent( QPaintEvent* event ) + { + const int MAX_BANDS = 249; + QPainter p( this ); + const float e = m_sa->m_energy; + if( e <= 0 ) + { + //dont draw anything + return; + } + float * b = m_sa->m_bands; + const int LOWER_Y = -60; // dB + int h; + const int fh = height(); + bool linX = true; + if( linX ) + { + for( int x = 0; x < MAX_BANDS; ++x, ++b ) + { + h = (int)( fh * 2.0 / 3.0 * (20*(log10( *b / e ) ) - LOWER_Y ) / (-LOWER_Y ) ); + if( h < 0 ) h = 0; else if( h >= fh ) continue; + p.drawPoint( x, fh-h ); + } + } + else + { + for( int x = 0; x < 31; ++x, ++b ) + { + h = (int)( fh * 2.0 / 3.0 * (20*(log10( *b / e ) ) - LOWER_Y ) / (-LOWER_Y ) ); + if( h < 0 ) h = 0; else if( h >= fh ) continue; else h = ( h / 3 ) * 3; + p.drawPoint(x * 8, fh-h ); + } + } + } + + + +private: + + +//EqParams *m_sa; +// QImage m_backgroundPlain; +// QImage m_background; + +} ; + + +#endif // EQSPECTRUMVIEW_H diff --git a/plugins/eq/logo.png b/plugins/eq/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..89e9f3680118931dd86f065a8f6bc0b4c631a585 GIT binary patch literal 3225 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 Date: Thu, 11 Dec 2014 00:08:42 +0000 Subject: [PATCH 02/81] spectrum analysis implemented --- include/Fader.h | 6 ++ plugins/eq/CMakeLists.txt | 6 +- plugins/eq/eqcontrols.cpp | 12 ++-- plugins/eq/eqcontrols.h | 8 ++- plugins/eq/eqcontrolsdialog.cpp | 13 +++- plugins/eq/eqcontrolsdialog.h | 5 +- plugins/eq/eqeffect.cpp | 102 ++++++++++++++++++++++++++++--- plugins/eq/eqeffect.h | 63 +++++++++++-------- plugins/eq/eqparameterwidget.cpp | 6 +- plugins/eq/eqspectrumview.h | 76 +++++++++++++++++++---- src/gui/widgets/Fader.cpp | 4 +- 11 files changed, 237 insertions(+), 64 deletions(-) diff --git a/include/Fader.h b/include/Fader.h index f8048e98c..96c3ae732 100644 --- a/include/Fader.h +++ b/include/Fader.h @@ -82,6 +82,12 @@ public: { m_displayConversion = b; } + inline void setHintText( const QString & _txt_before, + const QString & _txt_after ) + { + setDescription( _txt_before ); + setUnit( _txt_after ); + } private: virtual void contextMenuEvent( QContextMenuEvent * _me ); diff --git a/plugins/eq/CMakeLists.txt b/plugins/eq/CMakeLists.txt index 72dc8bb5e..b537ab632 100644 --- a/plugins/eq/CMakeLists.txt +++ b/plugins/eq/CMakeLists.txt @@ -1,3 +1,5 @@ INCLUDE(BuildPlugin) - -BUILD_PLUGIN(eq eqeffect.cpp eqcontrols.cpp eqcontrolsdialog.cpp eqfilter.h eqparameterwidget.cpp eqfader.h MOCFILES eqcontrols.h eqparameterwidget.h eqfader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") +INCLUDE_DIRECTORIES(${FFTW3F_INCLUDE_DIRS}) +LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) +LINK_LIBRARIES(${FFTW3F_LIBRARIES}) +BUILD_PLUGIN(eq eqeffect.cpp eqcontrols.cpp eqcontrolsdialog.cpp eqfilter.h eqparameterwidget.cpp eqfader.h eqspectrumview.h MOCFILES eqcontrols.h eqparameterwidget.h eqfader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/eq/eqcontrols.cpp b/plugins/eq/eqcontrols.cpp index efb89a245..5fe6b6c32 100644 --- a/plugins/eq/eqcontrols.cpp +++ b/plugins/eq/eqcontrols.cpp @@ -35,12 +35,12 @@ EqControls::EqControls( EqEffect *effect ) : m_effect( effect ), m_inGainModel( 1.0, 0.0, 2.0, 0.001, this, tr( "Input gain") ), m_outGainModel( 1.0, 0.0, 2.0, 0.001, this, tr( "Output gain" ) ), - m_lowShelfGainModel( 0.0 , -20, 20, 0.001, this, tr( "Low shelf gain" ) ), - m_para1GainModel( 0.0 , -20, 20, 0.001, this, tr( "Peak 1 gain" ) ), - m_para2GainModel( 0.0 , -20, 20, 0.001, this, tr( "Peak 2 gain" ) ), - m_para3GainModel( 0.0 , -20, 20, 0.001, this, tr( "Peak 3 gain" ) ), - m_para4GainModel( 0.0 , -20, 20, 0.001, this, tr( "Peak 4 gain" ) ), - m_highShelfGainModel( 0.0 , -20, 20, 0.001, this, tr( "High Shelf gain" ) ), + m_lowShelfGainModel( 0.0 , -40, 40, 0.001, this, tr( "Low shelf gain" ) ), + m_para1GainModel( 0.0 , -40, 40, 0.001, this, tr( "Peak 1 gain" ) ), + m_para2GainModel( 0.0 , -40, 40, 0.001, this, tr( "Peak 2 gain" ) ), + m_para3GainModel( 0.0 , -40, 40, 0.001, this, tr( "Peak 3 gain" ) ), + m_para4GainModel( 0.0 , -40, 40, 0.001, this, tr( "Peak 4 gain" ) ), + m_highShelfGainModel( 0.0 , -40, 40, 0.001, this, tr( "High Shelf gain" ) ), m_hpResModel( 0.707,0.003, 10.0 , 0.001, this, tr( "HP res" ) ), m_lowShelfResModel( 1.4,0.0, 10.0 , 0.001, this , tr( "Low Shelf res" ) ), m_para1ResModel( 1.4 ,0.55, 10.0 , 0.001, this , tr( "Peak 1 res" ) ), diff --git a/plugins/eq/eqcontrols.h b/plugins/eq/eqcontrols.h index f6703919e..413bf4176 100644 --- a/plugins/eq/eqcontrols.h +++ b/plugins/eq/eqcontrols.h @@ -33,9 +33,9 @@ class EqEffect; class EqControls : public EffectControls { - Q_OBJECT + Q_OBJECT public: - EqControls( EqEffect* effect ); + explicit EqControls( EqEffect* effect ); virtual ~EqControls() { } @@ -51,7 +51,6 @@ public: } virtual EffectControlDialog* createView() { - printf("create dialog\n"); return new EqControlsDialog( this ); } @@ -66,6 +65,9 @@ public: float m_para4PeakL, m_para4PeakR; float m_highShelfPeakL, m_highShelfPeakR; + FftBands m_inFftBands; + FftBands m_outFftBands; + diff --git a/plugins/eq/eqcontrolsdialog.cpp b/plugins/eq/eqcontrolsdialog.cpp index 704e81f00..1527f59fd 100644 --- a/plugins/eq/eqcontrolsdialog.cpp +++ b/plugins/eq/eqcontrolsdialog.cpp @@ -33,6 +33,7 @@ #include "QWidget" #include "MainWindow.h" #include "LedCheckbox.h" +//#include "eqspectrumview.h" @@ -48,9 +49,14 @@ EqControlsDialog::EqControlsDialog(EqControls *controls) : setPalette( pal ); setFixedSize( 350, 275 ); + m_inSpec = new EqSpectrumView( &controls->m_inFftBands, this); + m_inSpec->move( 50, 5 ); + m_inSpec->color = QColor( 200, 200, 100, 100 ); + m_outSpec = new EqSpectrumView( &controls->m_outFftBands, this); + m_outSpec->move( 50, 5 ); + m_outSpec->color = QColor(100, 200, 200, 100); m_parameterWidget = new EqParameterWidget( this ); m_parameterWidget->move( 50, 5 ); -// m_inSpec = new EqSpectrumView( controls->m_effect, this); setBand( 0, &controls->m_hpActiveModel, &controls->m_hpFeqModel, &controls->m_hpResModel, 0, QColor(173, 115, 57), tr( "HP" ) ,0,0); setBand( 1, &controls->m_lowShelfActiveModel, &controls->m_lowShelfFreqModel, &controls->m_lowShelfResModel, &controls->m_lowShelfGainModel, QColor(255, 0, 0), tr( "Low Shelf" ), &controls->m_lowShelfPeakL , &controls->m_lowShelfPeakR ); @@ -66,6 +72,7 @@ EqControlsDialog::EqControlsDialog(EqControls *controls) : m_inGainFader = new EqFader( &controls->m_inGainModel, tr( "In Gain" ), this, &controls->m_inPeakL, &controls->m_inPeakR); m_inGainFader->move( 10, 5 ); + m_outGainFader = new EqFader( &controls->m_outGainModel, tr( "Out Gain" ), this, &controls->m_outPeakL, &controls->m_outPeakR ); m_outGainFader->move( 315, 5 ); //gain faders @@ -78,6 +85,8 @@ EqControlsDialog::EqControlsDialog(EqControls *controls) : m_gainFader->move( cw * i + fo , 123 ); m_gainFader->setMinimumHeight(80); m_gainFader->resize(m_gainFader->width() , 80); + m_gainFader->setDisplayConversion( false ); + m_gainFader->setHintText( tr( "Gain") , "dB"); } for( int i = 0; i < m_parameterWidget->bandCount() ; i++) @@ -86,11 +95,13 @@ EqControlsDialog::EqControlsDialog(EqControls *controls) : m_resKnob->move(cw * i + ko , 205 ); m_resKnob->setVolumeKnob(false); m_resKnob->setModel( m_parameterWidget->getBandModels( i )->res ); + m_resKnob->setHintText( tr( "Resonance:") , ""); m_freqKnob = new Knob( knobBright_26, this ); m_freqKnob->move(cw * i + ko, 235 ); m_freqKnob->setVolumeKnob( false ); m_freqKnob->setModel( m_parameterWidget->getBandModels( i )->freq ); + m_freqKnob->setHintText( tr( "Frequency:" ), "Hz" ); m_activeBox = new LedCheckBox( m_parameterWidget->getBandModels( i )->name , this ); m_activeBox->move( cw * i + fo + 3, 260 ); diff --git a/plugins/eq/eqcontrolsdialog.h b/plugins/eq/eqcontrolsdialog.h index bb4c0cfad..fe1326231 100644 --- a/plugins/eq/eqcontrolsdialog.h +++ b/plugins/eq/eqcontrolsdialog.h @@ -32,7 +32,7 @@ #include "eqparameterwidget.h" #include "MainWindow.h" #include "qpushbutton.h" -//#include "eqspectrumview.h" +#include "eqspectrumview.h" class EqControls; @@ -69,7 +69,8 @@ private: LedCheckBox* m_analyzeBox; EqParameterWidget* m_parameterWidget; -// EqSpectrumView* m_inSpec; + EqSpectrumView* m_inSpec; + EqSpectrumView* m_outSpec; virtual void mouseDoubleClickEvent(QMouseEvent *event); diff --git a/plugins/eq/eqeffect.cpp b/plugins/eq/eqeffect.cpp index 20be28000..3808f8bf6 100644 --- a/plugins/eq/eqeffect.cpp +++ b/plugins/eq/eqeffect.cpp @@ -34,7 +34,7 @@ //re write to store data from each filter(models,name, storeage name ) in a class, stored in array //then just loop ever array for each section -const int MAX_BANDS = 249; + extern "C" { @@ -58,16 +58,13 @@ Plugin::Descriptor PLUGIN_EXPORT eq_plugin_descriptor = EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::Key *key) : Effect( &eq_plugin_descriptor, parent, key ), m_eqControls( this ) - - - { - m_dFilterCount = 4; + m_dFilterCount = 10; m_downsampleFilters = new EqLp12Filter[m_dFilterCount]; for( int i = 0; i < m_dFilterCount; i++) { - m_downsampleFilters[i].setFrequency(20000); - m_downsampleFilters[i].setQ(0.66); + m_downsampleFilters[i].setFrequency(22000); + m_downsampleFilters[i].setQ(0.85); m_downsampleFilters[i].setGain(0); m_downsampleFilters[i].setSampleRate(Engine::mixer()->processingSampleRate() * 2 ); } @@ -99,6 +96,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) sample_t dryS[2]; sampleFrame m_inPeak; + analyze( buf, frames, &m_eqControls.m_inFftBands) ; //TODO UPSAMPLE upsample( buf, frames ); @@ -236,6 +234,8 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; } checkGate( outSum / frames ); + analyze( buf, frames, &m_eqControls.m_outFftBands) ; + setBandPeaks( &m_eqControls.m_outFftBands , (int)(sampleRate * 0.5)); return isRunning(); } @@ -298,6 +298,94 @@ void EqEffect::downSample(sampleFrame *buf, const fpp_t frames) } } +void EqEffect::analyze(sampleFrame *buf, const fpp_t frames, FftBands* fft) +{ + const int FFT_BUFFER_SIZE = 2048; + fpp_t f = 0; + if( frames > FFT_BUFFER_SIZE ) + { + fft->m_framesFilledUp = 0; + f = frames - FFT_BUFFER_SIZE; + } + // meger channels + for( ; f < frames; ++f ) + { + fft->m_buffer[fft->m_framesFilledUp] = + ( buf[f][0] + buf[f][1] ) * 0.5; + ++fft->m_framesFilledUp; + } + + if( fft->m_framesFilledUp < FFT_BUFFER_SIZE ) + { + return; + } + + fft->m_sr = Engine::mixer()->processingSampleRate(); + const int LOWEST_FREQ = 0; + const int HIGHEST_FREQ = fft->m_sr / 2; + + fftwf_execute( fft->m_fftPlan ); + absspec( fft->m_specBuf, fft->m_absSpecBuf, FFT_BUFFER_SIZE+1 ); + + compressbands( fft->m_absSpecBuf, fft->m_bands, FFT_BUFFER_SIZE+1, + MAX_BANDS, + (int)(LOWEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(fft->m_sr /2)), + (int)(HIGHEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(fft->m_sr /2))); + fft->m_energy = maximum( fft->m_bands, MAX_BANDS ) / maximum( fft->m_buffer, FFT_BUFFER_SIZE ); + fft->m_framesFilledUp = 0; +} + +float EqEffect::peakBand(float minF, float maxF, FftBands *fft, int sr) +{ + float peak = -60; + float * b = fft->m_bands; + float h = 0; + for(int x = 0; x < MAX_BANDS; x++, b++) + { + if( bandToFreq( x ,sr) >= minF && bandToFreq( x,sr ) <= maxF ) + { + h = 20*( log10( *b / fft->m_energy ) ); + peak = h > peak ? h : peak; + } + } + return (peak+100)/100; +} + +void EqEffect::setBandPeaks(FftBands *fft, int samplerate ) +{ + m_eqControls.m_lowShelfPeakR = m_eqControls.m_lowShelfPeakL = + peakBand( 0, + m_eqControls.m_lowShelfFreqModel.value(), fft , samplerate ); + + m_eqControls.m_para1PeakL = m_eqControls.m_para1PeakR = + peakBand( m_eqControls.m_para1FreqModel.value() + - (m_eqControls.m_para1FreqModel.value() / m_eqControls.m_para1ResModel.value() * 0.5), + m_eqControls.m_para1FreqModel.value() + + (m_eqControls.m_para1FreqModel.value() / m_eqControls.m_para1ResModel.value() * 0.5), fft , samplerate ); + + m_eqControls.m_para2PeakL = m_eqControls.m_para2PeakR = + peakBand( m_eqControls.m_para2FreqModel.value() + - (m_eqControls.m_para2FreqModel.value() / m_eqControls.m_para2ResModel.value() * 0.5), + m_eqControls.m_para2FreqModel.value() + + (m_eqControls.m_para2FreqModel.value() / m_eqControls.m_para2ResModel.value() * 0.5), fft , samplerate ); + + m_eqControls.m_para3PeakL = m_eqControls.m_para3PeakR = + peakBand( m_eqControls.m_para3FreqModel.value() + - (m_eqControls.m_para3FreqModel.value() / m_eqControls.m_para3ResModel.value() * 0.5), + m_eqControls.m_para3FreqModel.value() + + (m_eqControls.m_para3FreqModel.value() / m_eqControls.m_para3ResModel.value() * 0.5), fft , samplerate ); + + m_eqControls.m_para4PeakL = m_eqControls.m_para4PeakR = + peakBand( m_eqControls.m_para4FreqModel.value() + - (m_eqControls.m_para4FreqModel.value() / m_eqControls.m_para4ResModel.value() * 0.5), + m_eqControls.m_para4FreqModel.value() + + (m_eqControls.m_para4FreqModel.value() / m_eqControls.m_para4ResModel.value() * 0.5), fft , samplerate ); + + m_eqControls.m_highShelfPeakL = m_eqControls.m_highShelfPeakR = + peakBand( m_eqControls.m_highShelfFreqModel.value(), + samplerate * 0.5 , fft, samplerate ); +} + diff --git a/plugins/eq/eqeffect.h b/plugins/eq/eqeffect.h index 987eac9c4..0ea793351 100644 --- a/plugins/eq/eqeffect.h +++ b/plugins/eq/eqeffect.h @@ -31,49 +31,60 @@ #include "BasicFilters.h" #include "eqfilter.h" + + class EqEffect : public Effect { public: - EqEffect( Model* parent , const Descriptor::SubPluginFeatures::Key* key ); - virtual ~EqEffect(); - virtual bool processAudioBuffer( sampleFrame *buf, const fpp_t frames ); - virtual EffectControls* controls() - { - return &m_eqControls; - } - void gain( sampleFrame *buf, const fpp_t frames, float scale, sampleFrame* peak ); + EqEffect( Model* parent , const Descriptor::SubPluginFeatures::Key* key ); + virtual ~EqEffect(); + virtual bool processAudioBuffer( sampleFrame *buf, const fpp_t frames ); + virtual EffectControls* controls() + { + return &m_eqControls; + } + void gain( sampleFrame *buf, const fpp_t frames, float scale, sampleFrame* peak ); private: - EqControls m_eqControls; + EqControls m_eqControls; - EqHp12Filter m_hp12; - EqHp12Filter m_hp24; - EqHp12Filter m_hp480; - EqHp12Filter m_hp481; + EqHp12Filter m_hp12; + EqHp12Filter m_hp24; + EqHp12Filter m_hp480; + EqHp12Filter m_hp481; - EqLowShelfFilter m_lowShelf; + EqLowShelfFilter m_lowShelf; - EqPeakFilter m_para1; - EqPeakFilter m_para2; - EqPeakFilter m_para3; - EqPeakFilter m_para4; + EqPeakFilter m_para1; + EqPeakFilter m_para2; + EqPeakFilter m_para3; + EqPeakFilter m_para4; - EqHighShelfFilter m_highShelf; + EqHighShelfFilter m_highShelf; - EqLp12Filter m_lp12; - EqLp12Filter m_lp24; - EqLp12Filter m_lp480; - EqLp12Filter m_lp481; + EqLp12Filter m_lp12; + EqLp12Filter m_lp24; + EqLp12Filter m_lp480; + EqLp12Filter m_lp481; EqLp12Filter* m_downsampleFilters; int m_dFilterCount; sampleFrame* m_upBuf; fpp_t m_upBufFrames; -// const static int MAX_BANDS = 249; + // const static int MAX_BANDS = 249; void upsample( sampleFrame *buf, const fpp_t frames ); void downSample( sampleFrame *buf, const fpp_t frames ); -// float m_bands[MAX_BANDS]; -// float m_energy; + void analyze( sampleFrame *buf, const fpp_t frames, FftBands* fft ); + float peakBand(float minF, float maxF,FftBands*, int); + + inline float bandToFreq ( int index , int sampleRate ) + { + return index * sampleRate / (MAX_BANDS * 2); + } + + void setBandPeaks( FftBands *fft , int); + // float m_bands[MAX_BANDS]; + // float m_energy; }; diff --git a/plugins/eq/eqparameterwidget.cpp b/plugins/eq/eqparameterwidget.cpp index eb329460b..39e1ab94f 100644 --- a/plugins/eq/eqparameterwidget.cpp +++ b/plugins/eq/eqparameterwidget.cpp @@ -40,7 +40,7 @@ EqParameterWidget::EqParameterWidget( QWidget *parent ) : connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); float totalLength = log10( 21000 ); m_pixelsPerUnitWidth = width( ) / totalLength ; - float totalHeight = 40; + float totalHeight = 80; m_pixelsPerUnitHeight = (height() - 4) / ( totalHeight ); m_scale = 1.5; m_pixelsPerOctave = freqToXPixel( 10000 ) - freqToXPixel( 5000 ); @@ -63,7 +63,7 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) for( int i = 0 ; i < bandCount() ; i++ ) { m_bands[i].color.setAlpha(m_bands[i].active->value() ? activeAplha() : inactiveAlpha()); - painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); + painter.setPen( QPen( m_bands[i].color, 10, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); float x = freqToXPixel( m_bands[i].freq->value() ); float y = height() * 0.5; float gain = 1; @@ -75,7 +75,7 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) float bw = m_bands[i].freq->value() / m_bands[i].res->value(); m_bands[i].x = x; m_bands[i].y = y; painter.drawPoint( x, y ); - painter.setPen( QPen( m_bands[i].color, 1, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); + painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); if(i == 0 || i == bandCount() - 1 ){ painter.drawLine(x, y, x, y - (m_bands[i].res->value() * 4 ) ); } diff --git a/plugins/eq/eqspectrumview.h b/plugins/eq/eqspectrumview.h index 542ba6b52..ca63ff27d 100644 --- a/plugins/eq/eqspectrumview.h +++ b/plugins/eq/eqspectrumview.h @@ -2,38 +2,70 @@ #define EQSPECTRUMVIEW_H #include "qpainter.h" -#include "eqeffect.h" +//#include "eqeffect.h" #include "qwidget.h" +#include "fft_helpers.h" -class EqParams + +const int MAX_BANDS = 512; + +class FftBands { public: - const static int MAX_BANDS = 249; + + fftwf_plan m_fftPlan; + + fftwf_complex * m_specBuf; + float m_absSpecBuf[FFT_BUFFER_SIZE+1]; + float m_buffer[FFT_BUFFER_SIZE*2]; + int m_framesFilledUp; + float m_bands[MAX_BANDS]; float m_energy; + int m_sr; + + FftBands() : + m_framesFilledUp( 0 ), + m_energy( 0 ) + { + memset( m_buffer, 0, sizeof( m_buffer ) ); + + m_specBuf = (fftwf_complex *) fftwf_malloc( ( FFT_BUFFER_SIZE + 1 ) * sizeof( fftwf_complex ) ); + m_fftPlan = fftwf_plan_dft_r2c_1d( FFT_BUFFER_SIZE*2, m_buffer, m_specBuf, FFTW_MEASURE ); + } }; class EqSpectrumView : public QWidget { + public: - EqSpectrumView( EqParams* s, QWidget * _parent = 0) : + explicit EqSpectrumView( FftBands * b, QWidget * _parent = 0) : QWidget( _parent ), - m_sa( s ) + m_sa( b ) { - setFixedSize( 240, 116 ); + setFixedSize( 250, 116 ); connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); - setAttribute( Qt::WA_OpaquePaintEvent, true ); + setAttribute( Qt::WA_TranslucentBackground, true ); + m_skipBands = MAX_BANDS * 0.5; + float totalLength = log10( 21000); + m_pixelsPerUnitWidth = width( ) / totalLength ; + m_scale = 1.5; + color = QColor( 255, 255, 255, 255 ); + } virtual ~EqSpectrumView() { } -EqParams *m_sa; + QColor color; + FftBands *m_sa; + int m_lastY; virtual void paintEvent( QPaintEvent* event ) { - const int MAX_BANDS = 249; + int m_lastY = height(); QPainter p( this ); + p.setPen( QPen( color, 1, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); const float e = m_sa->m_energy; if( e <= 0 ) { @@ -51,7 +83,8 @@ EqParams *m_sa; { h = (int)( fh * 2.0 / 3.0 * (20*(log10( *b / e ) ) - LOWER_Y ) / (-LOWER_Y ) ); if( h < 0 ) h = 0; else if( h >= fh ) continue; - p.drawPoint( x, fh-h ); + p.drawLine(freqToXPixel(bandToFreq(x -1 ) ),m_lastY, freqToXPixel(bandToFreq(x ) ), fh-h ); + m_lastY = fh-h; } } else @@ -67,12 +100,29 @@ EqParams *m_sa; + + inline int bandToXPixel( float band ) + { + return ( log10( band - m_skipBands ) * m_pixelsPerUnitWidth * m_scale ); + } + + inline float bandToFreq ( int index ) + { + return index * m_sa->m_sr / (MAX_BANDS * 2); + } + + + inline int freqToXPixel( float freq ) + { + return ( log10( freq ) * m_pixelsPerUnitWidth * m_scale ) - ( width() * 0.5 ); + } private: + float m_pixelsPerUnitWidth; + float m_scale; + int m_skipBands; + -//EqParams *m_sa; -// QImage m_backgroundPlain; -// QImage m_background; } ; diff --git a/src/gui/widgets/Fader.cpp b/src/gui/widgets/Fader.cpp index 7f1352a57..1af7bb040 100644 --- a/src/gui/widgets/Fader.cpp +++ b/src/gui/widgets/Fader.cpp @@ -107,6 +107,7 @@ Fader::Fader( FloatModel * _model, const QString & _name, QWidget * _parent ) : setMaximumSize( 23, 116); resize( 23, 116 ); setModel( _model ); + setHintText( "Volume:","%"); } @@ -141,6 +142,7 @@ Fader::Fader( FloatModel * model, const QString & name, QWidget * parent, QPixma setMaximumSize( m_back->width(), m_back->height() ); resize( m_back->width(), m_back->height() ); setModel( model ); + setHintText( "Volume:","%"); } @@ -324,7 +326,7 @@ void Fader::updateTextFloat() } else { - s_textFloat->setText( QString("Volume: %1 %").arg( m_displayConversion ? m_model->value() * 100 : m_model->value() ) ); + s_textFloat->setText( m_description + " " + QString("%1 ").arg( m_displayConversion ? m_model->value() * 100 : m_model->value() ) + " " + m_unit ); } s_textFloat->moveGlobal( this, QPoint( width() - ( *m_knob ).width() - 5, knobPosY() - 46 ) ); } From a7831a7ccab1ec0537bfb520b72b4eb0efa84e3b Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 11 Dec 2014 16:52:06 +0000 Subject: [PATCH 03/81] Draw grid lines on widget --- plugins/eq/eqparameterwidget.cpp | 25 ++++++++++++++++++++++--- plugins/eq/eqparameterwidget.h | 2 ++ plugins/eq/eqspectrumview.h | 8 ++++++-- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/plugins/eq/eqparameterwidget.cpp b/plugins/eq/eqparameterwidget.cpp index 39e1ab94f..f1d53fa2e 100644 --- a/plugins/eq/eqparameterwidget.cpp +++ b/plugins/eq/eqparameterwidget.cpp @@ -44,6 +44,7 @@ EqParameterWidget::EqParameterWidget( QWidget *parent ) : m_pixelsPerUnitHeight = (height() - 4) / ( totalHeight ); m_scale = 1.5; m_pixelsPerOctave = freqToXPixel( 10000 ) - freqToXPixel( 5000 ); + } @@ -59,9 +60,27 @@ EqParameterWidget::~EqParameterWidget() void EqParameterWidget::paintEvent( QPaintEvent *event ) { - QPainter painter( this ); + QPainter painter( this ); + //Draw Frequecy maker lines + painter.setPen( QPen( QColor( 100, 100, 100, 200 ), 1, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); + for( int x = 20 ; x < 100; x += 10) + { + painter.drawLine( freqToXPixel( x ) , 0, freqToXPixel( x ) , height() ); + } + for( int x = 100 ; x < 1000; x += 100) + { + painter.drawLine( freqToXPixel( x ) , 0, freqToXPixel( x ) , height() ); + } + for( int x = 1000 ; x < 11000; x += 1000) + { + painter.drawLine( freqToXPixel( x ) , 0, freqToXPixel( x ) , height() ); + } + //draw 0dB line + painter.drawLine(0, gainToYPixel( 0 ) , width(), gainToYPixel( 0 ) ); + for( int i = 0 ; i < bandCount() ; i++ ) { + m_bands[i].color.setAlpha(m_bands[i].active->value() ? activeAplha() : inactiveAlpha()); painter.setPen( QPen( m_bands[i].color, 10, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); float x = freqToXPixel( m_bands[i].freq->value() ); @@ -71,11 +90,11 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) { gain = m_bands[i].gain->value(); } - y = gainToYPixel( gain ) + 3; + y = gainToYPixel( gain ); float bw = m_bands[i].freq->value() / m_bands[i].res->value(); m_bands[i].x = x; m_bands[i].y = y; painter.drawPoint( x, y ); - painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); + painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::SquareCap, Qt::BevelJoin ) ); if(i == 0 || i == bandCount() - 1 ){ painter.drawLine(x, y, x, y - (m_bands[i].res->value() * 4 ) ); } diff --git a/plugins/eq/eqparameterwidget.h b/plugins/eq/eqparameterwidget.h index cb14154b3..766efad60 100644 --- a/plugins/eq/eqparameterwidget.h +++ b/plugins/eq/eqparameterwidget.h @@ -122,6 +122,8 @@ private: enum MouseAction { none, drag, res } m_mouseAction; int m_oldX, m_oldY; + int *m_xGridBands; + inline int freqToXPixel( float freq ) { diff --git a/plugins/eq/eqspectrumview.h b/plugins/eq/eqspectrumview.h index ca63ff27d..47490afa3 100644 --- a/plugins/eq/eqspectrumview.h +++ b/plugins/eq/eqspectrumview.h @@ -63,9 +63,15 @@ public: int m_lastY; virtual void paintEvent( QPaintEvent* event ) { + const int fh = height(); + const int LOWER_Y = -96; // dB int m_lastY = height(); QPainter p( this ); p.setPen( QPen( color, 1, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); + //draw grid lines + int y33 = (int)( fh * 2.0 / 3.0 * (20*(log10( 0.33 ) ) - LOWER_Y ) / (-LOWER_Y ) ); + p.drawLine(0, y33, width(), y33); + const float e = m_sa->m_energy; if( e <= 0 ) { @@ -73,9 +79,7 @@ public: return; } float * b = m_sa->m_bands; - const int LOWER_Y = -60; // dB int h; - const int fh = height(); bool linX = true; if( linX ) { From 08821a7290ef64ae1dbbb07cb0036cee92381b0b Mon Sep 17 00:00:00 2001 From: Dave French Date: Sat, 13 Dec 2014 15:55:28 +0000 Subject: [PATCH 04/81] EQ update filters before downsampling changed ignore wet dry knob scale lines on widget filter type switch loading correctly analyser code all move to one location implment analyze button remove redundant code analyser display omprovments --- plugins/eq/eqcontrols.cpp | 15 +- plugins/eq/eqcontrols.h | 135 +++++----- plugins/eq/eqcontrolsdialog.cpp | 35 +-- plugins/eq/eqcontrolsdialog.h | 69 +++--- plugins/eq/eqeffect.cpp | 122 +++++---- plugins/eq/eqeffect.h | 8 +- plugins/eq/eqfader.h | 14 +- plugins/eq/eqfilter.h | 412 +++++++++++++++++-------------- plugins/eq/eqparameterwidget.cpp | 203 +++++++-------- plugins/eq/eqspectrumview.h | 148 ++++++++--- 10 files changed, 646 insertions(+), 515 deletions(-) diff --git a/plugins/eq/eqcontrols.cpp b/plugins/eq/eqcontrols.cpp index 5fe6b6c32..cb0300382 100644 --- a/plugins/eq/eqcontrols.cpp +++ b/plugins/eq/eqcontrols.cpp @@ -65,14 +65,15 @@ EqControls::EqControls( EqEffect *effect ) : m_para4ActiveModel( false, this , tr( "Peak 4 active" ) ), m_highShelfActiveModel( false, this , tr( "High shelf active" ) ), m_lpActiveModel( false, this , tr( "LP active" ) ), - m_lp12Model( true, this , tr( "LP 12" ) ), + m_lp12Model( false, this , tr( "LP 12" ) ), m_lp24Model( false, this , tr( "LP 24" ) ), m_lp48Model( false, this , tr( "LP 48" ) ), - m_hp12Model( true, this , tr( "HP 12" ) ), + m_hp12Model( false, this , tr( "HP 12" ) ), m_hp24Model( false, this , tr( "HP 24" ) ), m_hp48Model( false, this , tr( "HP 48" ) ), - m_analyzeModel( true, this , tr( "Analyze enable" ) ) - + m_analyzeModel( true, this , tr( "Analyze enable" ) ), + m_lpTypeModel(0,0,2,this, tr( "low pass type") ) , + m_hpTypeModel(0,0,2,this, tr( "high pass type") ) { m_hpFeqModel.setScaleLogarithmic( true ); m_lowShelfFreqModel.setScaleLogarithmic( true ); @@ -92,6 +93,7 @@ EqControls::EqControls( EqEffect *effect ) : m_para3PeakL = 0; m_para3PeakR = 0; m_para4PeakL = 0; m_para4PeakR = 0; m_highShelfPeakL = 0; m_highShelfPeakR = 0; + m_inProgress = false; } @@ -144,6 +146,9 @@ void EqControls::loadSettings( const QDomElement &_this ) m_hp24Model.loadSettings( _this , "HP24" ); m_hp48Model.loadSettings( _this , "HP48" ); m_analyzeModel.loadSettings( _this, "Analyzeenable"); + + m_lpTypeModel.loadSettings( _this, "LP" ); + m_hpTypeModel.loadSettings( _this, "HP" ); } @@ -197,5 +202,7 @@ void EqControls::saveSettings( QDomDocument &doc, QDomElement &parent ) m_hp48Model.saveSettings( doc, parent, "HP48" ); m_analyzeModel.saveSettings( doc, parent, "Analyzeenable"); + m_lpTypeModel.saveSettings( doc, parent, "LP" ); + m_hpTypeModel.saveSettings( doc, parent, "HP" ); } diff --git a/plugins/eq/eqcontrols.h b/plugins/eq/eqcontrols.h index 413bf4176..f3646cce6 100644 --- a/plugins/eq/eqcontrols.h +++ b/plugins/eq/eqcontrols.h @@ -36,28 +36,28 @@ class EqControls : public EffectControls Q_OBJECT public: explicit EqControls( EqEffect* effect ); - virtual ~EqControls() - { - } - virtual void saveSettings ( QDomDocument& doc, QDomElement& parent ); - virtual void loadSettings ( const QDomElement &_this ); - inline virtual QString nodeName() const - { - return "Eq"; - } - virtual int controlCount() - { - return 39; - } - virtual EffectControlDialog* createView() - { - return new EqControlsDialog( this ); - } + virtual ~EqControls() + { + } + virtual void saveSettings ( QDomDocument& doc, QDomElement& parent ); + virtual void loadSettings ( const QDomElement &_this ); + inline virtual QString nodeName() const + { + return "Eq"; + } + virtual int controlCount() + { + return 39; + } + virtual EffectControlDialog* createView() + { + return new EqControlsDialog( this ); + } - float m_inPeakL; - float m_inPeakR; - float m_outPeakL; - float m_outPeakR; + float m_inPeakL; + float m_inPeakR; + float m_outPeakL; + float m_outPeakR; float m_lowShelfPeakL, m_lowShelfPeakR; float m_para1PeakL, m_para1PeakR; float m_para2PeakL, m_para2PeakR; @@ -65,64 +65,69 @@ public: float m_para4PeakL, m_para4PeakR; float m_highShelfPeakL, m_highShelfPeakR; - FftBands m_inFftBands; - FftBands m_outFftBands; + EqAnalyser m_inFftBands; + EqAnalyser m_outFftBands; + + bool m_inProgress; private: - EqEffect* m_effect; + EqEffect* m_effect; - FloatModel m_inGainModel; - FloatModel m_outGainModel; - FloatModel m_lowShelfGainModel; - FloatModel m_para1GainModel; - FloatModel m_para2GainModel; - FloatModel m_para3GainModel; - FloatModel m_para4GainModel; - FloatModel m_highShelfGainModel; + FloatModel m_inGainModel; + FloatModel m_outGainModel; + FloatModel m_lowShelfGainModel; + FloatModel m_para1GainModel; + FloatModel m_para2GainModel; + FloatModel m_para3GainModel; + FloatModel m_para4GainModel; + FloatModel m_highShelfGainModel; - FloatModel m_hpResModel; - FloatModel m_lowShelfResModel; - FloatModel m_para1ResModel; - FloatModel m_para2ResModel; - FloatModel m_para3ResModel; - FloatModel m_para4ResModel; - FloatModel m_highShelfResModel; - FloatModel m_lpResModel; + FloatModel m_hpResModel; + FloatModel m_lowShelfResModel; + FloatModel m_para1ResModel; + FloatModel m_para2ResModel; + FloatModel m_para3ResModel; + FloatModel m_para4ResModel; + FloatModel m_highShelfResModel; + FloatModel m_lpResModel; - FloatModel m_hpFeqModel; - FloatModel m_lowShelfFreqModel; - FloatModel m_para1FreqModel; - FloatModel m_para2FreqModel; - FloatModel m_para3FreqModel; - FloatModel m_para4FreqModel; - FloatModel m_highShelfFreqModel; - FloatModel m_lpFreqModel; + FloatModel m_hpFeqModel; + FloatModel m_lowShelfFreqModel; + FloatModel m_para1FreqModel; + FloatModel m_para2FreqModel; + FloatModel m_para3FreqModel; + FloatModel m_para4FreqModel; + FloatModel m_highShelfFreqModel; + FloatModel m_lpFreqModel; - BoolModel m_hpActiveModel; - BoolModel m_lowShelfActiveModel; - BoolModel m_para1ActiveModel; - BoolModel m_para2ActiveModel; - BoolModel m_para3ActiveModel; - BoolModel m_para4ActiveModel; - BoolModel m_highShelfActiveModel; - BoolModel m_lpActiveModel; + BoolModel m_hpActiveModel; + BoolModel m_lowShelfActiveModel; + BoolModel m_para1ActiveModel; + BoolModel m_para2ActiveModel; + BoolModel m_para3ActiveModel; + BoolModel m_para4ActiveModel; + BoolModel m_highShelfActiveModel; + BoolModel m_lpActiveModel; - BoolModel m_lp12Model; - BoolModel m_lp24Model; - BoolModel m_lp48Model; + BoolModel m_lp12Model; + BoolModel m_lp24Model; + BoolModel m_lp48Model; - BoolModel m_hp12Model; - BoolModel m_hp24Model; - BoolModel m_hp48Model; + BoolModel m_hp12Model; + BoolModel m_hp24Model; + BoolModel m_hp48Model; - BoolModel m_analyzeModel; + BoolModel m_analyzeModel; - friend class EqControlsDialog; - friend class EqEffect; + IntModel m_lpTypeModel; + IntModel m_hpTypeModel; + + friend class EqControlsDialog; + friend class EqEffect; }; diff --git a/plugins/eq/eqcontrolsdialog.cpp b/plugins/eq/eqcontrolsdialog.cpp index 1527f59fd..f6424788a 100644 --- a/plugins/eq/eqcontrolsdialog.cpp +++ b/plugins/eq/eqcontrolsdialog.cpp @@ -51,10 +51,10 @@ EqControlsDialog::EqControlsDialog(EqControls *controls) : m_inSpec = new EqSpectrumView( &controls->m_inFftBands, this); m_inSpec->move( 50, 5 ); - m_inSpec->color = QColor( 200, 200, 100, 100 ); + m_inSpec->color = QColor( 255, 0, 255, 80 ); m_outSpec = new EqSpectrumView( &controls->m_outFftBands, this); m_outSpec->move( 50, 5 ); - m_outSpec->color = QColor(100, 200, 200, 100); + m_outSpec->color = QColor(00, 255, 255, 80); m_parameterWidget = new EqParameterWidget( this ); m_parameterWidget->move( 50, 5 ); @@ -134,31 +134,16 @@ EqControlsDialog::EqControlsDialog(EqControls *controls) : m_lp48Box->setModel( &controls->m_lp48Model ); automatableButtonGroup *lpBtnGrp = new automatableButtonGroup(this,tr ( "lp grp" ) ); - lpBtnGrp->addButton(m_lp12Box); - lpBtnGrp->addButton(m_lp24Box ); - lpBtnGrp->addButton(m_lp48Box ); - connect( m_lp12Box, SIGNAL( clicked() ), lpBtnGrp , SLOT( updateButtons() ) ); - connect( m_lp24Box, SIGNAL( clicked() ), lpBtnGrp , SLOT( updateButtons() ) ); - connect( m_lp48Box, SIGNAL( clicked() ), lpBtnGrp , SLOT( updateButtons() ) ); - connect( &controls->m_lp12Model, SIGNAL( dataChanged() ), lpBtnGrp, SLOT( updateButtons() ) ); - connect( &controls->m_lp24Model, SIGNAL( dataChanged() ), lpBtnGrp, SLOT( updateButtons() ) ); - connect( &controls->m_lp48Model, SIGNAL( dataChanged() ), lpBtnGrp, SLOT( updateButtons() ) ); - - + lpBtnGrp->addButton( m_lp12Box); + lpBtnGrp->addButton( m_lp24Box ); + lpBtnGrp->addButton( m_lp48Box ); + lpBtnGrp->setModel( &m_controls->m_lpTypeModel, false); automatableButtonGroup *hpBtnGrp = new automatableButtonGroup( this, tr( "hp grp" ) ); - hpBtnGrp->addButton(m_hp12Box ); - hpBtnGrp->addButton(m_hp24Box ); - hpBtnGrp->addButton(m_hp48Box ); - connect( m_hp12Box, SIGNAL ( clicked() ), hpBtnGrp, SLOT( updateButtons() ) ); - connect( m_hp24Box, SIGNAL ( clicked() ), hpBtnGrp, SLOT( updateButtons() ) ); - connect( m_hp48Box, SIGNAL ( clicked() ), hpBtnGrp, SLOT( updateButtons() ) ); - connect( &controls->m_hp12Model, SIGNAL( dataChanged() ), hpBtnGrp, SLOT( updateButtons() ) ); - connect( &controls->m_hp24Model, SIGNAL( dataChanged() ), hpBtnGrp, SLOT( updateButtons() ) ); - connect( &controls->m_hp48Model, SIGNAL( dataChanged() ), hpBtnGrp, SLOT( updateButtons() ) ); - - - + hpBtnGrp->addButton( m_hp12Box ); + hpBtnGrp->addButton( m_hp24Box ); + hpBtnGrp->addButton( m_hp48Box ); + hpBtnGrp->setModel( &m_controls->m_hpTypeModel,false); //Analize Box m_analyzeBox = new LedCheckBox( tr( "Analyze" ), this ); diff --git a/plugins/eq/eqcontrolsdialog.h b/plugins/eq/eqcontrolsdialog.h index fe1326231..fd8327dce 100644 --- a/plugins/eq/eqcontrolsdialog.h +++ b/plugins/eq/eqcontrolsdialog.h @@ -33,6 +33,7 @@ #include "MainWindow.h" #include "qpushbutton.h" #include "eqspectrumview.h" +#include "qlist.h" class EqControls; @@ -40,56 +41,56 @@ class EqControlsDialog : public EffectControlDialog { public: - EqControlsDialog( EqControls* controls ); - virtual ~EqControlsDialog() - { - } + EqControlsDialog( EqControls* controls ); + virtual ~EqControlsDialog() + { + } - EqBand * setBand(EqControls *controls); + EqBand * setBand(EqControls *controls); private slots: - void updateVuMeters(); + void updateVuMeters(); private: - EqControls * m_controls; + EqControls * m_controls; - Fader* m_inGainFader; - Fader* m_outGainFader; - Fader* m_gainFader; - Knob* m_resKnob; - Knob* m_freqKnob; - LedCheckBox* m_activeBox; - LedCheckBox* m_lp12Box; - LedCheckBox* m_lp24Box; - LedCheckBox* m_lp48Box; - LedCheckBox* m_hp12Box; - LedCheckBox* m_hp24Box; - LedCheckBox* m_hp48Box; + Fader* m_inGainFader; + Fader* m_outGainFader; + Fader* m_gainFader; + Knob* m_resKnob; + Knob* m_freqKnob; + LedCheckBox* m_activeBox; + LedCheckBox* m_lp12Box; + LedCheckBox* m_lp24Box; + LedCheckBox* m_lp48Box; + LedCheckBox* m_hp12Box; + LedCheckBox* m_hp24Box; + LedCheckBox* m_hp48Box; - LedCheckBox* m_analyzeBox; + LedCheckBox* m_analyzeBox; - EqParameterWidget* m_parameterWidget; + EqParameterWidget* m_parameterWidget; EqSpectrumView* m_inSpec; EqSpectrumView* m_outSpec; - virtual void mouseDoubleClickEvent(QMouseEvent *event); + virtual void mouseDoubleClickEvent(QMouseEvent *event); EqBand* setBand( int index, BoolModel* active, FloatModel* freq, FloatModel* res, FloatModel* gain, QColor color, QString name, float* peakL, float* peakR) - { - EqBand* filterModels = m_parameterWidget->getBandModels( index ); - filterModels->active = active; - filterModels->freq = freq; - filterModels->res = res; - filterModels->color = color; - filterModels->gain = gain; + { + EqBand* filterModels = m_parameterWidget->getBandModels( index ); + filterModels->active = active; + filterModels->freq = freq; + filterModels->res = res; + filterModels->color = color; + filterModels->gain = gain; filterModels->peakL = peakL; filterModels->peakR = peakR; - return filterModels; - } - - int m_originalHeight; - + return filterModels; + } + int m_originalHeight; }; + + #endif // EQCONTROLSDIALOG_H diff --git a/plugins/eq/eqeffect.cpp b/plugins/eq/eqeffect.cpp index 3808f8bf6..9c52d688b 100644 --- a/plugins/eq/eqeffect.cpp +++ b/plugins/eq/eqeffect.cpp @@ -59,14 +59,12 @@ EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::K Effect( &eq_plugin_descriptor, parent, key ), m_eqControls( this ) { - m_dFilterCount = 10; - m_downsampleFilters = new EqLp12Filter[m_dFilterCount]; + m_dFilterCount = 20; + m_downsampleFilters = new EqLinkwitzRiley[m_dFilterCount]; for( int i = 0; i < m_dFilterCount; i++) { - m_downsampleFilters[i].setFrequency(22000); - m_downsampleFilters[i].setQ(0.85); - m_downsampleFilters[i].setGain(0); - m_downsampleFilters[i].setSampleRate(Engine::mixer()->processingSampleRate() * 2 ); + m_downsampleFilters[i].setFrequency(21500); + m_downsampleFilters[i].setSR(Engine::mixer()->processingSampleRate() * 2 ); } m_upBuf = 0; } @@ -88,15 +86,21 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) { return( false ); } + m_eqControls.m_inProgress = true; double outSum = 0.0; - const float d = dryLevel(); - const float w = wetLevel(); const float outGain = m_eqControls.m_outGainModel.value(); const int sampleRate = Engine::mixer()->processingSampleRate() * 2; - sample_t dryS[2]; - sampleFrame m_inPeak; + sampleFrame m_inPeak = { 0, 0 }; + + if(m_eqControls.m_analyzeModel.value() ) + { + m_eqControls.m_inFftBands.analyze( buf, frames ); + } + else + { + m_eqControls.m_inFftBands.clear(); + } - analyze( buf, frames, &m_eqControls.m_inFftBands) ; //TODO UPSAMPLE upsample( buf, frames ); @@ -214,7 +218,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) } } - sampleFrame outPeak; + sampleFrame outPeak = { 0, 0 }; gain( m_upBuf , m_upBufFrames, outGain, &outPeak ); m_eqControls.m_outPeakL = m_eqControls.m_outPeakL < outPeak[0] ? outPeak[0] : m_eqControls.m_outPeakL; m_eqControls.m_outPeakR = m_eqControls.m_outPeakR < outPeak[1] ? outPeak[0] : m_eqControls.m_outPeakR; @@ -229,14 +233,20 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) for( fpp_t f = 0; f < frames; ++f ) { - buf[f][0] = ( d * dryS[0] ) + ( w * buf[f][0] ); - buf[f][1] = ( d * dryS[1] ) + ( w * buf[f][1] ); outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; } checkGate( outSum / frames ); - analyze( buf, frames, &m_eqControls.m_outFftBands) ; - setBandPeaks( &m_eqControls.m_outFftBands , (int)(sampleRate * 0.5)); + if(m_eqControls.m_analyzeModel.value() ) + { + m_eqControls.m_outFftBands.analyze( buf, frames ); + } + else + { + m_eqControls.m_outFftBands.clear(); + } + setBandPeaks( &m_eqControls.m_outFftBands , (int)(sampleRate * 0.5)); + m_eqControls.m_inProgress = false; return isRunning(); } @@ -259,8 +269,8 @@ void EqEffect::gain(sampleFrame *buf, const fpp_t frames, float scale, sampleFra { peak[0][1] = fabs( buf[f][0] ); } - } + } } sampleFrame m_lastUpFrame; @@ -288,54 +298,60 @@ void EqEffect::upsample(sampleFrame *buf, const fpp_t frames) m_lastUpFrame[1] = buf[f][1]; } } +} void EqEffect::downSample(sampleFrame *buf, const fpp_t frames) { for( int f = 0, f2 = 0; f < frames; ++f, f2 += 2 ) { - buf[f][0] = m_upBuf[f2][0]; - buf[f][1] = m_upBuf[f2][1]; + buf[f][0] = m_upBuf[f2+1][0]; + buf[f][1] = m_upBuf[f2+1][1]; } } -void EqEffect::analyze(sampleFrame *buf, const fpp_t frames, FftBands* fft) +void EqEffect::analyze(sampleFrame *buf, const fpp_t frames, EqAnalyser* fft) { - const int FFT_BUFFER_SIZE = 2048; - fpp_t f = 0; - if( frames > FFT_BUFFER_SIZE ) + if(m_eqControls.m_analyzeModel.value() ) { + const int FFT_BUFFER_SIZE = 2048; + fpp_t f = 0; + if( frames > FFT_BUFFER_SIZE ) + { + fft->m_framesFilledUp = 0; + f = frames - FFT_BUFFER_SIZE; + } + // meger channels + for( ; f < frames; ++f ) + { + fft->m_buffer[fft->m_framesFilledUp] = + ( buf[f][0] + buf[f][1] ) * 0.5; + ++fft->m_framesFilledUp; + } + + if( fft->m_framesFilledUp < FFT_BUFFER_SIZE ) + { + return; + } + + fft->m_sr = Engine::mixer()->processingSampleRate(); + const int LOWEST_FREQ = 0; + const int HIGHEST_FREQ = fft->m_sr / 2; + + fftwf_execute( fft->m_fftPlan ); + absspec( fft->m_specBuf, fft->m_absSpecBuf, FFT_BUFFER_SIZE+1 ); + + compressbands( fft->m_absSpecBuf, fft->m_bands, FFT_BUFFER_SIZE+1, + MAX_BANDS, + (int)(LOWEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(fft->m_sr /2)), + (int)(HIGHEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(fft->m_sr /2))); + fft->m_energy = maximum( fft->m_bands, MAX_BANDS ) / maximum( fft->m_buffer, FFT_BUFFER_SIZE ); fft->m_framesFilledUp = 0; - f = frames - FFT_BUFFER_SIZE; + } - // meger channels - for( ; f < frames; ++f ) - { - fft->m_buffer[fft->m_framesFilledUp] = - ( buf[f][0] + buf[f][1] ) * 0.5; - ++fft->m_framesFilledUp; - } - - if( fft->m_framesFilledUp < FFT_BUFFER_SIZE ) - { - return; - } - - fft->m_sr = Engine::mixer()->processingSampleRate(); - const int LOWEST_FREQ = 0; - const int HIGHEST_FREQ = fft->m_sr / 2; - - fftwf_execute( fft->m_fftPlan ); - absspec( fft->m_specBuf, fft->m_absSpecBuf, FFT_BUFFER_SIZE+1 ); - - compressbands( fft->m_absSpecBuf, fft->m_bands, FFT_BUFFER_SIZE+1, - MAX_BANDS, - (int)(LOWEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(fft->m_sr /2)), - (int)(HIGHEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(fft->m_sr /2))); - fft->m_energy = maximum( fft->m_bands, MAX_BANDS ) / maximum( fft->m_buffer, FFT_BUFFER_SIZE ); - fft->m_framesFilledUp = 0; } -float EqEffect::peakBand(float minF, float maxF, FftBands *fft, int sr) + +float EqEffect::peakBand(float minF, float maxF, EqAnalyser *fft, int sr) { float peak = -60; float * b = fft->m_bands; @@ -351,7 +367,7 @@ float EqEffect::peakBand(float minF, float maxF, FftBands *fft, int sr) return (peak+100)/100; } -void EqEffect::setBandPeaks(FftBands *fft, int samplerate ) +void EqEffect::setBandPeaks(EqAnalyser *fft, int samplerate ) { m_eqControls.m_lowShelfPeakR = m_eqControls.m_lowShelfPeakL = peakBand( 0, @@ -399,4 +415,4 @@ Plugin * PLUGIN_EXPORT lmms_plugin_main( Model* parent, void* data ) return new EqEffect( parent , static_cast( data ) ); } -}} +} diff --git a/plugins/eq/eqeffect.h b/plugins/eq/eqeffect.h index 0ea793351..1fc96c077 100644 --- a/plugins/eq/eqeffect.h +++ b/plugins/eq/eqeffect.h @@ -66,7 +66,7 @@ private: EqLp12Filter m_lp24; EqLp12Filter m_lp480; EqLp12Filter m_lp481; - EqLp12Filter* m_downsampleFilters; + EqLinkwitzRiley* m_downsampleFilters; int m_dFilterCount; sampleFrame* m_upBuf; fpp_t m_upBufFrames; @@ -74,15 +74,15 @@ private: // const static int MAX_BANDS = 249; void upsample( sampleFrame *buf, const fpp_t frames ); void downSample( sampleFrame *buf, const fpp_t frames ); - void analyze( sampleFrame *buf, const fpp_t frames, FftBands* fft ); - float peakBand(float minF, float maxF,FftBands*, int); + void analyze( sampleFrame *buf, const fpp_t frames, EqAnalyser* fft ); + float peakBand(float minF, float maxF,EqAnalyser*, int); inline float bandToFreq ( int index , int sampleRate ) { return index * sampleRate / (MAX_BANDS * 2); } - void setBandPeaks( FftBands *fft , int); + void setBandPeaks( EqAnalyser *fft , int); // float m_bands[MAX_BANDS]; // float m_energy; diff --git a/plugins/eq/eqfader.h b/plugins/eq/eqfader.h index 65c7a55a0..1057b60c0 100644 --- a/plugins/eq/eqfader.h +++ b/plugins/eq/eqfader.h @@ -47,14 +47,6 @@ public: m_lPeak = lPeak; m_rPeak = rPeak; connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( updateVuMeters() ) ); - m_text = 0; - QList tfs = Engine::mainWindow()->findChildren(); - m_text = tfs.last(); - if(m_text) - { - printf("found text float\n"); - } - connect(model , SIGNAL (dataChanged()) , this, SLOT (updateText () )); m_model = model; } @@ -95,16 +87,12 @@ private slots: update(); } - void updateText() - { - m_text->setText(QString()+m_model->value()); - } + private: float* m_lPeak; float* m_rPeak; - TextFloat* m_text; FloatModel* m_model; }; diff --git a/plugins/eq/eqfilter.h b/plugins/eq/eqfilter.h index 69ee49c8b..e6924ca4c 100644 --- a/plugins/eq/eqfilter.h +++ b/plugins/eq/eqfilter.h @@ -38,74 +38,74 @@ class EqFilter : public StereoBiQuad { public: - EqFilter() - { + EqFilter() + { - } + } - virtual inline void setSampleRate( int sampleRate ) - { - if( sampleRate != m_sampleRate ) - { - m_sampleRate = sampleRate; - calcCoefficents(); - } - } + virtual inline void setSampleRate( int sampleRate ) + { + if( sampleRate != m_sampleRate ) + { + m_sampleRate = sampleRate; + calcCoefficents(); + } + } - virtual inline void setFrequency( float freq ){ - if ( freq != m_freq ) - { - m_freq = freq; - calcCoefficents(); - } - } + virtual inline void setFrequency( float freq ){ + if ( freq != m_freq ) + { + m_freq = freq; + calcCoefficents(); + } + } - virtual void setQ( float res ) - { - if ( res != m_res ) - { - m_res = res; - calcCoefficents(); - } - } + virtual void setQ( float res ) + { + if ( res != m_res ) + { + m_res = res; + calcCoefficents(); + } + } - virtual void setGain( float gain ) - { - if ( gain != m_gain ) - { - m_gain = gain; - calcCoefficents(); - } - } + virtual void setGain( float gain ) + { + if ( gain != m_gain ) + { + m_gain = gain; + calcCoefficents(); + } + } - /// - /// \brief processBuffer - /// \param buf Audio Buffer - /// \param frames Count of sampleFrames in Audio Buffer - /// - virtual void processBuffer( sampleFrame* buf, const fpp_t frames ) - { - for ( fpp_t f = 0 ; f < frames ; ++f) - { - buf[f][0] = update( buf[f][0] , 0); - buf[f][1] = update( buf[f][1] , 1); - } - } + /// + /// \brief processBuffer + /// \param buf Audio Buffer + /// \param frames Count of sampleFrames in Audio Buffer + /// + virtual void processBuffer( sampleFrame* buf, const fpp_t frames ) + { + for ( fpp_t f = 0 ; f < frames ; ++f) + { + buf[f][0] = update( buf[f][0] , 0); + buf[f][1] = update( buf[f][1] , 1); + } + } protected: - /// - /// \brief calcCoefficents - /// Override this in child classes to provide the coefficents, based on - /// Freq, Res and Gain - virtual void calcCoefficents(){ - setCoeffs( 0, 0, 0, 0, 0 ); + /// + /// \brief calcCoefficents + /// Override this in child classes to provide the coefficents, based on + /// Freq, Res and Gain + virtual void calcCoefficents(){ + setCoeffs( 0, 0, 0, 0, 0 ); - } + } - float m_sampleRate; - float m_freq; - float m_res; - float m_gain; + float m_sampleRate; + float m_freq; + float m_res; + float m_gain; }; @@ -118,38 +118,38 @@ protected: class EqHp12Filter : public EqFilter { public : - virtual void calcCoefficents() - { + virtual void calcCoefficents() + { - // calc intermediate - float w0 = F_2PI * m_freq / m_sampleRate; - float c = cosf( w0 ); - float s = sinf( w0 ); - float alpha = s / ( 2 * m_res ); + // calc intermediate + float w0 = F_2PI * m_freq / m_sampleRate; + float c = cosf( w0 ); + float s = sinf( w0 ); + float alpha = s / ( 2 * m_res ); - float a0, a1, a2, b0, b1, b2; // coeffs to calculate + float a0, a1, a2, b0, b1, b2; // coeffs to calculate - //calc coefficents - b0 = ( 1 + c ) * 0.5; - b1 = ( -( 1 + c ) ); - b2 = ( 1 + c ) * 0.5; - a0 = 1 + alpha; - a1 = ( -2 * c ); - a2 = 1 - alpha; + //calc coefficents + b0 = ( 1 + c ) * 0.5; + b1 = ( -( 1 + c ) ); + b2 = ( 1 + c ) * 0.5; + a0 = 1 + alpha; + a1 = ( -2 * c ); + a2 = 1 - alpha; - //normalise - b0 /= a0; - b1 /= a0; - b2 /= a0; - a1 /= a0; - a2 /= a0; + //normalise + b0 /= a0; + b1 /= a0; + b2 /= a0; + a1 /= a0; + a2 /= a0; - a0 = 1; + a0 = 1; - setCoeffs( a1, a2, b0, b1, b2 ); + setCoeffs( a1, a2, b0, b1, b2 ); - } + } }; @@ -161,36 +161,36 @@ public : class EqLp12Filter : public EqFilter { public : - virtual void calcCoefficents() - { + virtual void calcCoefficents() + { - // calc intermediate - float w0 = F_2PI * m_freq / m_sampleRate; - float c = cosf( w0 ); - float s = sinf( w0 ); - float alpha = s / ( 2 * m_res ); + // calc intermediate + float w0 = F_2PI * m_freq / m_sampleRate; + float c = cosf( w0 ); + float s = sinf( w0 ); + float alpha = s / ( 2 * m_res ); - float a0, a1, a2, b0, b1, b2; // coeffs to calculate + float a0, a1, a2, b0, b1, b2; // coeffs to calculate - //calc coefficents - b0 = ( 1 - c ) * 0.5; - b1 = 1 - c; - b2 = ( 1 - c ) * 0.5; - a0 = 1 + alpha; - a1 = -2 * c; - a2 = 1 - alpha; + //calc coefficents + b0 = ( 1 - c ) * 0.5; + b1 = 1 - c; + b2 = ( 1 - c ) * 0.5; + a0 = 1 + alpha; + a1 = -2 * c; + a2 = 1 - alpha; - //normalise - b0 /= a0; - b1 /= a0; - b2 /= a0; - a1 /= a0; - a2 /= a0; + //normalise + b0 /= a0; + b1 /= a0; + b2 /= a0; + a1 /= a0; + a2 /= a0; - a0 = 1; + a0 = 1; - setCoeffs( a1, a2, b0, b1, b2 ); - } + setCoeffs( a1, a2, b0, b1, b2 ); + } }; @@ -205,108 +205,156 @@ class EqPeakFilter : public EqFilter public: - virtual void calcCoefficents() - { - // calc intermediate - float w0 = F_2PI * m_freq / m_sampleRate; - float c = cosf( w0 ); - float s = sinf( w0 ); - float A = pow( 10, m_gain * 0.025); - float alpha = s / ( 2 * m_res ); + virtual void calcCoefficents() + { + // calc intermediate + float w0 = F_2PI * m_freq / m_sampleRate; + float c = cosf( w0 ); + float s = sinf( w0 ); + float A = pow( 10, m_gain * 0.025); + float alpha = s / ( 2 * m_res ); - float a0, a1, a2, b0, b1, b2; // coeffs to calculate + float a0, a1, a2, b0, b1, b2; // coeffs to calculate - //calc coefficents - b0 = 1 + alpha*A; - b1 = -2*c; - b2 = 1 - alpha*A; - a0 = 1 + alpha/A; - a1 = -2*c; - a2 = 1 - alpha/A; + //calc coefficents + b0 = 1 + alpha*A; + b1 = -2*c; + b2 = 1 - alpha*A; + a0 = 1 + alpha/A; + a1 = -2*c; + a2 = 1 - alpha/A; - //normalise - b0 /= a0; - b1 /= a0; - b2 /= a0; - a1 /= a0; - a2 /= a0; - a0 = 1; + //normalise + b0 /= a0; + b1 /= a0; + b2 /= a0; + a1 /= a0; + a2 /= a0; + a0 = 1; - setCoeffs( a1, a2, b0, b1, b2 ); - } + setCoeffs( a1, a2, b0, b1, b2 ); + } }; class EqLowShelfFilter : public EqFilter { public : - virtual void calcCoefficents() - { + virtual void calcCoefficents() + { - // calc intermediate - float w0 = F_2PI * m_freq / m_sampleRate; - float c = cosf( w0 ); - float s = sinf( w0 ); - float A = pow( 10, m_gain * 0.025); -// float alpha = s / ( 2 * m_res ); - float beta = sqrt( A ) / m_res; + // calc intermediate + float w0 = F_2PI * m_freq / m_sampleRate; + float c = cosf( w0 ); + float s = sinf( w0 ); + float A = pow( 10, m_gain * 0.025); + // float alpha = s / ( 2 * m_res ); + float beta = sqrt( A ) / m_res; - float a0, a1, a2, b0, b1, b2; // coeffs to calculate + float a0, a1, a2, b0, b1, b2; // coeffs to calculate - //calc coefficents - b0 = A * ( ( A+1 ) - ( A-1 ) * c + beta * s ); - b1 = 2 * A * ( ( A - 1 ) - ( A + 1 ) * c) ; - b2 = A * ( ( A + 1 ) - ( A - 1 ) * c - beta * s); - a0 = ( A + 1 ) + ( A - 1 ) * c + beta * s; - a1 = -2 * ( ( A - 1 ) + ( A + 1 ) * c ); - a2 = ( A + 1 ) + ( A - 1) * c - beta * s; + //calc coefficents + b0 = A * ( ( A+1 ) - ( A-1 ) * c + beta * s ); + b1 = 2 * A * ( ( A - 1 ) - ( A + 1 ) * c) ; + b2 = A * ( ( A + 1 ) - ( A - 1 ) * c - beta * s); + a0 = ( A + 1 ) + ( A - 1 ) * c + beta * s; + a1 = -2 * ( ( A - 1 ) + ( A + 1 ) * c ); + a2 = ( A + 1 ) + ( A - 1) * c - beta * s; - //normalise - b0 /= a0; - b1 /= a0; - b2 /= a0; - a1 /= a0; - a2 /= a0; + //normalise + b0 /= a0; + b1 /= a0; + b2 /= a0; + a1 /= a0; + a2 /= a0; - a0 = 1; + a0 = 1; - setCoeffs( a1, a2, b0, b1, b2 ); + setCoeffs( a1, a2, b0, b1, b2 ); - } + } }; class EqHighShelfFilter : public EqFilter { public : - virtual void calcCoefficents() - { + virtual void calcCoefficents() + { - // calc intermediate - float w0 = F_2PI * m_freq / m_sampleRate; - float c = cosf( w0 ); - float s = sinf( w0 ); - float A = pow( 10, m_gain * 0.025 ); - float beta = sqrt( A ) / m_res; + // calc intermediate + float w0 = F_2PI * m_freq / m_sampleRate; + float c = cosf( w0 ); + float s = sinf( w0 ); + float A = pow( 10, m_gain * 0.025 ); + float beta = sqrt( A ) / m_res; - float a0, a1, a2, b0, b1, b2; // coeffs to calculate + float a0, a1, a2, b0, b1, b2; // coeffs to calculate + + //calc coefficents + b0 = A *( ( A +1 ) + ( A - 1 ) * c + beta * s); + b1 = -2 * A * ( ( A - 1 ) + ( A + 1 ) * c ); + b2 = A * ( ( A + 1 ) + ( A - 1 ) * c - beta * s); + a0 = ( A + 1 ) - ( A - 1 ) * c + beta * s; + a1 = 2 * ( ( A - 1 ) - ( A + 1 ) * c ); + a2 = ( A + 1) - ( A - 1 ) * c - beta * s; + //normalise + b0 /= a0; + b1 /= a0; + b2 /= a0; + a1 /= a0; + a2 /= a0; + a0 = 1; + + setCoeffs( a1, a2, b0, b1, b2 ); + } +}; + +class EqLinkwitzRiley : public StereoLinkwitzRiley +{ +public: + EqLinkwitzRiley() : + StereoLinkwitzRiley( 44100) + { + } + + virtual inline void setSR( int sampleRate ) + { + if( sampleRate != m_sr ) + { + m_sr = sampleRate; + setLowpass(m_freq); + setSampleRate( sampleRate ); + } + } + + + + + virtual inline void setFrequency( float freq ){ + if ( freq != m_freq ) + { + m_freq = freq; + setLowpass(m_freq); + } + } + + + + + virtual void processBuffer( sampleFrame* buf, const fpp_t frames ) + { + for ( fpp_t f = 0 ; f < frames ; ++f) + { + buf[f][0] = update( buf[f][0] , 0); + buf[f][1] = update( buf[f][1] , 1); + } + } +protected: + + float m_freq; + int m_sr; - //calc coefficents - b0 = A *( ( A +1 ) + ( A - 1 ) * c + beta * s); - b1 = -2 * A * ( ( A - 1 ) + ( A + 1 ) * c ); - b2 = A * ( ( A + 1 ) + ( A - 1 ) * c - beta * s); - a0 = ( A + 1 ) - ( A - 1 ) * c + beta * s; - a1 = 2 * ( ( A - 1 ) - ( A + 1 ) * c ); - a2 = ( A + 1) - ( A - 1 ) * c - beta * s; - //normalise - b0 /= a0; - b1 /= a0; - b2 /= a0; - a1 /= a0; - a2 /= a0; - a0 = 1; - setCoeffs( a1, a2, b0, b1, b2 ); - } }; diff --git a/plugins/eq/eqparameterwidget.cpp b/plugins/eq/eqparameterwidget.cpp index f1d53fa2e..059555108 100644 --- a/plugins/eq/eqparameterwidget.cpp +++ b/plugins/eq/eqparameterwidget.cpp @@ -31,19 +31,22 @@ #include "QMouseEvent" EqParameterWidget::EqParameterWidget( QWidget *parent ) : - QWidget( parent ), - m_bands ( 0 ), - m_selectedBand ( 0 ) + QWidget( parent ), + m_bands ( 0 ), + m_selectedBand ( 0 ) { - m_bands = new EqBand[8]; - resize( 250, 116 ); - connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); - float totalLength = log10( 21000 ); - m_pixelsPerUnitWidth = width( ) / totalLength ; + m_bands = new EqBand[8]; + resize( 250, 116 ); + // connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); + QTimer *timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), this, SLOT(update())); + timer->start(200); + float totalLength = log10( 21000 ); + m_pixelsPerUnitWidth = width( ) / totalLength ; float totalHeight = 80; - m_pixelsPerUnitHeight = (height() - 4) / ( totalHeight ); - m_scale = 1.5; - m_pixelsPerOctave = freqToXPixel( 10000 ) - freqToXPixel( 5000 ); + m_pixelsPerUnitHeight = (height() - 4) / ( totalHeight ); + m_scale = 1.5; + m_pixelsPerOctave = freqToXPixel( 10000 ) - freqToXPixel( 5000 ); } @@ -78,39 +81,39 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) //draw 0dB line painter.drawLine(0, gainToYPixel( 0 ) , width(), gainToYPixel( 0 ) ); - for( int i = 0 ; i < bandCount() ; i++ ) - { + for( int i = 0 ; i < bandCount() ; i++ ) + { - m_bands[i].color.setAlpha(m_bands[i].active->value() ? activeAplha() : inactiveAlpha()); + m_bands[i].color.setAlpha(m_bands[i].active->value() ? activeAplha() : inactiveAlpha()); painter.setPen( QPen( m_bands[i].color, 10, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); - float x = freqToXPixel( m_bands[i].freq->value() ); - float y = height() * 0.5; - float gain = 1; - if( m_bands[i].gain ) - { - gain = m_bands[i].gain->value(); - } + float x = freqToXPixel( m_bands[i].freq->value() ); + float y = height() * 0.5; + float gain = 1; + if( m_bands[i].gain ) + { + gain = m_bands[i].gain->value(); + } y = gainToYPixel( gain ); - float bw = m_bands[i].freq->value() / m_bands[i].res->value(); - m_bands[i].x = x; m_bands[i].y = y; - painter.drawPoint( x, y ); + float bw = m_bands[i].freq->value() / m_bands[i].res->value(); + m_bands[i].x = x; m_bands[i].y = y; + painter.drawPoint( x, y ); painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::SquareCap, Qt::BevelJoin ) ); - if(i == 0 || i == bandCount() - 1 ){ - painter.drawLine(x, y, x, y - (m_bands[i].res->value() * 4 ) ); - } - else - { - painter.drawLine(freqToXPixel(m_bands[i].freq->value()-(bw * 0.5)),y,freqToXPixel(m_bands[i].freq->value()+(bw * 0.5)),y); - } - } - //Draw color band - int sectionLength = width() / bandCount(); - for( int i = 0; i < bandCount(); i++) - { - m_bands[i].color.setAlpha( 255 ); - painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); - painter.drawLine(sectionLength * i , 1, sectionLength * (i+1) , 1); - } + if(i == 0 || i == bandCount() - 1 ){ + painter.drawLine(x, y, x, y - (m_bands[i].res->value() * 4 ) ); + } + else + { + painter.drawLine(freqToXPixel(m_bands[i].freq->value()-(bw * 0.5)),y,freqToXPixel(m_bands[i].freq->value()+(bw * 0.5)),y); + } + } + //Draw color band + int sectionLength = width() / bandCount(); + for( int i = 0; i < bandCount(); i++) + { + m_bands[i].color.setAlpha( 255 ); + painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); + painter.drawLine(sectionLength * i , 1, sectionLength * (i+1) , 1); + } } @@ -118,11 +121,11 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) void EqParameterWidget::mousePressEvent( QMouseEvent *event ) { - m_oldX = event->x(); m_oldY = event->y(); - m_selectedBand = selectNearestHandle( event->x(), event->y() ); - m_mouseAction = none; - if ( event->button() == Qt::LeftButton ) m_mouseAction = drag; - if ( event->button() == Qt::RightButton ) m_mouseAction = res; + m_oldX = event->x(); m_oldY = event->y(); + m_selectedBand = selectNearestHandle( event->x(), event->y() ); + m_mouseAction = none; + if ( event->button() == Qt::LeftButton ) m_mouseAction = drag; + if ( event->button() == Qt::RightButton ) m_mouseAction = res; } @@ -130,8 +133,8 @@ void EqParameterWidget::mousePressEvent( QMouseEvent *event ) void EqParameterWidget::mouseReleaseEvent( QMouseEvent *event ) { - m_selectedBand = 0; - m_mouseAction = none; + m_selectedBand = 0; + m_mouseAction = none; } @@ -139,26 +142,26 @@ void EqParameterWidget::mouseReleaseEvent( QMouseEvent *event ) void EqParameterWidget::mouseMoveEvent( QMouseEvent *event ) { - int deltaX = event->x() - m_oldX; - int deltaR = event->y() - m_oldY; - m_oldX = event->x(); m_oldY = event->y(); - if(m_selectedBand && m_selectedBand->active->value() ) - { - switch ( m_mouseAction ) { - case none : - break; - case drag: - if( m_selectedBand->freq ) m_selectedBand->freq->setValue( xPixelToFreq( m_oldX ) ); - if( m_selectedBand->gain )m_selectedBand->gain->setValue( yPixelToGain( m_oldY ) ); - break; - case res: - if( m_selectedBand->res )m_selectedBand->res->incValue( deltaX * resPixelMultiplyer() ); - if( m_selectedBand->res )m_selectedBand->res->incValue( (-deltaR) * resPixelMultiplyer() ); - break; - default: - break; - } - } + int deltaX = event->x() - m_oldX; + int deltaR = event->y() - m_oldY; + m_oldX = event->x(); m_oldY = event->y(); + if(m_selectedBand && m_selectedBand->active->value() ) + { + switch ( m_mouseAction ) { + case none : + break; + case drag: + if( m_selectedBand->freq ) m_selectedBand->freq->setValue( xPixelToFreq( m_oldX ) ); + if( m_selectedBand->gain )m_selectedBand->gain->setValue( yPixelToGain( m_oldY ) ); + break; + case res: + if( m_selectedBand->res )m_selectedBand->res->incValue( deltaX * resPixelMultiplyer() ); + if( m_selectedBand->res )m_selectedBand->res->incValue( (-deltaR) * resPixelMultiplyer() ); + break; + default: + break; + } + } } @@ -166,11 +169,11 @@ void EqParameterWidget::mouseMoveEvent( QMouseEvent *event ) void EqParameterWidget::mouseDoubleClickEvent( QMouseEvent *event ) { - EqBand* selected = selectNearestHandle( event->x() , event->y() ); - if( selected ) - { - selected->active->setValue( selected->active->value() ? 0 : 1 ); - } + EqBand* selected = selectNearestHandle( event->x() , event->y() ); + if( selected ) + { + selected->active->setValue( selected->active->value() ? 0 : 1 ); + } } @@ -178,39 +181,39 @@ void EqParameterWidget::mouseDoubleClickEvent( QMouseEvent *event ) EqBand* EqParameterWidget::selectNearestHandle( const int x, const int y ) { - EqBand* selectedModel = 0; - float* distanceToHandles = new float[bandCount()]; - //calc distance to each handle - for( int i = 0 ; i < bandCount() ; i++) - { - int xOffset = m_bands[i].x - x; - int yOffset = m_bands[i].y - y; - distanceToHandles[i] = fabs(sqrt((xOffset * xOffset ) + ( yOffset * yOffset ) ) ); - } - //select band - int shortestBand = 0; - for (int i = 1 ; i < bandCount() ; i++ ) - { - if ( distanceToHandles [i] < distanceToHandles[shortestBand] ){ - shortestBand = i; - } - } - if(distanceToHandles[shortestBand] < maxDistanceFromHandle() ) - { - selectedModel = &m_bands[shortestBand]; - } - delete distanceToHandles; - return selectedModel; + EqBand* selectedModel = 0; + float* distanceToHandles = new float[bandCount()]; + //calc distance to each handle + for( int i = 0 ; i < bandCount() ; i++) + { + int xOffset = m_bands[i].x - x; + int yOffset = m_bands[i].y - y; + distanceToHandles[i] = fabs(sqrt((xOffset * xOffset ) + ( yOffset * yOffset ) ) ); + } + //select band + int shortestBand = 0; + for (int i = 1 ; i < bandCount() ; i++ ) + { + if ( distanceToHandles [i] < distanceToHandles[shortestBand] ){ + shortestBand = i; + } + } + if(distanceToHandles[shortestBand] < maxDistanceFromHandle() ) + { + selectedModel = &m_bands[shortestBand]; + } + delete distanceToHandles; + return selectedModel; } EqBand::EqBand() : - gain ( 0 ), - res ( 0 ), - freq ( 0 ), - color ( QColor( 255, 255, 255 ) ), - name ( QString( "" ) ) + gain ( 0 ), + res ( 0 ), + freq ( 0 ), + color ( QColor( 255, 255, 255 ) ), + name ( QString( "" ) ) { } diff --git a/plugins/eq/eqspectrumview.h b/plugins/eq/eqspectrumview.h index 47490afa3..3054f0b95 100644 --- a/plugins/eq/eqspectrumview.h +++ b/plugins/eq/eqspectrumview.h @@ -1,3 +1,26 @@ + +/* eqspectrumview.h - defination of EqSpectrumView class. +* +* Copyright (c) 2014 David French +* +* This file is part of LMMS - http://lmms.io +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public +* License as published by the Free Software Foundation; either +* version 2 of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public +* License along with this program (see COPYING); if not, write to the +* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +* Boston, MA 02110-1301 USA. +* +*/ #ifndef EQSPECTRUMVIEW_H #define EQSPECTRUMVIEW_H @@ -5,11 +28,12 @@ //#include "eqeffect.h" #include "qwidget.h" #include "fft_helpers.h" +#include "Engine.h" -const int MAX_BANDS = 512; +const int MAX_BANDS = 2048; -class FftBands +class EqAnalyser { public: @@ -24,15 +48,76 @@ public: float m_energy; int m_sr; - FftBands() : - m_framesFilledUp( 0 ), - m_energy( 0 ) - { - memset( m_buffer, 0, sizeof( m_buffer ) ); + EqAnalyser() + { + m_inProgress=false; + clear(); + } + + + + + bool getInProgress() + { + return m_inProgress; + } + + + + void clear() + { + m_framesFilledUp = 0; + m_energy = 0; + memset( m_buffer, 0, sizeof( m_buffer ) ); m_specBuf = (fftwf_complex *) fftwf_malloc( ( FFT_BUFFER_SIZE + 1 ) * sizeof( fftwf_complex ) ); m_fftPlan = fftwf_plan_dft_r2c_1d( FFT_BUFFER_SIZE*2, m_buffer, m_specBuf, FFTW_MEASURE ); + } + + + + void analyze(sampleFrame *buf, const fpp_t frames ) + { + m_inProgress=true; + const int FFT_BUFFER_SIZE = 2048; + fpp_t f = 0; + if( frames > FFT_BUFFER_SIZE ) + { + m_framesFilledUp = 0; + f = frames - FFT_BUFFER_SIZE; + } + // meger channels + for( ; f < frames; ++f ) + { + m_buffer[m_framesFilledUp] = + ( buf[f][0] + buf[f][1] ) * 0.5; + ++m_framesFilledUp; + } + + if( m_framesFilledUp < FFT_BUFFER_SIZE ) + { + m_inProgress = false; + return; + } + + m_sr = Engine::mixer()->processingSampleRate(); + const int LOWEST_FREQ = 0; + const int HIGHEST_FREQ = m_sr / 2; + + fftwf_execute( m_fftPlan ); + absspec( m_specBuf, m_absSpecBuf, FFT_BUFFER_SIZE+1 ); + + compressbands( m_absSpecBuf, m_bands, FFT_BUFFER_SIZE+1, + MAX_BANDS, + (int)(LOWEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(m_sr /2)), + (int)(HIGHEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(m_sr /2))); + m_energy = maximum( m_bands, MAX_BANDS ) / maximum( m_buffer, FFT_BUFFER_SIZE ); + m_framesFilledUp = 0; + m_inProgress = false; + } +private: + bool m_inProgress; }; @@ -40,12 +125,15 @@ class EqSpectrumView : public QWidget { public: - explicit EqSpectrumView( FftBands * b, QWidget * _parent = 0) : + explicit EqSpectrumView( EqAnalyser * b, QWidget * _parent = 0) : QWidget( _parent ), m_sa( b ) { setFixedSize( 250, 116 ); - connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); + // connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); + QTimer *timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), this, SLOT(update())); + timer->start(2000); setAttribute( Qt::WA_TranslucentBackground, true ); m_skipBands = MAX_BANDS * 0.5; float totalLength = log10( 21000); @@ -59,47 +147,37 @@ public: { } QColor color; - FftBands *m_sa; - int m_lastY; + EqAnalyser *m_sa; + QPainterPath pp; virtual void paintEvent( QPaintEvent* event ) { const int fh = height(); - const int LOWER_Y = -96; // dB - int m_lastY = height(); + const int LOWER_Y = -60; // dB QPainter p( this ); p.setPen( QPen( color, 1, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); - //draw grid lines - int y33 = (int)( fh * 2.0 / 3.0 * (20*(log10( 0.33 ) ) - LOWER_Y ) / (-LOWER_Y ) ); - p.drawLine(0, y33, width(), y33); - const float e = m_sa->m_energy; if( e <= 0 ) { //dont draw anything return; } + if(m_sa->getInProgress() ){ + p.fillPath( pp ,QBrush( color ) ); + return; + } + pp = QPainterPath(); float * b = m_sa->m_bands; int h; - bool linX = true; - if( linX ) + pp.moveTo( 0,height() ); + for( int x = 0; x < MAX_BANDS; ++x, ++b ) { - for( int x = 0; x < MAX_BANDS; ++x, ++b ) - { - h = (int)( fh * 2.0 / 3.0 * (20*(log10( *b / e ) ) - LOWER_Y ) / (-LOWER_Y ) ); - if( h < 0 ) h = 0; else if( h >= fh ) continue; - p.drawLine(freqToXPixel(bandToFreq(x -1 ) ),m_lastY, freqToXPixel(bandToFreq(x ) ), fh-h ); - m_lastY = fh-h; - } - } - else - { - for( int x = 0; x < 31; ++x, ++b ) - { - h = (int)( fh * 2.0 / 3.0 * (20*(log10( *b / e ) ) - LOWER_Y ) / (-LOWER_Y ) ); - if( h < 0 ) h = 0; else if( h >= fh ) continue; else h = ( h / 3 ) * 3; - p.drawPoint(x * 8, fh-h ); - } + h = (int)( fh * 2.0 / 3.0 * (20*(log10( *b / e ) ) - LOWER_Y ) / (-LOWER_Y ) ); + if( h < 0 ) h = 0; else if( h >= fh ) continue; + pp.lineTo( freqToXPixel(bandToFreq(x ) ), fh-h ); } + pp.lineTo(width(), height() ); + pp.closeSubpath(); + p.fillPath( pp ,QBrush( color ) ); } From 77fd245c48753618f1bf2e3bd96675e31e2c45b1 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sat, 13 Dec 2014 20:35:50 +0000 Subject: [PATCH 05/81] EQ updates to UI, Initial Ui complete --- plugins/eq/artwork.png | Bin 50584 -> 27381 bytes plugins/eq/eqcontrolsdialog.cpp | 48 +++++++++++++++++++------------ plugins/eq/eqeffect.cpp | 4 +-- plugins/eq/eqparameterwidget.cpp | 2 +- 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/plugins/eq/artwork.png b/plugins/eq/artwork.png index 8a4a0418b87ed04c2670276d2cd4b4e5c506439a..73b3473b4f8cd1f390ece29ff24c4754775ea2d0 100644 GIT binary patch literal 27381 zcmXt91yEbh*9}f_iWY|!CrFD0*HWBfg&-}YIKkbeP>NIBp;&Qur?|UIa3{FSm*0Qp zo6MWc?7X*o_wKpp-aT*MFEtf8Tr3JK004k1|4Bw206;QCTtt}Yh!&q?o4<%ZbYn$1 z8NkbbzpU1RSVYS!yHC1~001`8e-{!UC5;@>h~Xr!EQ_&{uaqsvH~bku14GyoN&)Ny;9!{KTLblc`IJRH%H-E!m~r=cwBn}+RXsL z4lY5S@Y*@ZsBPq31W((#;o|`|W^!;yZ0qRSp|4!`Nv4a^k89E7wHP6;!-s+fvqxbd zd`c|mspJsc!u&|1H_Cq9lFz@Jc2{s2)z#+;`hQ$hAvYT^g7K3_JweG}1JF3F#1^ja6D$B4-bTEHXp zY%t;Ukthe`PbdOANX0}jywec=JFn}fP&I5;kGEGi1?XEmv7$RB9)3fjhDRT$MEVSw z^O%g|{7Kv#EpWp6ywgZm^h-k4N6RWk+Qq~zE7ob^oheshar9^o5YRJeSZ2!BBeEcJ$fnzOY)1La3pE=b}M^LhnL`Gm-`Qx38mS<&Vj5d4DS@o4Qu_qONjW6yhV z7)kTLqduRbJ{W}dK_}r$a%>FIg}!5_K#*++=1iIGw-f%J`)AdcodWDVQg)Z0i(^mA zW1ZzM_vN%8PG#ABP3AkJZ`D5l3|$D@2Hp!H`U^Zx^u0?wp0~qsxPib7>|KT8b$mHG z$pCGad0g=^y4G<|W4`*!hHb7ck^FNVWDwqeIU%aN6O^)}leljJv&%}%_< z!W)Hak~10J5Bc&bHX6n&Nt z0B$JMvdTGZ$^0W_pO1_c_1MPpy1o&^E}p>>d+^K*lB4zJMLgwRS6`1Iemds^cz$TV za9t0iz5UimuSZkA)UXTMFM??F*D3Iga{)~PdQ<|RzKEZF?TSbhfcZZCd?8qEdvgp0%|k|Ckx^+TtzLpP&rR2t zHVRP%g%qCM?))-+X^FptNQAItvkcChcAZM$Ste*NuV&vES~INioQp+OCrTJgGfY8vrVB8Hp?@qu6BM$;c&3o7$)^i?ZA z(M;XPiN(H-!iyUZBVpI>NGz?-mNyFn*W%7?V2^-0$P)-U(~>?ySp9VFOM$J0D<_43WVV@_CC3{rV* zSZULrZ}2@*-+G-&*07TVHyFw51_S-vM7*Q_iu&X^tLZ>1eJmBvA) z=Ez@2Q|NRFDUsawZ5u5tV(nWB6{0Gs29io85f+?ShZ*^m;|vv=D_XF-aYs>4h5A$X z4T+Nr(-(8AM0z9#p>hdzBBmPVo}z#MjSa~$)72^)$g3ZQKIg#uhJRhnSj1Kg-_Zm7 zLd>o`Jey!fl(zBGYFI9NAAnN4LvjH>-G^Sp>4})=8d!#LhZeCwDs?KQK72o_aRe-Z zFtoH}$pEExZ?DtkM$c>>S4=n%>u1TK)o9vDA9kN~xkei5@7cB-cwHlF@uX3rQ)x`Z zfj)afgY8^}a1n`cSw7mx?P1HY8e5x|A7agndx)dMowK5aYV_E*uue(YwM&wuXg|%E z@kl5m*&wa{_s|Cb_lRYP32@vuWydy~A`}5a4kR2ki=o$Fp#CQMD*vqQ zCSm6LsnGvSOs7%RMA?7_*c3@u)>+MQJNXa`jLN+N!YE_YWB`9FIa_QijSHgD$9>jz zPDFb5^Q$OXo<|(@?_n-R`7jef_8!0C2IKmT%h{5cA=yZt#ZGAloYYy zwxl+kgEA+yxd`L*M5{O}cCyT+5w7CE%9w<+ww$XNYiY?J2WfUdiBG`*t@}Sb#8OAq znB;yXHy&ZU-w}Q&nKxOtYPG0gd1|Sp461J`JMKt*9oi3yO!#Aj+fezI^yhzT!Gte} z-UdGSa-gFhq(<9zw()587UX83l^cvp_~)^Q##NQG;0RznhPx;oiUcmE zv%z2pf=|#Fc>O<$s$oQ<&(-kOkvCi%VfvO>M+pSq@~9>JVBl{WfOQz*!mtq8Ok2s7 zyw9zRroioE;LOlW+DD>3_B@xK+h}ErurxsGm^nZOz~PRI2s8AdSLPP}HI*4oqacgS zvt4ess4tF%Kr+UwcU5dH_#NaF%Ru@%1U#S{>%A3Y5N({C5*5hq8CYb-e8C2lj_>{A zx$Z~=Ex;CO1(CEP&RW1wvkX0U0;|4J|1T&j#M@Gs#9+{QoF+KiN zC|QjS{a{*$5nl+p{`B;say)D?PJ6|j3GK(a;RkBwg*xLfl zFj7*z$ufK++&SXYXM9q&0OU&6;?Cs&=A2=HU55W6(HbX@AWV4sq>B%({f`&#{E_Oh zE8C-`GB*5|ME7&E9|HJ2{FRzZSNdEt$UBAY7QDfz;|6xnSoN=mV^Cxpq%(wrqvUmQ zA*_mu*8zDa9S$_h>=}Bh{asN?ZzMSoV5+2&8$bA=dk(#`&wI9@0Q9AeMs6bVNPgI~ zI@90j!Z8H);Y4brjy5Uzn#{)6?k zDYOcuo_BEgETeTKk0?=n;GL>KpQ1{7R=gFBOBTy}5CTHli$)5}suy+zLfR61YE@vX z_E_u$5Z^?j0Sh{ueY0GrQUh{$B@~LwGf4k)s@8{p?(=11FT-g*=XZ_O@55N?=Aj6D z<+Xe+4)6TDvNw9fOpPQ~O90x%?w8RV|qf`l^n$ z^cnYmdDc4QCuzQ4U(KErPygnK*2Dkim~-mImtv&QQWcu3hqU0idqLc4cO+R~@(N)w zxX7sFb|lV8s;q_+Fz-=DZ8i(hI;AR1c|!X$V?XVeCJ_@^hpB zgV%()qN)(SVSe+&l`w2j%U+3PA<=}g2!-yR2Jn+A~Ua4U$g01*FTeM6a!=K<@9(5Vvx^$K5{8(zUDAC1L zQ4Gx}JiAIiZv=_L}2O?pG)TVc`_~X)`u&j6m^%H z$q=bz-kzs)a(40elOVuWORLW5{o$G`-Ug;0V-x}m8c^l|_al+jLi4~J)Q#Vt5x4Ji ze?9Gakj_9Q$lnF6p~FrtjR9GlV*inMS5cAB#DZ244P1W6q2u?+f5lDZj3o(fetKM7 zRf)(d)X%2K-Js~PVZT`$9l^N;ow=G-o0Fa+4kwaGJ;XEznua#v>?el*^7YA)I0F)}UHRDG4k^rH(LRcs#HE-aK+(d5ZwP*%-t*8;Q_Pb0 zwFD^PGpvyBJKl9re8H2F(SaCzG)7q1ZCagN_N2j1Za&u+ zxN<{!Ejo9LVO(f1iN%YacCo}vX8T_vHBMzhp{gx7;c=k3Q1Xt)+;!}GJ(2J?yT&_& zwq5N%(q>BW7xrX6e#GeHv(eHrxni%nwjEMt)eyCp_#396f*7RN+-{@_A{N=9r=>;Z z#ww+!P0oILe%xhlh)(HCrf=kqU`r@X`46tXZzpJ+FHKN|u7nX2b%ayHFLm%HA}=NH+?P*?eh>&L@7DWYm0_fbY4ArRZ z+}WO|TIKmB=GGeChq!|p5Y?HTBW5;6_3py0^lv*Wx1Oz&h1^#JzWGX9JuM%6slqe9 zke=?i)oT;f+ECW4Dg><|;`5Rm-pDjT&<9E%)+luxN_Bk5(ruk0--pVFaz-QYzMn&` zP66wCdQ_$Ep;#(&ODp5O9DEO;|^Z zSxv0edJN!UFQ_5FeD20b1)H~DhDho%fL zS>%fJI$!J6aSN4x!Jkjy!Q%Hh;sIap;=i)KtwESG?DN>?OC@$56NNK9@XibLs`2?m z_4#%vXUt&=u#lwQniWS5R!w<)s`q`UU)RXICw^R~eKuP6LO^8w8oG83J(U)}ln$gW z-RYKZ-k%?W?!tM%w8jAxdMX1GdsRupt<#AR7an!h>AoGeOd zYD}QCZQYr^vpsY_qYkP2klnufn64VWoVn=Q9SMY9sqbdBmi4@QeQfFiZ<0TS~oy-PPH zBYS$8{$so)Ja#dkG1b7v>Rjb&0je@O@3O-(w#HylALdDw+Rr?|L6V#jT*H|7^cOxx zyf#)Y+*=)~iwgN&tvh1-w)089FNV~?A~dv7*x>&8E602Ec;9;5GA1RI+NGMST{PhnNA%ZPpPisA8 zU;)V#XJOc88@Ubgk3};LL~S^;IBGFB_BQb$T}X9y5Wa(Ka-SC#{Ye5j(*DSAm znT}dhIb)r;n3eF(e#kM#t#qn^GKO@D2dQY@-f_)Q(@!`dCq2NXA4%_(rXzswXIq7! z{_jPGT@Q=h@Z3JVy1M3@?~Z-~iMBgS>6^rlAlA4TVvb+loM;_=+pBt`5XwzPCOK}? zpUIoGJ4eL(X}_N0c9OqeC}V6SLA&J7?d}di=SfRKeai0AG~QetMdGSH?T{ibP)E9B zI2756bB24{9W0`%T&i|Bv&X*RKqbp=TLR*q1*C$~Ib@yIENJXPrN(KV?KifK1LsmM z+?nB;z1BCirCa>wkp^g+y_2jOQItTpc$6fkw1*bUU)rh2QMW2Fa0$i~f1mdD**kKH zCXK?NGz=%rIhCA_Nt8&fOR7HL$!Cr-NV$O`bJ%t#4dYC7bq)w?xAQkrG)fCizlQMK zvh}a&<*JitxzD)Fx{**zz^XH6Ij{U(5xc0h!XE8RV`hy(B)<_yN3L?qW;ERD6;8g3 zjD{(*^LYq#<||%9uLLonQL7W))EFm>6c~Gl&(~N zpJAeEk28p{cqXa@wPVI?N8XHQM!=tWe!h6=uh5hPGj|(E;YbqM2$|;42jzXiEo58m zvD&z$mRCQGkth^3lrU6gtoj>C*~z!9zw}ZqNzp4kad7yNY|6RHL(CZ))$4kR^U5k2 z0@DtuQFLZQ8|ObP#ZBco+EF&uH@?9r^h zYHA0A1;!V$)Q+!zA^h!PEjn>1F-Ma)%n2N6=54p=nb#5E{0)r6xO)dh{@A#*8mH2& z!$YB*Lw~)RWY>Oqr}OdGHibrCc&j*>Tdig}Rfn>Ct4e&|kmw+B{I|0bf!6DJZ+
A`poYU)s$P)mrMz-@#cT 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

qxWw53E{N(<}UdctETZi=&tfo^gY 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

-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 diff --git a/plugins/eq/eqcontrolsdialog.cpp b/plugins/eq/eqcontrolsdialog.cpp index f6424788a..0633a8cf5 100644 --- a/plugins/eq/eqcontrolsdialog.cpp +++ b/plugins/eq/eqcontrolsdialog.cpp @@ -51,7 +51,7 @@ EqControlsDialog::EqControlsDialog(EqControls *controls) : m_inSpec = new EqSpectrumView( &controls->m_inFftBands, this); m_inSpec->move( 50, 5 ); - m_inSpec->color = QColor( 255, 0, 255, 80 ); + m_inSpec->color = QColor( 255, 0, 255, 150 ); m_outSpec = new EqSpectrumView( &controls->m_outFftBands, this); m_outSpec->move( 50, 5 ); m_outSpec->color = QColor(00, 255, 255, 80); @@ -92,45 +92,57 @@ EqControlsDialog::EqControlsDialog(EqControls *controls) : for( int i = 0; i < m_parameterWidget->bandCount() ; i++) { m_resKnob = new Knob( knobBright_26, this ); - m_resKnob->move(cw * i + ko , 205 ); + if(i ==0 || i == 7) + { + m_resKnob->move(cw * i + ko , 190 ); + } else + { + m_resKnob->move(cw * i + ko , 205 ); + } m_resKnob->setVolumeKnob(false); m_resKnob->setModel( m_parameterWidget->getBandModels( i )->res ); m_resKnob->setHintText( tr( "Resonance:") , ""); m_freqKnob = new Knob( knobBright_26, this ); - m_freqKnob->move(cw * i + ko, 235 ); + if( i == 0 || i == 7 ) + { + m_freqKnob->move( cw * i + ko, 222 ); + } else + { + m_freqKnob->move(cw * i + ko, 235 ); + } m_freqKnob->setVolumeKnob( false ); m_freqKnob->setModel( m_parameterWidget->getBandModels( i )->freq ); m_freqKnob->setHintText( tr( "Frequency:" ), "Hz" ); - m_activeBox = new LedCheckBox( m_parameterWidget->getBandModels( i )->name , this ); + m_activeBox = new LedCheckBox( m_parameterWidget->getBandModels( i )->name , this , "" , LedCheckBox::Green ); m_activeBox->move( cw * i + fo + 3, 260 ); m_activeBox->setModel( m_parameterWidget->getBandModels( i )->active ); } //hp filter type - m_hp12Box = new LedCheckBox( tr( "12dB" ), this ); - m_hp12Box->move( cw*0 + ko, 175 ); + m_hp12Box = new LedCheckBox( tr( "12dB" ), this , "" , LedCheckBox::Green ); + m_hp12Box->move( cw*0 + ko, 170 ); m_hp12Box->setModel( &controls->m_hp12Model ); - m_hp24Box = new LedCheckBox( tr( "24dB" ), this ); - m_hp24Box->move( cw*0 + ko, 155 ); + m_hp24Box = new LedCheckBox( tr( "24dB" ), this , "" , LedCheckBox::Green ); + m_hp24Box->move( cw*0 + ko, 150 ); m_hp24Box->setModel( &controls->m_hp24Model ); - m_hp48Box = new LedCheckBox( tr( "48dB" ), this ); - m_hp48Box->move( cw*0 + ko, 135 ); + m_hp48Box = new LedCheckBox( tr( "48dB" ), this , "" , LedCheckBox::Green ); + m_hp48Box->move( cw*0 + ko, 130 ); m_hp48Box->setModel( &controls->m_hp48Model ); //LP filter type - m_lp12Box = new LedCheckBox( tr( "12dB"), this ); - m_lp12Box->move( cw*7 + ko -5 , 175 ); + m_lp12Box = new LedCheckBox( tr( "12dB"), this , "" , LedCheckBox::Green ); + m_lp12Box->move( cw*7 + ko -5 , 170 ); m_lp12Box->setModel( &controls->m_lp12Model ); - m_lp24Box = new LedCheckBox( tr( "24dB"), this ); - m_lp24Box->move( cw*7 + ko - 5, 155 ); + m_lp24Box = new LedCheckBox( tr( "24dB"), this , "" , LedCheckBox::Green ); + m_lp24Box->move( cw*7 + ko - 5, 150 ); m_lp24Box->setModel( &controls->m_lp24Model ); - m_lp48Box = new LedCheckBox( tr( "48dB"), this ); - m_lp48Box->move( cw*7 + ko - 5, 135 ); + m_lp48Box = new LedCheckBox( tr( "48dB"), this , "" , LedCheckBox::Green ); + m_lp48Box->move( cw*7 + ko - 5, 130 ); m_lp48Box->setModel( &controls->m_lp48Model ); automatableButtonGroup *lpBtnGrp = new automatableButtonGroup(this,tr ( "lp grp" ) ); @@ -146,8 +158,8 @@ EqControlsDialog::EqControlsDialog(EqControls *controls) : hpBtnGrp->setModel( &m_controls->m_hpTypeModel,false); //Analize Box - m_analyzeBox = new LedCheckBox( tr( "Analyze" ), this ); - m_analyzeBox->move( cw*1 + ko + 5, 10 ); + m_analyzeBox = new LedCheckBox( tr( "Analyze" ), this , "" , LedCheckBox::Green ); + m_analyzeBox->move( cw*1 + ko + 5, 15 ); m_analyzeBox->setModel( &controls->m_analyzeModel ); } diff --git a/plugins/eq/eqeffect.cpp b/plugins/eq/eqeffect.cpp index 9c52d688b..992aab69b 100644 --- a/plugins/eq/eqeffect.cpp +++ b/plugins/eq/eqeffect.cpp @@ -59,11 +59,11 @@ EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::K Effect( &eq_plugin_descriptor, parent, key ), m_eqControls( this ) { - m_dFilterCount = 20; + m_dFilterCount = 6; m_downsampleFilters = new EqLinkwitzRiley[m_dFilterCount]; for( int i = 0; i < m_dFilterCount; i++) { - m_downsampleFilters[i].setFrequency(21500); + m_downsampleFilters[i].setFrequency(20000); m_downsampleFilters[i].setSR(Engine::mixer()->processingSampleRate() * 2 ); } m_upBuf = 0; diff --git a/plugins/eq/eqparameterwidget.cpp b/plugins/eq/eqparameterwidget.cpp index 059555108..6a3ae7aa1 100644 --- a/plugins/eq/eqparameterwidget.cpp +++ b/plugins/eq/eqparameterwidget.cpp @@ -40,7 +40,7 @@ EqParameterWidget::EqParameterWidget( QWidget *parent ) : // connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(update())); - timer->start(200); + timer->start(100); float totalLength = log10( 21000 ); m_pixelsPerUnitWidth = width( ) / totalLength ; float totalHeight = 80; From f64ca3ff454641381121fb080e6c325473e70ef9 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sat, 13 Dec 2014 21:54:50 +0000 Subject: [PATCH 06/81] EQ Clean up of code --- plugins/eq/eqcontrols.cpp | 19 +------ plugins/eq/eqcontrolsdialog.cpp | 6 +- plugins/eq/eqcontrolsdialog.h | 4 +- plugins/eq/eqeffect.cpp | 94 ++++++++------------------------ plugins/eq/eqeffect.h | 4 +- plugins/eq/eqfilter.h | 23 ++++++++ plugins/eq/eqparameterwidget.cpp | 17 +++--- plugins/eq/eqspectrumview.h | 34 ++++++------ 8 files changed, 76 insertions(+), 125 deletions(-) diff --git a/plugins/eq/eqcontrols.cpp b/plugins/eq/eqcontrols.cpp index cb0300382..82cb11191 100644 --- a/plugins/eq/eqcontrols.cpp +++ b/plugins/eq/eqcontrols.cpp @@ -23,7 +23,6 @@ */ #include - #include "eqcontrols.h" #include "eqeffect.h" @@ -72,8 +71,8 @@ EqControls::EqControls( EqEffect *effect ) : m_hp24Model( false, this , tr( "HP 24" ) ), m_hp48Model( false, this , tr( "HP 48" ) ), m_analyzeModel( true, this , tr( "Analyze enable" ) ), - m_lpTypeModel(0,0,2,this, tr( "low pass type") ) , - m_hpTypeModel(0,0,2,this, tr( "high pass type") ) + m_lpTypeModel( 0,0,2,this, tr( "low pass type") ) , + m_hpTypeModel( 0,0,2,this, tr( "high pass type") ) { m_hpFeqModel.setScaleLogarithmic( true ); m_lowShelfFreqModel.setScaleLogarithmic( true ); @@ -83,7 +82,6 @@ EqControls::EqControls( EqEffect *effect ) : m_para4FreqModel.setScaleLogarithmic( true ); m_highShelfFreqModel.setScaleLogarithmic( true ); m_lpFreqModel.setScaleLogarithmic( true ); - m_para1GainModel.setScaleLogarithmic( true ); m_inPeakL = 0; m_inPeakR = 0; @@ -94,7 +92,6 @@ EqControls::EqControls( EqEffect *effect ) : m_para4PeakL = 0; m_para4PeakR = 0; m_highShelfPeakL = 0; m_highShelfPeakR = 0; m_inProgress = false; - } @@ -110,7 +107,6 @@ void EqControls::loadSettings( const QDomElement &_this ) m_para3GainModel.loadSettings( _this, "Peak3gain" ); m_para4GainModel.loadSettings( _this, "Peak4gain" ); m_highShelfGainModel.loadSettings( _this , "HighShelfgain"); - m_hpResModel.loadSettings( _this ,"HPres"); m_lowShelfResModel.loadSettings( _this, "LowShelfres" ); m_para1ResModel.loadSettings( _this ,"Peak1res" ); @@ -119,7 +115,6 @@ void EqControls::loadSettings( const QDomElement &_this ) m_para4ResModel.loadSettings( _this ,"Peak4res" ); m_highShelfResModel.loadSettings( _this, "HighShelfres" ); m_lpResModel.loadSettings( _this, "LPres"); - m_hpFeqModel.loadSettings( _this, "HPfreq" ); m_lowShelfFreqModel.loadSettings( _this, "LowShelffreq" ); m_para1FreqModel.loadSettings( _this, "Peak1freq" ); @@ -128,7 +123,6 @@ void EqControls::loadSettings( const QDomElement &_this ) m_para4FreqModel.loadSettings( _this, "Peak4freq" ); m_highShelfFreqModel.loadSettings( _this, "Highshelffreq" ); m_lpFreqModel.loadSettings( _this, "LPfreq" ); - m_hpActiveModel.loadSettings( _this, "HPactive" ); m_lowShelfActiveModel.loadSettings( _this, "Lowshelfactive" ); m_para1ActiveModel.loadSettings( _this, "Peak1active"); @@ -137,16 +131,13 @@ void EqControls::loadSettings( const QDomElement &_this ) m_para4ActiveModel.loadSettings( _this, "Peak4active"); m_highShelfActiveModel.loadSettings( _this, "Highshelfactive" ); m_lpActiveModel.loadSettings( _this, "LPactive" ); - m_lp12Model.loadSettings( _this , "LP12" ); m_lp24Model.loadSettings( _this , "LP24" ); m_lp48Model.loadSettings( _this , "LP48" ); - m_hp12Model.loadSettings( _this , "HP12" ); m_hp24Model.loadSettings( _this , "HP24" ); m_hp48Model.loadSettings( _this , "HP48" ); m_analyzeModel.loadSettings( _this, "Analyzeenable"); - m_lpTypeModel.loadSettings( _this, "LP" ); m_hpTypeModel.loadSettings( _this, "HP" ); } @@ -165,7 +156,6 @@ void EqControls::saveSettings( QDomDocument &doc, QDomElement &parent ) m_para3GainModel.saveSettings( doc, parent, "Peak3gain" ); m_para4GainModel.saveSettings( doc, parent, "Peak4gain" ); m_highShelfGainModel.saveSettings( doc, parent, "HighShelfgain"); - m_hpResModel.saveSettings( doc, parent ,"HPres"); m_lowShelfResModel.saveSettings( doc, parent, "LowShelfres" ); m_para1ResModel.saveSettings( doc, parent,"Peak1res" ); @@ -174,7 +164,6 @@ void EqControls::saveSettings( QDomDocument &doc, QDomElement &parent ) m_para4ResModel.saveSettings( doc, parent,"Peak4res" ); m_highShelfResModel.saveSettings( doc, parent, "HighShelfres" ); m_lpResModel.saveSettings( doc, parent, "LPres"); - m_hpFeqModel.saveSettings( doc, parent, "HPfreq" ); m_lowShelfFreqModel.saveSettings( doc, parent, "LowShelffreq" ); m_para1FreqModel.saveSettings( doc, parent, "Peak1freq" ); @@ -183,7 +172,6 @@ void EqControls::saveSettings( QDomDocument &doc, QDomElement &parent ) m_para4FreqModel.saveSettings( doc, parent, "Peak4freq" ); m_highShelfFreqModel.saveSettings( doc, parent, "Highshelffreq" ); m_lpFreqModel.saveSettings( doc, parent, "LPfreq" ); - m_hpActiveModel.saveSettings( doc, parent, "HPactive" ); m_lowShelfActiveModel.saveSettings( doc, parent, "Lowshelfactive" ); m_para1ActiveModel.saveSettings( doc, parent, "Peak1active" ); @@ -192,16 +180,13 @@ void EqControls::saveSettings( QDomDocument &doc, QDomElement &parent ) m_para4ActiveModel.saveSettings( doc, parent, "Peak4active" ); m_highShelfActiveModel.saveSettings( doc, parent, "Highshelfactive" ); m_lpActiveModel.saveSettings( doc, parent, "LPactive" ); - m_lp12Model.saveSettings( doc, parent, "LP12" ); m_lp24Model.saveSettings( doc, parent, "LP24" ); m_lp48Model.saveSettings( doc, parent, "LP48" ); - m_hp12Model.saveSettings( doc, parent, "HP12" ); m_hp24Model.saveSettings( doc, parent, "HP24" ); m_hp48Model.saveSettings( doc, parent, "HP48" ); m_analyzeModel.saveSettings( doc, parent, "Analyzeenable"); - m_lpTypeModel.saveSettings( doc, parent, "LP" ); m_hpTypeModel.saveSettings( doc, parent, "HP" ); } diff --git a/plugins/eq/eqcontrolsdialog.cpp b/plugins/eq/eqcontrolsdialog.cpp index 0633a8cf5..f38f8636d 100644 --- a/plugins/eq/eqcontrolsdialog.cpp +++ b/plugins/eq/eqcontrolsdialog.cpp @@ -38,7 +38,7 @@ -EqControlsDialog::EqControlsDialog(EqControls *controls) : +EqControlsDialog::EqControlsDialog( EqControls *controls ) : EffectControlDialog( controls ) { @@ -94,10 +94,10 @@ EqControlsDialog::EqControlsDialog(EqControls *controls) : m_resKnob = new Knob( knobBright_26, this ); if(i ==0 || i == 7) { - m_resKnob->move(cw * i + ko , 190 ); + m_resKnob->move( cw * i + ko , 190 ); } else { - m_resKnob->move(cw * i + ko , 205 ); + m_resKnob->move( cw * i + ko , 205 ); } m_resKnob->setVolumeKnob(false); m_resKnob->setModel( m_parameterWidget->getBandModels( i )->res ); diff --git a/plugins/eq/eqcontrolsdialog.h b/plugins/eq/eqcontrolsdialog.h index fd8327dce..bda074f4a 100644 --- a/plugins/eq/eqcontrolsdialog.h +++ b/plugins/eq/eqcontrolsdialog.h @@ -33,7 +33,7 @@ #include "MainWindow.h" #include "qpushbutton.h" #include "eqspectrumview.h" -#include "qlist.h" + class EqControls; @@ -66,9 +66,7 @@ private: LedCheckBox* m_hp12Box; LedCheckBox* m_hp24Box; LedCheckBox* m_hp48Box; - LedCheckBox* m_analyzeBox; - EqParameterWidget* m_parameterWidget; EqSpectrumView* m_inSpec; EqSpectrumView* m_outSpec; diff --git a/plugins/eq/eqeffect.cpp b/plugins/eq/eqeffect.cpp index 992aab69b..19f990479 100644 --- a/plugins/eq/eqeffect.cpp +++ b/plugins/eq/eqeffect.cpp @@ -30,12 +30,6 @@ #include "Engine.h" #include "MainWindow.h" -//TODO -//re write to store data from each filter(models,name, storeage name ) in a class, stored in array -//then just loop ever array for each section - - - extern "C" { @@ -52,7 +46,7 @@ Plugin::Descriptor PLUGIN_EXPORT eq_plugin_descriptor = NULL } ; - +} EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::Key *key) : @@ -74,7 +68,6 @@ EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::K EqEffect::~EqEffect() { - } @@ -100,10 +93,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) { m_eqControls.m_inFftBands.clear(); } - - //TODO UPSAMPLE upsample( buf, frames ); - gain(m_upBuf , m_upBufFrames, m_eqControls.m_inGainModel.value(), &m_inPeak ); m_eqControls.m_inPeakL = m_eqControls.m_inPeakL < m_inPeak[0] ? m_inPeak[0] : m_eqControls.m_inPeakL; m_eqControls.m_inPeakR = m_eqControls.m_inPeakR < m_inPeak[1] ? m_inPeak[0] : m_eqControls.m_inPeakR; @@ -222,21 +212,16 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) gain( m_upBuf , m_upBufFrames, outGain, &outPeak ); m_eqControls.m_outPeakL = m_eqControls.m_outPeakL < outPeak[0] ? outPeak[0] : m_eqControls.m_outPeakL; m_eqControls.m_outPeakR = m_eqControls.m_outPeakR < outPeak[1] ? outPeak[0] : m_eqControls.m_outPeakR; - - //TODO lp filter before downsample for( int i =0; i < m_dFilterCount; i++) { m_downsampleFilters[i].processBuffer(m_upBuf , m_upBufFrames ); } - downSample( buf, frames ); - for( fpp_t f = 0; f < frames; ++f ) { outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; } checkGate( outSum / frames ); - if(m_eqControls.m_analyzeModel.value() ) { m_eqControls.m_outFftBands.analyze( buf, frames ); @@ -245,7 +230,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) { m_eqControls.m_outFftBands.clear(); } - setBandPeaks( &m_eqControls.m_outFftBands , (int)(sampleRate * 0.5)); + setBandPeaks( &m_eqControls.m_outFftBands , ( int )( sampleRate * 0.5 ) ); m_eqControls.m_inProgress = false; return isRunning(); } @@ -253,7 +238,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) -void EqEffect::gain(sampleFrame *buf, const fpp_t frames, float scale, sampleFrame* peak) +void EqEffect::gain( sampleFrame *buf, const fpp_t frames, float scale, sampleFrame* peak ) { peak[0][0] = 0.0f; peak[0][1] = 0.0f; for( fpp_t f = 0; f < frames; ++f ) @@ -273,11 +258,15 @@ void EqEffect::gain(sampleFrame *buf, const fpp_t frames, float scale, sampleFra } } + + + + sampleFrame m_lastUpFrame; -void EqEffect::upsample(sampleFrame *buf, const fpp_t frames) +void EqEffect::upsample( sampleFrame *buf, const fpp_t frames ) { - if(m_upBufFrames != frames * 2 ) + if( m_upBufFrames != frames * 2 ) { if( m_upBuf ) { @@ -286,21 +275,19 @@ void EqEffect::upsample(sampleFrame *buf, const fpp_t frames) m_upBuf = new sampleFrame[frames * 2]; m_upBufFrames = frames * 2; } - for( int f = 0, f2 = 0; f < frames; ++f, f2 += 2 ) { - m_upBuf[f2][0] = linearInterpolate(m_lastUpFrame[0],buf[f][0], 0.5); - m_upBuf[f2][1] = linearInterpolate(m_lastUpFrame[1],buf[f][1], 0.5); + m_upBuf[f2][0] = linearInterpolate( m_lastUpFrame[0],buf[f][0], 0.5 ); + m_upBuf[f2][1] = linearInterpolate( m_lastUpFrame[1],buf[f][1], 0.5 ); m_upBuf[f2+1][0] = buf[f][0]; m_upBuf[f2+1][1] = buf[f][1]; - m_lastUpFrame[0] = buf[f][0]; m_lastUpFrame[1] = buf[f][1]; } } -} -void EqEffect::downSample(sampleFrame *buf, const fpp_t frames) + +void EqEffect::downSample( sampleFrame *buf, const fpp_t frames ) { for( int f = 0, f2 = 0; f < frames; ++f, f2 += 2 ) { @@ -309,49 +296,10 @@ void EqEffect::downSample(sampleFrame *buf, const fpp_t frames) } } -void EqEffect::analyze(sampleFrame *buf, const fpp_t frames, EqAnalyser* fft) -{ - if(m_eqControls.m_analyzeModel.value() ) - { - const int FFT_BUFFER_SIZE = 2048; - fpp_t f = 0; - if( frames > FFT_BUFFER_SIZE ) - { - fft->m_framesFilledUp = 0; - f = frames - FFT_BUFFER_SIZE; - } - // meger channels - for( ; f < frames; ++f ) - { - fft->m_buffer[fft->m_framesFilledUp] = - ( buf[f][0] + buf[f][1] ) * 0.5; - ++fft->m_framesFilledUp; - } - - if( fft->m_framesFilledUp < FFT_BUFFER_SIZE ) - { - return; - } - - fft->m_sr = Engine::mixer()->processingSampleRate(); - const int LOWEST_FREQ = 0; - const int HIGHEST_FREQ = fft->m_sr / 2; - - fftwf_execute( fft->m_fftPlan ); - absspec( fft->m_specBuf, fft->m_absSpecBuf, FFT_BUFFER_SIZE+1 ); - - compressbands( fft->m_absSpecBuf, fft->m_bands, FFT_BUFFER_SIZE+1, - MAX_BANDS, - (int)(LOWEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(fft->m_sr /2)), - (int)(HIGHEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(fft->m_sr /2))); - fft->m_energy = maximum( fft->m_bands, MAX_BANDS ) / maximum( fft->m_buffer, FFT_BUFFER_SIZE ); - fft->m_framesFilledUp = 0; - - } -} -float EqEffect::peakBand(float minF, float maxF, EqAnalyser *fft, int sr) + +float EqEffect::peakBand( float minF, float maxF, EqAnalyser *fft, int sr ) { float peak = -60; float * b = fft->m_bands; @@ -377,25 +325,29 @@ void EqEffect::setBandPeaks(EqAnalyser *fft, int samplerate ) peakBand( m_eqControls.m_para1FreqModel.value() - (m_eqControls.m_para1FreqModel.value() / m_eqControls.m_para1ResModel.value() * 0.5), m_eqControls.m_para1FreqModel.value() - + (m_eqControls.m_para1FreqModel.value() / m_eqControls.m_para1ResModel.value() * 0.5), fft , samplerate ); + + (m_eqControls.m_para1FreqModel.value() / m_eqControls.m_para1ResModel.value() * 0.5), + fft , samplerate ); m_eqControls.m_para2PeakL = m_eqControls.m_para2PeakR = peakBand( m_eqControls.m_para2FreqModel.value() - (m_eqControls.m_para2FreqModel.value() / m_eqControls.m_para2ResModel.value() * 0.5), m_eqControls.m_para2FreqModel.value() - + (m_eqControls.m_para2FreqModel.value() / m_eqControls.m_para2ResModel.value() * 0.5), fft , samplerate ); + + (m_eqControls.m_para2FreqModel.value() / m_eqControls.m_para2ResModel.value() * 0.5), + fft , samplerate ); m_eqControls.m_para3PeakL = m_eqControls.m_para3PeakR = peakBand( m_eqControls.m_para3FreqModel.value() - (m_eqControls.m_para3FreqModel.value() / m_eqControls.m_para3ResModel.value() * 0.5), m_eqControls.m_para3FreqModel.value() - + (m_eqControls.m_para3FreqModel.value() / m_eqControls.m_para3ResModel.value() * 0.5), fft , samplerate ); + + (m_eqControls.m_para3FreqModel.value() / m_eqControls.m_para3ResModel.value() * 0.5), + fft , samplerate ); m_eqControls.m_para4PeakL = m_eqControls.m_para4PeakR = peakBand( m_eqControls.m_para4FreqModel.value() - (m_eqControls.m_para4FreqModel.value() / m_eqControls.m_para4ResModel.value() * 0.5), m_eqControls.m_para4FreqModel.value() - + (m_eqControls.m_para4FreqModel.value() / m_eqControls.m_para4ResModel.value() * 0.5), fft , samplerate ); + + (m_eqControls.m_para4FreqModel.value() / m_eqControls.m_para4ResModel.value() * 0.5), + fft , samplerate ); m_eqControls.m_highShelfPeakL = m_eqControls.m_highShelfPeakR = peakBand( m_eqControls.m_highShelfFreqModel.value(), diff --git a/plugins/eq/eqeffect.h b/plugins/eq/eqeffect.h index 1fc96c077..a2e660cc2 100644 --- a/plugins/eq/eqeffect.h +++ b/plugins/eq/eqeffect.h @@ -71,7 +71,6 @@ private: sampleFrame* m_upBuf; fpp_t m_upBufFrames; - // const static int MAX_BANDS = 249; void upsample( sampleFrame *buf, const fpp_t frames ); void downSample( sampleFrame *buf, const fpp_t frames ); void analyze( sampleFrame *buf, const fpp_t frames, EqAnalyser* fft ); @@ -83,8 +82,7 @@ private: } void setBandPeaks( EqAnalyser *fft , int); - // float m_bands[MAX_BANDS]; - // float m_energy; + }; diff --git a/plugins/eq/eqfilter.h b/plugins/eq/eqfilter.h index e6924ca4c..d704ae517 100644 --- a/plugins/eq/eqfilter.h +++ b/plugins/eq/eqfilter.h @@ -43,6 +43,9 @@ public: } + + + virtual inline void setSampleRate( int sampleRate ) { if( sampleRate != m_sampleRate ) @@ -52,6 +55,9 @@ public: } } + + + virtual inline void setFrequency( float freq ){ if ( freq != m_freq ) { @@ -60,6 +66,9 @@ public: } } + + + virtual void setQ( float res ) { if ( res != m_res ) @@ -69,6 +78,9 @@ public: } } + + + virtual void setGain( float gain ) { if ( gain != m_gain ) @@ -78,6 +90,9 @@ public: } } + + + /// /// \brief processBuffer /// \param buf Audio Buffer @@ -153,6 +168,8 @@ public : }; + + /// /// \brief The EqLp12Filter class. /// A 2 pole low pass filter @@ -236,6 +253,9 @@ public: } }; + + + class EqLowShelfFilter : public EqFilter { public : @@ -309,6 +329,9 @@ public : } }; + + + class EqLinkwitzRiley : public StereoLinkwitzRiley { public: diff --git a/plugins/eq/eqparameterwidget.cpp b/plugins/eq/eqparameterwidget.cpp index 6a3ae7aa1..f52b3a36b 100644 --- a/plugins/eq/eqparameterwidget.cpp +++ b/plugins/eq/eqparameterwidget.cpp @@ -26,7 +26,6 @@ #include "QPainter" #include "qwidget.h" #include "lmms_math.h" - #include "MainWindow.h" #include "QMouseEvent" @@ -47,7 +46,6 @@ EqParameterWidget::EqParameterWidget( QWidget *parent ) : m_pixelsPerUnitHeight = (height() - 4) / ( totalHeight ); m_scale = 1.5; m_pixelsPerOctave = freqToXPixel( 10000 ) - freqToXPixel( 5000 ); - } @@ -55,7 +53,6 @@ EqParameterWidget::EqParameterWidget( QWidget *parent ) : EqParameterWidget::~EqParameterWidget() { - } @@ -83,8 +80,7 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) for( int i = 0 ; i < bandCount() ; i++ ) { - - m_bands[i].color.setAlpha(m_bands[i].active->value() ? activeAplha() : inactiveAlpha()); + m_bands[i].color.setAlpha( m_bands[i].active->value() ? activeAplha() : inactiveAlpha() ); painter.setPen( QPen( m_bands[i].color, 10, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); float x = freqToXPixel( m_bands[i].freq->value() ); float y = height() * 0.5; @@ -98,7 +94,8 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) m_bands[i].x = x; m_bands[i].y = y; painter.drawPoint( x, y ); painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::SquareCap, Qt::BevelJoin ) ); - if(i == 0 || i == bandCount() - 1 ){ + if( i == 0 || i == bandCount() - 1 ) + { painter.drawLine(x, y, x, y - (m_bands[i].res->value() * 4 ) ); } else @@ -112,7 +109,7 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) { m_bands[i].color.setAlpha( 255 ); painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); - painter.drawLine(sectionLength * i , 1, sectionLength * (i+1) , 1); + painter.drawLine( sectionLength * i , 1, sectionLength * (i+1) , 1 ); } } @@ -184,15 +181,15 @@ EqBand* EqParameterWidget::selectNearestHandle( const int x, const int y ) EqBand* selectedModel = 0; float* distanceToHandles = new float[bandCount()]; //calc distance to each handle - for( int i = 0 ; i < bandCount() ; i++) + for( int i = 0 ; i < bandCount() ; i++ ) { int xOffset = m_bands[i].x - x; int yOffset = m_bands[i].y - y; - distanceToHandles[i] = fabs(sqrt((xOffset * xOffset ) + ( yOffset * yOffset ) ) ); + distanceToHandles[i] = fabs( sqrt( ( xOffset * xOffset ) + ( yOffset * yOffset ) ) ); } //select band int shortestBand = 0; - for (int i = 1 ; i < bandCount() ; i++ ) + for ( int i = 1 ; i < bandCount() ; i++ ) { if ( distanceToHandles [i] < distanceToHandles[shortestBand] ){ shortestBand = i; diff --git a/plugins/eq/eqspectrumview.h b/plugins/eq/eqspectrumview.h index 3054f0b95..d2aec61f0 100644 --- a/plugins/eq/eqspectrumview.h +++ b/plugins/eq/eqspectrumview.h @@ -1,4 +1,3 @@ - /* eqspectrumview.h - defination of EqSpectrumView class. * * Copyright (c) 2014 David French @@ -38,12 +37,10 @@ class EqAnalyser public: fftwf_plan m_fftPlan; - fftwf_complex * m_specBuf; float m_absSpecBuf[FFT_BUFFER_SIZE+1]; float m_buffer[FFT_BUFFER_SIZE*2]; int m_framesFilledUp; - float m_bands[MAX_BANDS]; float m_energy; int m_sr; @@ -77,7 +74,7 @@ public: - void analyze(sampleFrame *buf, const fpp_t frames ) + void analyze( sampleFrame *buf, const fpp_t frames ) { m_inProgress=true; const int FFT_BUFFER_SIZE = 2048; @@ -110,8 +107,8 @@ public: compressbands( m_absSpecBuf, m_bands, FFT_BUFFER_SIZE+1, MAX_BANDS, - (int)(LOWEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(m_sr /2)), - (int)(HIGHEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(m_sr /2))); + ( int )( LOWEST_FREQ * ( FFT_BUFFER_SIZE + 1 ) / ( float )( m_sr / 2 ) ), + ( int )( HIGHEST_FREQ * ( FFT_BUFFER_SIZE + 1) / ( float )( m_sr / 2 ) ) ); m_energy = maximum( m_bands, MAX_BANDS ) / maximum( m_buffer, FFT_BUFFER_SIZE ); m_framesFilledUp = 0; m_inProgress = false; @@ -125,12 +122,11 @@ class EqSpectrumView : public QWidget { public: - explicit EqSpectrumView( EqAnalyser * b, QWidget * _parent = 0) : + explicit EqSpectrumView( EqAnalyser * b, QWidget * _parent = 0 ): QWidget( _parent ), m_sa( b ) { setFixedSize( 250, 116 ); - // connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(2000); @@ -140,12 +136,18 @@ public: m_pixelsPerUnitWidth = width( ) / totalLength ; m_scale = 1.5; color = QColor( 255, 255, 255, 255 ); - } + + + virtual ~EqSpectrumView() { } + + + + QColor color; EqAnalyser *m_sa; QPainterPath pp; @@ -171,13 +173,13 @@ public: pp.moveTo( 0,height() ); for( int x = 0; x < MAX_BANDS; ++x, ++b ) { - h = (int)( fh * 2.0 / 3.0 * (20*(log10( *b / e ) ) - LOWER_Y ) / (-LOWER_Y ) ); + h = (int)( fh * 2.0 / 3.0 * ( 20 * ( log10 ( *b / e ) ) - LOWER_Y ) / (-LOWER_Y ) ); if( h < 0 ) h = 0; else if( h >= fh ) continue; - pp.lineTo( freqToXPixel(bandToFreq(x ) ), fh-h ); + pp.lineTo( freqToXPixel(bandToFreq( x ) ), fh-h ); } - pp.lineTo(width(), height() ); + pp.lineTo( width(), height() ); pp.closeSubpath(); - p.fillPath( pp ,QBrush( color ) ); + p.fillPath( pp, QBrush( color ) ); } @@ -190,7 +192,7 @@ public: inline float bandToFreq ( int index ) { - return index * m_sa->m_sr / (MAX_BANDS * 2); + return index * m_sa->m_sr / (MAX_BANDS * 2 ); } @@ -202,10 +204,6 @@ private: float m_pixelsPerUnitWidth; float m_scale; int m_skipBands; - - - - } ; From 7536584386d468fda8066dd0bd1c3b692bcd5f70 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sat, 13 Dec 2014 22:03:15 +0000 Subject: [PATCH 07/81] EQ remove unused files --- plugins/eq/eqfader.cpp | 0 plugins/eq/eqfilter.cpp | 5 ----- plugins/eq/eqhighshelffileter.h | 1 - plugins/eq/eqhp12.h | 0 plugins/eq/eqlowshelffilter.h | 3 --- plugins/eq/eqlp12.h | 0 plugins/eq/eqpeekfilter.cpp | 3 --- plugins/eq/eqpeekfilter.h | 3 --- 8 files changed, 15 deletions(-) delete mode 100644 plugins/eq/eqfader.cpp delete mode 100644 plugins/eq/eqfilter.cpp delete mode 100644 plugins/eq/eqhighshelffileter.h delete mode 100644 plugins/eq/eqhp12.h delete mode 100644 plugins/eq/eqlowshelffilter.h delete mode 100644 plugins/eq/eqlp12.h delete mode 100644 plugins/eq/eqpeekfilter.cpp delete mode 100644 plugins/eq/eqpeekfilter.h diff --git a/plugins/eq/eqfader.cpp b/plugins/eq/eqfader.cpp deleted file mode 100644 index e69de29bb..000000000 diff --git a/plugins/eq/eqfilter.cpp b/plugins/eq/eqfilter.cpp deleted file mode 100644 index 7407377b9..000000000 --- a/plugins/eq/eqfilter.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "eqfilter.h" - - - - diff --git a/plugins/eq/eqhighshelffileter.h b/plugins/eq/eqhighshelffileter.h deleted file mode 100644 index 8b1378917..000000000 --- a/plugins/eq/eqhighshelffileter.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/plugins/eq/eqhp12.h b/plugins/eq/eqhp12.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/plugins/eq/eqlowshelffilter.h b/plugins/eq/eqlowshelffilter.h deleted file mode 100644 index b28b04f64..000000000 --- a/plugins/eq/eqlowshelffilter.h +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/plugins/eq/eqlp12.h b/plugins/eq/eqlp12.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/plugins/eq/eqpeekfilter.cpp b/plugins/eq/eqpeekfilter.cpp deleted file mode 100644 index 1cc60cf4c..000000000 --- a/plugins/eq/eqpeekfilter.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "eqpeekfilter.h" - - diff --git a/plugins/eq/eqpeekfilter.h b/plugins/eq/eqpeekfilter.h deleted file mode 100644 index b28b04f64..000000000 --- a/plugins/eq/eqpeekfilter.h +++ /dev/null @@ -1,3 +0,0 @@ - - - From c5c9b59167da7bb90229c587d729d41fccdaf926 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 14 Dec 2014 00:09:30 +0000 Subject: [PATCH 08/81] EQ changed makefile to allow windows build on travis --- plugins/eq/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/eq/CMakeLists.txt b/plugins/eq/CMakeLists.txt index b537ab632..0a5515fc4 100644 --- a/plugins/eq/CMakeLists.txt +++ b/plugins/eq/CMakeLists.txt @@ -2,4 +2,4 @@ INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${FFTW3F_INCLUDE_DIRS}) LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) LINK_LIBRARIES(${FFTW3F_LIBRARIES}) -BUILD_PLUGIN(eq eqeffect.cpp eqcontrols.cpp eqcontrolsdialog.cpp eqfilter.h eqparameterwidget.cpp eqfader.h eqspectrumview.h MOCFILES eqcontrols.h eqparameterwidget.h eqfader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") +BUILD_PLUGIN(eq eqeffect.cpp eqcontrols.cpp eqcontrolsdialog.cpp eqfilter.h eqparameterwidget.cpp eqfader.h eqspectrumview.h MOCFILES eqcontrols.h eqparameterwidget.h eqfader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") From b595d432d9f4c96bf31dde389317d4a100412325 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 14 Dec 2014 21:13:20 +0000 Subject: [PATCH 09/81] EQ Fixed so builds on win, Changed display colors, made res lines thinner --- plugins/eq/CMakeLists.txt | 3 ++- plugins/eq/eqcontrolsdialog.cpp | 4 ++-- plugins/eq/eqparameterwidget.cpp | 2 +- plugins/eq/eqparameterwidget.h | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/plugins/eq/CMakeLists.txt b/plugins/eq/CMakeLists.txt index 0a5515fc4..9b471d5b6 100644 --- a/plugins/eq/CMakeLists.txt +++ b/plugins/eq/CMakeLists.txt @@ -2,4 +2,5 @@ INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${FFTW3F_INCLUDE_DIRS}) LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) LINK_LIBRARIES(${FFTW3F_LIBRARIES}) -BUILD_PLUGIN(eq eqeffect.cpp eqcontrols.cpp eqcontrolsdialog.cpp eqfilter.h eqparameterwidget.cpp eqfader.h eqspectrumview.h MOCFILES eqcontrols.h eqparameterwidget.h eqfader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") +BUILD_PLUGIN(eq eqeffect.cpp eqcontrols.cpp eqcontrolsdialog.cpp eqfilter.h eqparameterwidget.cpp eqfader.h eqspectrumview.h ../../src/gui/widgets/Fader.cpp +MOCFILES eqcontrols.h eqparameterwidget.h eqfader.h ../../include/Fader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/eq/eqcontrolsdialog.cpp b/plugins/eq/eqcontrolsdialog.cpp index f38f8636d..1071b87bb 100644 --- a/plugins/eq/eqcontrolsdialog.cpp +++ b/plugins/eq/eqcontrolsdialog.cpp @@ -51,10 +51,10 @@ EqControlsDialog::EqControlsDialog( EqControls *controls ) : m_inSpec = new EqSpectrumView( &controls->m_inFftBands, this); m_inSpec->move( 50, 5 ); - m_inSpec->color = QColor( 255, 0, 255, 150 ); + m_inSpec->color = QColor( 255, 0, 0, 150 ); m_outSpec = new EqSpectrumView( &controls->m_outFftBands, this); m_outSpec->move( 50, 5 ); - m_outSpec->color = QColor(00, 255, 255, 80); + m_outSpec->color = QColor(0, 255, 0, 80); m_parameterWidget = new EqParameterWidget( this ); m_parameterWidget->move( 50, 5 ); diff --git a/plugins/eq/eqparameterwidget.cpp b/plugins/eq/eqparameterwidget.cpp index f52b3a36b..784806558 100644 --- a/plugins/eq/eqparameterwidget.cpp +++ b/plugins/eq/eqparameterwidget.cpp @@ -93,7 +93,7 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) float bw = m_bands[i].freq->value() / m_bands[i].res->value(); m_bands[i].x = x; m_bands[i].y = y; painter.drawPoint( x, y ); - painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::SquareCap, Qt::BevelJoin ) ); + painter.setPen( QPen( m_bands[i].color, 1, Qt::SolidLine, Qt::SquareCap, Qt::BevelJoin ) ); if( i == 0 || i == bandCount() - 1 ) { painter.drawLine(x, y, x, y - (m_bands[i].res->value() * 4 ) ); diff --git a/plugins/eq/eqparameterwidget.h b/plugins/eq/eqparameterwidget.h index 766efad60..6848ba938 100644 --- a/plugins/eq/eqparameterwidget.h +++ b/plugins/eq/eqparameterwidget.h @@ -87,7 +87,7 @@ public: const int inactiveAlpha() { - return 100; + return 50; } From 47e6f3b614995adf71685e89bc3e12a87cd87b8c Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 15 Dec 2014 12:38:51 +0000 Subject: [PATCH 10/81] EQ Change colors used, to be more accessable. --- plugins/eq/artwork.png | Bin 27381 -> 27905 bytes plugins/eq/eqcontrolsdialog.cpp | 27 +++++++++++++-------------- plugins/eq/eqparameterwidget.cpp | 17 ++++++----------- plugins/eq/eqparameterwidget.h | 2 +- plugins/eq/eqspectrumview.h | 1 + 5 files changed, 21 insertions(+), 26 deletions(-) diff --git a/plugins/eq/artwork.png b/plugins/eq/artwork.png index 73b3473b4f8cd1f390ece29ff24c4754775ea2d0..33fa4960defbf65b02db84e0b812bec717e4e0c3 100644 GIT binary patch literal 27905 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%0A?-KV-lr7 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 Hu0mjf8ekH` literal 27381 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
A`poYU)s$P)mrMz-@#cT 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

qxWw53E{N(<}UdctETZi=&tfo^gY z$>^TC$zow$kSwcbjBnz{;Qt-tKF18W+)25~*7&#su*O5jz>#l7$7Ekns?E7icawa01k zIccDq3dUMeO(lmii)z@0r^`=1rv_SXcDdQP#ekIadofDDvasZ&?BwL+j^U22+wrj; z-Ejn6OHfL>ww(K50p>9dixh~Rn$Ii-ra2ws^?BBk|2ZG?(5Kv{Soz0j_16w=bWQ** z#Sy1cqEeo8YA~eEKWD<9^y($;{!E$Q$~i!(FoJr$67Q#Z!P*W(t9pyY0*Xz)L$~Pf zO1sthak>}_0CcUAJECEC+)fNIV<}=9FsAa2B`<1|^tGHcv|Rm;J8hD45R`yYnpk}I z!vU9rGN%P9qSp{BM48HqE;K`W9>wT{+@cB-)v%2lJSH`)ZzHms0cFih$hk)`k5((9 z$Q9tQ<`|ylNi`OnEEx_OXs0q7a(UdChihu|SZt#mpH@*Dqf7Z*OlCDqH4&}+BfpTN z%tMR?**cm_inFftBands, this); - m_inSpec->move( 50, 5 ); - m_inSpec->color = QColor( 255, 0, 0, 150 ); + m_inSpec->move( 51, 2 ); + m_inSpec->color = QColor( 238, 154, 120, 80 ); m_outSpec = new EqSpectrumView( &controls->m_outFftBands, this); - m_outSpec->move( 50, 5 ); - m_outSpec->color = QColor(0, 255, 0, 80); + m_outSpec->move( 51, 2 ); + m_outSpec->color = QColor(145, 205, 22, 80); m_parameterWidget = new EqParameterWidget( this ); - m_parameterWidget->move( 50, 5 ); + m_parameterWidget->move( 51, 2 ); - setBand( 0, &controls->m_hpActiveModel, &controls->m_hpFeqModel, &controls->m_hpResModel, 0, QColor(173, 115, 57), tr( "HP" ) ,0,0); - setBand( 1, &controls->m_lowShelfActiveModel, &controls->m_lowShelfFreqModel, &controls->m_lowShelfResModel, &controls->m_lowShelfGainModel, QColor(255, 0, 0), tr( "Low Shelf" ), &controls->m_lowShelfPeakL , &controls->m_lowShelfPeakR ); - setBand( 2, &controls->m_para1ActiveModel, &controls->m_para1FreqModel, &controls->m_para1ResModel, &controls->m_para1GainModel, QColor(255, 173, 115), tr( "Peak 1" ), &controls->m_para1PeakL, &controls->m_para1PeakR ); - setBand( 3, &controls->m_para2ActiveModel, &controls->m_para2FreqModel, &controls->m_para2ResModel, &controls->m_para2GainModel, QColor(255, 255, 0), tr( "Peak 2" ), &controls->m_para2PeakL, &controls->m_para2PeakR ); - setBand( 4, &controls->m_para3ActiveModel, &controls->m_para3FreqModel, &controls->m_para3ResModel, &controls->m_para3GainModel, QColor(0, 255, 0), tr( "Peak 3" ), &controls->m_para3PeakL, &controls->m_para3PeakR ); - setBand( 5, &controls->m_para4ActiveModel, &controls->m_para4FreqModel, &controls->m_para4ResModel, &controls->m_para4GainModel, QColor(0, 186, 255), tr( "Peak 4" ), &controls->m_para4PeakL, &controls->m_para4PeakR ); - setBand( 6, &controls->m_highShelfActiveModel, &controls->m_highShelfFreqModel, &controls->m_highShelfResModel, &controls->m_highShelfGainModel, QColor(222, 0, 222 ), tr( "High Shelf" ), &controls->m_highShelfPeakL, &controls->m_highShelfPeakR ); - setBand( 7, &controls->m_lpActiveModel, &controls->m_lpFreqModel, &controls->m_lpResModel, 0, QColor(156, 156, 156 ), tr( "LP" ) ,0,0); + setBand( 0, &controls->m_hpActiveModel, &controls->m_hpFeqModel, &controls->m_hpResModel, 0, QColor(255 ,255, 255), tr( "HP" ) ,0,0); + setBand( 1, &controls->m_lowShelfActiveModel, &controls->m_lowShelfFreqModel, &controls->m_lowShelfResModel, &controls->m_lowShelfGainModel, QColor(255 ,255, 255), tr( "Low Shelf" ), &controls->m_lowShelfPeakL , &controls->m_lowShelfPeakR ); + setBand( 2, &controls->m_para1ActiveModel, &controls->m_para1FreqModel, &controls->m_para1ResModel, &controls->m_para1GainModel, QColor(255 ,255, 255), tr( "Peak 1" ), &controls->m_para1PeakL, &controls->m_para1PeakR ); + setBand( 3, &controls->m_para2ActiveModel, &controls->m_para2FreqModel, &controls->m_para2ResModel, &controls->m_para2GainModel, QColor(255 ,255, 255), tr( "Peak 2" ), &controls->m_para2PeakL, &controls->m_para2PeakR ); + setBand( 4, &controls->m_para3ActiveModel, &controls->m_para3FreqModel, &controls->m_para3ResModel, &controls->m_para3GainModel, QColor(255 ,255, 255), tr( "Peak 3" ), &controls->m_para3PeakL, &controls->m_para3PeakR ); + setBand( 5, &controls->m_para4ActiveModel, &controls->m_para4FreqModel, &controls->m_para4ResModel, &controls->m_para4GainModel, QColor(255 ,255, 255), tr( "Peak 4" ), &controls->m_para4PeakL, &controls->m_para4PeakR ); + setBand( 6, &controls->m_highShelfActiveModel, &controls->m_highShelfFreqModel, &controls->m_highShelfResModel, &controls->m_highShelfGainModel, QColor(255 ,255, 255), tr( "High Shelf" ), &controls->m_highShelfPeakL, &controls->m_highShelfPeakR ); + setBand( 7, &controls->m_lpActiveModel, &controls->m_lpFreqModel, &controls->m_lpResModel, 0, QColor(255 ,255, 255), tr( "LP" ) ,0,0); int cw = width()/8; //the chanel width in pixels int ko = ( cw * 0.5 ) - ((new Knob( knobBright_26, 0 ))->width() * 0.5 ); diff --git a/plugins/eq/eqparameterwidget.cpp b/plugins/eq/eqparameterwidget.cpp index 784806558..735c7b72f 100644 --- a/plugins/eq/eqparameterwidget.cpp +++ b/plugins/eq/eqparameterwidget.cpp @@ -81,7 +81,7 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) for( int i = 0 ; i < bandCount() ; i++ ) { m_bands[i].color.setAlpha( m_bands[i].active->value() ? activeAplha() : inactiveAlpha() ); - painter.setPen( QPen( m_bands[i].color, 10, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); + painter.setPen( QPen( m_bands[i].color, 1, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); float x = freqToXPixel( m_bands[i].freq->value() ); float y = height() * 0.5; float gain = 1; @@ -92,25 +92,20 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) y = gainToYPixel( gain ); float bw = m_bands[i].freq->value() / m_bands[i].res->value(); m_bands[i].x = x; m_bands[i].y = y; - painter.drawPoint( x, y ); + const int radius = 7; + painter.drawEllipse( x - radius , y - radius, radius * 2 ,radius * 2 ); + QString msg = QString ("%1").arg (QString::number (i + 1)); + painter.drawText(x - (radius * 0.5), y + (radius * 0.85 ), msg ); painter.setPen( QPen( m_bands[i].color, 1, Qt::SolidLine, Qt::SquareCap, Qt::BevelJoin ) ); if( i == 0 || i == bandCount() - 1 ) { - painter.drawLine(x, y, x, y - (m_bands[i].res->value() * 4 ) ); + painter.drawLine(x , y, x, y - (m_bands[i].res->value() * 4 ) ); } else { painter.drawLine(freqToXPixel(m_bands[i].freq->value()-(bw * 0.5)),y,freqToXPixel(m_bands[i].freq->value()+(bw * 0.5)),y); } } - //Draw color band - int sectionLength = width() / bandCount(); - for( int i = 0; i < bandCount(); i++) - { - m_bands[i].color.setAlpha( 255 ); - painter.setPen( QPen( m_bands[i].color, 3, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin ) ); - painter.drawLine( sectionLength * i , 1, sectionLength * (i+1) , 1 ); - } } diff --git a/plugins/eq/eqparameterwidget.h b/plugins/eq/eqparameterwidget.h index 6848ba938..c47ea259d 100644 --- a/plugins/eq/eqparameterwidget.h +++ b/plugins/eq/eqparameterwidget.h @@ -87,7 +87,7 @@ public: const int inactiveAlpha() { - return 50; + return 100; } diff --git a/plugins/eq/eqspectrumview.h b/plugins/eq/eqspectrumview.h index d2aec61f0..34bf09444 100644 --- a/plugins/eq/eqspectrumview.h +++ b/plugins/eq/eqspectrumview.h @@ -180,6 +180,7 @@ public: pp.lineTo( width(), height() ); pp.closeSubpath(); p.fillPath( pp, QBrush( color ) ); + p.drawPath( pp ); } From 6fb8df486f5f33605665243430d368efc8f8b32f Mon Sep 17 00:00:00 2001 From: Dave French Date: Tue, 16 Dec 2014 14:25:56 +0000 Subject: [PATCH 11/81] EQ changed file and directory names to CamelCase --- plugins/CMakeLists.txt | 2 +- plugins/{eq => Eq}/CMakeLists.txt | 4 ++-- plugins/{eq/eqcontrols.cpp => Eq/EqControls.cpp} | 4 ++-- plugins/{eq/eqcontrols.h => Eq/EqControls.h} | 2 +- .../EqControlsDialog.cpp} | 8 ++++---- .../eqcontrolsdialog.h => Eq/EqControlsDialog.h} | 4 ++-- plugins/{eq/eqeffect.cpp => Eq/EqEffect.cpp} | 6 +++--- plugins/{eq/eqeffect.h => Eq/EqEffect.h} | 4 ++-- plugins/{eq/eqfader.h => Eq/EqFader.h} | 0 plugins/{eq/eqfilter.h => Eq/EqFilter.h} | 0 .../EqParameterWidget.cpp} | 6 +++--- .../eqparameterwidget.h => Eq/EqParameterWidget.h} | 0 .../{eq/eqspectrumview.h => Eq/EqSpectrumView.h} | 0 plugins/{eq => Eq}/artwork.png | Bin plugins/{eq => Eq}/logo.png | Bin 15 files changed, 20 insertions(+), 20 deletions(-) rename plugins/{eq => Eq}/CMakeLists.txt (55%) rename plugins/{eq/eqcontrols.cpp => Eq/EqControls.cpp} (99%) rename plugins/{eq/eqcontrols.h => Eq/EqControls.h} (99%) rename plugins/{eq/eqcontrolsdialog.cpp => Eq/EqControlsDialog.cpp} (98%) rename plugins/{eq/eqcontrolsdialog.h => Eq/EqControlsDialog.h} (97%) rename plugins/{eq/eqeffect.cpp => Eq/EqEffect.cpp} (99%) rename plugins/{eq/eqeffect.h => Eq/EqEffect.h} (98%) rename plugins/{eq/eqfader.h => Eq/EqFader.h} (100%) rename plugins/{eq/eqfilter.h => Eq/EqFilter.h} (100%) rename plugins/{eq/eqparameterwidget.cpp => Eq/EqParameterWidget.cpp} (97%) rename plugins/{eq/eqparameterwidget.h => Eq/EqParameterWidget.h} (100%) rename plugins/{eq/eqspectrumview.h => Eq/EqSpectrumView.h} (100%) rename plugins/{eq => Eq}/artwork.png (100%) rename plugins/{eq => Eq}/logo.png (100%) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 7807ff544..63c80538e 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -10,7 +10,7 @@ ADD_SUBDIRECTORY(CrossoverEQ) ADD_SUBDIRECTORY(delay) ADD_SUBDIRECTORY(DualFilter) ADD_SUBDIRECTORY(dynamics_processor) -ADD_SUBDIRECTORY(eq) +ADD_SUBDIRECTORY(Eq) ADD_SUBDIRECTORY(flanger) ADD_SUBDIRECTORY(flp_import) ADD_SUBDIRECTORY(HydrogenImport) diff --git a/plugins/eq/CMakeLists.txt b/plugins/Eq/CMakeLists.txt similarity index 55% rename from plugins/eq/CMakeLists.txt rename to plugins/Eq/CMakeLists.txt index 9b471d5b6..294005af0 100644 --- a/plugins/eq/CMakeLists.txt +++ b/plugins/Eq/CMakeLists.txt @@ -2,5 +2,5 @@ INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${FFTW3F_INCLUDE_DIRS}) LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) LINK_LIBRARIES(${FFTW3F_LIBRARIES}) -BUILD_PLUGIN(eq eqeffect.cpp eqcontrols.cpp eqcontrolsdialog.cpp eqfilter.h eqparameterwidget.cpp eqfader.h eqspectrumview.h ../../src/gui/widgets/Fader.cpp -MOCFILES eqcontrols.h eqparameterwidget.h eqfader.h ../../include/Fader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") +BUILD_PLUGIN(eq EqEffect.cpp EqControls.cpp EqControlsDialog.cpp EqFilter.h EqParameterWidget.cpp EqFader.h EqSpectrumView.h ../../src/gui/widgets/Fader.cpp +MOCFILES EqControls.h EqParameterWidget.h EqFader.h ../../include/Fader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/eq/eqcontrols.cpp b/plugins/Eq/EqControls.cpp similarity index 99% rename from plugins/eq/eqcontrols.cpp rename to plugins/Eq/EqControls.cpp index 82cb11191..62d71cabc 100644 --- a/plugins/eq/eqcontrols.cpp +++ b/plugins/Eq/EqControls.cpp @@ -23,8 +23,8 @@ */ #include -#include "eqcontrols.h" -#include "eqeffect.h" +#include "EqControls.h" +#include "EqEffect.h" diff --git a/plugins/eq/eqcontrols.h b/plugins/Eq/EqControls.h similarity index 99% rename from plugins/eq/eqcontrols.h rename to plugins/Eq/EqControls.h index f3646cce6..eec745b6f 100644 --- a/plugins/eq/eqcontrols.h +++ b/plugins/Eq/EqControls.h @@ -26,7 +26,7 @@ #define EQCONTROLS_H #include "EffectControls.h" -#include "eqcontrolsdialog.h" +#include "EqControlsDialog.h" #include "Knob.h" class EqEffect; diff --git a/plugins/eq/eqcontrolsdialog.cpp b/plugins/Eq/EqControlsDialog.cpp similarity index 98% rename from plugins/eq/eqcontrolsdialog.cpp rename to plugins/Eq/EqControlsDialog.cpp index 57ba248de..950ed1272 100644 --- a/plugins/eq/eqcontrolsdialog.cpp +++ b/plugins/Eq/EqControlsDialog.cpp @@ -23,17 +23,17 @@ */ -#include "eqcontrolsdialog.h" -#include "eqcontrols.h" +#include "EqControlsDialog.h" +#include "EqControls.h" #include "embed.h" #include "Fader.h" -#include "eqfader.h" +#include "EqFader.h" #include "Engine.h" #include "AutomatableButton.h" #include "QWidget" #include "MainWindow.h" #include "LedCheckbox.h" -//#include "eqspectrumview.h" + diff --git a/plugins/eq/eqcontrolsdialog.h b/plugins/Eq/EqControlsDialog.h similarity index 97% rename from plugins/eq/eqcontrolsdialog.h rename to plugins/Eq/EqControlsDialog.h index bda074f4a..d220d51ad 100644 --- a/plugins/eq/eqcontrolsdialog.h +++ b/plugins/Eq/EqControlsDialog.h @@ -29,10 +29,10 @@ #include "Fader.h" #include "Knob.h" #include "LedCheckbox.h" -#include "eqparameterwidget.h" +#include "EqParameterWidget.h" #include "MainWindow.h" #include "qpushbutton.h" -#include "eqspectrumview.h" +#include "EqSpectrumView.h" class EqControls; diff --git a/plugins/eq/eqeffect.cpp b/plugins/Eq/EqEffect.cpp similarity index 99% rename from plugins/eq/eqeffect.cpp rename to plugins/Eq/EqEffect.cpp index 19f990479..75b7c8bb1 100644 --- a/plugins/eq/eqeffect.cpp +++ b/plugins/Eq/EqEffect.cpp @@ -22,7 +22,7 @@ * */ -#include "eqeffect.h" +#include "EqEffect.h" #include "embed.cpp" #include "lmms_math.h" #include "BasicFilters.h" @@ -53,11 +53,11 @@ EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::K Effect( &eq_plugin_descriptor, parent, key ), m_eqControls( this ) { - m_dFilterCount = 6; + m_dFilterCount = 4; m_downsampleFilters = new EqLinkwitzRiley[m_dFilterCount]; for( int i = 0; i < m_dFilterCount; i++) { - m_downsampleFilters[i].setFrequency(20000); + m_downsampleFilters[i].setFrequency(21000); m_downsampleFilters[i].setSR(Engine::mixer()->processingSampleRate() * 2 ); } m_upBuf = 0; diff --git a/plugins/eq/eqeffect.h b/plugins/Eq/EqEffect.h similarity index 98% rename from plugins/eq/eqeffect.h rename to plugins/Eq/EqEffect.h index a2e660cc2..9a4cd9411 100644 --- a/plugins/eq/eqeffect.h +++ b/plugins/Eq/EqEffect.h @@ -26,10 +26,10 @@ #define EQEFFECT_H #include "Effect.h" -#include "eqcontrols.h" +#include "EqControls.h" #include "lmms_math.h" #include "BasicFilters.h" -#include "eqfilter.h" +#include "EqFilter.h" diff --git a/plugins/eq/eqfader.h b/plugins/Eq/EqFader.h similarity index 100% rename from plugins/eq/eqfader.h rename to plugins/Eq/EqFader.h diff --git a/plugins/eq/eqfilter.h b/plugins/Eq/EqFilter.h similarity index 100% rename from plugins/eq/eqfilter.h rename to plugins/Eq/EqFilter.h diff --git a/plugins/eq/eqparameterwidget.cpp b/plugins/Eq/EqParameterWidget.cpp similarity index 97% rename from plugins/eq/eqparameterwidget.cpp rename to plugins/Eq/EqParameterWidget.cpp index 735c7b72f..cafe5ac23 100644 --- a/plugins/eq/eqparameterwidget.cpp +++ b/plugins/Eq/EqParameterWidget.cpp @@ -22,7 +22,7 @@ * */ -#include "eqparameterwidget.h" +#include "EqParameterWidget.h" #include "QPainter" #include "qwidget.h" #include "lmms_math.h" @@ -94,8 +94,8 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) m_bands[i].x = x; m_bands[i].y = y; const int radius = 7; painter.drawEllipse( x - radius , y - radius, radius * 2 ,radius * 2 ); - QString msg = QString ("%1").arg (QString::number (i + 1)); - painter.drawText(x - (radius * 0.5), y + (radius * 0.85 ), msg ); + QString msg = QString ( "%1" ).arg ( QString::number (i + 1) ); + painter.drawText(x - ( radius * 0.5 ), y + ( radius * 0.85 ), msg ); painter.setPen( QPen( m_bands[i].color, 1, Qt::SolidLine, Qt::SquareCap, Qt::BevelJoin ) ); if( i == 0 || i == bandCount() - 1 ) { diff --git a/plugins/eq/eqparameterwidget.h b/plugins/Eq/EqParameterWidget.h similarity index 100% rename from plugins/eq/eqparameterwidget.h rename to plugins/Eq/EqParameterWidget.h diff --git a/plugins/eq/eqspectrumview.h b/plugins/Eq/EqSpectrumView.h similarity index 100% rename from plugins/eq/eqspectrumview.h rename to plugins/Eq/EqSpectrumView.h diff --git a/plugins/eq/artwork.png b/plugins/Eq/artwork.png similarity index 100% rename from plugins/eq/artwork.png rename to plugins/Eq/artwork.png diff --git a/plugins/eq/logo.png b/plugins/Eq/logo.png similarity index 100% rename from plugins/eq/logo.png rename to plugins/Eq/logo.png From 2a448e92429884da3d7c15ae030f24cf40baa7f4 Mon Sep 17 00:00:00 2001 From: Dave French Date: Tue, 16 Dec 2014 23:02:45 +0000 Subject: [PATCH 12/81] EQ cleaning up memory management --- plugins/Eq/EqEffect.cpp | 4 ++++ plugins/Eq/EqParameterWidget.cpp | 4 ++++ plugins/Eq/EqSpectrumView.h | 10 +++++++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/plugins/Eq/EqEffect.cpp b/plugins/Eq/EqEffect.cpp index 75b7c8bb1..f344ed519 100644 --- a/plugins/Eq/EqEffect.cpp +++ b/plugins/Eq/EqEffect.cpp @@ -68,6 +68,10 @@ EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::K EqEffect::~EqEffect() { + if(m_upBuf) + { + delete m_upBuf; + } } diff --git a/plugins/Eq/EqParameterWidget.cpp b/plugins/Eq/EqParameterWidget.cpp index cafe5ac23..0cbcd1bfb 100644 --- a/plugins/Eq/EqParameterWidget.cpp +++ b/plugins/Eq/EqParameterWidget.cpp @@ -53,6 +53,10 @@ EqParameterWidget::EqParameterWidget( QWidget *parent ) : EqParameterWidget::~EqParameterWidget() { + if(m_bands) + { + delete m_bands; + } } diff --git a/plugins/Eq/EqSpectrumView.h b/plugins/Eq/EqSpectrumView.h index 34bf09444..d86899eea 100644 --- a/plugins/Eq/EqSpectrumView.h +++ b/plugins/Eq/EqSpectrumView.h @@ -49,10 +49,16 @@ public: EqAnalyser() { m_inProgress=false; + m_specBuf = (fftwf_complex *) fftwf_malloc( ( FFT_BUFFER_SIZE + 1 ) * sizeof( fftwf_complex ) ); + m_fftPlan = fftwf_plan_dft_r2c_1d( FFT_BUFFER_SIZE*2, m_buffer, m_specBuf, FFTW_MEASURE ); clear(); } - + virtual ~EqAnalyser() + { + fftwf_destroy_plan( m_fftPlan ); + fftwf_free( m_specBuf ); + } bool getInProgress() @@ -67,8 +73,6 @@ public: m_framesFilledUp = 0; m_energy = 0; memset( m_buffer, 0, sizeof( m_buffer ) ); - m_specBuf = (fftwf_complex *) fftwf_malloc( ( FFT_BUFFER_SIZE + 1 ) * sizeof( fftwf_complex ) ); - m_fftPlan = fftwf_plan_dft_r2c_1d( FFT_BUFFER_SIZE*2, m_buffer, m_specBuf, FFTW_MEASURE ); } From bac22e96072fe91cefa43222e23569d9edbf4d36 Mon Sep 17 00:00:00 2001 From: Dave French Date: Wed, 17 Dec 2014 02:57:49 +0000 Subject: [PATCH 13/81] EQ tidy up, --- plugins/Eq/CMakeLists.txt | 4 +- plugins/Eq/EqControls.cpp | 2 + plugins/Eq/EqEffect.cpp | 3 +- plugins/Eq/EqFader.h | 4 +- plugins/Eq/EqFilter.h | 4 +- plugins/Eq/EqParameterWidget.cpp | 8 +- plugins/Eq/EqParameterWidget.h | 129 ++++++++++++++++--------------- plugins/Eq/EqSpectrumView.h | 7 +- 8 files changed, 89 insertions(+), 72 deletions(-) diff --git a/plugins/Eq/CMakeLists.txt b/plugins/Eq/CMakeLists.txt index 294005af0..3cd4b8885 100644 --- a/plugins/Eq/CMakeLists.txt +++ b/plugins/Eq/CMakeLists.txt @@ -2,5 +2,5 @@ INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${FFTW3F_INCLUDE_DIRS}) LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) LINK_LIBRARIES(${FFTW3F_LIBRARIES}) -BUILD_PLUGIN(eq EqEffect.cpp EqControls.cpp EqControlsDialog.cpp EqFilter.h EqParameterWidget.cpp EqFader.h EqSpectrumView.h ../../src/gui/widgets/Fader.cpp -MOCFILES EqControls.h EqParameterWidget.h EqFader.h ../../include/Fader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") +BUILD_PLUGIN(eq EqEffect.cpp EqControls.cpp EqControlsDialog.cpp EqFilter.h EqParameterWidget.cpp EqFader.h EqSpectrumView.h +MOCFILES EqControls.h EqParameterWidget.h EqFader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/Eq/EqControls.cpp b/plugins/Eq/EqControls.cpp index 62d71cabc..19b63fc4a 100644 --- a/plugins/Eq/EqControls.cpp +++ b/plugins/Eq/EqControls.cpp @@ -85,6 +85,8 @@ EqControls::EqControls( EqEffect *effect ) : m_para1GainModel.setScaleLogarithmic( true ); m_inPeakL = 0; m_inPeakR = 0; + m_outPeakL = 0; + m_outPeakR = 0; m_lowShelfPeakL = 0; m_lowShelfPeakR = 0; m_para1PeakL = 0; m_para1PeakR = 0; m_para2PeakL = 0; m_para2PeakR = 0; diff --git a/plugins/Eq/EqEffect.cpp b/plugins/Eq/EqEffect.cpp index f344ed519..ee78f459d 100644 --- a/plugins/Eq/EqEffect.cpp +++ b/plugins/Eq/EqEffect.cpp @@ -51,7 +51,8 @@ Plugin::Descriptor PLUGIN_EXPORT eq_plugin_descriptor = EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::Key *key) : Effect( &eq_plugin_descriptor, parent, key ), - m_eqControls( this ) + m_eqControls( this ), + m_upBufFrames( 0 ) { m_dFilterCount = 4; m_downsampleFilters = new EqLinkwitzRiley[m_dFilterCount]; diff --git a/plugins/Eq/EqFader.h b/plugins/Eq/EqFader.h index 1057b60c0..0e1a3cc2d 100644 --- a/plugins/Eq/EqFader.h +++ b/plugins/Eq/EqFader.h @@ -32,7 +32,7 @@ -class EqFader : public Fader +class EXPORT EqFader : public Fader { public: @@ -48,6 +48,8 @@ public: m_rPeak = rPeak; connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( updateVuMeters() ) ); m_model = model; + setPeak_L( 0 ); + setPeak_R( 0 ); } diff --git a/plugins/Eq/EqFilter.h b/plugins/Eq/EqFilter.h index d704ae517..b703edc95 100644 --- a/plugins/Eq/EqFilter.h +++ b/plugins/Eq/EqFilter.h @@ -336,7 +336,9 @@ class EqLinkwitzRiley : public StereoLinkwitzRiley { public: EqLinkwitzRiley() : - StereoLinkwitzRiley( 44100) + StereoLinkwitzRiley( 44100), + m_freq(0 ), + m_sr( 1 ) { } diff --git a/plugins/Eq/EqParameterWidget.cpp b/plugins/Eq/EqParameterWidget.cpp index 0cbcd1bfb..4d3cb6e9a 100644 --- a/plugins/Eq/EqParameterWidget.cpp +++ b/plugins/Eq/EqParameterWidget.cpp @@ -46,6 +46,7 @@ EqParameterWidget::EqParameterWidget( QWidget *parent ) : m_pixelsPerUnitHeight = (height() - 4) / ( totalHeight ); m_scale = 1.5; m_pixelsPerOctave = freqToXPixel( 10000 ) - freqToXPixel( 5000 ); + } @@ -56,6 +57,7 @@ EqParameterWidget::~EqParameterWidget() if(m_bands) { delete m_bands; + m_bands = 0; } } @@ -210,6 +212,10 @@ EqBand::EqBand() : res ( 0 ), freq ( 0 ), color ( QColor( 255, 255, 255 ) ), - name ( QString( "" ) ) + x( 0 ), + y( 0 ), + name ( QString( "" ) ), + peakL( 0 ), + peakR( 0 ) { } diff --git a/plugins/Eq/EqParameterWidget.h b/plugins/Eq/EqParameterWidget.h index c47ea259d..6cc7f1a89 100644 --- a/plugins/Eq/EqParameterWidget.h +++ b/plugins/Eq/EqParameterWidget.h @@ -32,18 +32,19 @@ class EqBand { public : - EqBand(); - FloatModel* gain; - FloatModel* res; - FloatModel* freq; - BoolModel* active; - QColor color; - int x; - int y; - QString name; + EqBand(); + FloatModel* gain; + FloatModel* res; + FloatModel* freq; + BoolModel* active; + QColor color; + int x; + int y; + QString name; float* peakL; float* peakR; + }; @@ -52,51 +53,51 @@ class EqParameterWidget : public QWidget { public: - explicit EqParameterWidget( QWidget *parent = 0 ); - ~EqParameterWidget(); - const int bandCount() - { - return 8; - } + explicit EqParameterWidget( QWidget *parent = 0 ); + ~EqParameterWidget(); + const int bandCount() + { + return 8; + } - const int maxDistanceFromHandle() - { - return 20; - } + const int maxDistanceFromHandle() + { + return 20; + } - EqBand* getBandModels( int i ) - { - return &m_bands[i]; - } + EqBand* getBandModels( int i ) + { + return &m_bands[i]; + } - const int activeAplha() - { - return 200; - } + const int activeAplha() + { + return 200; + } - const int inactiveAlpha() - { + const int inactiveAlpha() + { return 100; - } + } - const float resPixelMultiplyer() - { - return 100; - } + const float resPixelMultiplyer() + { + return 100; + } signals: @@ -104,55 +105,55 @@ signals: public slots: protected: - virtual void paintEvent ( QPaintEvent * event ); - virtual void mousePressEvent(QMouseEvent * event ); - virtual void mouseReleaseEvent(QMouseEvent * event); - virtual void mouseMoveEvent(QMouseEvent * event); - virtual void mouseDoubleClickEvent(QMouseEvent * event); + virtual void paintEvent ( QPaintEvent * event ); + virtual void mousePressEvent(QMouseEvent * event ); + virtual void mouseReleaseEvent(QMouseEvent * event); + virtual void mouseMoveEvent(QMouseEvent * event); + virtual void mouseDoubleClickEvent(QMouseEvent * event); private: - EqBand* m_bands; - float m_pixelsPerUnitWidth; - float m_pixelsPerUnitHeight; - float m_pixelsPerOctave; - float m_scale; - EqBand* m_selectedBand; + EqBand *m_bands; + float m_pixelsPerUnitWidth; + float m_pixelsPerUnitHeight; + float m_pixelsPerOctave; + float m_scale; + EqBand* m_selectedBand; - EqBand* selectNearestHandle( const int x, const int y ); + EqBand* selectNearestHandle( const int x, const int y ); - enum MouseAction { none, drag, res } m_mouseAction; - int m_oldX, m_oldY; + enum MouseAction { none, drag, res } m_mouseAction; + int m_oldX, m_oldY; int *m_xGridBands; - inline int freqToXPixel( float freq ) - { - return ( log10( freq ) * m_pixelsPerUnitWidth * m_scale ) - ( width() * 0.5 ); - } + inline int freqToXPixel( float freq ) + { + return ( log10( freq ) * m_pixelsPerUnitWidth * m_scale ) - ( width() * 0.5 ); + } - inline float xPixelToFreq( int x ) - { - return pow( 10, ( x + ( width() * 0.5 ) ) / ( m_pixelsPerUnitWidth * m_scale ) ); - } + inline float xPixelToFreq( int x ) + { + return pow( 10, ( x + ( width() * 0.5 ) ) / ( m_pixelsPerUnitWidth * m_scale ) ); + } - inline int gainToYPixel( float gain ) - { - return ( height() - 3) - ( gain * m_pixelsPerUnitHeight ) - ( (height() -3 ) * 0.5); - } + inline int gainToYPixel( float gain ) + { + return ( height() - 3) - ( gain * m_pixelsPerUnitHeight ) - ( (height() -3 ) * 0.5); + } - inline float yPixelToGain( int y ) - { - return ( ( 0.5 * height() ) - y) / m_pixelsPerUnitHeight; - } + inline float yPixelToGain( int y ) + { + return ( ( 0.5 * height() ) - y) / m_pixelsPerUnitHeight; + } }; diff --git a/plugins/Eq/EqSpectrumView.h b/plugins/Eq/EqSpectrumView.h index d86899eea..71c64f5a4 100644 --- a/plugins/Eq/EqSpectrumView.h +++ b/plugins/Eq/EqSpectrumView.h @@ -46,7 +46,10 @@ public: int m_sr; - EqAnalyser() + EqAnalyser() : + m_framesFilledUp ( 0 ), + m_energy ( 0 ), + m_sr ( 1 ) { m_inProgress=false; m_specBuf = (fftwf_complex *) fftwf_malloc( ( FFT_BUFFER_SIZE + 1 ) * sizeof( fftwf_complex ) ); @@ -73,7 +76,7 @@ public: m_framesFilledUp = 0; m_energy = 0; memset( m_buffer, 0, sizeof( m_buffer ) ); - + memset( m_bands, 0, sizeof( m_bands ) ); } From 01c8cbcde09a9727e841b58ab9bdf22c37f7e745 Mon Sep 17 00:00:00 2001 From: Dave French Date: Wed, 17 Dec 2014 12:28:03 +0000 Subject: [PATCH 14/81] EQ remove EXPORT from EqFader --- plugins/Eq/EqFader.h | 2 +- plugins/Eq/EqParameterWidget.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/Eq/EqFader.h b/plugins/Eq/EqFader.h index 0e1a3cc2d..9ef7f80c3 100644 --- a/plugins/Eq/EqFader.h +++ b/plugins/Eq/EqFader.h @@ -32,7 +32,7 @@ -class EXPORT EqFader : public Fader +class EqFader : public Fader { public: diff --git a/plugins/Eq/EqParameterWidget.cpp b/plugins/Eq/EqParameterWidget.cpp index 4d3cb6e9a..31c74a7f0 100644 --- a/plugins/Eq/EqParameterWidget.cpp +++ b/plugins/Eq/EqParameterWidget.cpp @@ -56,7 +56,7 @@ EqParameterWidget::~EqParameterWidget() { if(m_bands) { - delete m_bands; + delete[] m_bands; m_bands = 0; } } From fae0c8c74e65b363d2d5e954fed5d6948fc72343 Mon Sep 17 00:00:00 2001 From: Dave French Date: Wed, 17 Dec 2014 12:44:22 +0000 Subject: [PATCH 15/81] EQ --- include/Fader.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/Fader.h b/include/Fader.h index 9e8f034ea..3e808802a 100644 --- a/include/Fader.h +++ b/include/Fader.h @@ -57,7 +57,7 @@ class TextFloat; -class Fader : public QWidget, public FloatModelView +class EXPORT Fader : public QWidget, public FloatModelView { Q_OBJECT public: From c0415ce3b3b41a03ec9184ccfd1064786cf72442 Mon Sep 17 00:00:00 2001 From: Vesa Date: Thu, 18 Dec 2014 22:36:39 +0200 Subject: [PATCH 16/81] Changes to interpolation (explicitly use fma more), some new DSP building blocks New file: Delay.h - contains some simple delay effects for use in DSP - perhaps for designing reverbs or similar. All are in double precision because why not. --- include/Delay.h | 363 ++++++++++++++++++++++++++++++++++++++++ include/interpolation.h | 12 +- 2 files changed, 369 insertions(+), 6 deletions(-) create mode 100644 include/Delay.h diff --git a/include/Delay.h b/include/Delay.h new file mode 100644 index 000000000..1c51f1ba8 --- /dev/null +++ b/include/Delay.h @@ -0,0 +1,363 @@ +/* + * Delay.h - Delay effect objects to use as building blocks in DSP + * + * Copyright (c) 2014 Vesa Kivimäki + * Copyright (c) 2006-2014 Tobias Doerffel + * + * This file is part of LMMS - http://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#ifndef DELAY_H +#define DELAY_H + +#include "lmms_basics.h" +#include "lmms_math.h" +#include "interpolation.h" +#include "MemoryManager.h" + +// brief usage + +// Classes: + +// CombFeedback: a feedback comb filter - basically a simple delay line, makes a comb shape in the freq response +// CombFeedfwd: a feed-forward comb filter - an "inverted" comb filter, can be combined with CombFeedback to create a net allpass if negative gain is used +// CombFeedbackDualtap: same as CombFeedback but takes two delay values +// AllpassDelay: an allpass delay - combines feedback and feed-forward - has flat frequency response + +// all classes are templated with channel count, any arbitrary channel count can be used for each fx + +// Methods (for all classes): + +// setDelay sets delay amount in frames. It's up to you to make this samplerate-agnostic. +// Fractions are allowed - linear interpolation is used to deal with them +// CombFeedbackDualTap is a special case: it requires 2 delay times + +// setMaxDelay (re)sets the maximum allowed delay, in frames +// NOTE: for performance reasons, there's no bounds checking at setDelay, so make sure you set maxDelay >= delay! + +// clearHistory clears the delay buffer + +// setGain sets the feedback/feed-forward gain, in linear amplitude, negative values are allowed +// 1.0 is full feedback/feed-forward, -1.0 is full negative feedback/feed-forward + +// update runs the fx for one frame - takes as arguments input and number of channel to run, returns output + +template +class CombFeedback +{ +public: + typedef double frame[CHANNELS]; + + CombFeedback( int maxDelay ) : + m_size( maxDelay ), + m_position( 0 ), + m_feedBack( 0.0 ), + m_delay( 0 ), + m_fraction( 0.0 ) + { + m_buffer = MM_ALLOC( frame, maxDelay ); + memset( m_buffer, 0, sizeof( frame ) * maxDelay ); + } + virtual ~CombFeedback() + { + MM_FREE( m_buffer ); + } + + inline void setMaxDelay( int maxDelay ) + { + if( maxDelay > m_size ) + { + MM_FREE( m_buffer ); + m_buffer = MM_ALLOC( frame, maxDelay ); + memset( m_buffer, 0, sizeof( frame ) * maxDelay ); + } + m_size = maxDelay; + m_position %= m_size; + } + + inline void clearHistory() + { + memset( m_buffer, 0, sizeof( frame ) * m_size ); + } + + inline void setDelay( double delay ) + { + m_delay = static_cast( ceil( delay ) ); + m_fraction = 1.0 - ( delay - floor( delay ) ); + } + + inline void setGain( double gain ) + { + m_gain = gain; + } + + inline double update( double in, ch_cnt_t ch ) + { + int readPos = m_position - m_delay; + if( readPos < 0 ) { readPos += m_size; } + + const double y = linearInterpolate( m_buffer[readPos][ch], m_buffer[( readPos + 1 ) % m_size][ch], m_fraction ); + + ++m_position %= m_size; + + m_buffer[m_position][ch] = in + m_gain * y; + return y; + } + +private: + frame * m_buffer; + int m_size; + int m_position; + double m_gain; + int m_delay; + double m_fraction; +}; + + +template +class CombFeedfwd +{ + typedef double frame[CHANNELS]; + + CombFeedfwd( int maxDelay ) : + m_size( maxDelay ), + m_position( 0 ), + m_feedBack( 0.0 ), + m_delay( 0 ), + m_fraction( 0.0 ) + { + m_buffer = MM_ALLOC( frame, maxDelay ); + memset( m_buffer, 0, sizeof( frame ) * maxDelay ); + } + virtual ~CombFeedfwd() + { + MM_FREE( m_buffer ); + } + + inline void setMaxDelay( int maxDelay ) + { + if( maxDelay > m_size ) + { + MM_FREE( m_buffer ); + m_buffer = MM_ALLOC( frame, maxDelay ); + memset( m_buffer, 0, sizeof( frame ) * maxDelay ); + } + m_size = maxDelay; + m_position %= m_size; + } + + inline void clearHistory() + { + memset( m_buffer, 0, sizeof( frame ) * m_size ); + } + + inline void setDelay( double delay ) + { + m_delay = static_cast( ceil( delay ) ); + m_fraction = 1.0 - ( delay - floor( delay ) ); + } + + inline void setGain( double gain ) + { + m_gain = gain; + } + + inline double update( double in, ch_cnt_t ch ) + { + int readPos = m_position - m_delay; + if( readPos < 0 ) { readPos += m_size; } + + const double y = linearInterpolate( m_buffer[readPos][ch], m_buffer[( readPos + 1 ) % m_size][ch], m_fraction ) + in * m_gain; + + ++m_position %= m_size; + + m_buffer[m_position][ch] = in; + return y; + } + +private: + frame * m_buffer; + int m_size; + int m_position; + double m_gain; + int m_delay; + double m_fraction; +}; + + +template +class CombFeedbackDualtap +{ + typedef double frame[CHANNELS]; + + CombFeedbackDualtap( int maxDelay ) : + m_size( maxDelay ), + m_position( 0 ), + m_feedBack( 0.0 ), + m_delay( 0 ), + m_fraction( 0.0 ) + { + m_buffer = MM_ALLOC( frame, maxDelay ); + memset( m_buffer, 0, sizeof( frame ) * maxDelay ); + } + virtual ~CombFeedbackDualtap() + { + MM_FREE( m_buffer ); + } + + inline void setMaxDelay( int maxDelay ) + { + if( maxDelay > m_size ) + { + MM_FREE( m_buffer ); + m_buffer = MM_ALLOC( frame, maxDelay ); + memset( m_buffer, 0, sizeof( frame ) * maxDelay ); + } + m_size = maxDelay; + m_position %= m_size; + } + + inline void clearHistory() + { + memset( m_buffer, 0, sizeof( frame ) * m_size ); + } + + inline void setDelays( double delay1, double delay2 ) + { + m_delay1 = static_cast( ceil( delay1 ) ); + m_fraction1 = 1.0 - ( delay1 - floor( delay1 ) ); + + m_delay2 = static_cast( ceil( delay2 ) ); + m_fraction2 = 2.0 - ( delay2 - floor( delay2 ) ); + } + + inline void setGain( double gain ) + { + m_gain = gain; + } + + inline double update( double in, ch_cnt_t ch ) + { + int readPos1 = m_position - m_delay1; + if( readPos1 < 0 ) { readPos1 += m_size; } + + int readPos2 = m_position - m_delay2; + if( readPos2 < 0 ) { readPos2 += m_size; } + + const double y = linearInterpolate( m_buffer[readPos1][ch], m_buffer[( readPos1 + 1 ) % m_size][ch], m_fraction1 ) + + linearInterpolate( m_buffer[readPos2][ch], m_buffer[( readPos2 + 1 ) % m_size][ch], m_fraction2 ); + + ++m_position %= m_size; + + m_buffer[m_position][ch] = in + m_gain * y; + return y; + } + +private: + frame * m_buffer; + int m_size; + int m_position; + double m_gain; + int m_delay1; + int m_delay2; + double m_fraction1; + double m_fraction2; +}; + + +template +class AllpassDelay +{ +public: + typedef double frame[CHANNELS]; + + AllpassDelay( int maxDelay ) : + m_size( maxDelay ), + m_position( 0 ), + m_feedBack( 0.0 ), + m_delay( 0 ), + m_fraction( 0.0 ) + { + m_buffer = MM_ALLOC( frame, maxDelay ); + memset( m_buffer, 0, sizeof( frame ) * maxDelay ); + } + virtual ~AllpassDelay() + { + MM_FREE( m_buffer ); + } + + inline void setMaxDelay( int maxDelay ) + { + if( maxDelay > m_size ) + { + MM_FREE( m_buffer ); + m_buffer = MM_ALLOC( frame, maxDelay ); + memset( m_buffer, 0, sizeof( frame ) * maxDelay ); + } + m_size = maxDelay; + m_position %= m_size; + } + + inline void clearHistory() + { + memset( m_buffer, 0, sizeof( frame ) * m_size ); + } + + inline void setDelay( double delay ) + { + m_delay = static_cast( ceil( delay ) ); + m_fraction = 1.0 - ( delay - floor( delay ) ); + } + + inline void setGain( double gain ) + { + m_gain = gain; + } + + inline double update( double in, ch_cnt_t ch ) + { + int readPos = m_position - m_delay; + if( readPos < 0 ) { readPos += m_size; } + + const double y = linearInterpolate( m_buffer[readPos][ch], m_buffer[( readPos + 1 ) % m_size][ch], m_fraction ) + in * -m_gain; + const double x = in + m_gain * y; + + ++m_position %= m_size; + + m_buffer[m_position][ch] = x; + return y; + } + +private: + frame * m_buffer; + int m_size; + int m_position; + double m_gain; + int m_delay; + double m_fraction; +}; + +// convenience typedefs for stereo effects +typedef CombFeedback<2> StereoCombFeedback; +typedef CombFeedfwd<2> StereoCombFeedfwd; +typedef CombFeedbackDualtap<2> StereoCombFeedbackDualtap; +typedef AllpassDelay<2> StereoAllpassDelay; + +#endif diff --git a/include/interpolation.h b/include/interpolation.h index cbe274d42..693897587 100644 --- a/include/interpolation.h +++ b/include/interpolation.h @@ -71,9 +71,9 @@ inline float cubicInterpolate( float v0, float v1, float v2, float v3, float x ) float frcu = frsq*v0; float t1 = v3 + 3*v1; - return( v1 + 0.5f * frcu + x * ( v2 - frcu * ( 1.0f/6.0f ) - - t1 * ( 1.0f/6.0f ) - v0 / 3.0f ) + frsq * x * ( t1 * - ( 1.0f/6.0f ) - 0.5f * v2 ) + frsq * ( 0.5f * v2 - v1 ) ); + return( v1 + fastFmaf( 0.5f, frcu, x ) * ( v2 - frcu * ( 1.0f/6.0f ) - + fastFmaf( t1, ( 1.0f/6.0f ), -v0 ) * ( 1.0f/3.0f ) ) + frsq * x * ( t1 * + ( 1.0f/6.0f ) - 0.5f * v2 ) + frsq * fastFmaf( 0.5f, v2, -v1 ) ); } @@ -102,7 +102,7 @@ inline float optimalInterpolate( float v0, float v1, float x ) const float c2 = even * -0.004541102062639801; const float c3 = odd * -1.57015627178718420; - return ( ( c3*z + c2 ) * z + c1 ) * z + c0; + return fastFmaf( fastFmaf( fastFmaf( c3, z, c2 ), z, c1 ), z, c0 ); } @@ -119,7 +119,7 @@ inline float optimal4pInterpolate( float v0, float v1, float v2, float v3, float const float c2 = even1 * -0.246185007019907091 + even2 * 0.24614027139700284; const float c3 = odd1 * -0.36030925263849456 + odd2 * 0.10174985775982505; - return ( ( c3*z + c2 ) * z + c1 ) * z + c0; + return fastFmaf( fastFmaf( fastFmaf( c3, z, c2 ), z, c1 ), z, c0 ); } @@ -130,7 +130,7 @@ inline float lagrangeInterpolate( float v0, float v1, float v2, float v3, float const float c1 = v2 - v0 * ( 1.0f / 3.0f ) - v1 * 0.5f - v3 * ( 1.0f / 6.0f ); const float c2 = 0.5f * (v0 + v2) - v1; const float c3 = ( 1.0f/6.0f ) * ( v3 - v0 ) + 0.5f * ( v1 - v2 ); - return ( ( c3*x + c2 ) * x + c1 ) * x + c0; + return fastFmaf( fastFmaf( fastFmaf( c3, x, c2 ), x, c1 ), x, c0 ); } From 17df759e597aa2f29d5cab9a2e3859af957c091c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BCdiger=20Ranft?= Date: Fri, 19 Dec 2014 16:54:37 +0100 Subject: [PATCH 17/81] Fixed the brush initialization. The brushes are now initialized as solid colored, in order to fix drawing problems. --- src/core/track.cpp | 4 +++- src/gui/AutomationEditor.cpp | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/core/track.cpp b/src/core/track.cpp index 510f2dec6..3c612e6b1 100644 --- a/src/core/track.cpp +++ b/src/core/track.cpp @@ -847,7 +847,9 @@ void trackContentObjectView::setAutoResizeEnabled( bool _e ) */ trackContentWidget::trackContentWidget( trackView * _parent ) : QWidget( _parent ), - m_trackView( _parent ) + m_trackView( _parent ), + m_darkerColor( Qt::SolidPattern ), + m_lighterColor( Qt::SolidPattern ) { setAcceptDrops( true ); diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index 71abe18c1..c9c003b28 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -98,9 +98,9 @@ AutomationEditor::AutomationEditor() : m_editMode( DRAW ), m_scrollBack( FALSE ), m_gridColor( 0,0,0 ), - m_graphColor(), + m_graphColor( Qt::SolidPattern ), m_vertexColor( 0,0,0 ), - m_scaleColor() + m_scaleColor( Qt::SolidPattern ) { connect( this, SIGNAL( currentPatternChanged() ), this, SLOT( updateAfterPatternChange() ), From 7cc080efbdc93c157fb12eb0ff8cf4d623847c38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BCdiger=20Ranft?= Date: Fri, 19 Dec 2014 17:13:29 +0100 Subject: [PATCH 18/81] Added the initialization of the active mixer brush. --- src/gui/widgets/FxLine.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/widgets/FxLine.cpp b/src/gui/widgets/FxLine.cpp index 36baa782f..8f39af38c 100644 --- a/src/gui/widgets/FxLine.cpp +++ b/src/gui/widgets/FxLine.cpp @@ -46,7 +46,8 @@ QPixmap * FxLine::s_receiveBgArrow = NULL; FxLine::FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex) : QWidget( _parent ), m_mv( _mv ), - m_channelIndex( _channelIndex ) + m_channelIndex( _channelIndex ), + m_backgroundActive( Qt::SolidPattern ) { if( ! s_sendBgArrow ) { From ddbb1808001c6ff128118f4e62fd89261f05bccd Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Fri, 19 Dec 2014 21:28:35 +0100 Subject: [PATCH 19/81] Fix memory leaks in LADSPA plugins --- plugins/LadspaEffect/calf/src/audio_fx.cpp | 16 ++++++++++++++++ plugins/LadspaEffect/calf/src/calf/audio_fx.h | 1 + plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h | 1 + plugins/LadspaEffect/calf/src/calf/modules.h | 2 ++ .../LadspaEffect/calf/src/calf/modules_limit.h | 1 + plugins/LadspaEffect/calf/src/modules.cpp | 16 ++++++++++++++++ plugins/LadspaEffect/calf/src/modules_limit.cpp | 8 ++++++++ plugins/LadspaEffect/calf/src/plugin.cpp | 5 +++++ plugins/LadspaEffect/swh/dj_eq_1901.c | 4 ++++ .../swh/fast_lookahead_limiter_1913.c | 1 + plugins/LadspaEffect/swh/imp_1199.c | 5 +++++ plugins/LadspaEffect/swh/vynil_1905.c | 1 + plugins/LadspaEffect/tap/tap_eq.c | 3 ++- plugins/LadspaEffect/tap/tap_eqbw.c | 3 ++- 14 files changed, 65 insertions(+), 2 deletions(-) diff --git a/plugins/LadspaEffect/calf/src/audio_fx.cpp b/plugins/LadspaEffect/calf/src/audio_fx.cpp index a5695be88..f42ccc0a8 100644 --- a/plugins/LadspaEffect/calf/src/audio_fx.cpp +++ b/plugins/LadspaEffect/calf/src/audio_fx.cpp @@ -567,6 +567,22 @@ lookahead_limiter::lookahead_limiter() { asc_coeff = 1.f; } +lookahead_limiter::~lookahead_limiter() +{ + if( buffer != NULL) + { + free(buffer); + } + if( nextpos != NULL) + { + free(nextpos); + } + if( nextdelta != NULL) + { + free(nextdelta); + } +} + void lookahead_limiter::activate() { is_active = true; diff --git a/plugins/LadspaEffect/calf/src/calf/audio_fx.h b/plugins/LadspaEffect/calf/src/calf/audio_fx.h index f71880289..1799de944 100644 --- a/plugins/LadspaEffect/calf/src/calf/audio_fx.h +++ b/plugins/LadspaEffect/calf/src/calf/audio_fx.h @@ -608,6 +608,7 @@ public: void reset_asc(); bool get_asc(); lookahead_limiter(); + ~lookahead_limiter(); void set_multi(bool set); void process(float &left, float &right, float *multi_buffer); void set_sample_rate(uint32_t sr); diff --git a/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h b/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h index d94ebcea3..daf7ae258 100644 --- a/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h +++ b/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h @@ -47,6 +47,7 @@ struct ladspa_instance: public plugin_ctl_iface #endif ladspa_instance(audio_module_iface *_module, ladspa_plugin_metadata_set *_ladspa, int sample_rate); + virtual ~ladspa_instance(); virtual const line_graph_iface *get_line_graph_iface() const { return module->get_line_graph_iface(); } virtual float get_param_value(int param_no); virtual void set_param_value(int param_no, float value); diff --git a/plugins/LadspaEffect/calf/src/calf/modules.h b/plugins/LadspaEffect/calf/src/calf/modules.h index fb9ba7790..8cde47f62 100644 --- a/plugins/LadspaEffect/calf/src/calf/modules.h +++ b/plugins/LadspaEffect/calf/src/calf/modules.h @@ -263,6 +263,7 @@ class mono_audio_module: } public: mono_audio_module(); + ~mono_audio_module(); void params_changed(); void activate(); void set_sample_rate(uint32_t sr); @@ -291,6 +292,7 @@ class stereo_audio_module: } public: stereo_audio_module(); + ~stereo_audio_module(); void params_changed(); void activate(); void set_sample_rate(uint32_t sr); diff --git a/plugins/LadspaEffect/calf/src/calf/modules_limit.h b/plugins/LadspaEffect/calf/src/calf/modules_limit.h index d5d4b9a52..850aff80d 100644 --- a/plugins/LadspaEffect/calf/src/calf/modules_limit.h +++ b/plugins/LadspaEffect/calf/src/calf/modules_limit.h @@ -84,6 +84,7 @@ public: uint32_t srate; bool is_active; multibandlimiter_audio_module(); + ~multibandlimiter_audio_module(); void activate(); void deactivate(); void params_changed(); diff --git a/plugins/LadspaEffect/calf/src/modules.cpp b/plugins/LadspaEffect/calf/src/modules.cpp index ba06f0201..98b4b8df3 100644 --- a/plugins/LadspaEffect/calf/src/modules.cpp +++ b/plugins/LadspaEffect/calf/src/modules.cpp @@ -460,6 +460,14 @@ stereo_audio_module::stereo_audio_module() { meter_outR = 0.f; } +stereo_audio_module::~stereo_audio_module() +{ + if( buffer != NULL ) + { + free(buffer); + } +} + void stereo_audio_module::activate() { active = true; } @@ -686,6 +694,14 @@ mono_audio_module::mono_audio_module() { meter_outR = 0.f; } +mono_audio_module::~mono_audio_module() +{ + if( buffer != NULL ) + { + free(buffer); + } +} + void mono_audio_module::activate() { active = true; } diff --git a/plugins/LadspaEffect/calf/src/modules_limit.cpp b/plugins/LadspaEffect/calf/src/modules_limit.cpp index f7fb6fc80..3930078bb 100644 --- a/plugins/LadspaEffect/calf/src/modules_limit.cpp +++ b/plugins/LadspaEffect/calf/src/modules_limit.cpp @@ -252,6 +252,14 @@ multibandlimiter_audio_module::multibandlimiter_audio_module() asc_old = true; } +multibandlimiter_audio_module::~multibandlimiter_audio_module() +{ + if( buffer != NULL) + { + free(buffer); + } +} + void multibandlimiter_audio_module::activate() { is_active = true; diff --git a/plugins/LadspaEffect/calf/src/plugin.cpp b/plugins/LadspaEffect/calf/src/plugin.cpp index 7b651de88..0cc02a885 100644 --- a/plugins/LadspaEffect/calf/src/plugin.cpp +++ b/plugins/LadspaEffect/calf/src/plugin.cpp @@ -54,6 +54,11 @@ ladspa_instance::ladspa_instance(audio_module_iface *_module, ladspa_plugin_meta module->post_instantiate(); } +ladspa_instance::~ladspa_instance() +{ + delete module; +} + float ladspa_instance::get_param_value(int param_no) { // XXXKF hack diff --git a/plugins/LadspaEffect/swh/dj_eq_1901.c b/plugins/LadspaEffect/swh/dj_eq_1901.c index a4baa9602..65205c123 100644 --- a/plugins/LadspaEffect/swh/dj_eq_1901.c +++ b/plugins/LadspaEffect/swh/dj_eq_1901.c @@ -116,6 +116,8 @@ static void activateDj_eq_mono(LADSPA_Handle instance) { } static void cleanupDj_eq_mono(LADSPA_Handle instance) { + Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance; + free(plugin_data->filters); free(instance); } @@ -283,6 +285,8 @@ static void activateDj_eq(LADSPA_Handle instance) { } static void cleanupDj_eq(LADSPA_Handle instance) { + Dj_eq *plugin_data = (Dj_eq *)instance; + free(plugin_data->filters); free(instance); } diff --git a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c index 8589caf3a..eecd72e8e 100644 --- a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c +++ b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c @@ -137,6 +137,7 @@ static void cleanupFastLookaheadLimiter(LADSPA_Handle instance) { #line 188 "fast_lookahead_limiter_1913.xml" FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance; free(plugin_data->buffer); + free(plugin_data->chunks); free(instance); } diff --git a/plugins/LadspaEffect/swh/imp_1199.c b/plugins/LadspaEffect/swh/imp_1199.c index a5c7d3876..d172a927d 100644 --- a/plugins/LadspaEffect/swh/imp_1199.c +++ b/plugins/LadspaEffect/swh/imp_1199.c @@ -202,6 +202,11 @@ static void cleanupImp(LADSPA_Handle instance) { local_free(plugin_data->op); local_free(plugin_data->overlap); local_free(plugin_data->opc); + unsigned int i; + for (i=0; iimpulse_freq[i]); + } + local_free(plugin_data->impulse_freq); free(instance); } diff --git a/plugins/LadspaEffect/swh/vynil_1905.c b/plugins/LadspaEffect/swh/vynil_1905.c index 187aa0f8f..c6aa448b0 100644 --- a/plugins/LadspaEffect/swh/vynil_1905.c +++ b/plugins/LadspaEffect/swh/vynil_1905.c @@ -163,6 +163,7 @@ static void cleanupVynil(LADSPA_Handle instance) { free(plugin_data->buffer_m); free(plugin_data->buffer_s); free(plugin_data->click_buffer); + free(plugin_data->highp); free(plugin_data->lowp_m); free(plugin_data->lowp_s); free(plugin_data->noise_filt); diff --git a/plugins/LadspaEffect/tap/tap_eq.c b/plugins/LadspaEffect/tap/tap_eq.c index daf9463a1..4cc0eb911 100644 --- a/plugins/LadspaEffect/tap/tap_eq.c +++ b/plugins/LadspaEffect/tap/tap_eq.c @@ -145,7 +145,8 @@ activate_eq(LADSPA_Handle instance) { static void cleanup_eq(LADSPA_Handle instance) { - + eq *plugin_data = (eq *)instance; + free(plugin_data->filters); free(instance); } diff --git a/plugins/LadspaEffect/tap/tap_eqbw.c b/plugins/LadspaEffect/tap/tap_eqbw.c index fd9d15d46..3d6b39f26 100644 --- a/plugins/LadspaEffect/tap/tap_eqbw.c +++ b/plugins/LadspaEffect/tap/tap_eqbw.c @@ -167,7 +167,8 @@ activate_eq(LADSPA_Handle instance) { static void cleanup_eq(LADSPA_Handle instance) { - + eq *plugin_data = (eq *)instance; + free(plugin_data->filters); free(instance); } From b59a50133a04458d27c963c2f84c27a9fe8a1523 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Fri, 19 Dec 2014 21:35:43 +0100 Subject: [PATCH 20/81] Fix memory leaks in ZynAddSubFX --- plugins/zynaddsubfx/LocalZynAddSubFx.cpp | 10 ++++++++++ plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp | 8 ++++++++ plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h | 2 +- plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp | 2 +- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp index 7bb7e7640..93ba504de 100644 --- a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp @@ -102,6 +102,16 @@ LocalZynAddSubFx::~LocalZynAddSubFx() void LocalZynAddSubFx::initConfig() { + //Delete existing objects before recreating them in config.init(). Neccesarry, because the constructor and setLmmsWorkingDir() invoke this function. + if( config.cfg.LinuxOSSWaveOutDev != NULL ) + { + delete[] config.cfg.LinuxOSSWaveOutDev; + delete[] config.cfg.LinuxOSSSeqInDev; + + for(int i = 0; i < config.winmidimax; ++i) + delete[] config.winmididevices[i].name; + delete[] config.winmididevices; + } config.init(); config.cfg.GzipCompression = 0; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp index e03fcef71..6468f16b1 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp @@ -43,6 +43,14 @@ EQ::EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, in cleanup(); } +EQ::~EQ() +{ + for(int i = 0; i < MAX_EQ_BANDS; ++i) { + delete filter[i].l; + delete filter[i].r; + } +} + // Cleanup the effect void EQ::cleanup(void) diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h index b2e9e89a9..6192861cd 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h @@ -30,7 +30,7 @@ class EQ:public Effect { public: EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); - ~EQ() {} + ~EQ(); void out(const Stereo &smp); void setpreset(unsigned char npreset); void changepar(int npar, unsigned char value); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp index c43f1fa3f..5391b9a5f 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp @@ -694,7 +694,7 @@ void ADnote::KillNote() KillVoice(nvoice); if(NoteVoicePar[nvoice].VoiceOut) - delete NoteVoicePar[nvoice].VoiceOut; + delete[] NoteVoicePar[nvoice].VoiceOut; NoteVoicePar[nvoice].VoiceOut = NULL; } From 0a732fbc044ab67a9af0573263f0766b6f8b71e5 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Sat, 20 Dec 2014 09:07:21 +0100 Subject: [PATCH 21/81] Fix mismatched free() / delete / delete [] in RmsHelper.h --- include/RmsHelper.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/RmsHelper.h b/include/RmsHelper.h index 784a5fd3c..a65c5461b 100644 --- a/include/RmsHelper.h +++ b/include/RmsHelper.h @@ -38,7 +38,7 @@ public: } virtual ~RmsHelper() { - if( m_buffer ) delete m_buffer; + if( m_buffer ) delete[] m_buffer; } inline void setSize( int size ) From e0f7ea57ac7627420448cda60e5a40a24eb85ac7 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Sat, 20 Dec 2014 16:30:28 +0100 Subject: [PATCH 22/81] Check if object already exists instead of deleting and recreating it --- plugins/zynaddsubfx/LocalZynAddSubFx.cpp | 10 ------- .../zynaddsubfx/src/Misc/Config.cpp | 27 ++++++++++++------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp index 93ba504de..7bb7e7640 100644 --- a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp @@ -102,16 +102,6 @@ LocalZynAddSubFx::~LocalZynAddSubFx() void LocalZynAddSubFx::initConfig() { - //Delete existing objects before recreating them in config.init(). Neccesarry, because the constructor and setLmmsWorkingDir() invoke this function. - if( config.cfg.LinuxOSSWaveOutDev != NULL ) - { - delete[] config.cfg.LinuxOSSWaveOutDev; - delete[] config.cfg.LinuxOSSSeqInDev; - - for(int i = 0; i < config.winmidimax; ++i) - delete[] config.winmididevices[i].name; - delete[] config.winmididevices; - } config.init(); config.cfg.GzipCompression = 0; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp index d38c88bca..72a8046f4 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp @@ -42,10 +42,16 @@ void Config::init() cfg.OscilSize = 1024; cfg.SwapStereo = 0; - cfg.LinuxOSSWaveOutDev = new char[MAX_STRING_SIZE]; - snprintf(cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE, "/dev/dsp"); - cfg.LinuxOSSSeqInDev = new char[MAX_STRING_SIZE]; - snprintf(cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE, "/dev/sequencer"); + if( cfg.LinuxOSSWaveOutDev == NULL ) //Check, if object already exists befroe creating it. + { + cfg.LinuxOSSWaveOutDev = new char[MAX_STRING_SIZE]; + snprintf(cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE, "/dev/dsp"); + } + if( cfg.LinuxOSSSeqInDev == NULL ) //Check, if object already exists befroe creating it. + { + cfg.LinuxOSSSeqInDev = new char[MAX_STRING_SIZE]; + snprintf(cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE, "/dev/sequencer"); + } cfg.DumpFile = "zynaddsubfx_dump.txt"; @@ -67,11 +73,14 @@ void Config::init() winwavemax = 1; winmidimax = 1; //try to find out how many input midi devices are there - winmididevices = new winmidionedevice[winmidimax]; - for(int i = 0; i < winmidimax; ++i) { - winmididevices[i].name = new char[MAX_STRING_SIZE]; - for(int j = 0; j < MAX_STRING_SIZE; ++j) - winmididevices[i].name[j] = '\0'; + if( winmididevices == NULL ) //Check, if object already exists befroe creating it. + { + winmididevices = new winmidionedevice[winmidimax]; + for(int i = 0; i < winmidimax; ++i) { + winmididevices[i].name = new char[MAX_STRING_SIZE]; + for(int j = 0; j < MAX_STRING_SIZE; ++j) + winmididevices[i].name[j] = '\0'; + } } From 5f5d405552962d1af10b24f8767a0a74ec6b3f4f Mon Sep 17 00:00:00 2001 From: Dave French Date: Sat, 20 Dec 2014 22:33:29 +0000 Subject: [PATCH 23/81] Render from start of track. --- src/core/Song.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/Song.cpp b/src/core/Song.cpp index c9ac56452..2dd9c549b 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -619,6 +619,7 @@ void Song::stop() void Song::startExport() { stop(); + m_playPos[Mode_PlaySong].setTicks( 0 ); playSong(); From 0d44dc6ac59f67f5e64c62092abfb7b8fe61643f Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 21 Dec 2014 03:38:11 +0000 Subject: [PATCH 24/81] Proposed fix for 856 Recursive VST Effect Enhancement Request --- plugins/VstEffect/VstSubPluginFeatures.cpp | 33 ++++++++++++++++++---- plugins/VstEffect/VstSubPluginFeatures.h | 7 ++++- plugins/vst_base/VstPlugin.cpp | 7 ++--- src/core/RemotePlugin.cpp | 2 +- 4 files changed, 38 insertions(+), 11 deletions(-) diff --git a/plugins/VstEffect/VstSubPluginFeatures.cpp b/plugins/VstEffect/VstSubPluginFeatures.cpp index 8e0c623c3..2a0e625dc 100644 --- a/plugins/VstEffect/VstSubPluginFeatures.cpp +++ b/plugins/VstEffect/VstSubPluginFeatures.cpp @@ -31,6 +31,7 @@ #include "ConfigManager.h" + VstSubPluginFeatures::VstSubPluginFeatures( Plugin::PluginTypes _type ) : SubPluginFeatures( _type ) { @@ -52,16 +53,38 @@ void VstSubPluginFeatures::fillDescriptionWidget( QWidget * _parent, void VstSubPluginFeatures::listSubPluginKeys( const Plugin::Descriptor * _desc, KeyList & _kl ) const { - QStringList dlls = QDir( ConfigManager::inst()->vstDir() ). - entryList( QStringList() << "*.dll", - QDir::Files, QDir::Name ); + QStringList *dlls = new QStringList(); + const QString path = QString(""); + addPluginsFromDir(dlls, path ); // TODO: eval m_type - for( QStringList::ConstIterator it = dlls.begin(); - it != dlls.end(); ++it ) + for( QStringList::ConstIterator it = dlls->begin(); + it != dlls->end(); ++it ) { EffectKey::AttributeMap am; am["file"] = *it; _kl.push_back( Key( _desc, QFileInfo( *it ).baseName(), am ) ); } + delete dlls; +} + +void VstSubPluginFeatures::addPluginsFromDir(QStringList* filenames, QString path) const +{ + QStringList dirs = QDir ( ConfigManager::inst()->vstDir() + path ). + entryList( QStringList() << "*" , + QDir::Dirs, QDir::Name ); + for(int i = 0; i < dirs.size(); i++) + { + if(dirs.at( i )[0] != '.' ) + { + addPluginsFromDir( filenames, path+QDir::separator() + dirs.at( i ) ); + } + } + QStringList dlls = QDir( ConfigManager::inst()->vstDir() + path ). + entryList( QStringList() << "*.dll", + QDir::Files, QDir::Name ); + for(int i = 0; i < dlls.size(); i++) + { + filenames->append(path + QDir::separator() + dlls.at( i )); + } } diff --git a/plugins/VstEffect/VstSubPluginFeatures.h b/plugins/VstEffect/VstSubPluginFeatures.h index 51fdc05cd..db2adcfab 100644 --- a/plugins/VstEffect/VstSubPluginFeatures.h +++ b/plugins/VstEffect/VstSubPluginFeatures.h @@ -40,8 +40,13 @@ public: virtual void listSubPluginKeys( const Plugin::Descriptor * _desc, KeyList & _kl ) const; - +private: + void addPluginsFromDir(QStringList* filenames, QString path) const; } ; + + + + #endif diff --git a/plugins/vst_base/VstPlugin.cpp b/plugins/vst_base/VstPlugin.cpp index 0cc604d63..1cc745769 100644 --- a/plugins/vst_base/VstPlugin.cpp +++ b/plugins/vst_base/VstPlugin.cpp @@ -172,10 +172,9 @@ void VstPlugin::tryLoad( const QString &remoteVstPluginExecutable ) QString p = m_plugin; - if( QFileInfo( p ).dir().isRelative() ) - { - p = ConfigManager::inst()->vstDir() + QDir::separator() + p; - } + p.remove(0,1); + p = ConfigManager::inst()->vstDir() + p; + sendMessage( message( IdVstLoadPlugin ).addString( QSTR_TO_STDSTR( p ) ) ); diff --git a/src/core/RemotePlugin.cpp b/src/core/RemotePlugin.cpp index c30f0c9e3..84555fb3c 100644 --- a/src/core/RemotePlugin.cpp +++ b/src/core/RemotePlugin.cpp @@ -131,7 +131,7 @@ bool RemotePlugin::init( const QString &pluginExecutable, m_failed = false; } QString exec = ConfigManager::inst()->pluginDir() + - QDir::separator() + pluginExecutable; + pluginExecutable; QStringList args; // swap in and out for bidirectional communication From f54540dea74c5968d6cc34675136e7d5b4b75f70 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 21 Dec 2014 10:51:11 +0000 Subject: [PATCH 25/81] 856 now loads absolute and relative paths correctly --- plugins/VstEffect/VstSubPluginFeatures.cpp | 4 +++- plugins/vst_base/VstPlugin.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/VstEffect/VstSubPluginFeatures.cpp b/plugins/VstEffect/VstSubPluginFeatures.cpp index 2a0e625dc..64db352b2 100644 --- a/plugins/VstEffect/VstSubPluginFeatures.cpp +++ b/plugins/VstEffect/VstSubPluginFeatures.cpp @@ -84,7 +84,9 @@ void VstSubPluginFeatures::addPluginsFromDir(QStringList* filenames, QString pat QDir::Files, QDir::Name ); for(int i = 0; i < dlls.size(); i++) { - filenames->append(path + QDir::separator() + dlls.at( i )); + QString fName = path + QDir::separator() + dlls.at( i ); + fName.remove( 0, 1 ); + filenames->append(fName); } } diff --git a/plugins/vst_base/VstPlugin.cpp b/plugins/vst_base/VstPlugin.cpp index 1cc745769..a283bb9c7 100644 --- a/plugins/vst_base/VstPlugin.cpp +++ b/plugins/vst_base/VstPlugin.cpp @@ -172,8 +172,10 @@ void VstPlugin::tryLoad( const QString &remoteVstPluginExecutable ) QString p = m_plugin; - p.remove(0,1); - p = ConfigManager::inst()->vstDir() + p; + if( QFileInfo( p ).dir().isRelative() ) + { + p = ConfigManager::inst()->vstDir() + p; + } sendMessage( message( IdVstLoadPlugin ).addString( QSTR_TO_STDSTR( p ) ) ); From cc74273f60ddc2a2a813411ba922a96ae140fa99 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 21 Dec 2014 14:19:48 +0000 Subject: [PATCH 26/81] Proposed fix for 1049 VST knobs won't remember settings --- plugins/vst_base/VstPlugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/vst_base/VstPlugin.cpp b/plugins/vst_base/VstPlugin.cpp index 0cc604d63..4a71437f4 100644 --- a/plugins/vst_base/VstPlugin.cpp +++ b/plugins/vst_base/VstPlugin.cpp @@ -420,7 +420,7 @@ void VstPlugin::setParameterDump( const QMap & _pdump ) { ( *it ).section( ':', 0, 0 ).toInt(), "", - ( *it ).section( ':', 1, 1 ).toFloat() + ( *it ).section( ':', 2, -1 ).toFloat() } ; m.addInt( item.index ); m.addString( item.shortLabel ); From 188f3714d7176e80fd0032d213171aa42fe5d0e8 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 21 Dec 2014 16:10:43 +0000 Subject: [PATCH 27/81] Proposed fix 1080 Panning Sample tracks --- include/SampleTrack.h | 3 +++ src/tracks/SampleTrack.cpp | 14 +++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/SampleTrack.h b/include/SampleTrack.h index 440b10e7e..c8b17b148 100644 --- a/include/SampleTrack.h +++ b/include/SampleTrack.h @@ -148,9 +148,11 @@ public: private: FloatModel m_volumeModel; + FloatModel m_panningModel; AudioPort m_audioPort; + friend class SampleTrackView; } ; @@ -181,6 +183,7 @@ private: EffectRackView * m_effectRack; QWidget * m_effWindow; Knob * m_volumeKnob; + Knob * m_panningKnob; } ; diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index 49d59f66c..3333e4ae4 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -47,6 +47,7 @@ #include "EffectRackView.h" #include "TrackLabelButton.h" #include "ConfigManager.h" +#include "panning_constants.h" SampleTCO::SampleTCO( Track * _track ) : @@ -405,9 +406,12 @@ SampleTrack::SampleTrack( TrackContainer* tc ) : Track( Track::SampleTrack, tc ), m_volumeModel( DefaultVolume, MinVolume, MaxVolume, 1.0, this, tr( "Volume" ) ), - m_audioPort( tr( "Sample track" ), true, &m_volumeModel, NULL ) + m_panningModel( DefaultPanning, PanningLeft, PanningRight, 0.1f, + this, tr( "Panning" ) ), + m_audioPort( tr( "Sample track" ), true, &m_volumeModel, &m_panningModel ) { setName( tr( "Sample track" ) ); + m_panningModel.setCenterValue( DefaultPanning ); } @@ -550,6 +554,14 @@ SampleTrackView::SampleTrackView( SampleTrack * _t, TrackContainerView* tcv ) : m_volumeKnob->setLabel( tr( "VOL" ) ); m_volumeKnob->show(); + m_panningKnob = new Knob( knobSmall_17, getTrackSettingsWidget(), + tr( "Panning" ) ); + m_panningKnob->setModel( &_t->m_panningModel ); + m_panningKnob->setHintText( tr( "Panning:" ), "%" ); + m_panningKnob->move( DEFAULT_SETTINGS_WIDGET_WIDTH-24, 2 ); + m_panningKnob->setLabel( tr( "PAN" ) ); + m_panningKnob->show(); + m_effectRack = new EffectRackView( _t->audioPort()->effects() ); m_effectRack->setFixedSize( 240, 242 ); From 8f12d483a79e41212d9c134a47968a4eef594fb1 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 21 Dec 2014 19:59:29 +0000 Subject: [PATCH 28/81] Render between loop markers --- include/Song.h | 16 +++------------- src/core/Song.cpp | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/include/Song.h b/include/Song.h index 81f12303d..7873bafd6 100644 --- a/include/Song.h +++ b/include/Song.h @@ -34,6 +34,7 @@ #include "MeterModel.h" #include "VstSyncController.h" + class AutomationTrack; class Pattern; class Timeline; @@ -169,19 +170,8 @@ public: return m_recording; } - inline bool isExportDone() const - { - if ( m_exportLoop ) - { - return m_exporting == true && - m_playPos[Mode_PlaySong].getTicks() >= length() * ticksPerTact(); - } - else - { - return m_exporting == true && - m_playPos[Mode_PlaySong].getTicks() >= ( length() + 1 ) * ticksPerTact(); - } - } + bool isExportDone() const; + inline PlayModes playMode() const { diff --git a/src/core/Song.cpp b/src/core/Song.cpp index 2dd9c549b..de749065b 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -386,6 +386,21 @@ void Song::processNextBuffer() } } +bool Song::isExportDone() const +{ + if ( m_exportLoop ) + { + return m_exporting == true && + m_playPos[Mode_PlaySong].getTicks() >= m_playPos[Mode_PlaySong].m_timeLine->loopEnd().getTicks(); + + } + else + { + return m_exporting == true && + m_playPos[Mode_PlaySong].getTicks() >= ( length() + 1 ) * ticksPerTact(); + } +} + @@ -619,7 +634,14 @@ void Song::stop() void Song::startExport() { stop(); - m_playPos[Mode_PlaySong].setTicks( 0 ); + if(m_exportLoop) + { + m_playPos[Mode_PlaySong].setTicks( m_playPos[Mode_PlaySong].m_timeLine->loopBegin().getTicks() ); + } + else + { + m_playPos[Mode_PlaySong].setTicks( 0 ); + } playSong(); From a4359ec5845b37ade34914f297295989a0716eda Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 21 Dec 2014 23:36:42 +0000 Subject: [PATCH 29/81] 1080 save and load pan settings --- src/tracks/SampleTrack.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index 3333e4ae4..f55100698 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -496,6 +496,7 @@ void SampleTrack::saveTrackSpecificSettings( QDomDocument & _doc, _this.setAttribute( "icon", tlb->pixmapFile() ); #endif m_volumeModel.saveSettings( _doc, _this, "vol" ); + m_panningModel.saveSettings( _doc, _this, "pan" ); } @@ -517,6 +518,7 @@ void SampleTrack::loadTrackSpecificSettings( const QDomElement & _this ) node = node.nextSibling(); } m_volumeModel.loadSettings( _this, "vol" ); + m_panningModel.loadSettings( _this, "pan" ); } From 5fc1b36f6ffc0bfc3c4a4af209c99986d62bf365 Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 22 Dec 2014 05:17:53 +0000 Subject: [PATCH 30/81] 856 reformat --- plugins/VstEffect/VstSubPluginFeatures.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/VstEffect/VstSubPluginFeatures.cpp b/plugins/VstEffect/VstSubPluginFeatures.cpp index 64db352b2..a54e4089f 100644 --- a/plugins/VstEffect/VstSubPluginFeatures.cpp +++ b/plugins/VstEffect/VstSubPluginFeatures.cpp @@ -67,7 +67,7 @@ void VstSubPluginFeatures::listSubPluginKeys( const Plugin::Descriptor * _desc, delete dlls; } -void VstSubPluginFeatures::addPluginsFromDir(QStringList* filenames, QString path) const +void VstSubPluginFeatures::addPluginsFromDir( QStringList* filenames, QString path ) const { QStringList dirs = QDir ( ConfigManager::inst()->vstDir() + path ). entryList( QStringList() << "*" , @@ -76,17 +76,17 @@ void VstSubPluginFeatures::addPluginsFromDir(QStringList* filenames, QString pat { if(dirs.at( i )[0] != '.' ) { - addPluginsFromDir( filenames, path+QDir::separator() + dirs.at( i ) ); + addPluginsFromDir( filenames, path+QDir::separator() + dirs.at( i ) ); } } QStringList dlls = QDir( ConfigManager::inst()->vstDir() + path ). entryList( QStringList() << "*.dll", QDir::Files, QDir::Name ); - for(int i = 0; i < dlls.size(); i++) + for( int i = 0; i < dlls.size(); i++ ) { QString fName = path + QDir::separator() + dlls.at( i ); fName.remove( 0, 1 ); - filenames->append(fName); + filenames->append( fName ); } } From dd053b99d29ec734e346352991e715908699a73c Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 22 Dec 2014 00:31:50 -0500 Subject: [PATCH 31/81] Fix whitespace --- plugins/VstEffect/VstSubPluginFeatures.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/VstEffect/VstSubPluginFeatures.cpp b/plugins/VstEffect/VstSubPluginFeatures.cpp index a54e4089f..3f218c284 100644 --- a/plugins/VstEffect/VstSubPluginFeatures.cpp +++ b/plugins/VstEffect/VstSubPluginFeatures.cpp @@ -72,9 +72,9 @@ void VstSubPluginFeatures::addPluginsFromDir( QStringList* filenames, QString pa QStringList dirs = QDir ( ConfigManager::inst()->vstDir() + path ). entryList( QStringList() << "*" , QDir::Dirs, QDir::Name ); - for(int i = 0; i < dirs.size(); i++) + for( int i = 0; i < dirs.size(); i++ ) { - if(dirs.at( i )[0] != '.' ) + if( dirs.at( i )[0] != '.' ) { addPluginsFromDir( filenames, path+QDir::separator() + dirs.at( i ) ); } From 36d02b9887de5bb8eb440033ea93689808054c53 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Mon, 22 Dec 2014 11:35:25 +0100 Subject: [PATCH 32/81] Fix memory leaks in Audio setup tab in the settings dialog --- src/core/audio/AudioAlsa.cpp | 2 +- src/core/audio/AudioJack.cpp | 1 + src/core/audio/AudioOss.cpp | 2 +- src/core/audio/AudioPulseAudio.cpp | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/audio/AudioAlsa.cpp b/src/core/audio/AudioAlsa.cpp index 5421fc6b5..c39644216 100644 --- a/src/core/audio/AudioAlsa.cpp +++ b/src/core/audio/AudioAlsa.cpp @@ -523,7 +523,7 @@ AudioAlsa::setupWidget::setupWidget( QWidget * _parent ) : AudioAlsa::setupWidget::~setupWidget() { - + delete m_channels->model(); } diff --git a/src/core/audio/AudioJack.cpp b/src/core/audio/AudioJack.cpp index c2b63dccf..3dd6d3a75 100644 --- a/src/core/audio/AudioJack.cpp +++ b/src/core/audio/AudioJack.cpp @@ -464,6 +464,7 @@ AudioJack::setupWidget::setupWidget( QWidget * _parent ) : AudioJack::setupWidget::~setupWidget() { + delete m_channels->model(); } diff --git a/src/core/audio/AudioOss.cpp b/src/core/audio/AudioOss.cpp index ad951d498..3db660fe5 100644 --- a/src/core/audio/AudioOss.cpp +++ b/src/core/audio/AudioOss.cpp @@ -356,7 +356,7 @@ AudioOss::setupWidget::setupWidget( QWidget * _parent ) : AudioOss::setupWidget::~setupWidget() { - + delete m_channels->model(); } diff --git a/src/core/audio/AudioPulseAudio.cpp b/src/core/audio/AudioPulseAudio.cpp index 574577b2f..2616e785d 100644 --- a/src/core/audio/AudioPulseAudio.cpp +++ b/src/core/audio/AudioPulseAudio.cpp @@ -307,7 +307,7 @@ AudioPulseAudio::setupWidget::setupWidget( QWidget * _parent ) : AudioPulseAudio::setupWidget::~setupWidget() { - + delete m_channels->model(); } From 13b1220d1689f8d37168ee72248465308361d9a5 Mon Sep 17 00:00:00 2001 From: Vesa Date: Mon, 22 Dec 2014 14:45:17 +0200 Subject: [PATCH 33/81] Delay.h fix --- include/Delay.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/Delay.h b/include/Delay.h index 1c51f1ba8..9010232b9 100644 --- a/include/Delay.h +++ b/include/Delay.h @@ -245,7 +245,7 @@ class CombFeedbackDualtap m_fraction1 = 1.0 - ( delay1 - floor( delay1 ) ); m_delay2 = static_cast( ceil( delay2 ) ); - m_fraction2 = 2.0 - ( delay2 - floor( delay2 ) ); + m_fraction2 = 1.0 - ( delay2 - floor( delay2 ) ); } inline void setGain( double gain ) From 8529f6a0a412416e11ab99c58de8eebc46e372c6 Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 22 Dec 2014 20:55:09 +0000 Subject: [PATCH 34/81] Added Export between loop markers as a checkbox, to the Export Project dialog --- include/Song.h | 5 + src/core/Song.cpp | 11 +- src/gui/ExportProjectDialog.cpp | 1 + src/gui/dialogs/export_project.ui | 198 +++++++++++++++++------------- 4 files changed, 126 insertions(+), 89 deletions(-) diff --git a/include/Song.h b/include/Song.h index 7873bafd6..ee5f594d9 100644 --- a/include/Song.h +++ b/include/Song.h @@ -172,6 +172,10 @@ public: bool isExportDone() const; + inline void setRenderBetweenMarkers( bool renderBetweenMarkers ) + { + m_renderBetweenMarkers = renderBetweenMarkers; + } inline PlayModes playMode() const { @@ -334,6 +338,7 @@ private: volatile bool m_recording; volatile bool m_exporting; volatile bool m_exportLoop; + volatile bool m_renderBetweenMarkers; volatile bool m_playing; volatile bool m_paused; diff --git a/src/core/Song.cpp b/src/core/Song.cpp index de749065b..91eb4e645 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -84,6 +84,7 @@ Song::Song() : m_recording( false ), m_exporting( false ), m_exportLoop( false ), + m_renderBetweenMarkers( false ), m_playing( false ), m_paused( false ), m_loadingProject( false ), @@ -388,11 +389,15 @@ void Song::processNextBuffer() bool Song::isExportDone() const { - if ( m_exportLoop ) + if ( m_renderBetweenMarkers ) { return m_exporting == true && m_playPos[Mode_PlaySong].getTicks() >= m_playPos[Mode_PlaySong].m_timeLine->loopEnd().getTicks(); - + } + if( m_exportLoop) + { + return m_exporting == true && + m_playPos[Mode_PlaySong].getTicks() >= length() * ticksPerTact(); } else { @@ -634,7 +639,7 @@ void Song::stop() void Song::startExport() { stop(); - if(m_exportLoop) + if(m_renderBetweenMarkers) { m_playPos[Mode_PlaySong].setTicks( m_playPos[Mode_PlaySong].m_timeLine->loopBegin().getTicks() ); } diff --git a/src/gui/ExportProjectDialog.cpp b/src/gui/ExportProjectDialog.cpp index 7241216b6..d38efa994 100644 --- a/src/gui/ExportProjectDialog.cpp +++ b/src/gui/ExportProjectDialog.cpp @@ -260,6 +260,7 @@ ProjectRenderer* ExportProjectDialog::prepRender() static_cast( depthCB->currentIndex() ) ); Engine::getSong()->setExportLoop( exportLoopCB->isChecked() ); + Engine::getSong()->setRenderBetweenMarkers( renderMarkersCB->isChecked() ); ProjectRenderer* renderer = new ProjectRenderer( qs, os, m_ft, m_fileName ); diff --git a/src/gui/dialogs/export_project.ui b/src/gui/dialogs/export_project.ui index e9fcaeb01..6443f8c1f 100644 --- a/src/gui/dialogs/export_project.ui +++ b/src/gui/dialogs/export_project.ui @@ -1,7 +1,8 @@ - + + ExportProjectDialog - - + + 0 0 @@ -9,118 +10,127 @@ 412 - + Export project - + - + - - + + Output - - - -1 + + + 6 - + 9 - - + + File format: - + - - + + Samplerate: - + - + 44100 Hz - + 48000 Hz - + 88200 Hz - + 96000 Hz - + 192000 Hz - - - - -1 + + + + 6 - + + 0 + + + 0 + + + 0 + + 0 - - + + Bitrate: - - + + 2 - + 64 KBit/s - + 128 KBit/s - + 160 KBit/s - + 192 KBit/s - + 256 KBit/s - + 320 KBit/s @@ -130,27 +140,36 @@ - - - + + + + 0 + + + 0 + + + 0 + + 0 - - + + Depth: - + - + 16 Bit Integer - + 32 Bit Float @@ -161,13 +180,13 @@ - + Qt::Vertical - + QSizePolicy::Fixed - + 1 10 @@ -176,21 +195,21 @@ - - + + Please note that not all of the parameters above apply for all file formats. - + true - + Qt::Vertical - + 163 20 @@ -202,71 +221,71 @@ - - + + Quality settings - + - - + + Interpolation: - - + + 1 - + Zero Order Hold - + Sinc Fastest - + Sinc Medium (recommended) - + Sinc Best (very slow!) - - + + Oversampling (use with care!): - + - + 1x (None) - + 2x - + 4x - + 8x @@ -279,12 +298,19 @@ + + + + Export between loop markers + + + - + Qt::Vertical - + 20 40 @@ -298,13 +324,13 @@ - + - + Qt::Horizontal - + 40 20 @@ -313,15 +339,15 @@ - - + + Start - - + + Cancel @@ -329,11 +355,11 @@ - - + + false - + 0 @@ -348,11 +374,11 @@ ExportProjectDialog reject() - + 357 293 - + 202 175 From b982fa4b4c5df049eea4f3098824a421b456b97e Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 22 Dec 2014 22:22:51 +0000 Subject: [PATCH 35/81] Flanger correct interpolate calculation --- plugins/flanger/monodelay.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/flanger/monodelay.cpp b/plugins/flanger/monodelay.cpp index 4d1fdaa4c..74e884642 100644 --- a/plugins/flanger/monodelay.cpp +++ b/plugins/flanger/monodelay.cpp @@ -60,7 +60,7 @@ void MonoDelay::tick( sample_t* sample ) { readIndex += m_maxLength; } - float fract = fraction( m_length ); + float fract = 1.0f - fraction( m_length ); if(readIndex != m_maxLength-1 ) { *sample = linearInterpolate(m_buffer[readIndex] , From 7f47fc955d20f6f5ca6131f24182baf1eb7bdfb7 Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 22 Dec 2014 22:25:55 +0000 Subject: [PATCH 36/81] Flanger reformat, convert spaces to tabs --- plugins/flanger/flangercontrols.cpp | 44 +++---- plugins/flanger/flangercontrols.h | 58 ++++----- plugins/flanger/flangercontrolsdialog.h | 8 +- plugins/flanger/flangereffect.cpp | 152 ++++++++++++------------ plugins/flanger/flangereffect.h | 26 ++-- plugins/flanger/monodelay.cpp | 66 +++++----- plugins/flanger/monodelay.h | 42 +++---- plugins/flanger/noise.cpp | 4 +- plugins/flanger/noise.h | 6 +- plugins/flanger/quadraturelfo.cpp | 8 +- plugins/flanger/quadraturelfo.h | 58 ++++----- 11 files changed, 236 insertions(+), 236 deletions(-) diff --git a/plugins/flanger/flangercontrols.cpp b/plugins/flanger/flangercontrols.cpp index 55d7f215c..52e2d0a87 100644 --- a/plugins/flanger/flangercontrols.cpp +++ b/plugins/flanger/flangercontrols.cpp @@ -32,17 +32,17 @@ FlangerControls::FlangerControls( FlangerEffect *effect ) : - EffectControls ( effect ), - m_effect ( effect ), - m_delayTimeModel(0.001, 0.0001, 0.050, 0.0001, this, tr( "Delay Samples" ) ) , - m_lfoFrequencyModel( 0.25, 0.01, 5, 0.0001, 20000.0 ,this, tr( "Lfo Frequency" ) ), - m_lfoAmountModel( 0.0, 0.0, 0.0025 , 0.0001 , this , tr( "Seconds" ) ), - m_feedbackModel( 0.0 , 0.0 , 1.0 , 0.0001, this, tr( "Regen" ) ), - m_whiteNoiseAmountModel( 0.0 , 0.0 , 0.05 , 0.0001, this, tr( "Noise" ) ), - m_invertFeedbackModel ( false , this, tr( "Invert" ) ) + EffectControls ( effect ), + m_effect ( effect ), + m_delayTimeModel(0.001, 0.0001, 0.050, 0.0001, this, tr( "Delay Samples" ) ) , + m_lfoFrequencyModel( 0.25, 0.01, 5, 0.0001, 20000.0 ,this, tr( "Lfo Frequency" ) ), + m_lfoAmountModel( 0.0, 0.0, 0.0025 , 0.0001 , this , tr( "Seconds" ) ), + m_feedbackModel( 0.0 , 0.0 , 1.0 , 0.0001, this, tr( "Regen" ) ), + m_whiteNoiseAmountModel( 0.0 , 0.0 , 0.05 , 0.0001, this, tr( "Noise" ) ), + m_invertFeedbackModel ( false , this, tr( "Invert" ) ) { - connect( Engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( changedSampleRate() ) ); + connect( Engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( changedSampleRate() ) ); } @@ -50,12 +50,12 @@ FlangerControls::FlangerControls( FlangerEffect *effect ) : void FlangerControls::loadSettings( const QDomElement &_this ) { - m_delayTimeModel.loadSettings( _this, "DelayTimeSamples" ); - m_lfoFrequencyModel.loadSettings( _this, "LfoFrequency" ); - m_lfoAmountModel.loadSettings( _this, "LfoAmount" ); - m_feedbackModel.loadSettings( _this, "Feedback" ); - m_whiteNoiseAmountModel.loadSettings( _this, "WhiteNoise" ); - m_invertFeedbackModel.loadSettings( _this, "Invert" ); + m_delayTimeModel.loadSettings( _this, "DelayTimeSamples" ); + m_lfoFrequencyModel.loadSettings( _this, "LfoFrequency" ); + m_lfoAmountModel.loadSettings( _this, "LfoAmount" ); + m_feedbackModel.loadSettings( _this, "Feedback" ); + m_whiteNoiseAmountModel.loadSettings( _this, "WhiteNoise" ); + m_invertFeedbackModel.loadSettings( _this, "Invert" ); } @@ -64,12 +64,12 @@ void FlangerControls::loadSettings( const QDomElement &_this ) void FlangerControls::saveSettings( QDomDocument &doc, QDomElement &parent ) { - m_delayTimeModel.saveSettings( doc , parent, "DelayTimeSamples" ); - m_lfoFrequencyModel.saveSettings( doc, parent , "LfoFrequency" ); - m_lfoAmountModel.saveSettings( doc, parent , "LfoAmount" ); - m_feedbackModel.saveSettings( doc, parent, "Feedback" ) ; - m_whiteNoiseAmountModel.saveSettings( doc, parent , "WhiteNoise" ) ; - m_invertFeedbackModel.saveSettings( doc, parent, "Invert" ); + m_delayTimeModel.saveSettings( doc , parent, "DelayTimeSamples" ); + m_lfoFrequencyModel.saveSettings( doc, parent , "LfoFrequency" ); + m_lfoAmountModel.saveSettings( doc, parent , "LfoAmount" ); + m_feedbackModel.saveSettings( doc, parent, "Feedback" ) ; + m_whiteNoiseAmountModel.saveSettings( doc, parent , "WhiteNoise" ) ; + m_invertFeedbackModel.saveSettings( doc, parent, "Invert" ); } @@ -77,7 +77,7 @@ void FlangerControls::saveSettings( QDomDocument &doc, QDomElement &parent ) void FlangerControls::changedSampleRate() { - m_effect->changeSampleRate(); + m_effect->changeSampleRate(); } diff --git a/plugins/flanger/flangercontrols.h b/plugins/flanger/flangercontrols.h index bbd52dbee..bd0f43742 100644 --- a/plugins/flanger/flangercontrols.h +++ b/plugins/flanger/flangercontrols.h @@ -34,41 +34,41 @@ class FlangerEffect; class FlangerControls : public EffectControls { - Q_OBJECT + Q_OBJECT public: - FlangerControls( FlangerEffect* effect ); - virtual ~FlangerControls() - { - } - virtual void saveSettings ( QDomDocument& doc, QDomElement& parent ); - virtual void loadSettings ( const QDomElement &_this ); - inline virtual QString nodeName() const - { - return "Flanger"; - } - virtual int controlCount() - { - return 5; - } - virtual EffectControlDialog* createView() - { - return new FlangerControlsDialog( this ); - } + FlangerControls( FlangerEffect* effect ); + virtual ~FlangerControls() + { + } + virtual void saveSettings ( QDomDocument& doc, QDomElement& parent ); + virtual void loadSettings ( const QDomElement &_this ); + inline virtual QString nodeName() const + { + return "Flanger"; + } + virtual int controlCount() + { + return 5; + } + virtual EffectControlDialog* createView() + { + return new FlangerControlsDialog( this ); + } private slots: - void changedSampleRate(); + void changedSampleRate(); private: - FlangerEffect* m_effect; - FloatModel m_delayTimeModel; - TempoSyncKnobModel m_lfoFrequencyModel; - FloatModel m_lfoAmountModel; - FloatModel m_feedbackModel; - FloatModel m_whiteNoiseAmountModel; - BoolModel m_invertFeedbackModel; + FlangerEffect* m_effect; + FloatModel m_delayTimeModel; + TempoSyncKnobModel m_lfoFrequencyModel; + FloatModel m_lfoAmountModel; + FloatModel m_feedbackModel; + FloatModel m_whiteNoiseAmountModel; + BoolModel m_invertFeedbackModel; - friend class FlangerControlsDialog; - friend class FlangerEffect; + friend class FlangerControlsDialog; + friend class FlangerEffect; }; diff --git a/plugins/flanger/flangercontrolsdialog.h b/plugins/flanger/flangercontrolsdialog.h index bdfa90d45..1fef65a3e 100644 --- a/plugins/flanger/flangercontrolsdialog.h +++ b/plugins/flanger/flangercontrolsdialog.h @@ -32,10 +32,10 @@ class FlangerControls; class FlangerControlsDialog : public EffectControlDialog { public: - FlangerControlsDialog( FlangerControls* controls ); - virtual ~FlangerControlsDialog() - { - } + FlangerControlsDialog( FlangerControls* controls ); + virtual ~FlangerControlsDialog() + { + } }; #endif // FLANGERCONTROLSDIALOG_H diff --git a/plugins/flanger/flangereffect.cpp b/plugins/flanger/flangereffect.cpp index a309e38c9..fcaadfca7 100644 --- a/plugins/flanger/flangereffect.cpp +++ b/plugins/flanger/flangereffect.cpp @@ -31,28 +31,28 @@ extern "C" Plugin::Descriptor PLUGIN_EXPORT flanger_plugin_descriptor = { - STRINGIFY( PLUGIN_NAME ), - "Flanger", - QT_TRANSLATE_NOOP( "pluginBrowser", "A native flanger plugin" ), - "Dave French ", - 0x0100, - Plugin::Effect, - new PluginPixmapLoader( "logo" ), - NULL, - NULL + STRINGIFY( PLUGIN_NAME ), + "Flanger", + QT_TRANSLATE_NOOP( "pluginBrowser", "A native flanger plugin" ), + "Dave French ", + 0x0100, + Plugin::Effect, + new PluginPixmapLoader( "logo" ), + NULL, + NULL } ; FlangerEffect::FlangerEffect( Model *parent, const Plugin::Descriptor::SubPluginFeatures::Key *key ) : - Effect( &flanger_plugin_descriptor, parent, key ), - m_flangerControls( this ) + Effect( &flanger_plugin_descriptor, parent, key ), + m_flangerControls( this ) { - m_lfo = new QuadratureLfo( Engine::mixer()->processingSampleRate() ); - m_lDelay = new MonoDelay( 1, Engine::mixer()->processingSampleRate() ); - m_rDelay = new MonoDelay( 1, Engine::mixer()->processingSampleRate() ); - m_noise = new Noise; + m_lfo = new QuadratureLfo( Engine::mixer()->processingSampleRate() ); + m_lDelay = new MonoDelay( 1, Engine::mixer()->processingSampleRate() ); + m_rDelay = new MonoDelay( 1, Engine::mixer()->processingSampleRate() ); + m_noise = new Noise; } @@ -60,22 +60,22 @@ FlangerEffect::FlangerEffect( Model *parent, const Plugin::Descriptor::SubPlugin FlangerEffect::~FlangerEffect() { - if(m_lDelay ) - { - delete m_lDelay; - } - if( m_rDelay ) - { - delete m_rDelay; - } - if(m_lfo ) - { - delete m_lfo; - } - if(m_noise) - { - delete m_noise; - } + if(m_lDelay ) + { + delete m_lDelay; + } + if( m_rDelay ) + { + delete m_rDelay; + } + if(m_lfo ) + { + delete m_lfo; + } + if(m_noise) + { + delete m_noise; + } } @@ -83,48 +83,48 @@ FlangerEffect::~FlangerEffect() bool FlangerEffect::processAudioBuffer( sampleFrame *buf, const fpp_t frames ) { - if( !isEnabled() || !isRunning () ) - { - return( false ); - } - double outSum = 0.0; - const float d = dryLevel(); - const float w = wetLevel(); - const float length = m_flangerControls.m_delayTimeModel.value() * Engine::mixer()->processingSampleRate(); - const float noise = m_flangerControls.m_whiteNoiseAmountModel.value(); - float amplitude = m_flangerControls.m_lfoAmountModel.value() * Engine::mixer()->processingSampleRate(); - bool invertFeedback = m_flangerControls.m_invertFeedbackModel.value(); - m_lfo->setFrequency( m_flangerControls.m_lfoFrequencyModel.value() ); - m_lDelay->setFeedback( m_flangerControls.m_feedbackModel.value() ); - m_rDelay->setFeedback( m_flangerControls.m_feedbackModel.value() ); - sample_t dryS[2]; - float leftLfo; - float rightLfo; - for( fpp_t f = 0; f < frames; ++f ) - { - buf[f][0] += m_noise->tick() * noise; - buf[f][1] += m_noise->tick() * noise; - dryS[0] = buf[f][0]; - dryS[1] = buf[f][1]; - m_lfo->tick(&leftLfo, &rightLfo); - m_lDelay->setLength( ( float )length + ( amplitude * leftLfo ) ); - m_rDelay->setLength( ( float )length+ ( amplitude * rightLfo ) ); - if(invertFeedback) - { - m_lDelay->tick( &buf[f][1] ); - m_rDelay->tick(&buf[f][0] ); - } else - { - m_lDelay->tick( &buf[f][0] ); - m_rDelay->tick( &buf[f][1] ); - } + if( !isEnabled() || !isRunning () ) + { + return( false ); + } + double outSum = 0.0; + const float d = dryLevel(); + const float w = wetLevel(); + const float length = m_flangerControls.m_delayTimeModel.value() * Engine::mixer()->processingSampleRate(); + const float noise = m_flangerControls.m_whiteNoiseAmountModel.value(); + float amplitude = m_flangerControls.m_lfoAmountModel.value() * Engine::mixer()->processingSampleRate(); + bool invertFeedback = m_flangerControls.m_invertFeedbackModel.value(); + m_lfo->setFrequency( m_flangerControls.m_lfoFrequencyModel.value() ); + m_lDelay->setFeedback( m_flangerControls.m_feedbackModel.value() ); + m_rDelay->setFeedback( m_flangerControls.m_feedbackModel.value() ); + sample_t dryS[2]; + float leftLfo; + float rightLfo; + for( fpp_t f = 0; f < frames; ++f ) + { + buf[f][0] += m_noise->tick() * noise; + buf[f][1] += m_noise->tick() * noise; + dryS[0] = buf[f][0]; + dryS[1] = buf[f][1]; + m_lfo->tick(&leftLfo, &rightLfo); + m_lDelay->setLength( ( float )length + ( amplitude * leftLfo ) ); + m_rDelay->setLength( ( float )length+ ( amplitude * rightLfo ) ); + if(invertFeedback) + { + m_lDelay->tick( &buf[f][1] ); + m_rDelay->tick(&buf[f][0] ); + } else + { + m_lDelay->tick( &buf[f][0] ); + m_rDelay->tick( &buf[f][1] ); + } - buf[f][0] = ( d * dryS[0] ) + ( w * buf[f][0] ); - buf[f][1] = ( d * dryS[1] ) + ( w * buf[f][1] ); - outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; - } - checkGate( outSum / frames ); - return isRunning(); + buf[f][0] = ( d * dryS[0] ) + ( w * buf[f][0] ); + buf[f][1] = ( d * dryS[1] ) + ( w * buf[f][1] ); + outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; + } + checkGate( outSum / frames ); + return isRunning(); } @@ -132,9 +132,9 @@ bool FlangerEffect::processAudioBuffer( sampleFrame *buf, const fpp_t frames ) void FlangerEffect::changeSampleRate() { - m_lfo->setSampleRate( Engine::mixer()->processingSampleRate() ); - m_lDelay->setSampleRate( Engine::mixer()->processingSampleRate() ); - m_rDelay->setSampleRate( Engine::mixer()->processingSampleRate() ); + m_lfo->setSampleRate( Engine::mixer()->processingSampleRate() ); + m_lDelay->setSampleRate( Engine::mixer()->processingSampleRate() ); + m_rDelay->setSampleRate( Engine::mixer()->processingSampleRate() ); } @@ -145,7 +145,7 @@ extern "C" //needed for getting plugin out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model* parent, void* data ) { - return new FlangerEffect( parent , static_cast( data ) ); + return new FlangerEffect( parent , static_cast( data ) ); } }} diff --git a/plugins/flanger/flangereffect.h b/plugins/flanger/flangereffect.h index d476a056a..04f308249 100644 --- a/plugins/flanger/flangereffect.h +++ b/plugins/flanger/flangereffect.h @@ -36,21 +36,21 @@ class FlangerEffect : public Effect { public: - FlangerEffect( Model* parent , const Descriptor::SubPluginFeatures::Key* key ); - virtual ~FlangerEffect(); - virtual bool processAudioBuffer( sampleFrame *buf, const fpp_t frames ); - virtual EffectControls* controls() - { - return &m_flangerControls; - } - void changeSampleRate(); + FlangerEffect( Model* parent , const Descriptor::SubPluginFeatures::Key* key ); + virtual ~FlangerEffect(); + virtual bool processAudioBuffer( sampleFrame *buf, const fpp_t frames ); + virtual EffectControls* controls() + { + return &m_flangerControls; + } + void changeSampleRate(); private: - FlangerControls m_flangerControls; - MonoDelay* m_lDelay; - MonoDelay* m_rDelay; - QuadratureLfo* m_lfo; - Noise* m_noise; + FlangerControls m_flangerControls; + MonoDelay* m_lDelay; + MonoDelay* m_rDelay; + QuadratureLfo* m_lfo; + Noise* m_noise; }; diff --git a/plugins/flanger/monodelay.cpp b/plugins/flanger/monodelay.cpp index 74e884642..ebb5b322d 100644 --- a/plugins/flanger/monodelay.cpp +++ b/plugins/flanger/monodelay.cpp @@ -28,14 +28,14 @@ MonoDelay::MonoDelay( int maxTime , int sampleRate ) { - m_buffer = 0; - m_maxTime = maxTime; - m_maxLength = maxTime * sampleRate; - m_length = m_maxLength; + m_buffer = 0; + m_maxTime = maxTime; + m_maxLength = maxTime * sampleRate; + m_length = m_maxLength; - m_index = 0; - m_feedback = 0.0f; - setSampleRate( sampleRate ); + m_index = 0; + m_feedback = 0.0f; + setSampleRate( sampleRate ); } @@ -43,10 +43,10 @@ MonoDelay::MonoDelay( int maxTime , int sampleRate ) MonoDelay::~MonoDelay() { - if( m_buffer ) - { - delete m_buffer; - } + if( m_buffer ) + { + delete m_buffer; + } } @@ -54,24 +54,24 @@ MonoDelay::~MonoDelay() void MonoDelay::tick( sample_t* sample ) { - m_buffer[m_index] = *sample; - int readIndex = m_index - ( int )m_length; - if(readIndex < 0) - { - readIndex += m_maxLength; - } + m_buffer[m_index] = *sample; + int readIndex = m_index - ( int )m_length; + if(readIndex < 0) + { + readIndex += m_maxLength; + } float fract = 1.0f - fraction( m_length ); - if(readIndex != m_maxLength-1 ) - { - *sample = linearInterpolate(m_buffer[readIndex] , - m_buffer[readIndex+1], fract ); - } else - { - *sample = linearInterpolate(m_buffer[readIndex] , - m_buffer[0], fract ); - } - m_buffer[m_index] += *sample * m_feedback; - m_index = ( m_index +1 ) % m_maxLength; + if(readIndex != m_maxLength-1 ) + { + *sample = linearInterpolate(m_buffer[readIndex] , + m_buffer[readIndex+1], fract ); + } else + { + *sample = linearInterpolate(m_buffer[readIndex] , + m_buffer[0], fract ); + } + m_buffer[m_index] += *sample * m_feedback; + m_index = ( m_index +1 ) % m_maxLength; } @@ -79,11 +79,11 @@ void MonoDelay::tick( sample_t* sample ) void MonoDelay::setSampleRate( int sampleRate ) { - if( m_buffer ) - { - delete m_buffer; - } + if( m_buffer ) + { + delete m_buffer; + } - m_buffer = new sample_t[( int )( sampleRate * m_maxTime )]; + m_buffer = new sample_t[( int )( sampleRate * m_maxTime )]; } diff --git a/plugins/flanger/monodelay.h b/plugins/flanger/monodelay.h index 8c544fd6c..866c5e697 100644 --- a/plugins/flanger/monodelay.h +++ b/plugins/flanger/monodelay.h @@ -30,31 +30,31 @@ class MonoDelay { public: - MonoDelay( int maxTime , int sampleRate ); - ~MonoDelay(); - inline void setLength( float length ) - { - if( length <= m_maxLength && length >= 0 ) - { - m_length = length; - } - } + MonoDelay( int maxTime , int sampleRate ); + ~MonoDelay(); + inline void setLength( float length ) + { + if( length <= m_maxLength && length >= 0 ) + { + m_length = length; + } + } - inline void setFeedback( float feedback ) - { - m_feedback = feedback; - } + inline void setFeedback( float feedback ) + { + m_feedback = feedback; + } - void tick( sample_t* sample ); - void setSampleRate( int sampleRate ); + void tick( sample_t* sample ); + void setSampleRate( int sampleRate ); private: - sample_t* m_buffer; - int m_maxLength; - float m_length; - int m_index; - float m_feedback; - float m_maxTime; + sample_t* m_buffer; + int m_maxLength; + float m_length; + int m_index; + float m_feedback; + float m_maxTime; }; #endif // MONODELAY_H diff --git a/plugins/flanger/noise.cpp b/plugins/flanger/noise.cpp index bd0d84b98..2c4606381 100644 --- a/plugins/flanger/noise.cpp +++ b/plugins/flanger/noise.cpp @@ -27,7 +27,7 @@ Noise::Noise() { - inv_randmax = 1.0/FAST_RAND_MAX; /* for range of 0 - 1.0 */ + inv_randmax = 1.0/FAST_RAND_MAX; /* for range of 0 - 1.0 */ } @@ -35,5 +35,5 @@ Noise::Noise() float Noise::tick() { - return (float) ((2.0 * fast_rand() * inv_randmax) - 1.0); + return (float) ((2.0 * fast_rand() * inv_randmax) - 1.0); } diff --git a/plugins/flanger/noise.h b/plugins/flanger/noise.h index 008700ed7..ea0a854bd 100644 --- a/plugins/flanger/noise.h +++ b/plugins/flanger/noise.h @@ -28,10 +28,10 @@ class Noise { public: - Noise(); - float tick(); + Noise(); + float tick(); private: - double inv_randmax; + double inv_randmax; }; #endif // NOISE_H diff --git a/plugins/flanger/quadraturelfo.cpp b/plugins/flanger/quadraturelfo.cpp index 1e4d7d0f1..49e8299ad 100644 --- a/plugins/flanger/quadraturelfo.cpp +++ b/plugins/flanger/quadraturelfo.cpp @@ -26,13 +26,13 @@ QuadratureLfo::QuadratureLfo( int sampleRate ) { - setSampleRate(sampleRate); + setSampleRate(sampleRate); } void QuadratureLfo::tick( float *s, float *c ) { - *s = sinf( m_phase ); - *c = cosf( m_phase ); - m_phase += m_increment; + *s = sinf( m_phase ); + *c = cosf( m_phase ); + m_phase += m_increment; } diff --git a/plugins/flanger/quadraturelfo.h b/plugins/flanger/quadraturelfo.h index f884f691c..04f2e62df 100644 --- a/plugins/flanger/quadraturelfo.h +++ b/plugins/flanger/quadraturelfo.h @@ -30,44 +30,44 @@ class QuadratureLfo { public: - QuadratureLfo( int sampleRate ); - ~QuadratureLfo() - { - } + QuadratureLfo( int sampleRate ); + ~QuadratureLfo() + { + } - inline void setFrequency( double frequency ) - { - if( frequency < 0 || frequency > ( m_samplerate / 2.0 ) || frequency == m_frequency ) - { - return; - } - m_frequency = frequency; - m_increment = m_frequency * m_twoPiOverSr; + inline void setFrequency( double frequency ) + { + if( frequency < 0 || frequency > ( m_samplerate / 2.0 ) || frequency == m_frequency ) + { + return; + } + m_frequency = frequency; + m_increment = m_frequency * m_twoPiOverSr; - if( m_phase >= F_2PI ) - { - m_phase -= F_2PI; - } - } + if( m_phase >= F_2PI ) + { + m_phase -= F_2PI; + } + } - inline void setSampleRate ( int samplerate ) - { - m_samplerate = samplerate; - m_twoPiOverSr = F_2PI / samplerate; - m_increment = m_frequency * m_twoPiOverSr; - } + inline void setSampleRate ( int samplerate ) + { + m_samplerate = samplerate; + m_twoPiOverSr = F_2PI / samplerate; + m_increment = m_frequency * m_twoPiOverSr; + } - void tick( float *s, float *c ); + void tick( float *s, float *c ); private: - double m_frequency; - double m_phase; - double m_increment; - double m_twoPiOverSr; - int m_samplerate; + double m_frequency; + double m_phase; + double m_increment; + double m_twoPiOverSr; + int m_samplerate; }; From eca59c30eb9df6a000f3297ba29d66926cf16c7c Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 22 Dec 2014 22:52:47 +0000 Subject: [PATCH 37/81] Flanger change Filenames to CamelCase --- plugins/CMakeLists.txt | 2 +- plugins/Flanger/CMakeLists.txt | 3 +++ .../FlangerControls.cpp} | 4 ++-- .../flangercontrols.h => Flanger/FlangerControls.h} | 2 +- .../FlangerControlsDialog.cpp} | 4 ++-- .../FlangerControlsDialog.h} | 0 .../flangereffect.cpp => Flanger/FlangerEffect.cpp} | 2 +- .../flangereffect.h => Flanger/FlangerEffect.h} | 8 ++++---- .../monodelay.cpp => Flanger/MonoDelay.cpp} | 2 +- .../{flanger/monodelay.h => Flanger/MonoDelay.h} | 0 plugins/{flanger/noise.cpp => Flanger/Noise.cpp} | 2 +- plugins/{flanger/noise.h => Flanger/Noise.h} | 0 .../quadraturelfo.cpp => Flanger/QuadratureLfo.cpp} | 2 +- .../quadraturelfo.h => Flanger/QuadratureLfo.h} | 0 plugins/{flanger => Flanger}/artwork.png | Bin plugins/{flanger => Flanger}/logo.png | Bin plugins/flanger/CMakeLists.txt | 3 --- 17 files changed, 17 insertions(+), 17 deletions(-) create mode 100644 plugins/Flanger/CMakeLists.txt rename plugins/{flanger/flangercontrols.cpp => Flanger/FlangerControls.cpp} (97%) rename plugins/{flanger/flangercontrols.h => Flanger/FlangerControls.h} (98%) rename plugins/{flanger/flangercontrolsdialog.cpp => Flanger/FlangerControlsDialog.cpp} (97%) rename plugins/{flanger/flangercontrolsdialog.h => Flanger/FlangerControlsDialog.h} (100%) rename plugins/{flanger/flangereffect.cpp => Flanger/FlangerEffect.cpp} (99%) rename plugins/{flanger/flangereffect.h => Flanger/FlangerEffect.h} (93%) rename plugins/{flanger/monodelay.cpp => Flanger/MonoDelay.cpp} (98%) rename plugins/{flanger/monodelay.h => Flanger/MonoDelay.h} (100%) rename plugins/{flanger/noise.cpp => Flanger/Noise.cpp} (98%) rename plugins/{flanger/noise.h => Flanger/Noise.h} (100%) rename plugins/{flanger/quadraturelfo.cpp => Flanger/QuadratureLfo.cpp} (97%) rename plugins/{flanger/quadraturelfo.h => Flanger/QuadratureLfo.h} (100%) rename plugins/{flanger => Flanger}/artwork.png (100%) rename plugins/{flanger => Flanger}/logo.png (100%) delete mode 100644 plugins/flanger/CMakeLists.txt diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 63c80538e..d7b4cf11e 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -11,7 +11,7 @@ ADD_SUBDIRECTORY(delay) ADD_SUBDIRECTORY(DualFilter) ADD_SUBDIRECTORY(dynamics_processor) ADD_SUBDIRECTORY(Eq) -ADD_SUBDIRECTORY(flanger) +ADD_SUBDIRECTORY(Flanger) ADD_SUBDIRECTORY(flp_import) ADD_SUBDIRECTORY(HydrogenImport) ADD_SUBDIRECTORY(kicker) diff --git a/plugins/Flanger/CMakeLists.txt b/plugins/Flanger/CMakeLists.txt new file mode 100644 index 000000000..c3febd094 --- /dev/null +++ b/plugins/Flanger/CMakeLists.txt @@ -0,0 +1,3 @@ +INCLUDE(BuildPlugin) + +BUILD_PLUGIN(flanger FlangerEffect.cpp FlangerControls.cpp FlangerControlsDialog.cpp Noise.cpp QuadratureLfo.cpp MonoDelay.cpp MOCFILES FlangerControls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/flanger/flangercontrols.cpp b/plugins/Flanger/FlangerControls.cpp similarity index 97% rename from plugins/flanger/flangercontrols.cpp rename to plugins/Flanger/FlangerControls.cpp index 52e2d0a87..34d2b8f52 100644 --- a/plugins/flanger/flangercontrols.cpp +++ b/plugins/Flanger/FlangerControls.cpp @@ -24,8 +24,8 @@ #include -#include "flangercontrols.h" -#include "flangereffect.h" +#include "FlangerControls.h" +#include "FlangerEffect.h" #include "Engine.h" #include "Song.h" diff --git a/plugins/flanger/flangercontrols.h b/plugins/Flanger/FlangerControls.h similarity index 98% rename from plugins/flanger/flangercontrols.h rename to plugins/Flanger/FlangerControls.h index bd0f43742..29f5a5aaf 100644 --- a/plugins/flanger/flangercontrols.h +++ b/plugins/Flanger/FlangerControls.h @@ -27,7 +27,7 @@ #include "EffectControls.h" #include "Knob.h" -#include "flangercontrolsdialog.h" +#include "FlangerControlsDialog.h" class FlangerEffect; diff --git a/plugins/flanger/flangercontrolsdialog.cpp b/plugins/Flanger/FlangerControlsDialog.cpp similarity index 97% rename from plugins/flanger/flangercontrolsdialog.cpp rename to plugins/Flanger/FlangerControlsDialog.cpp index 8b3c61df4..26b223b29 100644 --- a/plugins/flanger/flangercontrolsdialog.cpp +++ b/plugins/Flanger/FlangerControlsDialog.cpp @@ -22,8 +22,8 @@ * */ -#include "flangercontrolsdialog.h" -#include "flangercontrols.h" +#include "FlangerControlsDialog.h" +#include "FlangerControls.h" #include "embed.h" #include "LedCheckbox.h" #include "TempoSyncKnob.h" diff --git a/plugins/flanger/flangercontrolsdialog.h b/plugins/Flanger/FlangerControlsDialog.h similarity index 100% rename from plugins/flanger/flangercontrolsdialog.h rename to plugins/Flanger/FlangerControlsDialog.h diff --git a/plugins/flanger/flangereffect.cpp b/plugins/Flanger/FlangerEffect.cpp similarity index 99% rename from plugins/flanger/flangereffect.cpp rename to plugins/Flanger/FlangerEffect.cpp index fcaadfca7..4a029dad8 100644 --- a/plugins/flanger/flangereffect.cpp +++ b/plugins/Flanger/FlangerEffect.cpp @@ -22,7 +22,7 @@ * */ -#include "flangereffect.h" +#include "FlangerEffect.h" #include "Engine.h" #include "embed.cpp" diff --git a/plugins/flanger/flangereffect.h b/plugins/Flanger/FlangerEffect.h similarity index 93% rename from plugins/flanger/flangereffect.h rename to plugins/Flanger/FlangerEffect.h index 04f308249..ac6125623 100644 --- a/plugins/flanger/flangereffect.h +++ b/plugins/Flanger/FlangerEffect.h @@ -27,10 +27,10 @@ #define FLANGEREFFECT_H #include "Effect.h" -#include "flangercontrols.h" -#include "quadraturelfo.h" -#include "monodelay.h" -#include "noise.h" +#include "FlangerControls.h" +#include "QuadratureLfo.h" +#include "MonoDelay.h" +#include "Noise.h" class FlangerEffect : public Effect diff --git a/plugins/flanger/monodelay.cpp b/plugins/Flanger/MonoDelay.cpp similarity index 98% rename from plugins/flanger/monodelay.cpp rename to plugins/Flanger/MonoDelay.cpp index ebb5b322d..9cb473721 100644 --- a/plugins/flanger/monodelay.cpp +++ b/plugins/Flanger/MonoDelay.cpp @@ -22,7 +22,7 @@ * */ -#include "monodelay.h" +#include "MonoDelay.h" #include "interpolation.h" #include "lmms_math.h" diff --git a/plugins/flanger/monodelay.h b/plugins/Flanger/MonoDelay.h similarity index 100% rename from plugins/flanger/monodelay.h rename to plugins/Flanger/MonoDelay.h diff --git a/plugins/flanger/noise.cpp b/plugins/Flanger/Noise.cpp similarity index 98% rename from plugins/flanger/noise.cpp rename to plugins/Flanger/Noise.cpp index 2c4606381..4d4c06e0a 100644 --- a/plugins/flanger/noise.cpp +++ b/plugins/Flanger/Noise.cpp @@ -22,7 +22,7 @@ * */ -#include "noise.h" +#include "Noise.h" #include "lmms_math.h" Noise::Noise() diff --git a/plugins/flanger/noise.h b/plugins/Flanger/Noise.h similarity index 100% rename from plugins/flanger/noise.h rename to plugins/Flanger/Noise.h diff --git a/plugins/flanger/quadraturelfo.cpp b/plugins/Flanger/QuadratureLfo.cpp similarity index 97% rename from plugins/flanger/quadraturelfo.cpp rename to plugins/Flanger/QuadratureLfo.cpp index 49e8299ad..bc31dc326 100644 --- a/plugins/flanger/quadraturelfo.cpp +++ b/plugins/Flanger/QuadratureLfo.cpp @@ -22,7 +22,7 @@ * */ -#include "quadraturelfo.h" +#include "QuadratureLfo.h" QuadratureLfo::QuadratureLfo( int sampleRate ) { diff --git a/plugins/flanger/quadraturelfo.h b/plugins/Flanger/QuadratureLfo.h similarity index 100% rename from plugins/flanger/quadraturelfo.h rename to plugins/Flanger/QuadratureLfo.h diff --git a/plugins/flanger/artwork.png b/plugins/Flanger/artwork.png similarity index 100% rename from plugins/flanger/artwork.png rename to plugins/Flanger/artwork.png diff --git a/plugins/flanger/logo.png b/plugins/Flanger/logo.png similarity index 100% rename from plugins/flanger/logo.png rename to plugins/Flanger/logo.png diff --git a/plugins/flanger/CMakeLists.txt b/plugins/flanger/CMakeLists.txt deleted file mode 100644 index bb3579e73..000000000 --- a/plugins/flanger/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE(BuildPlugin) - -BUILD_PLUGIN(flanger flangereffect.cpp flangercontrols.cpp flangercontrolsdialog.cpp noise.cpp quadraturelfo.cpp monodelay.cpp MOCFILES flangercontrols.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") From dd27dc688a5c4c9b19a924a04b5307cf6358526e Mon Sep 17 00:00:00 2001 From: Dave French Date: Tue, 23 Dec 2014 09:33:13 +0000 Subject: [PATCH 38/81] updated as per 1474 --- plugins/Flanger/MonoDelay.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Flanger/MonoDelay.cpp b/plugins/Flanger/MonoDelay.cpp index 9cb473721..9afc3ee17 100644 --- a/plugins/Flanger/MonoDelay.cpp +++ b/plugins/Flanger/MonoDelay.cpp @@ -55,7 +55,7 @@ MonoDelay::~MonoDelay() void MonoDelay::tick( sample_t* sample ) { m_buffer[m_index] = *sample; - int readIndex = m_index - ( int )m_length; + int readIndex = m_index - ( int )m_length - 1; if(readIndex < 0) { readIndex += m_maxLength; From a3ec5b760089fdf531d4d253e7c10c807aba67ac Mon Sep 17 00:00:00 2001 From: Vesa Date: Tue, 23 Dec 2014 13:23:58 +0200 Subject: [PATCH 39/81] Remove moc --- plugins/delay/delaycontrolsdialog.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/delay/delaycontrolsdialog.cpp b/plugins/delay/delaycontrolsdialog.cpp index 4478f82a4..555b6c852 100644 --- a/plugins/delay/delaycontrolsdialog.cpp +++ b/plugins/delay/delaycontrolsdialog.cpp @@ -71,4 +71,3 @@ DelayControlsDialog::DelayControlsDialog( DelayControls *controls ) : } -#include "moc_delaycontrols.cxx" From 1945ed43be64af9abb6ccee659cc1447594bec14 Mon Sep 17 00:00:00 2001 From: Dave French Date: Tue, 23 Dec 2014 12:57:19 +0000 Subject: [PATCH 40/81] Proposed fox for 1408 Window size in window and full-screen modes --- src/gui/MainWindow.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index fa051e69f..8e9743adc 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -636,14 +636,20 @@ void MainWindow::saveWidgetState( QWidget * _w, QDomElement & _de ) _w = _w->parentWidget(); } - _de.setAttribute( "x", _w->x() ); - _de.setAttribute( "y", _w->y() ); _de.setAttribute( "visible", _w->isVisible() ); _de.setAttribute( "minimized", _w->isMinimized() ); _de.setAttribute( "maximized", _w->isMaximized() ); + bool maxed = _w->isMaximized(); + bool mined = _w->isMinimized(); + if( mined || maxed ) { _w->showNormal(); } + + _de.setAttribute( "x", _w->x() ); + _de.setAttribute( "y", _w->y() ); _de.setAttribute( "width", _w->width() ); _de.setAttribute( "height", _w->height() ); + if( maxed ) { _w->showMaximized(); } + if( mined ) { _w->showMinimized(); } } From 122b8451057c8cd629d9f5d5750ca781821df6bd Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Tue, 23 Dec 2014 12:48:41 -0500 Subject: [PATCH 41/81] Bump version for stable-1.1 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e30f417b8..1933f6a1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,8 +14,8 @@ INCLUDE(CheckIncludeFiles) INCLUDE(FindPkgConfig) SET(VERSION_MAJOR "1") -SET(VERSION_MINOR "0") -SET(VERSION_PATCH "100") +SET(VERSION_MINOR "1") +SET(VERSION_PATCH "0") #SET(VERSION_SUFFIX "") SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") IF(VERSION_SUFFIX) From eb0b0f527789b28b9d76ba2b187f905926a9524f Mon Sep 17 00:00:00 2001 From: Spekular Date: Mon, 22 Dec 2014 20:00:47 +0100 Subject: [PATCH 42/81] Adds automation flipping. --- include/AutomationEditor.h | 6 +++ include/AutomationPattern.h | 2 + include/AutomationPatternView.h | 2 + src/core/AutomationPattern.cpp | 81 +++++++++++++++++++++++++++++++ src/gui/AutomationEditor.cpp | 53 +++++++++++++++++++- src/gui/AutomationPatternView.cpp | 26 ++++++++++ 6 files changed, 168 insertions(+), 2 deletions(-) diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index 83b0a022b..fe46c9af0 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -130,6 +130,8 @@ protected slots: void eraseButtonToggled(); void selectButtonToggled(); void moveButtonToggled(); + void flipYButtonPressed(); + void flipXButtonPressed(); void discreteButtonToggled(); void linearButtonToggled(); @@ -187,6 +189,8 @@ private: static QPixmap * s_toolErase; static QPixmap * s_toolSelect; static QPixmap * s_toolMove; + static QPixmap * s_toolYFlip; + static QPixmap * s_toolXFlip; QWidget * m_toolBar; @@ -198,6 +202,8 @@ private: ToolButton * m_eraseButton; ToolButton * m_selectButton; ToolButton * m_moveButton; + ToolButton * m_flipYButton; + ToolButton * m_flipXButton; ToolButton * m_discreteButton; ToolButton * m_linearButton; diff --git a/include/AutomationPattern.h b/include/AutomationPattern.h index b6259b3c5..9035491b3 100644 --- a/include/AutomationPattern.h +++ b/include/AutomationPattern.h @@ -170,6 +170,8 @@ public slots: void clear(); void openInAutomationEditor(); void objectDestroyed( jo_id_t ); + void flipY( int min, int max ); + void flipX( bool visible ); private: void cleanObjects(); diff --git a/include/AutomationPatternView.h b/include/AutomationPatternView.h index 2c2a6c96b..76b2e1a47 100644 --- a/include/AutomationPatternView.h +++ b/include/AutomationPatternView.h @@ -51,6 +51,8 @@ protected slots: void changeName(); void disconnectObject( QAction * _a ); void toggleRecording(); + void flipY(); + void flipX(); protected: virtual void constructContextMenu( QMenu * ); diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 9164e733d..a71030dff 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -384,6 +384,87 @@ float *AutomationPattern::valuesAfter( const MidiTime & _time ) const +void AutomationPattern::flipY( int min, int max ) +{ + timeMap tempMap = m_timeMap; + timeMap::ConstIterator iterate = m_timeMap.lowerBound(0); + float tempValue = 0; + + int numPoints = 0; + + //(iterate+1).key() - iterate.key(); gets the number of values until the next point + + for( int i = 0; (iterate + i + 1) != m_timeMap.end() && (iterate + i ) != m_timeMap.end() ; i++) + { + numPoints++; + } + + for( int i = 0; i <= numPoints; i++ ) + { + + if (min < 0) + { + tempValue = valueAt((iterate + i).key()) * -1; + //removeValue((iterate + i).key(), false); + putValue( MidiTime((iterate + i).key()) , tempValue, false); + } + else + { + tempValue = max - valueAt((iterate + i).key()); + //removeValue((iterate).key(), false); + putValue( MidiTime((iterate + i).key()) , tempValue, false); + } + } + + generateTangents(); + Engine::automationEditor()->update(); + emit dataChanged(); + +} + + + + +void AutomationPattern::flipX(bool visible) +{ + timeMap tempMap; + + timeMap::ConstIterator iterate = m_timeMap.lowerBound(0); + float tempValue = 0; + int numPoints = 0; + + //(iterate+1).key() - iterate.key(); gets the number of values until the next point + + for( int i = 0; (iterate + i + 1) != m_timeMap.end() && (iterate + i ) != m_timeMap.end() ; i++) + { + numPoints++; + } + + float realLength = (iterate + numPoints).key(); + + for( int i = 0; i <= numPoints; i++ ) + { + tempValue = valueAt((iterate + i).key()); + + cleanObjects(); + + MidiTime newTime = MidiTime( realLength - (iterate + i).key() ); + + tempMap[newTime] = tempValue; + } + + m_timeMap.clear(); + + m_timeMap = tempMap; + + generateTangents(); + Engine::automationEditor()->update(); + emit dataChanged(); +} + + + + void AutomationPattern::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "pos", startPosition() ); diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index cb90253b4..a05d378b3 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -69,6 +69,8 @@ QPixmap * AutomationEditor::s_toolDraw = NULL; QPixmap * AutomationEditor::s_toolErase = NULL; QPixmap * AutomationEditor::s_toolSelect = NULL; QPixmap * AutomationEditor::s_toolMove = NULL; +QPixmap * AutomationEditor::s_toolYFlip = NULL; +QPixmap * AutomationEditor::s_toolXFlip = NULL; @@ -128,6 +130,16 @@ AutomationEditor::AutomationEditor() : s_toolMove = new QPixmap( embed::getIconPixmap( "edit_move" ) ); } + if( s_toolYFlip == NULL ) + { + s_toolYFlip = new QPixmap( embed::getIconPixmap( + "flip_y" ) ); + } + if( s_toolXFlip == NULL ) + { + s_toolXFlip = new QPixmap( embed::getIconPixmap( + "flip_x" ) ); + } setAttribute( Qt::WA_OpaquePaintEvent, true ); @@ -206,15 +218,25 @@ AutomationEditor::AutomationEditor() : m_toolBar ); m_eraseButton->setCheckable( true ); + m_flipYButton = new ToolButton( embed::getIconPixmap( "flip_y" ), + tr( "Flip Vertically" ), + this, SLOT( flipYButtonPressed() ), + m_toolBar ); + + m_flipXButton = new ToolButton( embed::getIconPixmap( "flip_x" ), + tr( "Flip Horizontally" ), + this, SLOT( flipXButtonPressed() ), + m_toolBar ); + //TODO: m_selectButton and m_moveButton are broken. - /*m_selectButton = new toolButton( embed::getIconPixmap( + /*m_selectButton = new ToolButton( embed::getIconPixmap( "edit_select" ), tr( "Select mode (Shift+S)" ), this, SLOT( selectButtonToggled() ), m_toolBar ); m_selectButton->setCheckable( true ); - m_moveButton = new toolButton( embed::getIconPixmap( "edit_move" ), + m_moveButton = new ToolButton( embed::getIconPixmap( "edit_move" ), tr( "Move selection mode (Shift+M)" ), this, SLOT( moveButtonToggled() ), m_toolBar ); @@ -223,6 +245,8 @@ AutomationEditor::AutomationEditor() : QButtonGroup * tool_button_group = new QButtonGroup( this ); tool_button_group->addButton( m_drawButton ); tool_button_group->addButton( m_eraseButton ); + tool_button_group->addButton( m_flipYButton ); + tool_button_group->addButton( m_flipXButton ); //tool_button_group->addButton( m_selectButton ); //tool_button_group->addButton( m_moveButton ); tool_button_group->setExclusive( true ); @@ -237,6 +261,12 @@ AutomationEditor::AutomationEditor() : tr( "Click here and erase-mode will be activated. In this " "mode you can erase single values. You can also press " "'Shift+E' on your keyboard to activate this mode." ) ); + m_flipYButton->setWhatsThis( + tr( "Click here and the pattern will be inverted." + "The points are flipped in the y direction. " ) ); + m_flipXButton->setWhatsThis( + tr( "Click here and the pattern will be reversed. " + "The points are flipped in the x direction." ) ); /*m_selectButton->setWhatsThis( tr( "Click here and select-mode will be activated. In this " "mode you can select values. This is necessary " @@ -394,6 +424,9 @@ AutomationEditor::AutomationEditor() : tb_layout->addSpacing( 10 ); tb_layout->addWidget( m_drawButton ); tb_layout->addWidget( m_eraseButton ); + tb_layout->addSpacing( 10 ); + tb_layout->addWidget( m_flipYButton ); + tb_layout->addWidget( m_flipXButton ); //tb_layout->addWidget( m_selectButton ); //tb_layout->addWidget( m_moveButton ); tb_layout->addSpacing( 10 ); @@ -2029,6 +2062,22 @@ void AutomationEditor::eraseButtonToggled() +void AutomationEditor::flipYButtonPressed() +{ + m_pattern->flipY(m_minLevel, m_maxLevel); +} + + + + +void AutomationEditor::flipXButtonPressed() +{ + m_pattern->flipX( false ); +} + + + + void AutomationEditor::selectButtonToggled() { m_editMode = SELECT; diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index 17fbb559f..a65fd1a08 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -145,6 +145,26 @@ void AutomationPatternView::toggleRecording() } + + +void AutomationPatternView::flipY() +{ + m_pat->flipY(m_pat->getMin(), m_pat->getMax()); + update(); +} + + + + +void AutomationPatternView::flipX() +{ + m_pat->flipX( true ); + update(); +} + + + + void AutomationPatternView::constructContextMenu( QMenu * _cm ) { QAction * a = new QAction( embed::getIconPixmap( "automation" ), @@ -168,6 +188,12 @@ void AutomationPatternView::constructContextMenu( QMenu * _cm ) _cm->addAction( embed::getIconPixmap( "record" ), tr( "Set/clear record" ), this, SLOT( toggleRecording() ) ); + _cm->addAction( embed::getIconPixmap( "flip_y" ), + tr( "Flip Y" ), + this, SLOT( flipY() ) ); + _cm->addAction( embed::getIconPixmap( "flip_x" ), + tr( "Flip X" ), + this, SLOT( flipX() ) ); if( !m_pat->m_objects.isEmpty() ) { _cm->addSeparator(); From bfeced71409f52e10e0689d5b58774a20e934148 Mon Sep 17 00:00:00 2001 From: Spekular Date: Tue, 23 Dec 2014 10:26:54 +0100 Subject: [PATCH 43/81] Code Cleanup --- src/core/AutomationPattern.cpp | 28 ++++++++++++---------------- src/gui/AutomationEditor.cpp | 2 +- src/gui/AutomationPatternView.cpp | 2 +- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index a71030dff..7571ddfbe 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -392,9 +392,7 @@ void AutomationPattern::flipY( int min, int max ) int numPoints = 0; - //(iterate+1).key() - iterate.key(); gets the number of values until the next point - - for( int i = 0; (iterate + i + 1) != m_timeMap.end() && (iterate + i ) != m_timeMap.end() ; i++) + for( int i = 0; ( iterate + i + 1 ) != m_timeMap.end() && ( iterate + i ) != m_timeMap.end() ; i++) { numPoints++; } @@ -402,17 +400,15 @@ void AutomationPattern::flipY( int min, int max ) for( int i = 0; i <= numPoints; i++ ) { - if (min < 0) + if ( min < 0 ) { - tempValue = valueAt((iterate + i).key()) * -1; - //removeValue((iterate + i).key(), false); - putValue( MidiTime((iterate + i).key()) , tempValue, false); + tempValue = valueAt( ( iterate + i ).key() ) * -1; + putValue( MidiTime( (iterate + i).key() ) , tempValue, false); } else { - tempValue = max - valueAt((iterate + i).key()); - //removeValue((iterate).key(), false); - putValue( MidiTime((iterate + i).key()) , tempValue, false); + tempValue = max - valueAt( ( iterate + i ).key() ); + putValue( MidiTime( (iterate + i).key() ) , tempValue, false); } } @@ -425,7 +421,7 @@ void AutomationPattern::flipY( int min, int max ) -void AutomationPattern::flipX(bool visible) +void AutomationPattern::flipX( bool visible ) { timeMap tempMap; @@ -433,22 +429,22 @@ void AutomationPattern::flipX(bool visible) float tempValue = 0; int numPoints = 0; - //(iterate+1).key() - iterate.key(); gets the number of values until the next point + //(iterate+1).key() - iterate.key(); gets the "distance" to the next point - for( int i = 0; (iterate + i + 1) != m_timeMap.end() && (iterate + i ) != m_timeMap.end() ; i++) + for( int i = 0; ( iterate + i + 1 ) != m_timeMap.end() && ( iterate + i ) != m_timeMap.end() ; i++) { numPoints++; } - float realLength = (iterate + numPoints).key(); + float realLength = ( iterate + numPoints ).key(); for( int i = 0; i <= numPoints; i++ ) { - tempValue = valueAt((iterate + i).key()); + tempValue = valueAt( ( iterate + i ).key() ); cleanObjects(); - MidiTime newTime = MidiTime( realLength - (iterate + i).key() ); + MidiTime newTime = MidiTime( realLength - ( iterate + i ).key() ); tempMap[newTime] = tempValue; } diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index a05d378b3..3468299b8 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -2064,7 +2064,7 @@ void AutomationEditor::eraseButtonToggled() void AutomationEditor::flipYButtonPressed() { - m_pattern->flipY(m_minLevel, m_maxLevel); + m_pattern->flipY( m_minLevel, m_maxLevel ); } diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index a65fd1a08..869c1ef82 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -149,7 +149,7 @@ void AutomationPatternView::toggleRecording() void AutomationPatternView::flipY() { - m_pat->flipY(m_pat->getMin(), m_pat->getMax()); + m_pat->flipY( m_pat->getMin(), m_pat->getMax() ); update(); } From ddbf9cd26448ac4b779cf39aaeaf6c9ac650a52b Mon Sep 17 00:00:00 2001 From: Spekular Date: Tue, 23 Dec 2014 19:23:35 +0100 Subject: [PATCH 44/81] Fixes flipping visiblesegment horizontally --- include/AutomationPattern.h | 2 +- src/core/AutomationPattern.cpp | 63 +++++++++++++++++++++++++------ src/gui/AutomationEditor.cpp | 2 +- src/gui/AutomationPatternView.cpp | 7 ++-- 4 files changed, 57 insertions(+), 17 deletions(-) diff --git a/include/AutomationPattern.h b/include/AutomationPattern.h index 9035491b3..d95b6f3d2 100644 --- a/include/AutomationPattern.h +++ b/include/AutomationPattern.h @@ -171,7 +171,7 @@ public slots: void openInAutomationEditor(); void objectDestroyed( jo_id_t ); void flipY( int min, int max ); - void flipX( bool visible ); + void flipX( int length = -1 ); private: void cleanObjects(); diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 7571ddfbe..7ab4b5977 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -421,7 +421,7 @@ void AutomationPattern::flipY( int min, int max ) -void AutomationPattern::flipX( bool visible ) +void AutomationPattern::flipX( int length ) { timeMap tempMap; @@ -429,26 +429,65 @@ void AutomationPattern::flipX( bool visible ) float tempValue = 0; int numPoints = 0; - //(iterate+1).key() - iterate.key(); gets the "distance" to the next point - for( int i = 0; ( iterate + i + 1 ) != m_timeMap.end() && ( iterate + i ) != m_timeMap.end() ; i++) { numPoints++; } float realLength = ( iterate + numPoints ).key(); - - for( int i = 0; i <= numPoints; i++ ) + + if ( length != -1 && length != realLength) { - tempValue = valueAt( ( iterate + i ).key() ); + if ( realLength < length ) + { + tempValue = valueAt( ( iterate + numPoints ).key() ); + putValue( MidiTime( length ) , tempValue, false); + numPoints++; + for( int i = 0; i <= numPoints; i++ ) + { + tempValue = valueAt( ( iterate + i ).key() ); + cleanObjects(); + MidiTime newTime = MidiTime( length - ( iterate + i ).key() ); + tempMap[newTime] = tempValue; + } + } + else + { + //for ( int i = 0; ( iterate + i ).key() < length ; i++ ) + //{ + // tempValue = valueAt( ( iterate + i ).key() ); + //} + //putValue( MidiTime( length ) , tempValue, false); + //numPoints++; + for( int i = 0; i <= numPoints; i++ ) + { + tempValue = valueAt( ( iterate + i ).key() ); + cleanObjects(); + MidiTime newTime; - cleanObjects(); - - MidiTime newTime = MidiTime( realLength - ( iterate + i ).key() ); - - tempMap[newTime] = tempValue; + if ( ( iterate + i ).key() <= length ) + { + newTime = MidiTime( length - ( iterate + i ).key() ); + } + else + { + newTime = MidiTime( ( iterate + i ).key() ); + } + tempMap[newTime] = tempValue; + } + } } - + else + { + for( int i = 0; i <= numPoints; i++ ) + { + tempValue = valueAt( ( iterate + i ).key() ); + cleanObjects(); + MidiTime newTime = MidiTime( realLength - ( iterate + i ).key() ); + tempMap[newTime] = tempValue; + } + } + m_timeMap.clear(); m_timeMap = tempMap; diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index 3468299b8..2d28bd8f1 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -2072,7 +2072,7 @@ void AutomationEditor::flipYButtonPressed() void AutomationEditor::flipXButtonPressed() { - m_pattern->flipX( false ); + m_pattern->flipX(); } diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index 869c1ef82..1c404e6ef 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -158,7 +158,8 @@ void AutomationPatternView::flipY() void AutomationPatternView::flipX() { - m_pat->flipX( true ); + //m_pat->flipX( m_pat->length() ); + m_pat->flipX( m_pat->TrackContentObject::length() ); update(); } @@ -189,10 +190,10 @@ void AutomationPatternView::constructContextMenu( QMenu * _cm ) tr( "Set/clear record" ), this, SLOT( toggleRecording() ) ); _cm->addAction( embed::getIconPixmap( "flip_y" ), - tr( "Flip Y" ), + tr( "Flip Vertically (Visible)" ), this, SLOT( flipY() ) ); _cm->addAction( embed::getIconPixmap( "flip_x" ), - tr( "Flip X" ), + tr( "Flip Horizontally (Visible)" ), this, SLOT( flipX() ) ); if( !m_pat->m_objects.isEmpty() ) { From 752797680487c19b3063086c6ba058c5f23d760d Mon Sep 17 00:00:00 2001 From: Dave French Date: Tue, 23 Dec 2014 21:57:20 +0000 Subject: [PATCH 45/81] EQ Fixes analyser now disabled when not in view. band vu meters now disable when analyser is disabled. display nema changed to Equalizer. set sample rate before frequency on LinkWitzRiley filters. Grouped the setting of filterparameters into one function, and calc coefficent once if needed. Made suitable function inline. in and out vu meters now using both stereo channels --- plugins/Eq/EqControls.h | 2 + plugins/Eq/EqControlsDialog.cpp | 2 + plugins/Eq/EqEffect.cpp | 134 +++++--------------------------- plugins/Eq/EqEffect.h | 61 ++++++++++++++- plugins/Eq/EqFilter.h | 35 ++++++++- plugins/Eq/EqSpectrumView.h | 73 +++++++++-------- 6 files changed, 154 insertions(+), 153 deletions(-) diff --git a/plugins/Eq/EqControls.h b/plugins/Eq/EqControls.h index eec745b6f..ed3f6aab7 100644 --- a/plugins/Eq/EqControls.h +++ b/plugins/Eq/EqControls.h @@ -70,6 +70,8 @@ public: bool m_inProgress; + bool visable(); + diff --git a/plugins/Eq/EqControlsDialog.cpp b/plugins/Eq/EqControlsDialog.cpp index 950ed1272..bfcbde45e 100644 --- a/plugins/Eq/EqControlsDialog.cpp +++ b/plugins/Eq/EqControlsDialog.cpp @@ -161,6 +161,8 @@ EqControlsDialog::EqControlsDialog( EqControls *controls ) : m_analyzeBox->move( cw*1 + ko + 5, 15 ); m_analyzeBox->setModel( &controls->m_analyzeModel ); + + } void EqControlsDialog::mouseDoubleClickEvent(QMouseEvent *event) diff --git a/plugins/Eq/EqEffect.cpp b/plugins/Eq/EqEffect.cpp index ee78f459d..b145fd1c9 100644 --- a/plugins/Eq/EqEffect.cpp +++ b/plugins/Eq/EqEffect.cpp @@ -36,7 +36,7 @@ extern "C" Plugin::Descriptor PLUGIN_EXPORT eq_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), - "Eq", + "Equalizer", QT_TRANSLATE_NOOP( "pluginBrowser", "A native eq plugin" ), "Dave French ", 0x0100, @@ -54,7 +54,7 @@ EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::K m_eqControls( this ), m_upBufFrames( 0 ) { - m_dFilterCount = 4; + m_dFilterCount = 2; m_downsampleFilters = new EqLinkwitzRiley[m_dFilterCount]; for( int i = 0; i < m_dFilterCount; i++) { @@ -101,114 +101,81 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) upsample( buf, frames ); gain(m_upBuf , m_upBufFrames, m_eqControls.m_inGainModel.value(), &m_inPeak ); m_eqControls.m_inPeakL = m_eqControls.m_inPeakL < m_inPeak[0] ? m_inPeak[0] : m_eqControls.m_inPeakL; - m_eqControls.m_inPeakR = m_eqControls.m_inPeakR < m_inPeak[1] ? m_inPeak[0] : m_eqControls.m_inPeakR; + m_eqControls.m_inPeakR = m_eqControls.m_inPeakR < m_inPeak[1] ? m_inPeak[1] : m_eqControls.m_inPeakR; if(m_eqControls.m_hpActiveModel.value() ){ - m_hp12.setSampleRate( sampleRate ); - m_hp12.setFrequency( m_eqControls.m_hpFeqModel.value() ); - m_hp12.setQ( m_eqControls.m_hpResModel.value() ); + + m_hp12.setParameters( sampleRate, m_eqControls.m_hpFeqModel.value(), m_eqControls.m_hpResModel.value(), 1 ); m_hp12.processBuffer( m_upBuf , m_upBufFrames ); if( m_eqControls.m_hp24Model.value() || m_eqControls.m_hp48Model.value() ) { - m_hp24.setSampleRate( sampleRate ); - m_hp24.setFrequency( m_eqControls.m_hpFeqModel.value() ); - m_hp24.setQ( m_eqControls.m_hpResModel.value() ); + m_hp24.setParameters( sampleRate, m_eqControls.m_hpFeqModel.value(), m_eqControls.m_hpResModel.value(), 1 ); m_hp24.processBuffer( m_upBuf , m_upBufFrames ); } if( m_eqControls.m_hp48Model.value() ) { - m_hp480.setSampleRate( sampleRate ); - m_hp480.setFrequency( m_eqControls.m_hpFeqModel.value() ); - m_hp480.setQ( m_eqControls.m_hpResModel.value() ); + m_hp480.setParameters( sampleRate, m_eqControls.m_hpFeqModel.value(), m_eqControls.m_hpResModel.value(), 1 ); m_hp480.processBuffer( m_upBuf , m_upBufFrames ); - m_hp481.setSampleRate( sampleRate ); - m_hp481.setFrequency( m_eqControls.m_hpFeqModel.value() ); - m_hp481.setQ( m_eqControls.m_hpResModel.value() ); + m_hp481.setParameters( sampleRate, m_eqControls.m_hpFeqModel.value(), m_eqControls.m_hpResModel.value(), 1 ); m_hp481.processBuffer( m_upBuf , m_upBufFrames ); } } if( m_eqControls.m_lowShelfActiveModel.value() ) { - m_lowShelf.setSampleRate( sampleRate ); - m_lowShelf.setFrequency( m_eqControls.m_lowShelfFreqModel.value() ); - m_lowShelf.setQ( m_eqControls.m_lowShelfResModel .value() ); - m_lowShelf.setGain( m_eqControls.m_lowShelfGainModel.value() ); + m_lowShelf.setParameters( sampleRate, m_eqControls.m_lowShelfFreqModel.value(), m_eqControls.m_lowShelfResModel .value(), m_eqControls.m_lowShelfGainModel.value() ); m_lowShelf.processBuffer( m_upBuf , m_upBufFrames ); } if( m_eqControls.m_para1ActiveModel.value() ) { - m_para1.setSampleRate(sampleRate ); - m_para1.setFrequency( m_eqControls.m_para1FreqModel.value() ); - m_para1.setQ( m_eqControls.m_para1ResModel.value() ); - m_para1.setGain( m_eqControls.m_para1GainModel.value() ); + m_para1.setParameters( sampleRate, m_eqControls.m_para1FreqModel.value(), m_eqControls.m_para1ResModel.value(), m_eqControls.m_para1GainModel.value() ); m_para1.processBuffer( m_upBuf , m_upBufFrames ); } if( m_eqControls.m_para2ActiveModel.value() ) { - m_para2.setSampleRate( sampleRate ); - m_para2.setFrequency( m_eqControls.m_para2FreqModel.value() ); - m_para2.setQ( m_eqControls.m_para2ResModel.value() ); - m_para2.setGain( m_eqControls.m_para2GainModel.value() ); + m_para2.setParameters( sampleRate, m_eqControls.m_para2FreqModel.value(), m_eqControls.m_para2ResModel.value(), m_eqControls.m_para2GainModel.value() ); m_para2.processBuffer( m_upBuf , m_upBufFrames ); } if( m_eqControls.m_para3ActiveModel.value() ) { - m_para3.setSampleRate( sampleRate); - m_para3.setFrequency( m_eqControls.m_para3FreqModel.value() ); - m_para3.setQ( m_eqControls.m_para3ResModel.value() ); - m_para3.setGain( m_eqControls.m_para3GainModel.value() ); + m_para3.setParameters( sampleRate, m_eqControls.m_para3FreqModel.value(), m_eqControls.m_para3ResModel.value(), m_eqControls.m_para3GainModel.value() ); m_para3.processBuffer( m_upBuf , m_upBufFrames ); } if( m_eqControls.m_para4ActiveModel.value() ) { - m_para4.setSampleRate( sampleRate ); - m_para4.setFrequency( m_eqControls.m_para4FreqModel.value() ); - m_para4.setQ( m_eqControls.m_para4ResModel.value() ); - m_para4.setGain( m_eqControls.m_para4GainModel.value() ); + m_para4.setParameters( sampleRate, m_eqControls.m_para4FreqModel.value(), m_eqControls.m_para4ResModel.value(), m_eqControls.m_para4GainModel.value() ); m_para4.processBuffer( m_upBuf , m_upBufFrames ); } if( m_eqControls.m_highShelfActiveModel.value() ) { - m_highShelf.setSampleRate( sampleRate ); - m_highShelf.setFrequency( m_eqControls.m_highShelfFreqModel.value() ); - m_highShelf.setQ( m_eqControls.m_highShelfResModel.value() ); - m_highShelf.setGain( m_eqControls.m_highShelfGainModel.value() ); + m_highShelf.setParameters( sampleRate, m_eqControls.m_highShelfFreqModel.value(), m_eqControls.m_highShelfResModel.value(), m_eqControls.m_highShelfGainModel.value()); m_highShelf.processBuffer( m_upBuf , m_upBufFrames ); } if(m_eqControls.m_lpActiveModel.value() ){ - m_lp12.setSampleRate( sampleRate ); - m_lp12.setFrequency( m_eqControls.m_lpFreqModel.value() ); - m_lp12.setQ( m_eqControls.m_lpResModel.value() ); + m_lp12.setParameters( sampleRate, m_eqControls.m_lpFreqModel.value(), m_eqControls.m_lpResModel.value(), 1 ); m_lp12.processBuffer( m_upBuf , m_upBufFrames ); if( m_eqControls.m_lp24Model.value() || m_eqControls.m_lp48Model.value() ) { - m_lp24.setSampleRate( sampleRate ); - m_lp24.setFrequency( m_eqControls.m_lpFreqModel.value() ); - m_lp24.setQ( m_eqControls.m_lpResModel.value() ); + m_lp24.setParameters( sampleRate, m_eqControls.m_lpFreqModel.value(), m_eqControls.m_lpResModel.value(), 1 ); m_lp24.processBuffer( m_upBuf , m_upBufFrames ); } if( m_eqControls.m_lp48Model.value() ) { - m_lp480.setSampleRate( sampleRate ); - m_lp480.setFrequency( m_eqControls.m_lpFreqModel.value() ); - m_lp480.setQ( m_eqControls.m_lpResModel.value() ); + m_lp480.setParameters( sampleRate, m_eqControls.m_lpFreqModel.value(), m_eqControls.m_lpResModel.value(), 1 ); m_lp480.processBuffer( m_upBuf , m_upBufFrames ); - m_lp481.setSampleRate( sampleRate ); - m_lp481.setFrequency( m_eqControls.m_lpFreqModel.value() ); - m_lp481.setQ( m_eqControls.m_lpResModel.value() ); + m_lp481.setParameters( sampleRate, m_eqControls.m_lpFreqModel.value(), m_eqControls.m_lpResModel.value(), 1 ); m_lp481.processBuffer( m_upBuf , m_upBufFrames ); } } @@ -216,7 +183,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) sampleFrame outPeak = { 0, 0 }; gain( m_upBuf , m_upBufFrames, outGain, &outPeak ); m_eqControls.m_outPeakL = m_eqControls.m_outPeakL < outPeak[0] ? outPeak[0] : m_eqControls.m_outPeakL; - m_eqControls.m_outPeakR = m_eqControls.m_outPeakR < outPeak[1] ? outPeak[0] : m_eqControls.m_outPeakR; + m_eqControls.m_outPeakR = m_eqControls.m_outPeakR < outPeak[1] ? outPeak[1] : m_eqControls.m_outPeakR; for( int i =0; i < m_dFilterCount; i++) { m_downsampleFilters[i].processBuffer(m_upBuf , m_upBufFrames ); @@ -230,12 +197,12 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) if(m_eqControls.m_analyzeModel.value() ) { m_eqControls.m_outFftBands.analyze( buf, frames ); + setBandPeaks( &m_eqControls.m_outFftBands , ( int )( sampleRate * 0.5 ) ); } else { m_eqControls.m_outFftBands.clear(); } - setBandPeaks( &m_eqControls.m_outFftBands , ( int )( sampleRate * 0.5 ) ); m_eqControls.m_inProgress = false; return isRunning(); } @@ -243,67 +210,6 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) -void EqEffect::gain( sampleFrame *buf, const fpp_t frames, float scale, sampleFrame* peak ) -{ - peak[0][0] = 0.0f; peak[0][1] = 0.0f; - for( fpp_t f = 0; f < frames; ++f ) - { - buf[f][0] *= scale; - buf[f][1] *= scale; - - if( fabs( buf[f][0] ) > peak[0][0] ) - { - peak[0][0] = fabs( buf[f][0] ); - } - if( fabs( buf[f][1] ) > peak[0][1] ) - { - peak[0][1] = fabs( buf[f][0] ); - } - - } -} - - - - - -sampleFrame m_lastUpFrame; -void EqEffect::upsample( sampleFrame *buf, const fpp_t frames ) -{ - - if( m_upBufFrames != frames * 2 ) - { - if( m_upBuf ) - { - delete m_upBuf; - } - m_upBuf = new sampleFrame[frames * 2]; - m_upBufFrames = frames * 2; - } - for( int f = 0, f2 = 0; f < frames; ++f, f2 += 2 ) - { - m_upBuf[f2][0] = linearInterpolate( m_lastUpFrame[0],buf[f][0], 0.5 ); - m_upBuf[f2][1] = linearInterpolate( m_lastUpFrame[1],buf[f][1], 0.5 ); - m_upBuf[f2+1][0] = buf[f][0]; - m_upBuf[f2+1][1] = buf[f][1]; - m_lastUpFrame[0] = buf[f][0]; - m_lastUpFrame[1] = buf[f][1]; - } -} - - -void EqEffect::downSample( sampleFrame *buf, const fpp_t frames ) -{ - for( int f = 0, f2 = 0; f < frames; ++f, f2 += 2 ) - { - buf[f][0] = m_upBuf[f2+1][0]; - buf[f][1] = m_upBuf[f2+1][1]; - } -} - - - - float EqEffect::peakBand( float minF, float maxF, EqAnalyser *fft, int sr ) { float peak = -60; diff --git a/plugins/Eq/EqEffect.h b/plugins/Eq/EqEffect.h index 9a4cd9411..de6d2289d 100644 --- a/plugins/Eq/EqEffect.h +++ b/plugins/Eq/EqEffect.h @@ -43,7 +43,25 @@ public: { return &m_eqControls; } - void gain( sampleFrame *buf, const fpp_t frames, float scale, sampleFrame* peak ); + inline void gain( sampleFrame *buf, const fpp_t frames, float scale, sampleFrame* peak ) + { + peak[0][0] = 0.0f; peak[0][1] = 0.0f; + for( fpp_t f = 0; f < frames; ++f ) + { + buf[f][0] *= scale; + buf[f][1] *= scale; + + if( fabs( buf[f][0] ) > peak[0][0] ) + { + peak[0][0] = fabs( buf[f][0] ); + } + if( fabs( buf[f][1] ) > peak[0][1] ) + { + peak[0][1] = fabs( buf[f][0] ); + } + + } + } private: EqControls m_eqControls; @@ -70,9 +88,46 @@ private: int m_dFilterCount; sampleFrame* m_upBuf; fpp_t m_upBufFrames; + sampleFrame m_lastUpFrame; + + inline void upsample( sampleFrame *buf, const fpp_t frames ) + { + + if( m_upBufFrames != frames * 2 ) + { + if( m_upBuf ) + { + delete m_upBuf; + } + m_upBuf = new sampleFrame[frames * 2]; + m_upBufFrames = frames * 2; + } + for( int f = 0, f2 = 0; f < frames; ++f, f2 += 2 ) + { + m_upBuf[f2][0] = linearInterpolate( m_lastUpFrame[0],buf[f][0], 0.5 ); + m_upBuf[f2][1] = linearInterpolate( m_lastUpFrame[1],buf[f][1], 0.5 ); + m_upBuf[f2+1][0] = buf[f][0]; + m_upBuf[f2+1][1] = buf[f][1]; + m_lastUpFrame[0] = buf[f][0]; + m_lastUpFrame[1] = buf[f][1]; + } + } + + + + + inline void downSample( sampleFrame *buf, const fpp_t frames ) + { + for( int f = 0, f2 = 0; f < frames; ++f, f2 += 2 ) + { + buf[f][0] = m_upBuf[f2+1][0]; + buf[f][1] = m_upBuf[f2+1][1]; + } + } + + + - void upsample( sampleFrame *buf, const fpp_t frames ); - void downSample( sampleFrame *buf, const fpp_t frames ); void analyze( sampleFrame *buf, const fpp_t frames, EqAnalyser* fft ); float peakBand(float minF, float maxF,EqAnalyser*, int); diff --git a/plugins/Eq/EqFilter.h b/plugins/Eq/EqFilter.h index b703edc95..db5087739 100644 --- a/plugins/Eq/EqFilter.h +++ b/plugins/Eq/EqFilter.h @@ -69,7 +69,7 @@ public: - virtual void setQ( float res ) + virtual inline void setQ( float res ) { if ( res != m_res ) { @@ -81,7 +81,7 @@ public: - virtual void setGain( float gain ) + virtual inline void setGain( float gain ) { if ( gain != m_gain ) { @@ -92,6 +92,35 @@ public: + virtual inline void setParameters( float sampleRate, float freq, float res, float gain ) + { + bool hasChanged = false; + if( sampleRate != m_sampleRate ) + { + m_sampleRate = sampleRate; + hasChanged = true; + } + if ( freq != m_freq ) + { + m_freq = freq; + hasChanged = true; + } + if ( res != m_res ) + { + m_res = res; + hasChanged = true; + } + if ( gain != m_gain ) + { + m_gain = gain; + hasChanged = true; + } + + if ( hasChanged ) { calcCoefficents(); } + } + + + /// /// \brief processBuffer @@ -347,8 +376,8 @@ public: if( sampleRate != m_sr ) { m_sr = sampleRate; - setLowpass(m_freq); setSampleRate( sampleRate ); + setLowpass(m_freq); } } diff --git a/plugins/Eq/EqSpectrumView.h b/plugins/Eq/EqSpectrumView.h index 71c64f5a4..306937399 100644 --- a/plugins/Eq/EqSpectrumView.h +++ b/plugins/Eq/EqSpectrumView.h @@ -44,12 +44,14 @@ public: float m_bands[MAX_BANDS]; float m_energy; int m_sr; + bool m_active; EqAnalyser() : m_framesFilledUp ( 0 ), m_energy ( 0 ), - m_sr ( 1 ) + m_sr ( 1 ), + m_active ( true ) { m_inProgress=false; m_specBuf = (fftwf_complex *) fftwf_malloc( ( FFT_BUFFER_SIZE + 1 ) * sizeof( fftwf_complex ) ); @@ -83,42 +85,46 @@ public: void analyze( sampleFrame *buf, const fpp_t frames ) { - m_inProgress=true; - const int FFT_BUFFER_SIZE = 2048; - fpp_t f = 0; - if( frames > FFT_BUFFER_SIZE ) + if ( m_active ) { + m_inProgress=true; + const int FFT_BUFFER_SIZE = 2048; + fpp_t f = 0; + if( frames > FFT_BUFFER_SIZE ) + { + m_framesFilledUp = 0; + f = frames - FFT_BUFFER_SIZE; + } + // meger channels + for( ; f < frames; ++f ) + { + m_buffer[m_framesFilledUp] = + ( buf[f][0] + buf[f][1] ) * 0.5; + ++m_framesFilledUp; + } + + if( m_framesFilledUp < FFT_BUFFER_SIZE ) + { + m_inProgress = false; + return; + } + + m_sr = Engine::mixer()->processingSampleRate(); + const int LOWEST_FREQ = 0; + const int HIGHEST_FREQ = m_sr / 2; + + fftwf_execute( m_fftPlan ); + absspec( m_specBuf, m_absSpecBuf, FFT_BUFFER_SIZE+1 ); + + compressbands( m_absSpecBuf, m_bands, FFT_BUFFER_SIZE+1, + MAX_BANDS, + ( int )( LOWEST_FREQ * ( FFT_BUFFER_SIZE + 1 ) / ( float )( m_sr / 2 ) ), + ( int )( HIGHEST_FREQ * ( FFT_BUFFER_SIZE + 1) / ( float )( m_sr / 2 ) ) ); + m_energy = maximum( m_bands, MAX_BANDS ) / maximum( m_buffer, FFT_BUFFER_SIZE ); m_framesFilledUp = 0; - f = frames - FFT_BUFFER_SIZE; - } - // meger channels - for( ; f < frames; ++f ) - { - m_buffer[m_framesFilledUp] = - ( buf[f][0] + buf[f][1] ) * 0.5; - ++m_framesFilledUp; - } - - if( m_framesFilledUp < FFT_BUFFER_SIZE ) - { m_inProgress = false; - return; + m_active = false; } - - m_sr = Engine::mixer()->processingSampleRate(); - const int LOWEST_FREQ = 0; - const int HIGHEST_FREQ = m_sr / 2; - - fftwf_execute( m_fftPlan ); - absspec( m_specBuf, m_absSpecBuf, FFT_BUFFER_SIZE+1 ); - - compressbands( m_absSpecBuf, m_bands, FFT_BUFFER_SIZE+1, - MAX_BANDS, - ( int )( LOWEST_FREQ * ( FFT_BUFFER_SIZE + 1 ) / ( float )( m_sr / 2 ) ), - ( int )( HIGHEST_FREQ * ( FFT_BUFFER_SIZE + 1) / ( float )( m_sr / 2 ) ) ); - m_energy = maximum( m_bands, MAX_BANDS ) / maximum( m_buffer, FFT_BUFFER_SIZE ); - m_framesFilledUp = 0; - m_inProgress = false; } private: bool m_inProgress; @@ -160,6 +166,7 @@ public: QPainterPath pp; virtual void paintEvent( QPaintEvent* event ) { + m_sa->m_active = isVisible(); const int fh = height(); const int LOWER_Y = -60; // dB QPainter p( this ); From 2921af35f593a7f1ffcf725e8f291c3aad760c3c Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Wed, 24 Dec 2014 10:59:22 +0100 Subject: [PATCH 46/81] Fix size reset for maximized windows --- src/gui/MainWindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 7ad4afc73..e5d00f35c 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -662,8 +662,8 @@ void MainWindow::saveWidgetState( QWidget * _w, QDomElement & _de ) void MainWindow::restoreWidgetState( QWidget * _w, const QDomElement & _de ) { - QRect r( qMax( 0, _de.attribute( "x" ).toInt() ), - qMax( 0, _de.attribute( "y" ).toInt() ), + QRect r( qMax( 1, _de.attribute( "x" ).toInt() ), + qMax( 1, _de.attribute( "y" ).toInt() ), qMax( 100, _de.attribute( "width" ).toInt() ), qMax( 100, _de.attribute( "height" ).toInt() ) ); if( _de.hasAttribute( "visible" ) && !r.isNull() ) From c353f81d59d0e6d65582d416da9cd1fd48bc5a59 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Wed, 24 Dec 2014 17:11:36 +0100 Subject: [PATCH 47/81] Hide windows instead of closing them when clicking on close --- include/BBEditor.h | 3 +++ include/ControllerRackView.h | 3 +++ include/FxMixerView.h | 3 +++ include/ProjectNotes.h | 2 ++ include/SongEditor.h | 2 ++ src/gui/BBEditor.cpp | 12 ++++++++++++ src/gui/FxMixerView.cpp | 15 +++++++++++++++ src/gui/SongEditor.cpp | 15 +++++++++++++++ src/gui/widgets/ControllerRackView.cpp | 12 ++++++++++++ src/gui/widgets/ProjectNotes.cpp | 13 +++++++++++++ 10 files changed, 80 insertions(+) diff --git a/include/BBEditor.h b/include/BBEditor.h index 84b99a0da..e1a286ac3 100644 --- a/include/BBEditor.h +++ b/include/BBEditor.h @@ -61,6 +61,9 @@ public slots: void addSteps(); void removeSteps(); +protected: + virtual void closeEvent( QCloseEvent * _ce ); + private: virtual void keyPressEvent( QKeyEvent * _ke ); diff --git a/include/ControllerRackView.h b/include/ControllerRackView.h index 3a64ff867..eb99ded4d 100644 --- a/include/ControllerRackView.h +++ b/include/ControllerRackView.h @@ -26,6 +26,7 @@ #define CONTROLLER_RACK_VIEW_H #include +#include #include "SerializingObject.h" #include "lmms_basics.h" @@ -56,6 +57,8 @@ public: public slots: void deleteController( ControllerView * _view ); +protected: + virtual void closeEvent( QCloseEvent * _ce ); private slots: virtual void update(); diff --git a/include/FxMixerView.h b/include/FxMixerView.h index e2cee4be6..83010c4cb 100644 --- a/include/FxMixerView.h +++ b/include/FxMixerView.h @@ -99,6 +99,9 @@ public: // make sure the display syncs up with the fx mixer. // useful for loading projects void refreshDisplay(); + +protected: + virtual void closeEvent( QCloseEvent * _ce ); private slots: void updateFaders(); diff --git a/include/ProjectNotes.h b/include/ProjectNotes.h index 80a6748da..998f47d99 100644 --- a/include/ProjectNotes.h +++ b/include/ProjectNotes.h @@ -27,6 +27,7 @@ #define PROJECT_NOTES_H #include +#include #include "JournallingObject.h" @@ -56,6 +57,7 @@ public: protected: + virtual void closeEvent( QCloseEvent * _ce ); void setupActions(); diff --git a/include/SongEditor.h b/include/SongEditor.h index bb40155eb..96dcfdfd2 100644 --- a/include/SongEditor.h +++ b/include/SongEditor.h @@ -65,6 +65,8 @@ public: public slots: void scrolled( int _new_pos ); +protected: + virtual void closeEvent( QCloseEvent * _ce ); private slots: void setHighQuality( bool ); diff --git a/src/gui/BBEditor.cpp b/src/gui/BBEditor.cpp index d57da6441..2e661bc82 100644 --- a/src/gui/BBEditor.cpp +++ b/src/gui/BBEditor.cpp @@ -322,4 +322,16 @@ void BBEditor::keyPressEvent( QKeyEvent * _ke ) +void BBEditor::closeEvent( QCloseEvent * _ce ) + { + if( parentWidget() ) + { + parentWidget()->hide(); + } + else + { + hide(); + } + _ce->ignore(); + } diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp index aefdcf274..d278608c3 100644 --- a/src/gui/FxMixerView.cpp +++ b/src/gui/FxMixerView.cpp @@ -480,6 +480,21 @@ void FxMixerView::keyPressEvent(QKeyEvent * e) +void FxMixerView::closeEvent( QCloseEvent * _ce ) + { + if( parentWidget() ) + { + parentWidget()->hide(); + } + else + { + hide(); + } + _ce->ignore(); + } + + + void FxMixerView::setCurrentFxLine( int _line ) { if( _line >= 0 && _line < m_fxChannelViews.size() ) diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index bb477be56..f37f35c3c 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -576,6 +576,21 @@ void SongEditor::wheelEvent( QWheelEvent * _we ) +void SongEditor::closeEvent( QCloseEvent * _ce ) + { + if( parentWidget() ) + { + parentWidget()->hide(); + } + else + { + hide(); + } + _ce->ignore(); + } + + + void SongEditor::masterVolumeChanged( int _new_val ) { diff --git a/src/gui/widgets/ControllerRackView.cpp b/src/gui/widgets/ControllerRackView.cpp index 7ec3ab711..327ab5ab1 100644 --- a/src/gui/widgets/ControllerRackView.cpp +++ b/src/gui/widgets/ControllerRackView.cpp @@ -195,4 +195,16 @@ void ControllerRackView::addController() +void ControllerRackView::closeEvent( QCloseEvent * _ce ) + { + if( parentWidget() ) + { + parentWidget()->hide(); + } + else + { + hide(); + } + _ce->ignore(); + } diff --git a/src/gui/widgets/ProjectNotes.cpp b/src/gui/widgets/ProjectNotes.cpp index bc6908f50..5137e8311 100644 --- a/src/gui/widgets/ProjectNotes.cpp +++ b/src/gui/widgets/ProjectNotes.cpp @@ -396,4 +396,17 @@ void ProjectNotes::loadSettings( const QDomElement & _this ) +void ProjectNotes::closeEvent( QCloseEvent * _ce ) +{ + if( parentWidget() ) + { + parentWidget()->hide(); + } + else + { + hide(); + } + _ce->ignore(); + } + From 62df7688961bac6892e82e8ba609ded058a75bc6 Mon Sep 17 00:00:00 2001 From: Vesa Date: Wed, 24 Dec 2014 19:53:05 +0200 Subject: [PATCH 48/81] Autoquit improvement: On effect plugins where it's possible for the FX to silence the output, measure the levels of the input signal for autoquit This so that the effect won't be turned off when there's input that the effect is muting (eg. when you use the Amplifier to temporarily mute a signal) --- plugins/Amplifier/Amplifier.cpp | 18 +++++++++--------- plugins/BassBooster/BassBooster.cpp | 4 ++-- plugins/DualFilter/DualFilter.cpp | 2 +- .../dynamics_processor/dynamics_processor.cpp | 3 +-- plugins/waveshaper/waveshaper.cpp | 3 +-- 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/plugins/Amplifier/Amplifier.cpp b/plugins/Amplifier/Amplifier.cpp index b6d4a3ecf..e26caecaa 100644 --- a/plugins/Amplifier/Amplifier.cpp +++ b/plugins/Amplifier/Amplifier.cpp @@ -77,30 +77,30 @@ bool AmplifierEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames ) for( fpp_t f = 0; f < frames; ++f ) { // qDebug( "offset %d, value %f", f, m_ampControls.m_volumeModel.value( f ) ); - + outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; + sample_t s[2] = { buf[f][0], buf[f][1] }; // convert vol/pan values to left/right values - const float left1 = m_ampControls.m_volumeModel.value( f ) * - ( m_ampControls.m_panModel.value( f ) <= 0 + const float left1 = m_ampControls.m_volumeModel.value() * + ( m_ampControls.m_panModel.value() <= 0 ? 1.0 : 1.0 - m_ampControls.m_panModel.value( f ) / 100.0 ); - const float right1 = m_ampControls.m_volumeModel.value( f ) * - ( m_ampControls.m_panModel.value( f ) >= 0 + const float right1 = m_ampControls.m_volumeModel.value() * + ( m_ampControls.m_panModel.value() >= 0 ? 1.0 - : 1.0 + m_ampControls.m_panModel.value( f ) / 100.0 ); + : 1.0 + m_ampControls.m_panModel.value() / 100.0 ); // first stage amplification s[0] *= ( left1 / 100.0 ); s[1] *= ( right1 / 100.0 ); // second stage amplification - s[0] *= ( m_ampControls.m_leftModel.value( f ) / 100.0 ); - s[1] *= ( m_ampControls.m_rightModel.value( f ) / 100.0 ); + s[0] *= ( m_ampControls.m_leftModel.value() / 100.0 ); + s[1] *= ( m_ampControls.m_rightModel.value() / 100.0 ); buf[f][0] = d * buf[f][0] + w * s[0]; buf[f][1] = d * buf[f][1] + w * s[1]; - outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; } checkGate( outSum / frames ); diff --git a/plugins/BassBooster/BassBooster.cpp b/plugins/BassBooster/BassBooster.cpp index 60c31ab1a..e50224163 100644 --- a/plugins/BassBooster/BassBooster.cpp +++ b/plugins/BassBooster/BassBooster.cpp @@ -88,13 +88,13 @@ bool BassBoosterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames const float w = wetLevel(); for( fpp_t f = 0; f < frames; ++f ) { + outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; + sample_t s[2] = { buf[f][0], buf[f][1] }; m_bbFX.nextSample( s[0], s[1] ); buf[f][0] = d * buf[f][0] + w * s[0]; buf[f][1] = d * buf[f][1] + w * s[1]; - - outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; } checkGate( outSum / frames ); diff --git a/plugins/DualFilter/DualFilter.cpp b/plugins/DualFilter/DualFilter.cpp index d20f3374b..9e42e978a 100644 --- a/plugins/DualFilter/DualFilter.cpp +++ b/plugins/DualFilter/DualFilter.cpp @@ -155,11 +155,11 @@ bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames s[0] += ( s2[0] * mix2 ); s[1] += ( s2[1] * mix2 ); } + outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; // do another mix with dry signal buf[f][0] = d * buf[f][0] + w * s[0]; buf[f][1] = d * buf[f][1] + w * s[1]; - outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; } checkGate( outSum / frames ); diff --git a/plugins/dynamics_processor/dynamics_processor.cpp b/plugins/dynamics_processor/dynamics_processor.cpp index fa7973dd1..6dcd357c1 100644 --- a/plugins/dynamics_processor/dynamics_processor.cpp +++ b/plugins/dynamics_processor/dynamics_processor.cpp @@ -214,11 +214,10 @@ bool dynProcEffect::processAudioBuffer( sampleFrame * _buf, s[0] *= outputGain; s[1] *= outputGain; + out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1]; // mix wet/dry signals _buf[f][0] = d * _buf[f][0] + w * s[0]; _buf[f][1] = d * _buf[f][1] + w * s[1]; - - out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1]; } checkGate( out_sum / _frames ); diff --git a/plugins/waveshaper/waveshaper.cpp b/plugins/waveshaper/waveshaper.cpp index ab379d8d1..7389e27e1 100644 --- a/plugins/waveshaper/waveshaper.cpp +++ b/plugins/waveshaper/waveshaper.cpp @@ -130,11 +130,10 @@ bool waveShaperEffect::processAudioBuffer( sampleFrame * _buf, s[0] *= output; s[1] *= output; + out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1]; // mix wet/dry signals _buf[f][0] = d * _buf[f][0] + w * s[0]; _buf[f][1] = d * _buf[f][1] + w * s[1]; - - out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1]; } checkGate( out_sum / _frames ); From 56ba799404cce2771633431687e6f179a35f5444 Mon Sep 17 00:00:00 2001 From: Vesa Date: Wed, 24 Dec 2014 20:07:04 +0200 Subject: [PATCH 49/81] Use input signal to measure levels for autoquit in FX that can potentially mute the signal --- plugins/CrossoverEQ/CrossoverEQ.cpp | 2 +- plugins/Eq/EqEffect.cpp | 8 ++++---- plugins/SpectrumAnalyzer/SpectrumAnalyzer.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/CrossoverEQ/CrossoverEQ.cpp b/plugins/CrossoverEQ/CrossoverEQ.cpp index a50b6381f..023bdff9c 100644 --- a/plugins/CrossoverEQ/CrossoverEQ.cpp +++ b/plugins/CrossoverEQ/CrossoverEQ.cpp @@ -196,9 +196,9 @@ bool CrossoverEQEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames double outSum = 0.0; for( int f = 0; f < frames; ++f ) { + outSum = buf[f][0] * buf[f][0] + buf[f][1] * buf[f][1]; buf[f][0] = d * buf[f][0] + w * m_work[f][0]; buf[f][1] = d * buf[f][1] + w * m_work[f][1]; - outSum = buf[f][0] * buf[f][0] + buf[f][1] * buf[f][1]; } checkGate( outSum ); diff --git a/plugins/Eq/EqEffect.cpp b/plugins/Eq/EqEffect.cpp index b145fd1c9..8bd5edb77 100644 --- a/plugins/Eq/EqEffect.cpp +++ b/plugins/Eq/EqEffect.cpp @@ -86,6 +86,10 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) } m_eqControls.m_inProgress = true; double outSum = 0.0; + for( fpp_t f = 0; f < frames; ++f ) + { + outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; + } const float outGain = m_eqControls.m_outGainModel.value(); const int sampleRate = Engine::mixer()->processingSampleRate() * 2; sampleFrame m_inPeak = { 0, 0 }; @@ -189,10 +193,6 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) m_downsampleFilters[i].processBuffer(m_upBuf , m_upBufFrames ); } downSample( buf, frames ); - for( fpp_t f = 0; f < frames; ++f ) - { - outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; - } checkGate( outSum / frames ); if(m_eqControls.m_analyzeModel.value() ) { diff --git a/plugins/SpectrumAnalyzer/SpectrumAnalyzer.cpp b/plugins/SpectrumAnalyzer/SpectrumAnalyzer.cpp index c06d4aa2b..4af1e3ad9 100644 --- a/plugins/SpectrumAnalyzer/SpectrumAnalyzer.cpp +++ b/plugins/SpectrumAnalyzer/SpectrumAnalyzer.cpp @@ -150,7 +150,7 @@ bool SpectrumAnalyzer::processAudioBuffer( sampleFrame* _buf, const fpp_t _frame m_framesFilledUp = 0; - checkGate( 0 ); + checkGate( 1 ); return isRunning(); } From 5bf095b6b98be761eed6a6ab38c065f8b2adc0aa Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Wed, 24 Dec 2014 20:08:14 +0100 Subject: [PATCH 50/81] Revert Zynaddsubfx changes --- .../zynaddsubfx/src/Effects/EQ.cpp | 8 ------ .../zynaddsubfx/zynaddsubfx/src/Effects/EQ.h | 2 +- .../zynaddsubfx/src/Misc/Config.cpp | 27 +++++++------------ .../zynaddsubfx/src/Synth/ADnote.cpp | 2 +- 4 files changed, 11 insertions(+), 28 deletions(-) diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp index 6468f16b1..e03fcef71 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp @@ -43,14 +43,6 @@ EQ::EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, in cleanup(); } -EQ::~EQ() -{ - for(int i = 0; i < MAX_EQ_BANDS; ++i) { - delete filter[i].l; - delete filter[i].r; - } -} - // Cleanup the effect void EQ::cleanup(void) diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h index 6192861cd..b2e9e89a9 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h @@ -30,7 +30,7 @@ class EQ:public Effect { public: EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); - ~EQ(); + ~EQ() {} void out(const Stereo &smp); void setpreset(unsigned char npreset); void changepar(int npar, unsigned char value); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp index 72a8046f4..d38c88bca 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp @@ -42,16 +42,10 @@ void Config::init() cfg.OscilSize = 1024; cfg.SwapStereo = 0; - if( cfg.LinuxOSSWaveOutDev == NULL ) //Check, if object already exists befroe creating it. - { - cfg.LinuxOSSWaveOutDev = new char[MAX_STRING_SIZE]; - snprintf(cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE, "/dev/dsp"); - } - if( cfg.LinuxOSSSeqInDev == NULL ) //Check, if object already exists befroe creating it. - { - cfg.LinuxOSSSeqInDev = new char[MAX_STRING_SIZE]; - snprintf(cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE, "/dev/sequencer"); - } + cfg.LinuxOSSWaveOutDev = new char[MAX_STRING_SIZE]; + snprintf(cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE, "/dev/dsp"); + cfg.LinuxOSSSeqInDev = new char[MAX_STRING_SIZE]; + snprintf(cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE, "/dev/sequencer"); cfg.DumpFile = "zynaddsubfx_dump.txt"; @@ -73,14 +67,11 @@ void Config::init() winwavemax = 1; winmidimax = 1; //try to find out how many input midi devices are there - if( winmididevices == NULL ) //Check, if object already exists befroe creating it. - { - winmididevices = new winmidionedevice[winmidimax]; - for(int i = 0; i < winmidimax; ++i) { - winmididevices[i].name = new char[MAX_STRING_SIZE]; - for(int j = 0; j < MAX_STRING_SIZE; ++j) - winmididevices[i].name[j] = '\0'; - } + winmididevices = new winmidionedevice[winmidimax]; + for(int i = 0; i < winmidimax; ++i) { + winmididevices[i].name = new char[MAX_STRING_SIZE]; + for(int j = 0; j < MAX_STRING_SIZE; ++j) + winmididevices[i].name[j] = '\0'; } diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp index 5391b9a5f..c43f1fa3f 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp @@ -694,7 +694,7 @@ void ADnote::KillNote() KillVoice(nvoice); if(NoteVoicePar[nvoice].VoiceOut) - delete[] NoteVoicePar[nvoice].VoiceOut; + delete NoteVoicePar[nvoice].VoiceOut; NoteVoicePar[nvoice].VoiceOut = NULL; } From df79601348ca3ed689f77ca128d3ff53f5802871 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Thu, 25 Dec 2014 21:55:38 +0100 Subject: [PATCH 51/81] Generate translation files automatically Instead of updating the binary translation files manually, update them automatically. Now we only need to sync the *.ts files. --- .gitignore | 1 + CMakeLists.txt | 2 +- data/locale/ca.qm | Bin 118806 -> 0 bytes data/locale/cs.qm | Bin 110029 -> 0 bytes data/locale/de.qm | Bin 302180 -> 0 bytes data/locale/en.qm | 1 - data/locale/es.qm | Bin 38461 -> 0 bytes data/locale/fa.qm | Bin 37233 -> 0 bytes data/locale/fr.qm | Bin 231627 -> 0 bytes data/locale/gl.qm | Bin 197454 -> 0 bytes data/locale/it.qm | Bin 293007 -> 0 bytes data/locale/ja.qm | Bin 81993 -> 0 bytes data/locale/ko.qm | Bin 74791 -> 0 bytes data/locale/nl.qm | Bin 77251 -> 0 bytes data/locale/pl.qm | Bin 192788 -> 0 bytes data/locale/pt.qm | Bin 225556 -> 0 bytes data/locale/ru.qm | Bin 209794 -> 0 bytes data/locale/sv.qm | Bin 23220 -> 0 bytes data/locale/zh.qm | Bin 32139 -> 0 bytes 19 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 data/locale/ca.qm delete mode 100644 data/locale/cs.qm delete mode 100644 data/locale/de.qm delete mode 100644 data/locale/en.qm delete mode 100644 data/locale/es.qm delete mode 100644 data/locale/fa.qm delete mode 100644 data/locale/fr.qm delete mode 100644 data/locale/gl.qm delete mode 100644 data/locale/it.qm delete mode 100644 data/locale/ja.qm delete mode 100644 data/locale/ko.qm delete mode 100644 data/locale/nl.qm delete mode 100644 data/locale/pl.qm delete mode 100644 data/locale/pt.qm delete mode 100644 data/locale/ru.qm delete mode 100644 data/locale/sv.qm delete mode 100644 data/locale/zh.qm diff --git a/.gitignore b/.gitignore index 45d3a7e96..aa4f17ab8 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ /plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/Makefile /plugins/zynaddsubfx/zynaddsubfx/doc/Makefile /plugins/zynaddsubfx/zynaddsubfx/doc/gen/Makefile +/data/locale/*.qm diff --git a/CMakeLists.txt b/CMakeLists.txt index 1687f1d99..c8fa4f7ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -563,7 +563,7 @@ FOREACH(_item ${ts_targets}) ADD_DEPENDENCIES(update-locales "${_item}") ENDFOREACH(_item ${ts_targets}) -ADD_CUSTOM_TARGET(finalize-locales) +ADD_CUSTOM_TARGET(finalize-locales ALL) FOREACH(_item ${qm_targets}) ADD_DEPENDENCIES(finalize-locales "${_item}") ENDFOREACH(_item ${qm_targets}) diff --git a/data/locale/ca.qm b/data/locale/ca.qm deleted file mode 100644 index 20b626418bf6df2a5f22d3fd1023b31075f558b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118806 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 nshB{XZw~gcM8q;-+ZI5xJNW1J^lXx8DAJ& diff --git a/data/locale/de.qm b/data/locale/de.qm deleted file mode 100644 index 353543c22e1b3aec37ab3d10b9842529b2afd96b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302180 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�@ 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 diff --git a/data/locale/fr.qm b/data/locale/fr.qm deleted file mode 100644 index 1f7bc5c3fcdb338e062c74ab22959d0040437ca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231627 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%0AKHYuYJ}P_^j7Z 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�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 U=k20z6c`^`^&5Tdwbj-C2OZl8Hvj+t diff --git a/data/locale/ja.qm b/data/locale/ja.qm deleted file mode 100644 index 74415c4a0b04574cf6b5a1e57cbfd92ee63d15f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81993 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 diff --git a/data/locale/nl.qm b/data/locale/nl.qm deleted file mode 100644 index 1331a3581a9a686f62ae78bfd8434ca7a79f9fde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77251 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 z zeHI$7*9<+qr!J)^(hCMo^;a0A>@sac*a}aLYo7 zLI6mL)VvkpGi63GEanPO+{%Vo+pLMtu=_yUd*GG~D@;uzAB(gx^M`4(v-g!J{&+K* zb|5?)K%I2yp#6HW*-#p$_z1+o}sdx-&-4oznvbO_T%9>^lIvPB9l{$CGU`z_xjE;a?LQWhPxf0CJ5A9mz zN{o9wEyot^L9NeeCuq79|tZF$srx*pIsOXx8=&(+_q9| zEvNWNI~Hj_u#)O2C+t#lisC>!)8g5cHq_Yjjb1PQFE?j$$n5~UmH@b{{mSk!EduRT z^^p7V$bN9?K1cpy_CDe(?@TzPl(97%55cmvYG?ar6BLSI2(KE1gT=1Uo}Rmr*z1U3 zUWN{N9;%-|5drhMlU1F=j_5S9K%%TSlZncV=TB}tPG|nLQQ6vKI|>;RI(#8euFu?x z7iR=%{`#%P+k2ypu4Q?B2Mfy9d~*i{!W~(9eij$sd+pBEpEa)hUK^%su1KabD2`Xj zU^6&pYM%y{$@Zz^i)o&Eocxhy^SsF4>n-HZ2wyD%92CjBt@B?>r@wIf&Qjy)pQm;7U~j4%?Vqs#f5Ct8Mj!jcO4{wXRISK}18$l2{p!`@lR|QEMi2oUj%)dWSvr^;%KeuYtE3!e0Sz zN3dMc0jC1Ii60)hD(}7gVP0C7+iRNbjjWg(hqWd9DET#obP*vtbYq}4#i62G(`;xQ z9$fUR=rR43NVR$r#F>uX=_!CfKIv(I!(J!HqvUTmf>+oI32SM)FD_Egf4U8~cX)WJ zb`=Mgm#1o0QPZ9x)(Mt3XV1QPM)l1q%IlmeHO0V`i3Fbf>4&T##ddGYXjysexk}w& zFVpH>%{?m+yRDaTOBIYyQlIL5HBKC@EAFY2N(q-IpH{L!zCt}kbCJQ+5GG4fHv2Z( zj8NT-_7jhv+MLLHZH{}ny_DGbP|kq9eEaIyXHo6F?#jcSXDXD>w9R>s`8P;wE;HGA zqJG(#hI4klS?G2elbyBR78-GJ+B$PITH>1=C9siu!f+^S?as$vWb)U?A^$_OtLV z*TYEKtU9Rl%ay_UV95O+T3*ikftAPeaur9Hv5yxD{d7}`WzBF(Y$WW#+SDo0I&|q! zmU0VYsy#o5{+IsYy6}URS0d)!`#Hs;)TvX}d(W8KB=!jDmN*Ryw z7%*LkwD@hyhCZO9jNPf=4^+5vUp}f-d4?A*uPbjCrdc!i^_eSra65z<6eb;9M#joB z7E`pyTJLQ>D6B)v{q5_U->M_3%PN03rep>}#dNxh7%S)G-wAc`JAdZ_!6G3E-7HSW|J19JJRm%2>cx)X``J@85fF;2{+dbR^lp zgeZ)iiM9QB9JETfaoyp4^PHfA;^j3Sa>#yr46;(`hQ^coE6)kG`g#tzq1duMYop%M z`Mx!_3nJHIVTaMf?p9Io?|Z~izkcG^AR{5vqKpVXssNhh(>5OUjj^Lnfm69mf;F7b zT!JFiSS%_AxwSnV*&7)o3d0|n}x$CbF9LcyO`1Ygo~= zz0=urwb??sb7B#FhP;fX*`B~dQnxp3VQFvUG&$|-g+(L4t-!pV%~qwMX{IBpz-P5? zTIaeYdBZqy#%-U0_C@*RxGE?N@pS5By@E~C(Vmoi<8=X`uEfr$CP19$*nKklRqdK6 z_O=^(`g)~JP2XOkvdM6}=&GK=PxhortQaFrIxz)xV3KF9&IaiVj|_=0A;HZoE!s7S zXwRo+X+C3E1(QjrUf@z7aG=}~n~l%LBT4ymJc=|#pL!JhFGRdOnG9vqQ*%;mpexa& z!TIZVJq_wa+^WZe_h#OVxB8!?)@D+Ky@OXMTuQGqc|h9=ms&ft=Uut9>AGhQhE`+| z{C(DX41{hR^!LoA$_ec&sG0OulXgk0=VVqfZ0RhK?6KTPbFg3mSI{|QY;ZWBybX`4 zMCmg$*ZhoQ?5?rZ6ri2Lu95rsRw(t!edLnX?|UCLZ)m9;d)nn$nmy6Bb8>;IivutD z+y07j;fhkDbi5OHR$+yK-ep&1Vm-4+M!22rt(|Q$gEqPzoZfgwSfQwD$7$e0+OqXp5C_>RW0wMZD=$ziksT^1vwM!W!Az6Zt61E&ClNM6~dK& zMF#;}bJ>45teE4w78XtayYHx7e*AG8vPKBHc?7Id1Z(i_&Hn)J` zS1=+M4&4Y!VLF~-Q|DUOC>>aKqen|eW|wxddS+28rMFJaxni3F(CZbwG$(D}w4S<^y`Xk;eo}=b0zwP$dyUXf->M^=) zlO8L=|6P#CW8r463@8&XB-!O{Hvo0Y6dp8JZ*k;dCJC4q67^{T<8ZE=(L86Xzsom+gcWexPE_CU zRWMfIx-MKvwhmGg+{3N(;ePlY70ggEefRteQ-?cWknoV#kb&75C$1CGJv%&dya?aO z9smON;JD#uSC!ioN~mxAbmAP21JtH19*g!#hMVsaS58<5n1He9u_FXWwI4_GE2vf}6%s;6^DwJD>bSba%ODVpC?pf}Z5 z#e0nyYj;m+7c02%#Cs1-B?HxBZuUw52qCm-zlMi)V%#!21Ph!Vw(t77Zk2N=u>#HE zx17K4eo+i2QISB)sB+5-1TVCz-71u__O%$4P<$GMhMi5qaKE8j+Ld-QnNvR@{OCx( zG)fy-Dmwu;*6oc?rZNFOPCU#3zBZj=pu^z=%log=xZ;I80af$YAL(s@hkn|PH>2Bt z9`Y7=?ZlnnO>pWqo?*-Wpa=;caC$=%*X?zAcuB$_FXK_N>1eFQSZH0>%sqh=npKt$ z2vLDHa4+RI8BUP5;c>I@&1nAKyR=0Apduf3wLiiWtD+m5u1{09M*mX`0e(Az5N^z0 zSzMU!c)t6{8w>4r6>orSCe?U-u+rU@-cC?L_!30~R{P&7tzJCQ8 z1M2grp{e{Ju@jPdwrX2L%nbO)EVWip>04nJ`ZkdCEFbI~?)cQ%%Fs6rLnVZJl}x6Vq{Th=?< zeH9#9>27h}y2QJi-Ku-l|bGYMZNqB;!-LGNX2$yEB|?)V z>Lh8a`yP4{dV_*S9SmB|}KwoYMusRpH5RK9~Vx5eKi@kAZ=g)6<$idqT>4BIrKo63(5( zhvSU|w6S>)q2rt^@6=J{vM?t;#f%%OX46){Nlo8w56>XVLT|7|1tZEGRVARVMr*azkr z`qnQtE9(ZSXp$@94)@*>8){z0bNdwPs~`r?frAj>Vz?8hIJ|gACnOgQjIVjBSArKY z#`9pQ5KhO54lE5GsPD#V^Be@AM@kgO?S&3C58AJ7OSOq#|KZQQYkB=4;W!Q14m7Ly zSo^)C04s#L?KsDa7e8LTbU`JjJDvo=>a*+1AAN999f-Cc8l9n4=OYQYre4R9`{!4P zBCj6+_Hn1u7vq4vSJZ;9?(1*pal81NxBc<;^yK3Nvse0xv>XOXQ3dnFo^J|^5$TII zVH~<|ab5hoZt=6FQOO?gO)-Z{|2Y^h*j&Ptm9E9ESK;`$)g*me*FcixtEMp^q2JT@ zQxd|-dzY_uF7IqpFX39AmsefpoKDTR89~%!x20;kc_S30C{KTa>94AL=em56&3pJj z6bAf!T-Z|F_64+)7C2T~KrWcNLx06si5HDy54Z)(a2{crn6FSb$7wMX9OyDZNWI0O zwjh+t<7`qe_rd!`SDCtr7G^$@UHc=|?V!lh+{_<|Ls?PN>Z8$dQ#~H50v0CErtHXI z%YRrBT>DMSp84p5kLG%#IVD$~>x73UNX~UWlCUCiM_xxsy8v}Gy}4+h-kdV#s9=VX z9DSeRg*9M~$351EMm-sr*e0D@MtyOnlZ8tm{C1V25!!VTF5v-FH6U(%FDKa)xRX1a zC&fe70Q+~pCt$IpU`-MOkbR1BxLD$_cOnnN7KZx#f$$n@BC*+M^;i)!Qf$-p{B#>1 zjNL|7zBN>I9a3*z+OL>uFR)_bd#2#f8c4sNQ^f#WZLXB# z`|nhdV!UTkBOZJ|uhdZ|{_OXkBB@b>u85GB4dJNRm^lR&bvsOtWV9&k&|r zGu!zZJaBq0y~v`g@Q^QOfRQ>#bW9M7g6WfT48s7DS|RFC$H0pHC^6a4V<-KD5XRlfVQ%(^noelhE- zGnXT-|M1Gy%S}rj42(T~doOIg>FZO-0Tp1LOb)0FKB|4(vM{cjl3cDt7!O>%b+2>t z_LU|uPZoxOY2}B?vQ4!eOfsr`_eo`i%J5kURW~GB>Bi#j_ATDHe&uS@-kvW*t$;%z zlX(F&AA#9>fBs%0EVJS38ROo^fW)!K7Vw~}WY63ycj+BAdtBA9(GsBw=rgWs%pc5yk44YQPLujI<-?RZuMHP=BVfbd+JNnR8U>q(}A0E zXKXBYTel>^#H)&CF))f5w#$Qv7eU zGi<}lV^wo%9K9Evs^#pDVKfyAS@EwDGVYsn>jetaIDDqkE zDmt{ZJCN(;yVl2bOwP5wb~w~vVsAF%-e&Lhmq~h1a(m0p&Wq89@gDUA@wnVnEilf0 z*k)Js2#$!B`QNLZzc##oeD07Q(QwbR+B4ZFjiW8H~Ulvg462zOV9e$4w7WBvempmjOHb_kz9lvEBba1@J_$*<3 zSYJKI>8?KMX->XFB@Bt-2g-JjDs zWO4h^TwkqIBpZ0J)2P?muwWrY%Jh{ArSeS5kcw$g8{J0=wGkz@(}Wk$wMszrxiI`rkGxCXqn{X zxbTr}Wj2Z*llC*E_|O8$iK+mS!Eq>vAd|p2Dam>)I5obt*(7O#2`#`pojlVrA+hi+ z0#dfu*(f4S+U(QFNi86j_goRXssI`ro&@0Z5>E?QLAA@orW}|kI86ekReEY!e>O;6 z*{TOz?wYjZRKi!w(uhIGG6bwb+LN*LP!QiHfiSfU*8&DKq9O;DKq(}_NuW$4)U`lC z#lMnFn86^yPI|y30HzcTTVOajE?j0%9B}b+G8iz)X=Kb+NX90~AeoJ#>SSPC2BYL; zQKdPO%Y%}$qKwrF%h((lEQi7@lR!CIh--5ac$9%z1|x`LEnplgkFSCdvo>3%2p}NQ zO1_F994I8t30xyUPz=u?;3yT4JeYI_e>}mDE8(rMm6NjZQ2$4mb7#3%?d4O{0|YmO zFiG}%Xd+illXGPj-53Wtq95UZ?x;xt_@0JSZ4!4i^QQK#lKj>k7CnO00SdBrju=>^A!ry4x$3OMi5*wSE!F-dil1Q#yci?M?lWq2V)4?1xen=rnK_hewB zy>F;pfaXQiu|MIUQK8c%LE**QqZO)p6n)(%EkV3MzC^X1Ynu3IF|jvHebRZ0peq>< z09U0TB4!*b<|S}S!BiWQW`-qm48*__8f0m+akfKul$bKuC<+(6+>B6Kz8zJc7QL!h+DVqg&mroeFNA9s@T|IHQ3rDn%X<1rli4CpdhwYj{U~lZPWsU^Px|rrq#sY1^u0pbCJmT=B6;LEri~lI zRMP5lzr^tyy|wL-L$t1<%4W%{yRqLLtL7+!iHtWmE%0`5fADPzV#2KldK<3tAp0kC z^Xp#0i!2l>)za*ltdq`Yx7Ra*TDSPQ30sq7E$pjq?!=w`gNM`Y?k&kJyyTch(Yl8h z7Xem@Nm+tL9oTP(8Wq)4TIZYf`N*JZ!tJAyCph zTbmq?t7+n28=^M>@RMhIY1t|Mxb3aAp6*ku9e#;Zf4&w!X zWK7t)^(kIj6EMfhk2G8SfIrjLg`eMB^_@<29e+~jDR>77@WU!U6hW95VJA<4jBu>z zs8*_`Bth~onFo<%h*0N&-(iu5=zFSwi;l`$-eVOWE+#iH~M7%y*z+=(H1k-8%bsJdqRV&o(z5o+k?m?GArLatG~N5-wOKhTeZ#2U_E_V zsm2oHerd_bkfCk+m$XgMC4(H2R0HEb!fK?mp-+Ri5DOlS;3dhc7e?dDO z=#DsDym;hVTrKX`Cql!WojYv&K4B;K`$UT zV^C4z@yt8=39MR@3pdB3A79;&n-sS<^3xZxOk5f~?wnn^`EF-^;cf#E|6(E#`7`B! zf<(7yaXtV-G}EHWQvJD^Ppt$cDGdJEr}o(g0@Kq6AroPPe#mmQ=>T|W*lfH&k^hDx z$-KAvEu}nyLytl%NMsmIAQH4A+t7bFEkRml`$YM7i6neeIv!B#=IzB#{@kZt?@s^z z^v`|zL1*#$mGiS!B4OoWe@jBa$SVmHY4w)}8ykaFWyW_t`B)X^HU#9{r!=dtuqlw&^hR6?t7(BB{{ zn8np_zU&EsDRLb5KB)8v`36Uee*tXzS(gw->n7n=JhMri`LrzUS_>!r-`5@_6&<95O|)2%*6vtQik}%jh$uQ!spxCnCHzUw0`?~^cpKO zYjZ$cLVu;x-{=?RG`5vk`cVV07b62nE_ix!uvi@n(KSbmJCU^Z&a#(zYgpyI+B@Tw zXSP^-4JkG(pS>tX&@lTI?E%fw+ZQ6H1jwDT6wx1*)wuDjWLn(Sk8g;3*ew&jw^}KG z(g4DzB7oF^Vk!8s#|)%+Dt{g5XyoCq>V<&|+ZnRGwxBXBg@m$*SaMBeJyOtB4cGdc z;##13icau1$3tLlhzW!>Coz!4QZ0cfcX8n&OXAdg$J1C>Y)9d#{L)rJ=JVa;Y(X`K z;{ncjAp|2t)Fv4Y*451C0X6uRN1mZ(a#v@o*L~C^d|esa9NQu831P>N*wcmqT(NKF z-f=;b-}m(G1k%5ofz;cSy=Vo1WLp^aWYh0q#SdJw8$R}897Me}-1%P{1JTdlrCS0# zVNU$S4LO5zQ^-c~Iej#%H-zLA>a~R$KM=35sWSEOe8IHQbJ<2!VY8W_>OyJ3@J4^NQ{`|cMd>KRJ}Bx377gTQ4=q<-grJ zoGWuG9%KcD#p=NfeRQ_}?p#533}?muTX^OtrY8j|9%Q*yVF0>G$Zz*ZBd;vRsiu2- z#T{sll~!y;LWcYWmZe4s!7d`6u=`k@@Av|bstU|%xtK}K9Di#Jf15Noo|uIi zYDI87P!vQg{~1by0O$CfD&Zl+W<*v$AwEiDv|L!8aov@C;s-7xQ z181%)cFgOPjE{d~<|~co0hMowS-#3 ziMM{?)3z`nxZ)P(bq>Y_-}BuJgxNE9Dcns@y86jZnfkG2)Sg$)9`XtHF+sx~P+eHs zId=ZGnB{5)#(~RctZa8Z42LxjbF9z2pEa=Ge|dYj{{E%OLoP=I^&yuh54ly;tbClC3mGUThtLvB=t+?YHh1xEVzErnwo;qpViTUo_4?Diq|Dnsr~2JGv~kgq2X z`FUl?&nFN0rZVK4`XOF$=#22p>`Zac-pe~@8fd~R(UjyZ8@#HGwA?uOFl`PRyy5u1(Ns7YwR%T*qNkE~%f{Cddo_@;8kG&!0b4!M%t0KvmtG<$;gIVgX z;)1Ww+>Xcp;{4q!*Kc>O-&(qQ=i2;bqXaLg3Ej?CHW}HG9KEY$bX|l0yPS-bRpB^s z!sGM9?cKrfQQ=b>42@%sP1zA7uG@S49nccCNhi*7p|zt{Xid`oHii+q(y`fS<8WK& zM!WlY{hJ1*ceQW2G0#WPUbuAk+O?~9WGVWlexIjgN`Ncbo(vqMk8Ygc#3dOcA6StN zmGQG}f?;FePy&jcbl6ric6wR*i+f_nM%*x2$HNYso1)5BPdv!-E>g<@i;Y&>teBc2 zyzgB0CLGC_gb^f0u)CwP>4rX^2vSvQ&jiK@!W#t$F8&oURugdJ(}^piQNuM;3}p`vG1N?aX(CTPxWwv0c!#2{AIJ zu};!r)7~=-q&apS%YQj$+}|Au{ed=y`Qf@!MTR@@)LH0L#kbODwH#{qg}&F zC6lhn#be~?^_n;y%*58rBHr04#fWXm`c(w5Q0A5n6}3>Gp1B_@ZUHaWe*O&A*Hp?m z&imrk&7!*RV12vqZE?py#I0JUkYm)*1chemnAzB$fGl1VOToT_Nbs4Cgib-TB0#`` zHc*7b+ix!F&yB27>8sa>IvvqOX!eE*FmA3q*1s=yHtM;WNB*ovKFMi;ajqza!u-ZL zg+lX~e(=_?ADmAyk5t{-AU3u}Amvd#w9z)5BsE&=@8} zj9elGxG>VFx;=2z;v>aAASz^NbD->i%=bn8i9Z(y9ikiSvoq{Zh==S14P4i6C&X!a zz4p8xTc}}=kC>vAo{7g(4t3l8%F8fjK6`_(2H`YAybZw+EJ)*LpIexJ^(CdDMRcvy z_sHUEgLK?m>kWr8+nYy8zNFr8txH!iFEI-LmUk52pG?zh{RcbA@@qtV^jMaPjn3+h z8R2mLs0oePh6%rlYp%FJ6k2A@-&mYK*SWp8XoaS!n|+>K)xoX}P==q1<}DAt3w5Ju zWHtf-Y~yAYHA&gP^4*MYpccvh&G&-jQFb=uczQGsNt@wP|1{A4E1~~ok@!DrPvGB9 z@dTVk{(9fQSM!&D`n+F4bsu$4;Rl2lG|~Hv?id|%R}$0@Z(XuUzbbl<)|BWFQ6UIG z$m(KPqL6NvP2Yffz`jbBY<>5Z(NlLvc}DjS(0`SQTapRRvxK!Y_CoCdZ?Oid;Y z*eAwq^c#H1-l@oi9}jxaDz-m%z)W?8ec4CZbC+UwoON$$eNT*mGLw^y56Dsk>=|K3 z@Mv!L2r{EPV_Xp*0>4IjSO#7p0v@X28X;cjk>DI^JRYYI%0X2D&J*P<^|nb}T;Q30 z>aMsU{5e0x|Bx*7|7+!u$QofZ)}Dl_@~e#iqgfZS!B2)gT|f&6Tb#g1qrv9q}|^7t+MxI`u`cUO_e3HV2MKiBDvwt6dl zY0#>-uV9^Z8dHQ|k`W`E4;AjxuB=d-b2KS1CZukNig!1&&zLxSanCmeMh|Se%89JfGRk2Cj1m*p$`O^sU4{raoj&$j9Bq^Hc zADr*bGvQifwr$Bdk~`Rtvi-@e+OzR*@#uI4+`B)%pvvS<+dP7!b6ZWRQCf=7JByN& zyHmc3UB!}kS)Q?79WCQn+#lIX4H)xY!%b8u45%BYJGqcvOuHJgrRzZMb$aKN3Mtkp z{H6}kD@!E5r28!~%0hkc9YIGKEIAJ>J|ZPA$9DeY$Fj9 ziN|>APEVLk@?v2Vnftc8zEi6-&3FmCK*sUHS1n?PHCqI`7HXWHWre!k;PvwKmM-ka zXe!uMJtEh&BREhM(Ahz}vJ>4}aD~>uA2he7yzA>{P9!w-Eq=MC)AHoUI&B9*L z(DF!LB$csv--s%&FRHS)niZ)Hieh%)cEsKm5w^9L{kdij{SE7NW=`l^ois>WktX80 zuid>KTKjaq9i7ivW$mitC{|@}Wi#E$sZDd9pQ0$}2%GZMHXi}SkycDiYyi%{ zhr$=gYw9DjUq->`IUNOr0xTSr#@QG|X7N)cUzZi-D@scB${l z%t+i^Qg)cjAw^7wycM>$i1IHM^WGT@HV};)fPAZ%T3l54Y`TqUAML>2@2`4wyqd%R zTv`+HWb}qC;|xLOd2s+2ia2g)EHv=l2>y@ex3(l#%S5AB*g2~V{?X1B@zA~1ciGDE z(nF4UX6426O+3ZoL%*4+7k_=s=>bKz^zc2e#+@mFbl_d?ieTiH?YxEQy`9cv2}nnB zN@HnA4X5-*8@Z{O&~USDLaO{UP@THzpgV2T5!KU5d}=05)m0iceMfSKN4fL3v5+QL zKO#CAKX5{FL2eT5a9MSNl+W;9oYm-3yxUxk3nKUi-sx4NWM=374k>||3O$w_nDgy*KG&)M|HDipeH1%m0|0Ig&?n>&DRgt~3w5A@XhRp3(? zbIGcY4}|kQ8IdXcdNHHWuSDFrXud;H>G#fyDz}m6zb7RbMipdT>`PdEh=7$nO4c#= zpOpCq-VN$Y%F-vkf}VgGB=oR#6*{22Tc3E($*19pbtNPZOSU&l3#82co zZ9A4cqz;v;`JoOhSb}8Z$K&7}$u+_A>X%CKKFcm5Mw-?-D}%v$r>E})ao9UuTBAvf zCnKyy?%p+JvtVrMR%+IuhBrR_(dFp;r*U*!O-EPo(}_oC-CK+PpwD<}!~$Vf#VH5L zr*4P`%qXNL(!$xxB#BwDHuUI-qLC{~!g(nPMd>MH5Ih+%i9+x%CkY54Nqu-hetA?%TIe=R^NCCh#3`|{;QLJSziY6(2IMR^F43Vr*=P>Q9N^tU z8WwmB!6rV>qLP5AgQ+gY3-<={;;K8By00}%GgYygn#2E}wS2U^n{?`?2`@u&R_45I z{m09HWGMpZWYX|092jbWE)9ioi?&s1wx1r${-DbeO>w<8WNdJTNCHvt*T3=XyM-KC z)r~8`M~v|8zJ(^kP7u<`yK%?;FER`F@6T^Df>Z}b18y#gv4=@mskkgT3vffw9p!fAUUP9<7EK?Yib9Y_NcpZc|NR zB~TR3-g81=Ex}3=tY&1)VYea@A>Y|zfdZb$muEQlt7d^3`>ANJP08)E$>ilWMNAkcf_8C(hR>3re|iINPYV_5&jh*7f(JL~fI z-dDknW_qp=^84aEa^dM3&{5oK4>fn$A>@d&W}xm~B!I|oLO~OkI$W%X5v_%X%$ySc zgQ@aj!@POjyn}ZXG}Ucqcb`6;Y?wh?=`GiA?&n1VK)P}U{DQ$fEaD~nWQ4M(H|2yG&gzdY8FzUMgfgY)&VwvBk_-_MNP|H(gzJGz zaA}Y12yrDzLS!}WYkc4CokUpjlPVa8MTK~b1z3wl>-uQjTAsJMEv-C7OZ@wG zo>FDxnNm3JN};tb4f}Fts{8?HP6R_HOsbe+pE~wZT_sUk1=McmH1p8Ukfh_@>S+QS zmiwDA!#WKbF-lUMVprSvE#=+DA7ULli>`}n24zUghI+f0hl|fm9}3bG>IB0C0vwfZ31UUP zb1_)o6wP({dRw0sx~OIVA;!_O4rSmhg_%?6x1w>$u?`0~T{P_RPVd0FqR$ed{dLYE zFQw~rdQHJH3Txg}Vu{p}LQsYcB!r1r23?=(`xl9dU)`~M|I?J&w>r9~gMFn9?GBp7 zNk^3~a7oVZ7IgXtvJ-O!Tu^S6LJsB=E{vn6pN0PmhCF`gL1&CzCN$o!He58XKaW=+ zK%k%qwi1^K^QID&`5A+lnO(yIyE&(rR2g#>A#e_dwAxkKgIpi1$kS5-=gi@z%b2jW7)F8&t@|_KrK}*A@1q-4aEik9tWqQ4^TXU}c-yfr>W}B_vm` zi-ZRSszPH>?;SU;FfoG0n5ikX=1AlTg!*$29bP@En!uFxl^)W$nD}NiaAVf32 zqr#3Vf^4#l@uc8#+$>H%yS0MYfU%G<%6E9YA36p*abi#9ggoeJtN1+dQ~0pBvgQx* z?s;6J*UkXiTQ&~?arP?pXF2xY*UaQQjVZGgNGh<@lStrjo*Mi><$bK^_bzlJ^C6QV zLi;Td-N?!CR@o~MCSsa!^1lWrGue-~sv^x6m@XyPP*dO7MJ@zM)k|h%u^h7hjCR$K z%$YNFA^M{g#SeOXqKd2Hg~k>grYGUdx%_73{clJ=wuvp?UTwsk!gX1F96og=$A+e1LnISc+xt6YE8Cz2HVq@1VvP$Ly zWS`0+v&bUr)O>_gKEQkrcBx7w|KB-%y8C&%l1x@9%1HO>dAd)ZK7HQL>5V5Na&+mD zlsvSGucYvln6$M)DC9hsSgm+;p`)}sXK zL84ek?F1lK_949}i>Qy}Mfr0{ft`vFD6*(6qWkPl@!)j~BitPB$O{)nv4ylp#e0gPXf+MRH;c-X4YhHY9Of+Y-R~f-Y}ZBnHoFr6Wy$^wZD5pc$N(KDYjXIj~=VdBd2~H^v;jMiGp(^Qk>Id&gCH&l4*{SYnE}25n<` z8BXp(zjDlHP)^*Ub&T2`tfz|+%0TC>xYP&YbQ-OTf-PIKy5RF<8lrTEFJoLardE)P zw(z-f8b@k$@RNk*q z2{x=iagz<@(Doty!-1(obtqiCy|ZuTCH<&19bG`>NA&sLY%cY`8kq?N(KUAthdeAm zyjNUzS-F{Vy zmps=CkoPFN+EZrl4ZNT?8n}=jPeU(0e=(=~+bdZ8k_Rb@cG-ja`J1Qfhd$q}$?o?0 zx83DmJHV8SB0W@%zDdv6WSZ13VfY@i*0b!l)O6*;A=mmr&sw{)*59;I{Hm|=u*-eB z+BIL=M{^%__cBwpOXaclfXD^7{5}^(=^RYnq&ctgmBXO=0BT{xrp7_U~SXqbq zyPK&!T9a{3#)fF&?sRQ^1J3j!WqqX7o5J{a&p5jW-E^6XL0)IE5rRVnAPLZ#-AMl6 zeR1WhX^%+yWY|9*hJ7pDuZ_a}_};quBGbVGHjk*Z5+Uch&9!~B&)VuBsHa^4aaviG z3H?S3vTwL>C1C2JRGombadZWals|c=D3Gxw6v5CjjWCf+$Yxah$a{%gk^974CzHM1 z%>}QM(V`DGBXLnoI4{#h6icJCEs<82XMDXik)vlUG-^439BjiHTO2 zr>GtIh2H5x$SaXVncCClxsTpbS924ZN3A5#=#scN-m7wN;E^RYz+~j=se=uB#)d_# z$lw3PU6g2>z81u`m6eY&T9 z6l#+5V7js9!KhgSpI5k8M{xc(^F&q{wmJY+cHrq4wkG;n1D~+%ZujkbPKilu;H)>j zLk^lHeB@#x-ncO}c#E`2^ChTJlPHlBTUBISm&;HEk{2JYudK*Qez>VJX-|;dcasi8 z*|WgkZP57@;WW2Y({j*GJdv2QAL{nSxt}Z73rF+=6S(i{NwOVq;OZGu-(5|It+Mo^ zdZKUXKjkD{+1q%iAES#ury1u*qjyIM5zA`i`pv#5;4*e*ud6zbDiO|Gs?J*bU2}ft zYzy1K=E{usB+kckM=h-FMGoQ4#yU^&K5YNH(KW@N1~kERQ2+e#k~T~N&>Hl~m5+>AHIE87zI z6YGj15VJYf`a$k9*fb{y>w3U7Tll?)-6P&u4 zM)od#Ge*6=|EOB9FA#SOb_rodaxXlRgzJZ9ElqFSIJFaaJW)ejr&Wod(oF121bo)Fv4f9gvZSZo*14KaS7KzsLxCI@20)23x$MQKiTkw zf@s8)&lSoxbcmkJ_nsb^@+R!;M?3_$$fxGUE*P>h^fazVlyj$n%KPpzsn?h!%9}Gt_6_-cdK~Rqspujffn(P_yWzrn40ZI; zy6&F*b%6PW~4|EKzLf^qv+oPUgR3)JdkNb{nIMiBB9r>-! z6BhIvu);S8%a}Ja)5NPwasi6pYE-TaSY?x28%#{Uf7qd*%;_>{iOW<7;3k1ZEtRcU z&Y+ZgwT~HTW>fB0raC3{+~hL087KU{^{fhsUn&JrWUpwo#TDSHZD!qtpGSUFy<;z`JBOnFhit64kK5U{EgnilY$% zDYYZ7#XOQU>l?cMQmK^k#kp?Zn(=gty_OZf;HcN?N#}Pci!YGA-;UkbX^&6SNmTZ=H;MkHx_t1c}7^s;*(#Z15&wJOP z9#9TnQSs8!-|nIIa8`Q;JdxxK`!J~hFag!`{7>|JORSlwLsl`ylR6BRBvO`fJw!0? z_ss~oneQN%$+sM*qd(T~b#fRo8ts!HSc^mH8#GN=Y}`?dz3Q=Eb(An>%U|1Up`@Bg zdYK-Ne!z3c@v^uwvyX|U9#)oB_}L7c;a;|)Z*h8HpN=23jni3wVTkAE)FaD;shp1{@-Hb?iQ9?!RffYrK-Fvh!Hx#a%cHg&1Jr*9j}Sx57i)Z~vQDE}F-0 zZ+G^l^J+S2^+6rtS-ykrT^Uj&ypL5D_3bwvc9^Ws`)IBa%ks9BQ?#m+mRHllqW|$W;Q&1+{oCw z8&||FF}!0fj#pLbC*sa;ubKEpY8-HYoqLn*tsYS_|3MGsRDssClg8?WQ4E;f`9Ew8G+4$d0Ecs@61JZ|g!YX>gKSK}6S!VQ*RRxbo4->;p zXGqSBa8aT*$VaKxA#w*Lc157ii9q_m+C3?ImtchSzcX3(#NV?P+0yB#k>Y-Y(Wi@F zjh3G*i_Uts{ka#l?MCz+JsaH`b&L(vp-IRt8}Azn686mV`z-^5ZdcU-ML5tp9luF_qDHx}3(NdZ$ zYQgd#Nb2>3r*+n3%mYyiL86SJ-Q$>r_^8VwFpEvH!tWa2#d5)#vpSd<@4(<@a(Kk#W;W}m~Ts#l00Svd-(8RTccZJ14cx~3FmJ_Q3W^5E2 zOY;uxxIN>&ygDVb>3xoGV|UWpuG!kcs`KhQ$M?W|_Fgaxf^~?QYxXm!nt4j4Vm`+6 zKjj!F_qDey!N;@XZR^E|)ijLOke-VrZi)uF9A`VVrw$XykEESqQcSqj*JKy4fa@7jH@AT%p4)rXf$4djf}6&d~Ij_+dT2) zu7@!jRlq%rWbPk(44a?b6Je4LL?Jb(N?fjh{3@n*7yJhR= z_~Rx|I*@)Y8(EezL@Zkl$W#3X#vt0+@{yGNQ=a+G=q3_nJI)xn6`8WXFnnHNvMe4`%=y4hGv73y$jJma~O zr4I7{jvZWjFxm1goUE+KV=>ZY)f~N5#l*6&qP2T|P<4Q?~7&0x_{u=<(0= z&(A4OC|63)7lEx1@w|&(FKa)@E~?Qjyj zXcwKFcW6paK?Syp2kW5jro+rnlhc$7R!`e>&I2Bua+_z2aRNu7(nK=>&PRmqq;`ZQ zF#nv(-3&?JMc0G8QyPiyc)OczrupN>sf;I*R;BTy~i!I8U zslAE0hgVvKjunYBkNUh*KlqPEWlP`o1QQPjI$MU}R@b~o4uO+OkaO82wnTYH(mKd- zsDeVKC#9oe`cA{l6!Ea}PeuA%U>mAF-`09VAqCZ=>2Hf7KiD0Ht@lJ_)IzXsCQt)} zNOO(Xy8%2ryX-}M1gNGB^F=5&ZXi&v_md*uBHCx5&9^i6Y2 z6B3nXuncK>EuUXnm8Ox$ACI|Qi6*)>1W7a!t@%~!Tsg7A#f1gy^~%UrEjD`ZXCJ6k z4}CVw)=0v+eEfI=RkcV}zN&87t^*S3>9IV9H7F^rU9Tjbyxn}V1mhbIcU@$2&sts& zK6-{*nfpoyUCpONka37%2mM`>oIONts~wY+fgV~LeyDcis!V=!Z+|7zVa0i{d5>k7}uK&J3{z(GT z;-H5GQ#aE0>^k~P-KF9Cg7~h3D8<4WgB=#gzwZU|spK0b2OCcgD4vACX2@gA4_Ekc zlkyDDdY0p}6Yu-JoIQoPluEZM>R73`jC79W15xtdRLkN7A&}zqAkGlJ2)<_r)aX}s z!|rrpgNBrcIA*tdWMDtW@xbhh?@%%4UJ>r>n(2(SE-yNIU4jvf*&F=1UL1C0*jw(j zLVW>8Lz+C=G1@=YoP?r|Txjn_@!F^qqHdVJR-ACd%~puY)0KUrUG*Tn#{|L>En0t& zZc&=La5UYRe3EZKZYGa1OW7E5S847(*W|Qvb{6IGaPCS}rLVP9k&MufAM7hU2EIpq zN+SwTGiAY>kpx_>;zDF@%Qb8pQ<$-}!bW2roT;wJ8K(41iPC$-3(pGH7x_}|%VRL!jqZFP^A%pp)^=%oH(T&Lak zBNub}?v$7h&Hyzzar?cM=;IFPrd{q9fZB=DT2O_nbuy0xD>`w@6lrAYqcsw$E8jo8lPNe$eCnH&<^QfpKKYaZ7SRUuGwMH6y zoOrB=-PTl>kjPuJVpmpfOtoCK?szcqzO69@p3amFFvHd9*WNa^(#@{1$05@Q4KQ25 zNF&mO)Ms)ORnGK=r^wx5*+CTMUg&tmxz%T_9JIe!(*-|w){1&j2w{m!t_)@!>h#yB zbgC6Wr5iBkxbYCLjg_C8Q8$qi#AuC-_B`gxo`|jU>}l#~Wv@P3-`OKG+@cCq-QjOK zgFkEXJh~a0u6sAp6rz9*i7V%dP=JiUwE>@&vnPXmZJAR8v=At^QH6_ z0@UAWZ{2gvm1mw5izc{#d-Gus&Snt2M(A-|9@v56l4(zMl*hI3*@!!x$KRHJT(wob zsQdHYCgRCinbHPIMh3dx5K7OL`4Fd);npL&cUJPa(Y8E}h-O%H?xFF^dUpIWi{6nh zn>{wrt$GIZCo}XrYT(>E^y|5^@h}p~FmmHt_kqrCz9Ww0`ZpYdlB(jv8e03S89H-8 dDWk}5J!%a8TOID>^Yj06_6JA)`_l1O{}&}jRx|(r diff --git a/data/locale/pt.qm b/data/locale/pt.qm deleted file mode 100644 index 44388c433bbfa6f3a7d273aa2a1c74a4d9ce67bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225556 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 diff --git a/data/locale/ru.qm b/data/locale/ru.qm deleted file mode 100644 index 31e56c32157cbd230398a1750fad82537789bf2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209794 zcmdqK31Ab|_CJ1RGD(xPO`)t-mawlarED#fLR$)yr3G3*P?5AvX{BvylLAFtKwMZv z1ypbW6%bJ5p&|kzZXkk)2%@5bD=H{%;DYaozt6dMCP`Q7d++=E{lEX`qbHfn+~wS} zpL6ddZqI9e;D?9qeXC82m!>}Y;)xWZm@!1umXyQ419l*Kra53IQr@`?un*D80|EO2 z-UQeW@D;!WqF1{ECX-UwA20>*C}1in*Tw@50elcJjg;xV0f&)NWFj&p6TMUbm+L;EJ3wQvq4A&n9oJq}^8ljJ4FyyeD1e!y zlw1Y)GSSnEh(a*#-Jf9kZlYH*05Qf_z9bre@2~D48rq&{W|)LOjsskd?}?cHTC}@? zX!tUs8$tzCo1@*~58*rd9KM#+W?vAE*h7jJ_XDc0l@X2k2hsT%MA=i&_cIcHv0K8g zH9+9}myJXd(9YbEfNMzk=&XS1Wx)RxLvVeUguiwonvAt58$om>`Uv?-!Y{EN{QWfM z1*pvUnCP06G`2=kLY3!nYsag@AL;e446lzG~nT-pUE`(b9`R{ z_#@zUGTn#ue#JzlZGf+qkTz)^sZn1_*zN#nIlW0qT1#4fInj@|2&fGDp0tANas4aO zZZ9Nd@N&}b7)k2gR|Bpgb+Ajq5m%D7WIn0Q7n1gP1@NW{sJ?nHY3tu5wRAmcPx?r; zos+QfAEZ5Z5^Hh~Y1?iky7ria+iwDVl;}u50hJH!fVgi?MYe-==^=Q9cK+fCXB>xd?zzYm_n^V3NCE|!#rzmfK1Hl9Brp!(7c67Gp5 z?br51-qmD|L_d}=2}jN&bIS!pUyPIRt3zaN39Lv^}mvN8`_JyiOjno5Bgci{Nk;o?ohy1ZmiGc6!IMC{Lk%V zz4m*ElwT?IvXi9ldW%~A3OVxnEfT)%qptV0Cw2Ox)D`Qk7B!=;FJN8%JWpMLXUhCd z!bzV?_{8%PUhFEMa%U?E y?LA4tx9_EH-9Rrz2dLYke~?-{lDaKMyMKjJw-tK< z2T`{@xL(qTdRQ_@{p?@VYa#l-@+0bf0K5m(_R0SYqO%wEEr;Cs@(W6s27Y+uK1%qc z7pXUNqy7i;NPYAJ8vJKAsV`hjY2g=1ec%wKt(Z(INMPuky`r#>O|@}@L=;kBfWSW3h1NBfi4)9~%j;(8Vh-}x7*=6h)PH?v7?SSVrh z=V|x_$i2&tQ+n}M+;@kB?GtE3r#+;udyqzSn+K8IhDIa~#_uoDh#jE2iE||MHlUG@ z%_Vx`TN<@8hm;>arqO-oV|eK_`sOGM`hbASc{`0>xR7W%QATI*XNxq-xTAoSpM8{> zGn?q9C>k>n^ZKHtfU0FKW!*fU=(P)!H8+Q7PfyBv5^{KDFUp>bcDC=P>?e=n`!32p zfN{U_s1CoU>~Cffecg}7kKIhvzJkV2y_b}8-2_zEm}&gAE5HYPC4B1$O~?Ts?ocJ% zyG_E=18G75WZf_aO<1^s)Wq!)E^P+5juhWr0;+p22RujWg6C+W9qoQLLc(u)(!@gG z-P({Q{)zi%&X(|#<8(zh=sLvlUb_(OZlS9zfZDBebzd7PeYeon|J(pR znoCpM*OA(G7+@LT%{2AK#iZ<7ET9^@oN^aUfxf(ha?gW)9doI`ZYCx4Dk|LjEYX>R z0xCNl0;+>Mlh4fSQb98YLf%AwPjhZ~fRqQ`q#GKKC*__QbmO1xfS1o{?uG%R&J3kn z2ecq1elp#4%{@eeQt95eSCTqs1g&^rHYtO;(!)ooMn&yUcNV--Y+=LA%)a?(eG$CBD+9etEp0{9Dk zsw^RO<*jsfBJ7O@@6&~cp`X7BRjAnrQr|hPSQq@0)O}qPTh2~W8|6wE6|aO{j3i}) zR|$^<9WL6cgr_Ev@>{afs0YULc?+e5(+KzjN zlt$;39ut<3a&(o1XSykIo0kx6wkrJ^v<2Uqm3|(~=jx}Fgd3hC^}g0h!X2-Xdfny9 zfCoy5n(kEw9J3QW-$EJqlzq743MD=AG?C3V;Lq`v%^?JB6d4NW0 zOGUztE@dkBH}*Bf#dOi*f>L7e?(_hE6Lu?0-z_I~(P(9_3OwDjQrSNrdc8DBIq*~=}Rv-c*i#--Jx+Ugd);yOOf=J>_`(LQ>9;P)?YekUDv+ za$;d5(S|L`iT6Q&-s=QZU)!RbB-k`dcPpP1Jxj{34V6!JeuQ;9q&&s(T1sIQ8 z`Qr@-sUNjdDIWAR{uxz$swF9lbhvnrYH~q8T$iuf7Cc5uN=LQf`eS6$?pIsB8iw^R zP&@CMLdubr0;&g+)h^9}pA1sFzq%DB_HqFg-|K43LE!ze*=p})`0v}eb-wZcGD`NUJ+_KUr%^P9p^cV`Tee5(_=T$>~J;bd93U3h7xAaP<O(F^A4me`B+^T4?64^tu9GD1-o&fdXEEk^x8+& z2ZuopCa(rWe`)^&JVok|n*e_yH8os)@Z^s~4-QmUpNk>o)mRA+-mI=4^d+gG*Gt%R zwz}b-E~Jj^t!`KbIO>qPVL3xZ-Ebe^=m*s&&Tc35st43V>MmCIoH+xz@Qb?dmCs3O`-J*dLK3Op+^QZ*x|`IYdnC+osqeh7nUrz& zsz-*cC(1e|;hXE!BO9^q<4Ywx^uBuJ1^#}Sgooy+?|!!ta-^AhY|e4`GtJd6e4yw1 zx2Rvd`~oTENKe}Vn~xq9ZCX{7Gnq@EpqE7AI8>Q85HB&GQk>iIXZeoc$iU(bLJ z<9AB<#RT=j-n~SYw@fB4*5j;8K(%qagnt#7Osg)EGIWP2QfmZz_j6N|A&{%7J4}~# zI7778Vrp5Q4*G3jYI_25X4jt*9_Vc95ZWJp!^ft$pT`oljxqH*-3<&`izt8mWJ};>`xu&(PF#jQ6n%2eurk0x4CIP0XrnMP> zgO{7u&-#*-n17j`jDkFAz2CI?-c_U){AGH&-94l(%rI?l0Xn)R(zG-AMxyJ-nqK@G za%|sj3E%$B^x{u9lF4+ZY0t!YSpTV}JufaJrQ34T8=pe1v{`C8G)4s+XL|b|Uyz!g zYI^6%TcC#~nU3~7O*HUo0hOz6F@1Ol>o{h&>BINtllo$&>Erva1)k2DzWnetqOe@k zse8d+FKjb?^Dx${!&=js6ZpO>()8U*jQ7Ma)9+uy-u&_^(_hmZq*xDW=9Cq%Q$n@S zfhNf1g<8Zh;HB(ItwAHmi|aDA$VnTapChy;FUG)5yG3icYys@KD>dg1_)SfAX`S!h zOv-bQYMo!%Pf9_B*5$Mt^K7m4j0K;xIHC1SKtKCTTK~JJz~6XXOH4FFetaNd(>Jx` zFxZ(tc(tL)NklKK&_+CECdDyS8~N68QYUEI==P8c-R{;#-{r%7JG9YHoTD_)SJKIM}_*rebWdy06 z_Gv}GLBBt?QY*VKg2>ihn|Y%f{?kBh=DfY6yt_ie?^FTRMja%4_jYX-#-pzOU8{H~ z8~)X+5;oqiU2k7T>YX=gw^Q{F`PR9zUHrS%w9tt|J{h%#e_Bhd- zzi11eDkrjjBH`u7C2Uck!`~!qnIfRl=AeXa8%fytptfi|Vi9Hg1yoY*(w1yOEXDhk zcF$Vy?Xc0>((C7v`us?3MLJ>?>90%p$Z!FbWn%449|k9bB~ zT?o7A?nT<_O~CujA8Tv20KexiXzRj&uVY_pkMFn$f9aUE@wz8S?bt+na>>u|=N18; z1KbS=y;SlO;001W%>n-a90d3;zW6}b*2lbHe4xT^RFd*^fB$p)6gFi&=146Z`YpuC*b(K622X)ZJNCk_U&!jrsrOV z{#~wZZvGh2JHKkr-tz=0ANJRtD}Y_qeX4}9>DsnNDX`zJ)wa!oo*wjww(VEUyYU`v z*PCmh|3A@Qe6}<25Tfng3wdQZr|mwroRri)+JO@eqT2^)Z>{^Dl+g#YLvc}v!#ppb zGB{Q{-1%k5zY^{JoBDuXHfty5KZ$tStAHPo8vnWWIKq^mpSCZ%H!8tV2BR$TV}$KG3hvzGCjxpg+cW+#LVJt3*$> zGN;YnOtdu2Jao$x#7A06*y(oj@Oa>@q@#I^8{<=NHjll37vyn-dF+FbCtnwt$6g!) zzi*y-@`k;Lzf3b{I1!R_By^FFuOkN3jgj!bN=(tlec_jE>OWI zhn(hugkF$?KbQ*!ybF7AjQQH^8Kiv75OL9uqs&Fm?}6NKN%+NW0;(Y&n@cx>uD?Z-U#`OG(XVo1sNm~Tyn9Bg<{!ppMFw@n8fy?e-f$H=P@ z=Xt_>$Cj?}pNEdnP`x^-ld~3dcG3>KQ zn|UQcZg>09yy`$Msm~OfS2uzm_32FWBbO86K3A9@9hXMRHA&`2e?A4hG1a_g%eCOw zP3ATK%pi45U-R1h4Ul_BB>Zl$fa<$1n;(B+HmO~%G_POegZ>;MVV8%^Pu@L@)MEq9 zTb{%9?FY#$>>`OM=E zQYXfme*)hq@iy}>H+%*^e~0;3#PSr+eDj}^QxO-~ZlU!Vq)fffVwrLXcHMbP*u{pV ztlwg3m?6;)^#*crwA#x$EsvW7bN-RB>LeIXYSb9DPKKN>ZrSJ9N z+vz7P{ik6(FTP|+{1yFOea13KyOQYhH!P`pK|k-_BA^;MOv20dNw{v3W!M@7lhVGk zj7+!;a%-7obOQL}^A?tj)d{4&+SW4mbQeWEC<<>FH5cg>$;TJzh`1J8KQYJlZ z+5A)-=C4|w=?8hXXrzRTb1d7R247#XUcyO@$ce}mri=7coRVAn0}AJTyR zG5Z1uo7^1|<-ADBma>qjNvlXbUJ$}^mrlZ> z4k4W#?-Di53+eJ>E6gt@r0X!W_vDF??u&nZI^7O8oLI!+lLOk?}ki=)RV6WdEk~A6L-Mc~tZG8oNbs;3R6Zm&kVMzK*FA+VH z5i)*5I#JSA0Tq`ygyk~rc_rk^rywty<%C>yMGPs9*Fs#Eu^gKhk{h*~)D7K3a^FFG z>%pRsf)Nvdmz0pgWYBx$4IzckV7%?F4=EbzKybKqNO26lH&`Ar^JVbmaxJ7Hv;*Q_ zeFaofJ`7pF@}=?lkb6D{o@Wh{@TX@&?z2H}T|5$U|I#SviC01%xEAYl>dBA?cH9fS zmK?(Jk#5==@_HO{Ht7ix?)xR=^{YRJoE;MKdfoz}mbZm`{T1>rn^uQ>w`v~ZyAcw; zlM-@v3HYS@ypUh-0RCrGg!~rw8uZJVkl&VlPBgNefJ)b?A-^AO2fyKkkUuT2lHy!q z)jo2N+AGa!$+8n|d&z1yH6V3M2Wx}#ptr@_tquF*`t$RwjkZHiKKQ4#(Tk7||7dN! z?Dzwa$Hmt6Z-XwL`^FmGA|3JUgVyLoz)|_u=uvBhluZtvs;JtSV_u>e^`gjYJ+(Cm)5bZj*^jjzPIKM zGDE&yW6irA^9#FL!e(Qv?lgszH7l&{C&3Rrev`1*U)F1fEGK1JhPAji;!q!Lu$EkR z4Dr_W))`sflk$2;>&-{GnhrWGNKsEAv3Ev%WeMDPI>a{lO zh6PJV`LT)hsb_Xz-TPX%{GNw=)>`Y+Z<|RS*BP*!)U4Llt@F>2+F_t|+sz|L`6bu- z{A#uvJ6Lx_fqvh(-MX{l3FJYG1XKn+D4@E!r*-GP3q&&pS$CcSzAa|!t}(ohtF13D z1^o;iVSRNw_;AL20hQEq)&m=VfjnI)Vds0T2Yx+DU~uc3x$&f~pJRRV=+#)C77{j# zupVxW`DP5V9{Hyme!1ED=^E&Rl$))ezW+P?^KRD9GruP_{2uF<#kr)smu&s&)N`c# zbiehRN$~pk@B9eEefu*VA7jFEqy%(+B;3_^qv1C)kav_t^R_NP``Dt1bREjOX165`No5K=o)x zTf&GYr2e(Rmaq-$d^pE8?ADb;2jgt%zDbCCF0iHl6M4$v586ggy9oK#%$E7+mxwcJ zw(Rc^r`|unHt7)P)pFWakPdmZ`V#@wpGMlIA4h)gsaI@8@yHFoane@W{S@#q)mFL| z_*^^9HnSDv(Wh|&D*3UtS<4YeO0TfZS(5`fHQ#pgq9nxG`wFO@x7p?aHjlWqR3 zkHOBEZ@cx6-9*kwwma@=0zJRjc4tZw;tH?ZmOQY8)SG{>-Ivmn)Hh>o_nn>xyZ5+l z#ZQpeSI5{M+=zAG@(0; zYM<@Yb*+d#e#-V!=pV4Nzqg(H%Y?Y`AGY7G0v~<1Pe8TNR}%hYxBY?Z>OVfV{cH0_ z$WN}e{W<;|?!VHm9D-fe`enQNCFsGs*{-#F7W%23UAq9g=ZPr0%@+rM=QF$g+1aFa z&agKa1^IcXtG&_n39#F5v$uN~d|o)k-r?w0*v${wJAKj^@uEz7H`glYvz7MfF{Pv& z`pDj6NgC{z1@`!HuzxR$vM02@6>(6nJz?+<$ZNN<_rK;4DchUchu&6!ce+@;K(mx%El zenmj_;Sjrf2mE^TUVDCHv|IY9JwN+i=tHM{TKf*9Ty@r7oC7=J+L?B5X9wyKG<$jT z)5z~!W}kWUKVkpRwa;7vIr7jP`>f}?!mj_we%sMO;Lk7Yi|vpXFEy8N-=p@$o!Y?f z{MLT|5Xg(Oj|-@{)=2o%X$j9Cx35?TdK|ONzTzn4RQu=bt6JG0|MKnY$79{@JZfJ* zuN-iaeZx4&gQ?r>n^s}nmZ|nFclIP@YO?*gH-V=mL+#J~oyTT zsB`$-zH8@FQa<89whJ1U&e&D$+Xupa5&E;mquMgYb+ygwnbDjO*2&~7Zc>B>I$4I&9HT$~_GDzLF z#Qwpe@8LHcw12o6sH5u=qLRNtBb&mnTi-GC@@v39H%$(0@uMB`{jty%h(D=WD??kQ zCm{azRcPB7v=`Piw7tCybnc>1yoMn5_`K+{l(0!B2?x#(^@e9duJsBn-w!$4V0Y*phn>(r4}~uH6#Tug zUFf3rB}7NcLKiLlkkm;lLKjDXPg=bYde3`k@43FA_buHB`^Of#deC|3vH79v5dWev zy(F9*6}oZhZla%G4Bd1S#y{5-FjC6{E-hrcik}#_&Xi?>L+oC6MrmW z$3H^%#B*Fk4SgMYn|_@f`ucP6&?ix$Z&53v0r!T!^&8~hp;4hndY^*bayInn{Zm0# zr$UczSq{77nb42oAZI@49r{rs=;Y)>EMS(P0hQ zuHBsw*6iLG*r7j2__IwwD=yt!sj$16@n^%NIfBQZ1gTIDF zpF4y2=b*4YCsrcv-y#!tZG&0zxvP9Y_3OxVEvh;#HP2^-aC9rB)^gpKKREvfe& z4x4bX5$v|eFxLXakJN!-xt6x@S98L0V{+k#KO*7f4RrXRge{&4%RRl36z?|zs(Y>r z%R7j6ha?H8#9x%~)HPwgb)cuY?ZbReh9fT5AZ*S&tXIhwVT)~D5D&RC?9PMWmz_U{ zE&2TbsrP>vwsi9$#BB@19vH8ZYMUWp;~T;@9)@4Br;&t*lEa?3ekakq)&i>Qw}m~i z8trs`KWvLbgZ`Nrwq@sjQp=Zzy`XsEzwHg%b^9vtM}dSrr-r@w9_VOFR@lp@k0by5 zT-cswCrRn`V%VO`mXP}7HDL$-SVGG6%fb#3=>O<1VJGi{JU{nz*k=g~5$9(607eRB?eWlY$wY+vs!mGJFOVHfWB3;x4M0o87w zg#9%YbeT{b_SZDn6@Bgv*Szo-b~O$+cfHw(8+K1AxK-0<*cLH`$i3~#sr_O2y9 zyiwT`kcS7uJLjE)9r06m%$r#EyG`M-iVgY0>%wDIz|;%ju_nNj1>vz8VDjbRgSV8! zo;xC-(r=H1Up^8(aVpwTcZN^?3hgdG8-A7A1aX_3aMyX%SLA#Wo&$SXz2lDX+}Az? zU9^z!%a0^H(^x=t&=(SJDUtB69^v^pkee-U2^V(Ms2SmNhGYDLPlV6;Fox94cZbhi zg?_&c*Wsz~xsUMo<>B*h$UxlkaQK2O(Bs43gfF`5T~eAp8-DlVy~yi@3#gu-6Tb3U z#N+ym4u5dKY1oek!yi803UznI;j7rbS`r%m#Dy668<7I4=az&&oxc$B`mgY(pNC%b zEeU@%1AfE6zTw*@A4i;TM);1;N{IUX8vg1<=)1{F!}rHdK|aG2zJD9qd3k2|;js@O zKmJnqJI6sUEysr+TabYH^bk;Sj}1TGC5e=gpND^HI)nA;68`C;y`=WLG5k}ETOE)c z{>AfekrMk(_*Xrqkn-3#0o8Nn@E!NtxBn(R^be{Mg?dQLR8X z6}L+G^ArJIl0q(sekB<)B4 zGq*T~?L9^GRiR_dmX(Mbv~!I8Jc($*Ime_u7fF4iz2oY$=x2VW! zeOnzRANE1JXB{Oc0Q)rq1b<9h>9{Em^0MrlwabZ5}o|2m*R6FGA$&Vw#=3I$-oBa{t z_uPay%JUITM`0YdUKP=N-L0UrDU$g8cq>5uI)Uo)hnm==|MgQZi0P zbm{diDY*|s^g94Lidhsfs8u@b%YhN8zX1P>Y!O3_B$3)}NW_p6ps%hkMx-^u^UZ&a zNI!8B_UPLYBMNsT{(GB*lirIMJ!dEEr&ST-JFbP?+ZA!ek=?K}BO@kQ0Gu4o+LJ^;I5!iy3f?j7O&fWJ?d@a>Zkh3Pi< zbHfBwPFxdFe6~0A-@=H}4^h`}&9@O1FP|c1al?q47Tp8Cv{%G}2X?`a-x0CmZmeJT zRuKY{b?N zAeYvrMQnQk^h^}->bi8;@evVwMqz&QrbfK(Xh>wriFj{gBKlbqaops{DEx?e7@5DJ$e)s7kgv8p7OF>cfO}=nmeY%?Q5Hq z=q+`XIK94#BKN?yPM>?0FFMbi>nU^j3OyzLo#iEY?y{o7688XSuBXUT*1ugW{+FLW zplwne%_jEXR+AEYxbP1n=^@9|LyR*7Lk>;O@s#_96uOE$(-cqvMQW|JB(1kL7=L?e z1GPR{AOHN!;^rD3b84-~sSOg3^}^p+EfN3q!P1PP(fBXR--ul_;v6-4bXJWmg=r16 zI4uR;57tKdp9)DX_Z4``yfr>D6=UWuBP$#^=Juj8HpdSSYI#|iyTs=#a+ORg zcTICUOFTZOugq2AEpqwXdCtzBGG__cb%xuSRx+)q&|A~M|KNOm+FEcu?vA=jNQaqT7k?KmCqQiQ+&c7hcJ2_@qeHLm&apmc2gsHVeY(`xsYPoD&cEE>glSB22H)5; z84F&RU+6AN#hRCSih|_3RcoX{SZgf;Pff@ib*ZNs<0>I(nbko(log|uh5fR z_Ii50)-;8BQ+JyAfG&zIX8;L|Cyu?E8 z0`>{Qf>jQ?LPrBPGPJPBJ*Lc)>-Ks*WfKbBGkGM+Nmc_8Ll7^zfMf=d0*M9QFkEFd z#$u0^P=6q8q(C{dOR(VWCxj=n8mm4QpF_}cf;Ir6->F67pHvfAIMG&rd}kKyjhK5aeOUv%7?PtK2`}{XHnsFx3kFODaE(wVox4A_WE39K4_La zr@JICy3_-~4|U-Z5~3n{hO4L?H}TJ2j}y|zg^pOSK~cGVG0rRxhVFyDs1R3Swc<|E z3#${BDz z=rXY0tUcriB(*SyC87VJxEi3ipxNN}e`hYz0AbEzzVOdXSEwu*qyfjcfmJO=B{9dG zz`VhHWsKD@!dSHm2?IDvv?>L+(SwvPe9bT?`EKSBmJp2N0M|*g(O3iKLGUX6LcNQ> zED(FM5hlz!#*>@{_YqhwG<{7{9|=46)7uG z_Eea>m~DB?vMnKE@JlK)AMQs__-5G0Yy_m@nUPu=u8xMHAA-5|7p=sJv7~?i2MKi^ z+#9QSZik)nBu)Bd!Ah!B`X?X?P$$y|XfvlAYf&Po0;Cb2b7Q_`j!nR50#4iZiG`4`f@!9gcyfYFG%3||Gs`KWcrnh2EN0n^ zgKY)Q5XKjayq>YK9i%lqaBP-;$vQy`k-H(riYl_9?4DPd&-mTEs1YQyrN&%>hgI;V;;ZF&ZKdhD#Xd;e}IbG8b?Gn1DGQlWgVD9sjr0Xkm zu7BC0fs$YnGM1Yi;~*CSXp)kZofKh^ZLT(8Ml(|}%yf8y&B1Q@}FUfT~ z^IhncW_rEVM^f*|*CpC$jo4WOu*>CQE|`&jE+Hup&uJM$SZH1@1~SG|<`Wew!n5#HxaY6Z^UdnHRasVq%0?s2Oc-5z1n9TvY+G(qz?-$@rU((3^(> zLL)Of+WU(Uo(eBKqs5Q7AY@8Ep-&ZrMW*G!5=9TX zf~^x(S3vqzjazZDGD)Z^8Jm*69Y;~v$YztC6%AW1?AWlw%qy8FtRv3nhzOj2;+Koz zz>t_0J*~)-1KsbEq^_rHYDV^O1oI8IoK+_~^J4*}O;&YbS)ogn&A;icFyGdN-okSQbcp;63%9+h(Xpd^1iT$ z*r?|0mmn?lTAK`mIqhs*MKK_tDKs)KnnZ{*x{7|NjH;pa?@)FJG)jAaI0nX17LH`Z z`e~)_IqmYHR-q(Vv{V|1+E`?A*hOIG?Tddbul4V^%3+nN0aL~eHh#yywv}TN*(vDOhUHny|WOKbKjMsgnb-{4IqYEqpe7dKLzJU53Iq7ZN->*(+ze zI0rTg{RiWLT{pfu99LQEarlhYv(!)AjvQ?~`m~D}4P!45u$JPJugSoc6gU3IzH;MiOjlN`2c?%s5yJ2j@DnPy|-!y&Q(k@RsO^C^6;yfW8Jk&X-mui%%@ z;HsGzXF6vd;LLHl(jP!`<>iSdg*x@ZDMS$3FQbgeGqY))JKt4agbXD=J+q(?a!1Cb z^Ki+_ISL`Oe1*kGt_tsvQ>d;YWIIdY3VNNLvI+|Gecgt1;_RpJ7X8TwNHs*##5e;( ztX&)^SN#t%h4j2xCrFlHZ58QXW@d)KBI}|Q*DA9{pbbe-f_McBfdp{3jQq+N=l{2e zD=mn)9;`xKZlo35e~-GvBhD&h#gT)WX(R2wKpS!Y7HzOXr*wUbsG3nHc{rX1tC6gQQ04Sr=ujD-wS zBP#QBbDrnHnKTGQYFo|yY#X%VORB7RHSNu%5{QWF3LF&2Z(}Pv%bNP!wbWOBwl;%!}0_0J{GVFEWz@vpM@kHQ7A>JC}D+eU}$z z>;JR0rB(md+6I^vmIm0sZ=VWH9L&H0w$qs%cQeaL+l5!2EeW=q*a|^WtoY6m8`xAq z%rdD8Hko{ND>uIk8Fv2eXAHkS76cBJE7Ml_g=J8kGYY+hoD(iajJ~`~R`(b#Y$a<@ z=_tYoHCMD%u4iMnh64@kpcz3eE<{E`9il;&00)T=wygYim0y_&tgw{`aU-w+bp}zy zRu8w&7FHiU@Xp*~*yn*@8mmyYpqyG~j6yey@vW-u&S_FnPL1D~=h!A<>uhKxo6YEx zEl;Up4L6oY!q3RcwSaxJG-!>g6ozpHgtJo%aHCjG6{1#)lPG>6 z1|!Ibf#f0_Q6Z|r;N3vtNs-2>72Jdb3}*yu7iu^Hr6s0b^Ww7S9Vkzd+N5&rw?qkx zD>g0-jZ(cphnFef`v*wESjZrv0P6%$nN&L}x$s4lu?Rsf?LfGzqKL-8YONlQ5|0pU zDrkf2{v;L1G;%a3Ojd3RYZ(ZTG|d#v_i;p%DbXn02)4s3Pog@#8SySjn^8<{NR-M< z94pZ3;YPy`VPAIy`Zo$ff;}5Xy1^Z+tdqeTY{g3|<%MC%VuUT^H>TXmK^NHqygmHF zzBdOf*aMPxqVPoUS+Jq@Y|zp`Bj+O8fCxfvc@Ap15w0jMMAR6WnQ3f>L!Nj=35jq8 z49bP}H5N)zw-988O|OT*K-8Wbk=~JU3Rw@u)%1GY16^{|gL6HQWL$^OVOXKo-LC22 z6a0XNi`*67+Sx!kEW%dopK)w~WiU$yUh@<|+>FEOl)%{ee@zKe%g8W*!H#-LAwU=S z#1V{4%!O%+9SSz^I3&e>eD#17>mZ(;5t5SIB_urr_s9uR)>2XcNZrO%C@D!^l?G+i zfE-gGYYACtCtZ}XRm%yG!s22`dicu_PDkm-r1@+!D83bACay5SH_ZL9#A7lw+oj6BfcNY+W}uQA#TyB6C8;V+<{^1M9eEuj`_ zm+z=eXMGzSRW_n-#x96JOq!PvrI`AHv9!};&Pd0mA{xedyUgLzE!ECv^qNKC^o(sGW^mQiyT#r z*=xtw@M>Y2ss*Ji#A@(#E78V;pxLz#Djt9V$PQ|*k$7=R_Lxw|Y= zobzJ?^-}%=*ORu!0Uu_%(9+wQo z&I-5aPjLB19hxfr#S&Ms*b-bva}7Z8Og&P1LnHbdF{gsp%6M*dJkGmr*%1dD3-?jt z92ll2Md{NE{^lZBi|G|fZ9DXAdx?fq{8Go*CCX-`A$Ro5v{>9)Wskq>%fwC!I41$D ziWrmUQnPDYy`)P}Ebk!DMS#B(yR7P}2g-Yk{kBzwOb_6&(n4UmEJoRQ!v-;bKMk_n zz8<-}G_W3Vl!ho6uVaN4!s6i3veV1PT{_at1Hcgh?%=TNaNTbR-logE$z&meo6=aS z4cRQZ4L_mQ;E;a~ee*o!2*O4~D`F!f>|i0!MU+Gjjc`08C}6@7!Aq_d+g5V-QD62q zFrwN<8#wzSNV@Ua1G&?gEF%JRf-UlT5q<-$la3EIlVgLn4A_U3xvwjCm*mP_(#=y` zUT+G*LMS!>TUXnv&O5f72W@cIh9#$GaJO|oSl2FX^DwyHVy{BoZCJomZMByEbuf=h z&Q8y~bl;5yGqR)^E+h_@=m%uIWgH*pQjhK(l~L#)hRu&a9!jI?_>+6(8wkD$+9K_5 zK;!w>`7E}@W7R6n!2h&ajK9vu+e7FkF;NBi4Xkll`wtd=5{@YGH)zc&K)KPd@#&(? zR99J%D;-ghG8`vR;tLYw?3-~LQY~>53AR)v)ex=|5DGW-5*mBpicm1EP`xbc3)#<; z^3h1GVwwD73T2vh4ngcE*T=((3bcbydc|YVkqUPBXnLWzzl{+6Sc3XI-x$xgf{`H4 zCb(SGR|i~ldunDz_PESZqteFJr!iJiDY~{3CYgUomQ=2$FRD)?Y#he|LmboN_$JOD zfQSfIUAlVqH{K|K87HJJ=Ol!7z7+0SVYs~2k$dCQ1<)>f;_6Opum}qCN2FFjkn4-0 zrz;YF5ZSEIuk+HRn??Jp*-58CTE zb>&iXZG{zU0w1#p@X2-hO(5W#)KID4V07}BG3gn@oI}TFq(YzxX?n@VX*8vyz$YEa zh`LBMVs!eDbm!lr*CD!wXU68Ui}++8=p*!4h#m{EaE7jAmW}7aFQKoP73rzUJ>LWPrtUt4_9fNjVNsWLve6_@5UK2}2(5q#Ci?f$vCqw!3=W6LT08deI9_LLK-EiIa3340Eb+K)MoJ*X zSZE*tTPA>nL2|R2I4Q$_7*noaF?9BJal)$c?=wwXL7#R z!{@tsM0Bz?{IYf!ts84K&pXaf2)yAy@65>*P}jOO#*Pe}TL4Ro8H|Yvy4&B9x#Msg zBgM}%Dd=tb3975Uo1=0ay)BB&fsfxGCZr2%*%6_mudXa9-=?~E~a zMT{hMaF$HhkU?}bHh@7ScTjLFcif}MP`oHMG%I!6ypGwqCy<~C(mfntGMM# z$ZTaz>%u#}jMbDGw_y9ms*gh`=$alMga!TAXdwUN|F`cZ@a zCe0ZhoSae@4xQMs#yRk+nCyvjUYPhB`rB$SF4gHrXV192l)9R2RZFvR)VuaZ<9gTK zXbZj3pp^pgV5HTW9F9FBf`TqJ&YGL7X_WpZ>pRLIvZ!H{5x}NSBhLB`vT}=62N~Sr zrN$ViwGU`7taBu2ioIIaXDkj`V+;Z0Y9RJ9kPr0JLE{M?6kR!oddjdB-RG2IqAps9 zM0{789%-VnU~z38;?8wd@Y9wwakPqXW?P^v&VL3Bh7#BUFgEB|1BZOVDNlD1#$j+H zR@A?7>25#&$PpfpW?t}Z%|!$|8O+aTc5)h2&!77r3!R8a+mJGBI4Yb~b);Ot=O3v| zngWsXfGvzQ2yGE^wBF$1hRSP*(iWEJUOb1cg3Mn`KIk|c|B&o3hV`>(ctkoTD%rzP zT1Ob6tu?M34}Lx-lNW@kC!(976UO)a&mYLnM*P?2(SS>iyq zpoju{#WI)~$eysp!zXMZ+v6Wx=f|nmmc8Ugd845=d>%MHx|mV5JN@AIrpbb;jWc zMtVSc3m|j+9-Nco8eQql1ZTdag~bII{96!OnAnkMf~oK`+I*oje8vW9ssG!sW}^BJZ+@GlQ_4i$W?vcPV2@xT^x0%mWv4@CwRb7vd{uOIt+ zvbvEm6F2~==H4r}jba+Cj`569WaJ;Q=-H@ElSMzl^udAmOst2#meocf=gTz9#yD>U zkq6^&OFS!1jPR+NA{7D1Wk+aBT#ZPqE+de z7<6S+Tgv_AOz(Vj8z+~fM;g2yBmET0Cm-_au)WG$%(LYdc^2$ja*eG#`fDI?C%5qM z`mh%&PjWR}F~%>)U!<~TisxTA4lk;fbexLy7D1|L^uj%J6jncM4BS2v2kd)r>^<{% zppKLMZElNaBj$=x*T$f2jcn|o@ZSt0FDTNHY z2KHw%F1Z~MuB;?+I6lB~f#n$M9jqe08GZ1&a-3Vr=8@`%i1u5_n$Nlw#EK5IAwofmg>|YG_O; zwYZhw`AfOa_a$RpCD-WfRH0WXwI!Bn;t!@*UPs>b8#pJ+kQgjOcrD~A%N683B>|3S z>1Al0V9ih)M+akv<&l(7Oh1wqnL;XQX57OZ5`3tDl*CaOF-uiJLC#h+MTML#@T9~h zpEB*|Xz z*x48$q)|W*G6l%>5~CAyliy`(UY_2{)Kt|X- z>W2|A?-=oHqdg;z%)Rg|g_Oa4#(CXXIp!I|Vl`(;6C2x8IR1&8M0trk+1`cFAg82I zQiKz%++~HxV;~slmWOKc_8t8cS8w4oK6zQ}c|eu8H~`CwgE?gp9oI`Csw_`c#ajq? zYfxrMk4zlT;6+RtyQHzQu8!ZY&rcEC*@3-KKa!x!=ITc?4`a@8hf5V;-?CKU9 zcglU7rStDylTXFS{UEYkuEOGnP)(1MaP<~Y{afid6e7(i^ptz$UGijWeyCGkSw$yf z2;7o^YM=+&|gjvwK)J1b*{Q{6>4q(%-lX#E&} z;(T3RiQu(#<@-aXe0Fuv$!TTq8BrIC{qthmm+V|pgWUHdkDX@>O7waITfb(A~`mgWFPL#DKF;f;6%*er4*C}4#DdqjAM~O)nG0U9>jdSs8mC4TtBiFX&x80 z0!cdOcu19H6jUSU=|@y2J(O)wbtljWR}mNo-091dTjW6%4-YMHxi6kHe z6`O#P*2KF60xTmBUExLKvk@6Ze4D)LEp_MeOCW-iP`p_B#8UMnf_~bss4HRtpdUXk z(5G)MX1R5a!N^e>UJz#p*o%rq1eC4uLAXQO zR)aBe!v>e*FplnIUrSn+(l%miguNEF2Bl5U7Bxz9MSJWg2hIu0)UQe3h0AxP4`o;z z#?i-Yy|CRNcU~C3vh|TBtRKU^fK3`SYW9AmZI0Q(cgw?S7Ww^cqwUcgs}R5Qi`!=4 zUzzUTRkGc*;C-C$WP?d-(`N{9S3rdD;q<|xlwaB7<6{$8EbZo4 z1(NG*Ziq9;a}3p9qonwihEXzQ6ZW)%`VCRQG+%RE!mzdlmEo?+J`4L!!Su}@cyO$O zeG(QGA|8NeK^yQ&0vy6NE&CltoTl;^q{qX2A>#w=N3ka;4%5J=>QM)Sih@VU7OmeR zrP;j7wP-utK$CjKFwu}LLM@0r=TL^Ciocp+QsZ)L zswn`8X>y%y)jWhm1fz<>WX$G>-YatvZgba7qUY;x!nlwlxmS$_@-WNAY=cHBPNDP{A^i{p;%050+#fUV|n|Vw$Iw z$oKUnm*kDg_l)sdHX_kfznom%Z8S!pi!lLK#(ORGv-bVkSX4thXYujxjK;c~Y6?Ud zGCrU;0v3Tb9QOL9n`u!Kaxk({G?W5~CHttMna=tmDhf$@e{M?DZn8A1+@OOS#G$k0 zMdE#ymmX(xkr6c}ECLu+nhfJ6$3XnBl)rR?ZIRy7v$YThm07;V(elCd&a47gsVIA^ zdvTg$jal3?B{S(EU|VIhHXbcZa(QZf-K}*GLTJ@eCJqP1i|`T`G9c9Ir=~_adim{x zGoq7=@v0_KzFc=-kwJZB%Ej}y2%EM33)Z0Og87@V)_;+>Zk+?~90+2S6(H}Banj+v z^g^@sD^Jam=1`ylDI^OW020r_=moVa?hWm>l2Z#g+a7Tfwl7M4pr_bIvpH z2|=8_khK;(V79}8cs58qU0!|2h@FWs*E!B{b)v67NRVxCMrTbZKv8y9OR2v1GuRTGp(zQ!dF%ZuN%9Gctz{P&Muvs4RYcfc9J-_ z&8T_d{6x@-z!#CZQ1)JoXsYxE`K%?jhYkOV%`eXG8ksOAPg#=8v3mXlu_o?dtJ!#? zA$r3%_Dc0_USc%t70K$ZA%@5eS_fA(4B!mgGSr9Xi}0$zf-{+8Y%}q)DZH`>2UTJV zBjPQ&yj_fKSNTE~`3@CCOys#SEX${rxk}~RjB4YA98oqCI5>%M5WHzD6%@pFyU31+ z9G`L8C*yxC;qzesC6Sc}QSS!9BV zLkrCK@>OpV1tRUCBOoy4;FF)QF5;+Tp0`^!>Y`mj1seNN@d^o^rwA|t5p_=1f>=lz z1rAm>p}wSU@z3`MHXh>sQFYzlSa4V6=t@BNTZFG&r|jn!Dav3)fSE*)!yp>KKmtdk zs+g&eIAg&py&2dj!R!>oHu3sSUj1c6BJ|FuM9T;s`_mk8_4NdxMtGsvEwS=r9W}@d)sPDQirf>|n)lBjfQe zVBu<6ME4Y6r=nkP|m^9v##c_#tsc+Kp{;1eipg zRB~jrI7Nw5bkKyxDH*KpM3yk8aGFTMagt5$GvV7fCCRBdd}P7nPp1`@-~cpnU>=ft z;!SqGavZWPbnUFd;_~9Uzipam9a&bAX&h|Gisua3> z-5?9DW|3!xN_19si}~7rVVOmB8jpd`P>@a*k4Bt*2+7zPdsU-h`?FogHYlkrRFqEDD5xuiu6cu|xnE$^+(%}J%Oj6CDCc6#T`AbWQ#=4+#P!_O3NP!RX>S#2B&G5l5zj#Q@As$xF) zeT7GBr(Ps8TopA+SA!b=ZQ@1KQqBrPJD7Y~)_P^kD*E4~=elGxUV8j@Wi(3#R#~jv zD!)^_G9CT5Byi^y<|LQVxgODo1 zUY3h!WJKXV<+w%l7na#i1l5+j4$nln@oz6+uy@XOR!!cyA^L*_P;e09-&3v3%mG%E zYMYe{mzWD1$OOF445Lhi3@srw%{{gAhM^*Xh zEhq;19}}Fv<2r;Hove}SDpx)jiT%n!6c%KEhl-e$SqKE2G`6>8D3b*eYYu4x89NgU zXH)thT#F?AlEHdQ!J_g~D|lP&D`*6Ls>%pI{_5w(=|}0p%oRnkW#TnR`b)w6P1Ug! zcq?*EhCzLo!U**D2AX)G^tU2oiGWzccSeblND=D}MN3Fr4$CFMHZh3p-VO zC=kEGQ$OrdIADSN7aM%Yze1XKsl)ZFYr%tblOTxQe%OdlN4k@~-GXU3oqPGGVN&o+|b+*EU+LCJFSP{6%6 z+?`9iGyyu5g^iV?R>AJfJGIlAUOrwUsre;D{e+Eid%zp_+p;oq5bVG(Db9A6d4e4C zDz3ICpVJCeeDiuZ;PkJ0(JmKc8l{??45(DI0bUJ+mHu;!m$^Z%eIE|L81fE%2BaA~ ztA_i^a;C~Nke%%QvTWpFl01<`Iz2U4Yb~mM%|#BNs%E)_T*>FxWd&k`ekmg3BrIn1 zJB)oO;thJTN~}&v)3#o#6&xNk_>X-B&Rwyi7YNeJa6-*--TJ6|ZcT1NtlEzZf-t2B z4FkyLfeiD-25ktdY=E%u!l5)-l_)mX;v1Jd$fu=F9cFsk~{X!e7ce4f}znIk}YG&(3ui6Ep>-oSbuG zh04{~(y5Z}l-Qf;XAEi8$rP}>tFmz87-nTO!&~s9shz$Jsagg&DD7LVN+JlU7?I ztIk<_?Y-Atd)*hId@WUW;!wVxECXdYfO4{L-p%L8^{*$dUAtC&@cY84j8v}oX;Aq4 zAmHhsR{W9cud0_HwVGNIzF;jTD__X!MrSek#g}Df(Z||U4)=qTQfDQ1%!`#9vTk-i zH9vw^A0unTu;O41-I$bpo!@TN#1Ebebxfe?x1*>?ocoj#nYgA%l`*!5Zn`O3b1gP?EqH!WM*;}_je!V8! zS3zp2+p2@NiV+^dap5sejr8@GC6?w)Li6G#)093Px_NQ>*{?-7VJ?xBsz6)t_9-w@ z??&@%7-2EH-RH$){{~V8eW#jE&fAsJ6Ukn$6Qi}^d)oGprY>3}^%n0k;9HskPqPB| zjo2{l2q{o*Cq7h8%FMj&7J^|eqp1@!yy|ctnLG$-6p=g8^GQ@OjEZ{N!_7yh44Z+F zE<>JO$g0lz7-#X#nAka3HvBRUp&FG$bMDkM3?di9vvAnky3Jfrs@_z>!vuq2UIy*m z7BovVt|{J}L5Uy`G1e_(|B|HX7S8HB7wkmwmqI%w32qbR1;vQoSbnE?va5Eu?JBIP zs86rf-O2@+3H+LzUqS;SiFTr3b9oO=b}8Jsftbw;pBB&R4-(5opDG18C=fm%4tom! z6Nw0z@!xdTJe~gZx@sj4H9~7mOVR=Z04VJ8KMfC1->^XAm4w(x&WRpgt3KKtr|--g z9TrS4kS3CdVH-f2HGWDYF}u_U6s05?*LHW&YK(qTdQG=H$*2=Fmu5aPrNZblMh+A9 zikzCqPNRLLUWVKKk#A8%vC(~PgBXfslq(qql}8V^g1tSu%FqRLeD1}!?jn|odiflz zNYvhK!4SDDL0($uQ*{q+480`W8beNQQm0oDI8mLhBmeC($O@A~UhairW^gVw_6ess zVsr<2NFdKsCF>M3f;%aArgR~2U81Ie+3*OFuPKSq*hwzQxp*G;6B%z29R>Dw$lx|w zXhYZBtZx=ihUFf)-@+$rpkPHKL@M*E7ZAzl05;x+ICiHt!{u zCNClIj7AgHK=d*Y|D~KDc6gzr>#OG;o^GQuf(p1t$t}(Ak`*+8@CW{>%CT3SoGeLg zG4}Z3xaxCm`lrUn$E)+O!L~pVJWrh}KH+kl3Wiu~*XvIkn@DIjweH@VXyqPIUtm30J%#l?^jhR4hpor5Yb}kKdCErP>k}jxo^aNJ`2re; z%9)?zUm9;2sZ9c7V3g}W;+EnQ+hc@fV7;klT$)N;o&J2fI_G;>DayQF ztd&5o0Tmb6q?MKl$S;71KMvc^4AXyEYjm$bNC_!KI6IsTFBTP*tSRzhonh>9ad%S;9EM!D7 z@%*nL?9kg__tzgV3IZ?zV1Je4D(A31cQuQ69|NC6G(6r3P!58Z3#%$)Dy*|$x*Hrd z^Kn^A=MkYxKRSaY*qSUHA!LXH^WTljN^q7LC|^49%nB@emw1U==8%H#dHD%bp1B9I z45FqCs#UnPYEOtTmMF20M*(lX#>x^OUnkyYgW2D{J^yM(7sf4yM*V7dgt1b&P3~LV z)2gVwfZRrCyVV}JXP7zuHl{B8L_tV*lvI#F-wig#!62m}Ml-o2y#^mas_8vpTQ?=A z#JA=em}>9VpFL}|WFa0p>-xN@I%K~VO1~`EH@S<3Xi~;e8fCB`xndgpsC^&BLm(wk z6DTv#S(jx`MiK{o%z=Ie0j>5oM>$vM`@o%>-HnOzScD9G<>a7)r|k zVqtKjH;^p2D)=w3JGhhGxB9xdQ3fP6WnLbr8S7p?_*iPa^jcolpEs{!$Ekdog0l|L z(Z?vw!yKNH8+Nerv3vKx$3*{pK6N;DI)aSY733t$p{&MzbdK>_%)r#j^4$IV+Dxki zsDsTkU#nEBW0)8j6#WCdZkR91pXhF*@Z@a)sy}OeNQx^|dhX$AyoKkKL8~53=bw$K zmb!QNzMSj!8nkgbdk9;dM4~j}H*K0o%LxQHJfRgGsT(O%rJ{L3#5YD*BZm<`6HBcp z7Z;|8H=dVyilQ z0t(*rj%ux*qs~ckMF_6=JE(joqAo8+t}cTlG#Wj{jznc*KqBkqat`)65;3ah;rH-U zioE2NX6`eT43D4WdL3{Ou_uf|`qyRpn~vkBY9+ zo2ZUgdo6~dy42W$g#^{aw)ZxEfMy(sugE7=Pa0DbwR{Gu;xsmpd5QXa+mLmUeA!m# zoN;i|JKN#6UI^}(P`~Fug{@^+5lhDch#y#)4w|OX0!VBfNE@iSB^px5oe0HK>>kKBDU<{wS&=K?>08@vRxm2 zWvBLASd8%hokkOXGu@b3wd<(g2Ujs*5^fE;hy)~QGn3s`r_(@(Lo<;pQju^2Ik+0{ zD7r}rE>Ss`FHHp2Ab&Gco)F7k8Q>rFzWjqhjwi4G(xcdFVp5V7WSKr7-eBpc!R;tL zz%V$eE#%HT8n6;<9gY9e6mGTQMOSOABI+qd3#gGpXUci zFhs>NsVdLBa>~R@tR zEpjM1=^L%qHsdEYHfl6-mg~3;sCjeq(G7%`EP-s=+N7Wj3#cq_`0sKL zw~B725I5$TCUi}?3qp|1?ocRVM6Bj2FddS`NOY%?;;0r>=0X1kf)I`+M)9Jkx73gs zXnh!A1rc2Qp(_YuPOQ9yrD6?t5P#a}z=_bb;)+{zdBmIXD@T? z$}WE&WJn(ub8ts|O(o7>g&lp(DX9E4u(PWWIRCo4q>d;VpzB{*L=X{xvsA784Fo`3 zM(5PDwf=VvRJ70ZR zdRb1V;G}oy5MY(xrX*I${RUQVu-!=*2TDWmOZ|0hslR@sr6#DSuA)r{YokJ>p;utgcPX`~v-= zxqM~8{ikqj(5;%R{6MWhgAJ@LEGCAA3!M~UR4fU_Noox?09;}XFk(!Y47<9-M99BU ztUYW{H`cSBFF)!-HVA%y!eiNW-H#wr7UnQITRsq__feu^P1wJF%v1Fu3i>`=a&&xF z$mKlX^njJdY3KJz=k+D%2*6y;=c#e|>z5Anm)CZxJvSniV^D&=|N^Ki?vFLs;g=Smve5 ze8oq`_s=|DTbiHeLKnSkk@*S)80OdeMyMk*Xo9h|QicdQML2q~D{SWDqYoJ1B^gde?ka-SvjKAP%kN`e>8{dY6Xc?|a~mNSz4T+6 zAs4|t2L=sG0<1w-#ik+daEOA;X$)5O+p8<}POHggK)ts8N48ilLiR_sSuO$`?~7cj z)$;zqraKw4({!fYav87z5#riTV;eR|wk?gT!2-UV-E`mCMn_~{u>AcUlZ)I+E zsTUEAq>0h-j3cE9aR}EBOG`dZ81eg`EG;}%Gky`?f0UNdMFWl^C{295Vlbun;^Pe#+)^;vP{~Eu$T22WD1g=&TKRIKH*wQ5acBsV$75i@DI%CGip1F^d?{k<9RV zj?A`tbeu?d0C}7iIl?Eb$LD{uii}!Ly(LwzEN>(I!vlIftvf)i&2)vrC5mfj99B_; z0`vOeBQM!294-Q;A29M>y|yk`OXFiFOgC|LxJrC^V~06?e3@@aV!2pe^?Iq`^!9pnG<|{t-FVQQVNtbvff|tB-k@to zmi=o}EBEI_`{?oVJ1b6u)$YlRGEhGp{cPNBl7`h|=^SCS1!QoL3CW2*FeQy-wkpHu z81ZqQDhB=yQwj*h_CB(N9YVCZ6iH%Zp#iqrpgV{05F|{kNXYP9VoS1q2r{PUFNuwo zU}78zpQ6i!*b^@tJN%tIiVR1lbHS24okCQZIHr%gi9t(aOgwnVtV2Tr3}szT0iKp? zvTMp2a20qUB^?b)JMs07#m|}#XeJf z!xvXj_Cr})4?EX|m@w*wZ)*e(ap5;y31+z1cqEyVV5+kx^+>D_p3Uycbtm&`-E-#l z=yfo?EI z9$MZ13q{nO0cRI8x$xF!_gF^z_4^8r;KW(y$ymXKWMzpoWYD z8|@;P9CynVl$K5Eb>_mV^YTL1NWIh;Wr&`Rt>#4a=crSF){V^{WS?Yal3~~AUZ{R= zS^{E87)cd4&G{TIEzDPZ@vawzy!u;$lm)c7c96<&p^V`1e^~ww8f9*c>3Hq9fp!bl zvts*HFmsI@gB&5D@ZdAcuLJP}Cz19`iXz~U_$g9638#$wL%DqNWHMI6My%0XMd8EV zDc9v^CWU-0iK;wljOEib5Zg7*CS-)11HH@bIjsCg`Bu+BadZ3XJmtE#6V>pcZhd=O zsmSa+J-8C(hH?SMV=D!Ow{Q|oTLLz=ZPsh;s+tIV&4V(M$$|gD?qFj7e7J*#u7~AA z!gXL`uf_}7SVgt7d2v(H`V5y%?kc(XS^O8=wx3{k09{%CLJNWPlfC&A9zmgLY45^UuWBxoddHh%@(@ey-U&YqH&M*d2?uob^>_wyLFcI!>Z7SwN%&?dJ;6xWZy-gpTj9}&VR z84`)=&qReFqhrddC!}M0%_hQ{H~&nsPjmN#2`}W7H~l6)WKVOxa56>K-ZWy}V(z6r zdS43P(IN@Sp~4~wd1Lh>^>(E1JvY)j%TtdE2O5%GT{hZ*+19-l(su5=hQn6_E;3*a zhA@xZw+CQUpbC7>4f+nuYlXO$B;DL0$Fg>^0PVwSDJ#aBRZXOOi7gQ2us@8JC9Ds{ z8JtRO&r|7(BYbWU^1+9Y5YF~paQg$my5OK`1&^WXItr!>ba81o}c_5yHa zIKcY|3^)besVzNWB*dpb!7R?WS&ZDDdo;H)wNPE1TU$e{z-kW+Ka1=JHRxoBNQ@osPh zRxfwzI}L_vYgA^z@Jx=(-mDA3YV-?WVGadwMr;@kHuc>kJ-Be3g4ZXoEsTz)afvo$ zZ)AyyLB25=ikrYt;bowLA@bR7!As>CX91AO%6B-73*aHXmme=>3Prq-AuNd1>NDs9 zuPVEht#DhvTU;>nld2ij%b!iW+TD_1+kzoSjUr=HA0R&Z1Iplj@f#NaU_q8ih!50j zbTc3{U~70@ynFi?Dhm8yB@zL7YylZhyR{j#3T(Hwh4BxCBB;Y+U`FMbDmlf;#9KjG zzWtzK016s!1)!0%1mKAThEBq{0{%rKADK6)R!yv$2tpNHgH>oAoDNJ6KS643`}Gy* z1=Z*EZDgaqK*RPLa==8W%NdG2^SJ)BvZ|W}RO6Pj|49u+?&Xx`yg!6{)YW|O@691u zPOEAS=@j(?*|}w@@uDg*Ya}pgo^zp5mgY_puvCM<=QNjUmqQRbhu1?W`&yFFC*sjGt~i_<)=WRA_?IW<|+ z988CV8eEf0Bt{`%!12YaB|lFF?CoE#%nj5dHi?)@e6s3&7)rbWqL6PAwXM%1LQ<2xLjL%^2x-;2kdS@l$dve0Mx$esnt2oJNKP4 z7zA4i>zCSRDbqmt3rKuO$S!F7mkaAOBAU@%7xNCc_#p$CN?C#ckAQL781US&qP1&%K0GD=N+R-=i>3ktUMQD*(R#v!Zy`RkjKG3 zQ*H$6@bwO9CHLZi*3b+q6y~%i&Bb>B9GY6jh@-7{mLIGZGD*gu-UKOw`xx>}vdCl0 zykFpD+k!E*c!mQ2MYir`FWYQ158(s91#OZVlg>78+|4>`_R*zE=?91PO}cv0=^eQI z*@#}Q&_9))R42jqJ_#KD{=EO=d{;_tM=BgW&5q9W3B4i~Sl1c|Ih=5N=}Ba}u-(-gW=y=fAh_xJfbAq<7SZQ8fIvC(3d2?C(uAIfzcoyX zRvzsK%x@UbL@}42Qqk$-}W9SWH zeZ(o`H7(yu(LRb=5Bae@9TbBcr`RLftqI!^Ovm*aB&OGIT|=JFGt?#1@CJEavb?q$ zZG@jZL*quM@#!!ciBCb0((m>VlO%%_Gq_>I1du${+~!f5XUU!F*x zQPp?pQT=6XsM8fz?+vTfCL#tZ1D9Bn)s!$zkH^_9o7st(v2WUmOaqrp6O7oXMD$y{ zI7%cjy7#mmy7cW{d{NHeomIS(G32@-4_%_QHZ~p+U6XftKqaoyz14qd4FyER2$!DU z>Av%LN$pcgKzAT$e&Jp{G_{V{smOo_wnTGeSQ2@e4;b-PX2}7kA>xk<&y1Gz6;6HL zS;gp15WgjPCm>rs;^jPb;*-Z1=-`6n?BwaT95D;E@iPthRLRgQYJ8X7(#bFVr`|M+ z5ggYO4hLloybo{b4Pb+#>?piXSd@(S3Ar5&i#DWF8ykBoW^6^+Cye1(bRlqT<)C_p z{miRJ2aZppLKq?yz;qaxjc`5G#Daq&h$v*p6if=w8*H%-{x^*P!Ovm2=xl>gnTp6N zoyERksV_Eehe$@lgoGDztaU&^1uh!!_&I&(62Dj5WW8wpLOK`lVQcX9&zrCq#QU{& zHS!XG5Vz8`um$qE!E$^TafbDFGaL|8kw|v5&(;t^#%l^UOi?pJx@gTPqDcvY!y0P~ z0Ieb8DV71j^!k$;^fpyhRYOTwN=PIJq1p?8@`VZSN{8cuQt)ju{56E(sl_@57(PuX zG#XLDA&(=aS~-D~rO(=sXVMsN(s;=vr9sX^i!)Ku;dvmHGI~LJUBNhU5l`G!3MYNz zsU+5(f*Gu?7!WU8D$r#FgK%;CC)H56uHMp65jY>0UaKQLeDed%HqjgPVE5;t#utbE+@_E?XT^wp{ z8^KkLCag0GLPQej4go1Z`|h@Dy9}5`UjdZl)1tSCT!p~WlCx_uh|ziFpGzTQ?k?Ax zyMl&ISXEz+ok{B8Cs^f>?yPZ%9Ep^yZ67FeYZDCZfVN-CCLd+Me0sD5m4o_Jnx=UT zkv+2iHZw=7Kxx<_4Ma43;AzkODt{}mJz<3q5SnClQwSzTHxf#AT0cE!+cVE4H-Gar zB6(0=Q5*~%jh3#~YaMKU?R9J`P+E(YbGz_Y{&Y-4d*^zfSGMV`L!7QN33-vJvL6LN_efyJEE-WfaW;oE$J$CzV$ zWwwdf@i24FR48EG3%2ba_1HE9&`DKry_M{5S}9Y)_jg+_>+P*Qv?FB+G~PcuwPp>D zu4hI;?Z}5F+P(SAA3<~aRE_0Uf^2ME%dUBO++J6)t*!h6ij%QF*%E^E@RSIzdjp7?k#M9_^j-nSw zmUi_D{z5vF={1G=gb=JOb&}a>77m3v3Szv*xUHe(p2A%6A`Tb*d5=Xm{gq4s)Rz*t z1-*_b9+0i{cemPz{1e5GAG9IaNoyv3HA;cHoOlxl&b?i`swL|R}wmgi=Q0CZh2hL@N z^HPG9YBGZXDY6>l1~L9;GRsjQP0y(<$4g0HB^MJZdoDdAhjX4#^WmaHG%@>nbo z2L1yCk?82Q`9MY>Lz^)*K2+0CT}kaA+N{Zvkjh2MfO!n`cXb#ME5cDmYrWl}cjZ5h zE^4@y@a+qGV{Q}ZWgX!TuVoWZZ4$9cw55W_y==p6!XJd_#OpI?9Q2YF)7iu843iam zg*-iu!je!d^d*F~V;@EE=_2c?_6&-9lprsQo~kuB^~8w+gA+$#QnGsUy^(d}LEKI~>C6TRYWm9b%X11&~r9&_SLXuY63(U;=y? zjKYmIYAFoDi}*v0T}h8btOBmwg}4|Pic5Xm=Cs`v)l%=?bbcJ)7E6J^)7%~9UMi*$ z4r`0?hBYKyd0y$_&u-;5LQ1bzwktdM)4{kML_kecnw2`fy;^yRvNb>8ziM!SY|req zQQ;ZMUlcdnb);}*Vrh5>EG#arPFMnZ(da-ze%|fw-oAQuduOLJ(b<}4*1K0#_zn|U#A0)SDVx$IYV~N{`Lxawq~a9;L2`= z44ZG`Kg+^J9g+Z>+xQ!yHNx(0xN~!BuHA;@1JwfubGOzO6M!<^1b=`fR5bmMuir+f zP4(j&vGpk1H1M=(8n~f!QgmR4abPWr#mRAa_dP&pRt$%ak}qH>$a%TfT#^|8!(nh> zMhQk3os05{0Ubpkncm&m4LQ!6n|bYRyWYx-H(MnYFE1j!5ZK_g}uSWx~P)*_t2&4ymqby{B9FyOSA@;Td*Yrv+Hwoz6UBDX4^Mj8=a z8KR2;^t0Hq4|_I95_U)(=E*mWbJ9%qQt-~@3WGMuxOPGI{^#EZA)F@#7UDK{c6O`s z_wOZqGY$7Ff^XEvU--0sc<{&7HsGEB;`u>@wklWmR7 z)L#Nb12#8eVVjfqItH4a57HQwd<|hug7c1_cUO?PF84bvwvY`A7NI=UGdWPB^r&$* z_qe7&*XHF>Mhb6<;guE?3AKQsvtex3mvDzuP0Tn(@EJfsjZ5C=8qLu__GTRvX*P@7%Eoq8d{&CPDN?gJ5wFwB# zVLfEx{aq{IGy@#PiO?Dqs*%ICUhtt?#P%G&07!*kaF?z@n#L%8h>Bj~?@x#1NS5i9p68=!P5h!&zfkY>2x(hamO( z$nw;>yWz(CaNZsi8}LET0ZY10+|Z}|(19sFHuiGQu_-XB+8uIPiU6r_ZIBz*-r?{Q zj{~G>W?LYL94W9HKg95u?uiF)U2DbSEl%rFa0L6jYWl7p*|25GxAo|;`eza>PR)Ww zaY}(?dAwO@7(_5$LYQKhKC8Cadn|eR;xY%TRAv!s?rQd6`vq#hUnLwuX+4#{tK(E< zRqF&}v?2+Or5ryn`yqyYw6UeWl;J9YHoCXQ=p_n_FI#O^sQ32)Ga5Eqtn`3eLIi^e ztJp&qMFzyroY#fcTvRHd>(gB)kc63)@S;%@$3S)bZq@RzsJgf!xO;g(qMzJmQxN7N_ zvzu`L?A()wGjm+_Gpy)5wcV+$)L!1cjo{zC-Jt*U{=ux)f0qSwUV@@i>>RAm6peOx z9hcg~FoPRzP6UUEp#Mm+gzk_*3X@XX6N_%S!vZ4a6%C&Yeu`WpZnSr8=Kl^x_%nZp z8<{C#YX+6C1^ zavNLzNNx-bF{C}?CjM~J3;>|jU+*Rc6w-gGAqFH7ST|tRY*qGPLEJ=WeGC6~VVBZ3 z?4r=tLTiVOMz10r`5gXSFabGCbtCC#nu1I2$T3qU|j0v!v}s1#teY1t4rC zFfJK!VR$8BTeBgdv-%k4f6i^6wZdtKKR$0fO0ohWOx=d-z>=#(9~GY#8&GOAVxUkI zGfymbw9v5sUw;o{yEVaZ3u(pEyN=zSI(xgUy(rdGsg5}h;+@opg0^k{2OA7hJ+#I3 zCi-rg$|YLg3$}i(--ri<{As|~I%sX?R9nwCqu;0k_NF5eBm24>6;!=!L5sE({A^;iNUYJ0Q^~zmb zaNhf+B@I6nl1p!H(e}l*j2VpP zZXPqn7g=E;N#qdhz|Bm3`N-)B4=u z5bAz|M^r%yr9u~UfKMo3M0FCft*exTdJ|_(k?W1P87DyfRAPjD+_MF7j!8ir8$`%! zE{PY)rU9>v6o8p()Tm#+5d$e92qb}Vcen>W?3H}ohMc+u{n_WWt6eF0-KXWK zleF`py{sIoaqabx#dSh#uoNTo0=E%@G@lkhA6caJ#GYz^W#?j@RP`}eri@L~ps6tNFK7zbsG@ITDC<%QgOqpZHB%{{^8PiMazeR?UfW0RN;-;Ke z(hRR1QVS1BEFndc<(1)6y76VmPb2r4D(yxKemv-@5bYRF%jv|2{#DM<)Ma=}WvgTL zLW}I^r<_25)=vytTZ|O8NL9D%TN3*n$L!ZRm|1#wTezK#;?_p_y8`4GL?DhIER#x@ z3<_bD8h^$McF)nKxEzRGj+ZZsLAGyE5m>5su2y;mCNBnut`tvqWQw$3_QY2-j zW+7F$>7FwfpnOETj@)79bdFnk$VcT`v>sEL^*v?=)H=EOBizFX8rH+R)83mjRG3mFSfh&a<%~Sla9Zk7cGalCQQhV5mYeZ29$fxwG$i~K`oYNDDf;># z#D!!$9Q{m)8!|n)Yp72sAz>5Mg;om^Bsl)s9=MAW#aL{aMm;INsCve7t&8|hR~zPk zK?J5x!Pi3SRBAP{i^yCB4`jT)D!cx3jn@1U3qWa{nt(<;<2o_Af=<=Lgjo+yWBSPV zsX^Uc#NSQ48!CiJbvBfxdB57Ue~qQ4Rzq`GI5t&N7!vV!Oi}!8qSAl2_3RlGMM~JR zey|ZD84Wd{>rK|V*}PK4Vl5&>Q*=6Lhw>=G0B9*7rD+I`3z@LuxLWQsHn4IQwz@B1+=d19)6L|FYu5HU^K*|J3`uDUl7& zIFw!C1D`sGC$T-?Y4fzMu!z`ht*cQescjoe-OHlyJ1Bi5oftCboajoHkvc){^&^h* zVld81@QT{gteJtqk?4ozAxy!7g!_G0yiG@eJnnkWbI$^Ml^&=s(9z@goCAU8rQ&H} z*;AsC0m6+^D>*~@td0w>h&yNAr+j<{)#OnK2gQ$hD&knFreTArL}do3lwZ?>cbJX} z6~F+nD*^Fz@kJ3n18tvC6>29Z{PeO7t<*J(CwJv8LIUKe;YDjF&1=>=Vo>hI;l)-Y zu&m@Q;DI4^rvRQxZb_=w3!3aOhlUe>0ncsZl zA^!aaH!5#K$dRyVoxyxalGcc8qnIg(eS@btTl|c7ee(yaMkj598W>5nh!Iv+kfX>! z@kTu~%zL+*gYJRX>Yr{(ZJY58TiZrN4l!8bFp`XU%lWMyt-QDPGALkc=zs1{@ds?TDw!VUs^LZ&Za2jDa=D zhwEX}0YiCF$;V2QBvx~g2u8fu8SiMxjAW@REmEj(50a$%FO_ew^ppAvxb`67;HLf` zXZLX1wqOuk-+M+XXl-xO?`xcvh-9S6U5k+H)@vxa=xiqNzt%L69+`ajm~}}QEoI^) zU3EK&oR?l982}Vz&6_aV*>^?eMfSeRcaTC!N1mI${*f*fuvg0p#zi}4gDew z4=)4H8Hc7ABJ!<6FlmE(@%V<%H%RHygE zmJu80jms{LB^M&_%l3orQN7Kf)3-b~^$X53{}mQ7eGlCJgnwyj@zEMzx{w@4%Q%|# z3kIcGkN(gPgO164Q)@Faa7h@K0E4bJlj$fdhCa!#ZsAf;fbP^3*cfc?woKs$z06W& zspNpCF(6M3V`Z!x{EJ|K!&BWZyg~Z`Sx{=PBvKcp3OHM#(2~VNu722{K&RWKObNb{ zW3brN2Pk&sJ??$8GgHz5wloCF#pnA@J6!q}A1~~OVm=b%1z9s09^A2#oQhYg3jDq0xdr!`2gi;;YRE5&s%W<(caX8>75ZSSZh$cq$ zD`}KN|GcEKYDqL+5>_HN&Kn2+=pw@6*)0jap>mK%(&Xk~9X7;P3eJIcMtMzXKqB3Y z;^=tm6op$+cb)WP`yHtQ%VZ*|cNFJUET+6-MN_&gXbR6J!P7{?Wb{xEyN1u~kz&U@ z#u(TXL_Qyi$WCFxQ-WW#+RS(rAMXJL`$Wrq!N`VC_hf@7y^?75f`}x`@=n|&MwCE7F4)={*w_E(MpWRu z@W{ZFXoGqCC(mcUHP`2JaW7ut{*#r9!8S)hurfo1EtOdJow*B z(FKSd^U+SdS-EQn&1Ztc+TUP0>z_Bj07# z!ihrvFtxeCi70)+ns?0hPO)no;*}Aiv5hte_7?VM5f+e5$8vD9h6j`OumA-yHY6{^ z%0Gn8gmu$Zz{*pUP!U5{g-o3xq`vS6f3y21*BXAO?~KK6$QrFDO}k@wPF3s@>E_7 z_UZ3O_DM+)8zD694g%`LF%`m9!gBlPZ!g(EZr%=V#@AZP69i9dnzaL?^&(!}kX#bT zh1_U;ORMI^_SZy8VWza&m!z?n57vU3^|Hc=5_~A4hpXv8cNB$00#$y*N0fP@vqGi zA~DeEq2-%yG=|G^>%&hd>FOG7%Y2fQ1~-Y`8KZ>!r*Ylc1?Hpt!HWC0YL0 zGt|EwY$vV_mZ4KFYRf>VpT&!yxJ+1|ON&#mf*xbY8(oR|b*B*msnr8Fq(d{~6mZC; z0XDV7Is{xig!(WW&yD#zc_SV8F0+lXJBT+sd71_q;Kbo~s@m#?)Xn!rT6Bv&Hzt=; zj}r-?!DKRQQ<30*(j2A>aa z34$?s+$x4DP?E~>`E)WK;l;^F=jOvD2$@PF@6mvK0v`P@l3U+KK?vy3%ADmkt!c>S zX8lD2o(fbXAy<9TXm|H&5dP6}Xk1)xwmvhe3IPDg!34XGn-W+QM|d%(N$M#Zm+P>6 z%Xx%Fyb(&YH#o}{b@8x30^L}yPd&-XLh=GXkg|??SuoY%B`gD-82|rg|KFo9(88#Z z#Ysizc8X6t&5+elmQWT#TH|^0->a3G6*iQ?QNB=hKkb|5xm0L`z&nrZN!c+^>o0^R zm1b4pr?io%hHB1qweJKV(8$6wYEzkTYVavBqwx$g!EbbQkm^wh-pPyq=U*Kfm$UGk zp%XkzEL+MWIX$iAkZ{q;=S=Z=)`ss$eTqq@TKV@gB=7IW-mFw33c19*xvZ$!>n`#) zs%3itJ0jzAn{_q0S)DFo+jy!aZ3$+LGy}=%tCc6>+YDuDrLm;cM!uM&aZ<9E%oq`5 z4M(4&YL$-(IyZx=#x4-bFw4udhI~FF!9l47{|-Fen*!BP@pdtKZw69UO0-slzKbDr zJE73?&{?~C(&Eh}2(4^u!6KZRWfZ$H7+*H#*w|o`iNPo&X^0+4NX)FML1u$NPR=@Y z)(kNl8{$@C2wh-YzjgqjRWPU2Ky$%BV{_j0Vn&*ajl@7H%4b|NurRr>Rg~~yK1UW< zhly8cgf=y%NweMT;qiwI1Tyeh&KPwAmDK+!1&~G)>l#-R7n?3j(Kj_8k4*ogL@akT3C!DBl z$QqgJIdMX9n|1VH)xzQ>h+E8Ct<%z)ijld&nglsb19&%YE!gOobK?zq7xoSc>w(k2 z&1&coeIr5V_Y`k93r8UDG#?qY0DOd`9E_s^L%U5!7UB%z)ftR6g{7cRh}U@%z!3p} zbTX-Nk;33!Mu#`A%e@a*1;9D3C~|Sg7oP-&=)+~&SVG}(!1S! zyS0saY=!?-H~&oS&2NN{Fs@TAtGtDS#lUYd%M;@l`8-KmbuLyIV@9#2WoaBDYQI%3 zxE;J|;<&^yS+o0Bg`Fr2Dx}^4b5WyvA+ob=QxKZhmSr_^y5x8eQJ%S3nG6wB)UuUv z>^D>sc|*~^OJ+%>QFh#^n_kfPd?llfN&cKFV^^()B??#s^?&{sk2;nEiy(h{-Ga-K zcQnYXva&z52CH+2Qa?ZEH`-z31U7^P*L#P%b^_3SPHSxmNwtoJ%$l zBZ1H=XOci2BRCsYQ)Lo4C$HU;iDLhx z@r3Kz?77f;^XO9z!xsz}lD}@cHedYs`bFV5;piG-;yOZOjZ{ZrnPAy&H>DB9nb$4C zN}=neC-S!>TE&5Kh*dEeD(`SW2%WL~f!4lY3<5|R)6`)@`=+M$CYONm4?nG3KrDbb zj=+jF)Qz=l*}QtP@=qPQQ){%wYrksFoHdY|pBU7s#BR9y;)uxQI@LEXAY#6TgL%7p z@#D#h>G@579Mxd21}++L6b+9E%_wP$?2U9zc zdnL#5__Ee}T!DQO36a`iy6P*jSDsd;SV_=;e~FBd7XkQ@r&CWHOynEp!yH9SD)}D` z#v+GQrrdHJnBsH~e;ec@pO(kRLEp4&t7J4)`Ov*`aO%U%J7>&0lq0yCFj@lfsmglr z)_UeGhPvKD6ud{wml8NIoq7C>c|1ADbU4U#Y>+XKS~!R=m3CkzGstOXx#00|_A}w^ zXR@;&CBse(G3(}iU^X&@J{}G+8xAp>9fDoGIYe^qv*FxlV{=Ebngn8V9@bzK$I;t~7-oGdul5SGE1AMarY6U!#A*`b`FG;3*1kjMhkAS+xcs(?U>5hoi?tu>?Fc4gVss3$ zq7qZ?e}ts6$Xorqi-S5Q2Omidh{N9oTSKYL7GbAAKr0?)Pw%0jUD!r+hv1s7UI6#_)Z+l^UJkS?323tj)7wK;@YTv|DL?ky!QMoB z1Am2|o^9{#tiEn`gUrm$PRUAs72hzqP$HUi)$=NG1CJnCCG5jl`A zCLk9}9Ve`)A!(#m*2pgJXHGe0p%#_5q(Bv@jNF5+JR|8i=A~(`wY|-TCh3xWWg#cA zUBN0mb*s?E8oUhF;Ka(*Q@;c-!se_%a&1?U$32HX-#NG)B-FkN;GSGvo}2s5L+B;>l95VJ}*F`}I*`zn)^wFVHQ+QbJmg8-0pCHy%|h%4HXp zH%qb~BsR`%P9NDhcjTBJrL~zQr_79iKl}KQ@U3@X(a(A5HVmJMv{hJ(ri4Gy4YnjA zr4Q2~OSCDP{s6r<3uP3xy2~hHxXB18=1XdnjO<4Q*Y!v`0V^@sU|FLLK`OrE{3f__ z5O~gehwQUFdLJ?+fwo{~CS1Nl*UH`M=T(C&tcn{yNftn->8AC5Xv&g!dbKlX1%ezz&QY2M66#E~dbIYj@mb@B)YZ92NT{*S+hC35l0{h_ z&6=+rV*TD?oq3P>FC0B-_6|cKyjXJF$W|tUSMr#S2Z*@S6bG8HA35ZPWDW)-rxu0C zyg_CGopbNK^JHlu_whTjs>w|JaCmSqY-dgeiW_2#x%xJ8rqvvmPB$ELkVUh#)1k?! z;wC1CQ@XkXb22}Nbw4ApU5&wY(P`wd0SB}lG3x6c z;P7nVRDiR7B_lB>*@mN%m1z|o4FQ7h1=Y8|!P_v2;csU(k>hR3Lt)-}n_D*+?s9p9 z&@=?Y`VMGb@~M1b?VW$u`^K+SA*V6w#kO*h$QOLTmO(An=>V-vP@EU*rj4QLbZhM( z43-a#@3zq33CU&S^t>T``ZD{LH&Mdz`!H`nG7(T$(KIAdxDrv5Cd+@B+GVo;N4&8l z#Jf09i+fnc@|pClgw&u>bZ7lOVwG(So`$JV9iSvH!6^7SS*}3xWbr8&ul@}Rr7FSQ ziW#bXVF&rrO;L{G`~G1SVxA34MaCPZzbv=}zcQ@dYK zPJ=!*%*y7*1;<);D*ZlBE9`=juSUJ+E70i|IHwwMNV!zk%)_DdnhX!JHaf!knX6tv z9w{m+P7tp~X|ab-l64GJjU`O`Jo1|H8x&y^fCR4#el}ys&pgvS<9fEZ>$Z?ZtPtvd z;M?(u#|Q<(*nO0NXV^DA5Xke_CVaM%Rj)>TID;@^Ld1e*jKaTf+K6v8$@}RvC0ir2 z(RPlig!*D(X(i!gYI3eVP7?9~dQP>LYd;TJYnN_iwsMrNU6K!pcv$!fnC!(Zni$Ly5V(Q7%ieFGEml**D=9Dx z5F-G|BTJRNO>TMRvkWo$Gi>jzG&zm=DQfr09D1spr-c+UtX8O^e8TJ120i;CnMYi# zPlTma?l=RQczba%XZ%m%Lf424?m4}~jLG;SP(R@&s~FIaB0wpNB&2i)?wA4RYdEGCPm6Z* z_EgD-_ep_-mK*bMf?IbKrC87QUIwl7I;8` z$9mH<`T@S<2sR~wg0H9SpY@u4QXGsr(bF4s8O{ubxv+wxrB)TKQ+T*dI7)Uku8L1= zz2}8+_boQ&6P&onI~X){hNtH-0;BLL%;f_#Tb+jCYti9*WNmJ7dFkr(@?s3z0lY_% z-?wr+w8jM5*t7qpHCUNjR;VH+)RCJ~l-0E7Y3%1+$Fq2I(N$p!T9NQIH^C;7TNy%9 z+3_?Pf5N|wgA=MC(-c?bT7huXsn>Vp%0e-tE?Ndx>+D&Iv=0Q}QpJeRdThS#BDPcVNfTt8(a9Lvv!BQZ^vpOV0|z>&M!@TnaWTvwiojZ3o@cTLAluBXT1 z7u+Lz&<>1~7$wP-IuXjc@yJ4M(l!8^P$(u3B#YqYL$e>TC*oj2yG2!1Xi-jo-tc{- z97LyOU6E`SX)^`zFKXL+NUNVioiSX|nmY=C47UT-Z<<&-Xhop;E(!}r1A{ue@HP6| zK_fu!qIthly;{9lHJuJ{R;bQ1R|?%i@N&)J4s|5^YTj#tkIuUDY3$rpZsMw<(7^Rp zVF{FK^g{rR2-Axubk+_p&nRV0|3p zgqJaNDT&7c9NOtA?_@z1$U6pHzPxkVGImgLz?&RG#~fXePUDk&PtF_rh*`0YI6{oW z^zVTiNqkM<5Iwel+U>{&`Mz31`&7bwe-%A2x^Rz8HEY|ie_wBBYnh!#PzV9(Fv{R4 zm`UUIplj}N1DwZ+5KDrWkO(L6laH!c>V23))}qT;I6^&>gS6I;x}3mQrQQ85OYsOl zW<`o2kD==*ij^R0!D^pa5JwV+F4=C`$JQtVz@@qIi)L$GZR=30uj0Qi@w$mPbuS*d z{w3N7*$}zhmv2Y|r_9SYCUHR*ynF`giYzebI1JJA^;-vS6%Wq>Y!p|$dUtqc4@R&Z z39X3W%XZ@O0nSqEJDD&j?S^0fbwe+ zVFdUHv`$`VGv;-_b4MQ3wzrDbkcDA+$k;7VlLIJP*_usa7IC|I7>Nel`W!6IqAqNB zk#m~qJstXXkCxqb5lWXrlmJ8QB?Uxwk~nGHqLAAolhP7dsC>|I5)42KF&2Pk-*~r> z39KphrPpE9<4h9WH(bKBB!sR`Zi`NNxJowDyykN@jFE{Ml)2orBZD4=`9_crRz=9G z0Q>k5DmGbxFSb6X{X8ti6pV5?I+1x$BPXIJUuqOyV;uAFpNb!%0D6LGu#+r{h7+LE(`_CuI!n4~SdHwEUSJRE(PWWIPKjjDrf>V-4fPixwpwTASrVjhWkcs}FHD z*i!1Q`i%F9ofStlZTD8VWS9|JzbN6HVARoUqeD?Ih-VssHmiA5gdWBO^v~3A9wnxF zSlpMq+M#xtz#RHrtU9MAVNS-Du9*ceY6i$WNKDQ5)1$m^ja&HH$bn&{FH-PL$oSfL z!7qmTRkDUtUU}MyMGT}kSl0S(O}^BCd_WB~oIE z8@ShMR8PqXX}b3v?u^blG59@%ej_kLZG{ZaiZI65s+B4LL0T!;Hho}$$QY6CeS2uu ziX?TA5Y$`9_*-3MmTTdd*p}SPYzgbyaDw-+5iEH{c3=%;aT6;irqgid#n@2$cLoaBM6tq(+dUT4dxYsHC-LU<#61 z5ZTMh6%Z6m91|W^oxdLk7xn(R4 zb>6HbsittW3oKoXA_`^h7vJM;| zCzzaHY`ikXTWJJobv7E?C>9HvyI#Fiouq^^w$^SSY6ne;%vUaAW*&&}G!hy53*^4R z;5190Uw{MDs=oWF~>kjbdb`B_@akllA)6dw^(h#$~#%`Iw=1O$Vk_$2Ex^ z%3qFOLxa~kn?)GBX%jY&UA(y&8?W_1@HeFpwA|9B90n?Q&VKT`rx(|w_?}t7WN$c) zN-y5Vn^NCft8g$q(%u9yI?9e~TW6WpYdzNECg|4$*kB}bu%2Ddf;okBJUeS=%33pVC#X=WHgel++y24cWTq>G0-nVT|gvX22Ld_{Eh=JfA0a3y>xO7-TUSn-4(`jx{Rsd$In#;bbo9WPaQf z{z1VMZeXSFfdeXVDW=5lf7}E=F%yIq_aipx zUn`j5ZJae$NTLeni!3BC$4n^!&`^u#WM*$dd7qlOAbJ4}P~M#6whLxMVIUcP`L;;y zbH%>fM$rc};rkKze5U(TCnbkQ+q>4-|N)dh%Df(3+E5=52%TX2C?sh z+YHiw(|nqG6f0#>-lMgPn8o>u3ZWs^;Mkl8{?Cf?}op^!05{I+=k z`H%e-dW&a4)hsK$UMys+zop5M$wntv@e=l%Oz1}DZs>7gy(pmhMQ|j&H`D?}bs*$K zi78-0Z*q38%C5nK|7sUryk-||-G%<%jP`zAusyb@Jne>WM0b_zNm_IL6diG)n8#bB zwcosj$>h)(MWHmM?Q=T&rnK)0rlW%EkKL7N(vk?(f21AxaZ||Ii^NXscMAL7gYB0@M_)>67UZ3<~7S+qwtF4VLB!o|^d)jDuv-Pr>DbXui z4%4Do?m8?J($TA_re)EJrT+t)5|_mdxQ8vbrIvig1Q(ZLgxcseK1(eqYE;Y;1(}Oo z+&8tP*bTE)3%zxSij#>I!vIhYrjWJ1UpD{F(WN1hdmlNt4Xh~+i z=sLPf&1JT7Wja{*C31bLCG)( ze^p88zj`~QBnH2~WVBTI-z1|z?;v9mmjmofaAHC>7D&09df!64af7~$0b`(9gLeSU z7?fS%pAw&y34kyEb`?0Ksr4GfDWht7^`y1x( z_SjWpHRa8cx;uEgOljmIzm)@z(8Fe@inIQ)vJCod-m@>`Z6rQ?RmstHbf~OP%S`Kxi zDI_qem$AZB=QZ9|)%rkhlri7O6Wlhscp+xU$TTN~j!b($>1Tw%=-RY-$w&HVm;5Yj|hpGnBJY6Kk6){ytz%uDeO-qj5;e^nE zPwG+`O5KhN_+2AJD7w>^!cPPX{2M~DOjJ@@@SSIq{3JaNsntqrG;@)a_Y&`k$CM;c zP|@LOpcEPScaT#wi$CgRPAUNZq6fuB{X0?8h1EXh3-S@y zsZJ<8bx1@uBvEE=c7(t%ww*EU&swcbRTi!0@RBVW4N9ftz4QAfx=iRbmc59?xVfjW zF~Um0>O4_J-omqFDT{{8G+Q8P3%&^_sgE-KU$H-xkILVZrVrEle#Oyt+5n}{d+SZ2*9}@kd z*sME@tAPiQMJuO*cMlsrS^V}{qmmiRK;^IDD!Kw(CM$p4SqzUP5*6~@UcZ#8VoY(j z1-@7ZMw4%NT_@wWe8YNNr`UC^8G|?xp$PgonZiQanGF2TpGjzb17&xZG=+-pSY8P= zYwqo=BfJbJd!x03yo!#vW)D7Yn3^jeiXcj2B!2=@Zh8X`o1mB%btwjFUtkY2^=~nH z<&j1`3H59Itcoi#X&%_;xDT6eFz%$t&un+jeY59{Ilxs^>|8|)TwWQ}3~peSyljF9-|Bev$?BS| zQOW?Tc59o{JoN-^ZW_<(51SpPL0~Oh0L?E=K_3tVKvQz!kyqJBoVY+le#c<+ikiH% z02$sgO71jO5hY4%w*wY&*VmPx0Ali%S;4dpeZ5ODhqVZdg9tr1wRkFGu@UE4)pRJbwdQ)6If zy}iZShL`U@e)uWRmSlHfg~qiiZLfveWMUw;R!=hT3g0%xo3yBAknfQPhKMKWj-oXe zk(*DFVYezA=U~%s`RQd!y%^Hu?i$>+@!|7Ur`u~5-$`_FPy_@^OcJFw{RrDKfo9RK zP_&IdRpsY(;K%cnB~$70klC2~1(<6cb`w4O*~HeX-76?Ixb9)8Qr9AwOzkTgAvTvS+C7c4XZ?!0r@2abup#$Efu2x1H zI!bZFmj|aT`!z;YG35ppo#WFmP1%yTN&>F^6mOD&sT@oVksXuObP&$VpN4WzEYNcMqdtrVAFRgUidZ&nzKUQSk-LWTyu~ zR{l_mKd8@~b4>@)EAb^x<6B>aqO;k7Vu?1=xM6H~yQdYb0dJeKOEHV_H2KZ=w|Fc90-; zVs>FcBAumV=jQgd)CeiKOFuKhZ;~`w4-@yk8Ke&OS`P=A`)kp3XVF&?8F*BG)vaFsycfb(0$;Falh*8$5@6hhj3HeupbZr_dh7vg%Uu*>PHx0g zGNR^_l%6o#P{nU#pY7DYEN8X{>Zo5~AhDA*`LD*l-GL1hbCUNlf6w0e2G7fmrU zEz93?H^eOjYD9t!mt1e&;wqu)EqN8UXh>WX?h_KH8|K(5B*m*DCPEPGu{x}u?X3p( zu1a-Bbf8Dqpl4Id_FXJ{!0#hBa__%`ETbMT{08a7&B{88A@8E%;M@B74j{I{M6L!~ ze(h3oy|epGnZNI>x2sq067$nfI^8+gp*FgPX9qgrpNOhdG==8{S3HeB)*4<;3D7{g z;O2YVYCzFc{PtG@6UhTcEoAr4|;8=K1JtNQ+nvqeMG) zT25{(!t6AR*xuGpT@Bh`V8A=7ybjr+TDHFk*1pBIB4E=Qfg|^R1zV5mMsAr3M4loP z-cWET0?B;vtmHr?ohmmiDog_N*&=C)p$PVQ9Hz9$U=3eTv)yVOapFO*`|M!lqI>JW zMLvB5x1Tm;5;Uq~<(wyJ!C4QUgngyp z$=$@0yOAfy*sBApXLDX@itri#M{dK5xmDZS7Bwuj2InOdp860=zCmIGpqSh}?6NbZ zLsSHbY+r<2l6Mn2DzdeggHy=;I7u}Z?6MQ7lg=NRef%&w?NE(xkR_yZm2707D}De1 zLp9Jn_@b*iJo{F`il#<1k<3$b{0X)yZsG7dI zw?6;MyB36X3`;ix*egH?^Fd|7!}E*P`$+C4)&;MhMcKfx+QTP?g@($;$h=lbm~W#8 z4cx}kqM`sM8=!?S#dMANkv+4crB^&Hd7FN!Lui)d^!i~p+FWO9Sh<>M<4T|}G)sx)j?nNnW0#w3=YLP0kaaYNK&4-CiT z@}RAk21j*ldgXX<8Hw?T%xHF{hGW4RPUO=F=8(UlXi{XBvRamct|2wv`m5oE1$gU` z#WEERcGeFzgE_%MT$V)oP)6~oJ7Wi@pK@7`2UPA(_a#|SJs!k{o5v#EJgZdeHSEG? zBM-W1izhS+lX^hX1fW4yJcyyGplU3~Sw~jJXn@oAOX);3RoTR!RrDrWmmAv~-WR=H zS)6nGcSHI0`A#@tbaKOF13>3~h0UEFxkVO+F!k_J?n>XYoJ7c0k5QO`L&^v)WLuyL z#!3$OX&~$l7~Ye=0|R(x1*Xn#9eRE9D|6rG;&v{@QUbh!aZjWfRXzgj8C1xlB48c0 z=Y#!YGpKU~3`$s2lq3dFqhkr{z2;YYd1+-WcePK)m{_nNM?D+MUy6R&;8i!|J1cXm zxg!qg!ywy`FZAP;Y5{NXZ_QNZ-9Ylz%zW-x*Y?L+gL$I~n`N%+_Il1=fXV&x)nKIe z{78(20cUl&UikxlB-@r`U>Qc`mT7?MOVt=QqhvFZW(e-x!&6M!+!8@xRGNw5+A0OuoQj<2$(O1UYI ziaNw4Q?UvB*f0NTcdrYgC|a^Va)Y6P_4S~=P^=XYI3O(b8(invx#6IH}ZGjcTejNzcR4He>OB(Mm<0LV*!4j&n!(yDbFbv%S1(T(Tz zO_5%b>-hk7DjP1rSl6Q>ApJg$?-@f z5o0M1*+yv^!D9T_04%fLPEa>~x7*3ZHrt8kTyrhH15xP?M8n+*yGYh6cLRO>GCLPs z-K`-4$;B5WmpEu>kVNn-*tFK0uxpk*9z!d2iD*Y$ZtR4-db7nZvj!+s;z=4SfbC+N zv=a!(eJ_~*gcQ;z<*lP(99d*^f5IyJ=~X!6)Ihrq^Fl4&W+ugip~-Euwp+qHkF2kU zJr?OJ)yqK>Gc?3b)J(@7jv8&S2{n$yk^+%6w=$te9k7nqNbHWM5pX9w<5tNHbxv$j zFyKsw94Y8-kQ$qHWEl;_17nwfmq*Y_*TF`+bVh09%))cb@qlB#2dK(Aqy&_MHA4KZ zI*$3V6l6GzrFFgkMqJxV#7?n%lzaE+%r=S$aK9t3ok52=9xEO-n*>50;V)>@c5u7i zd}eGd>y0h~ThS6;rI6=hpi$cZSDdTk%~x-)q>E=er9;>G zM3B6`Y}p)-!r6fH89Yp3pIkJS3(-gyhS6LPn=8Z|qI6jpkIeg7WK#Jkv1MUZrW?ZM zc_7pKHZ3PA%ns6sx47BygA4|V$}PETa=UbK7RKk%Zq2-1u8p7lN13r1W9sU*be`9C zO-;}UZCoo{glz7=ANIY}ut92n?sOOWK1FKRH;^rO$Z_VtltP(i3L6qwI`OSd#$xbe zu=Kd1^e(*UDSkV{ezT zw#Qzq;{GAmXRH;jbKzI#z+ET`6Lh--IQO5Ag6_W z15ZQXxD?Z+GszOx$Pef=UvH6s&2=zk8^+RW;D^=U>o+-h)svO4(L3mhR5xN#=24tdt!$M1)XO+u^*oW|Uw=7)ss+BaptLUpJu);7kc?>>oNck~0!ZN{PiGE# zr$r^;+f);6V1P&IsOK96$PE1VvNKxZmsJett_HipPoe8tjls0lSOv|uN}<$2Be4Xg zOO9#i(q-<+0{q6auu?ALUq&kPzBT(IBM}1m3n#)>z06eOTZ{O!>WtQE1*PqYceUQ% zG>j{5Ka=|O^t#YnMe`2pd{EE-TE?W!jPyV=FcnMU$i-8+fVUtq@OCZQU-=!4-r^m? z&-|Bh7_j#Mt3foB7&B0EDWp=Zj^RyNUxDU36^1K7Y?uT|JT%6HGa;rN(@ONzEjVM| z&*AEPA~>m=AfV6G%B!oL^#}7uphojkSub2#c#?+yZ`A0otB9Q*2Tru0P_CJiPdz-1 zk>R?Mv>Cib$_Q`*ygTwvST9FSqndBX-DAMtq(s!RoF2mc@VgkG@h|s8Mg}DRE#Kn) zK~EvQxYd!h5{l5QVZkc_-RApx2qFOiy1EF|KFLmGEWK34zpUkf*147%WHy{Psgi9_ zePa*OT#~AQef2zIhMLuL@}7=`bxh2L{s6wGRdGN8fI~X)73XeqO#rEdppY(LQBtL0 zlX;|Rs*yd#r~EFY9A79vPp`*;dE$OONbQ~ybVoI0k2URlp<#N!Z0P~bE=cZ^(hB!4 zpoai5=mo!pv_Na1FVCpwHFhpiGsG@X54YxBaY9G1EosP6`Me!NE8TG3;jUgy zot*4GlRNuy?LDA6lTtGO<|uxCHt(bd-Id%G+PN~98fZP_qTwzOV;T#?JB9Poi)uR$b4;*-hsVUPIn;>ki}1*Vzq{asoB-#DN}o+qrJ9X*5H4pJO^cWyR}j4LJOyp zTFW)yJH!`nHeR6M1H8}(zJ%V+JZ?PqtkrIysMb2_gKeTZDu;r@TCB6}dRNS|c3_&a zs@>PSc$}&xU1yz%!NH6$DWi3fY|QEssJOv$VrbI~yT5A=hL*yZ7OS{O?Ig)g23B~= z&VqhmyjPbDIh1ukeKIt~yaL4A2<+zgSReRw`59mHkHScS+-xi<0CsAx~@i>@|nNpE@67l(3&o=*nWrP~m%vYa|O3yvB+@_)Nlos%@+#YNcU?SaJdi z9IYdtG@74aDA_hH7fK4L<--mlOXY@;<>3}@qgD~ZZmOREr%zBkZLf__+dG)>6@jIz zA}gYE;!9HT%$LKF8HO{{pRrbmLD;T#*)Ii!{^})}&W9 z`*kW+5v&xEWI?IwgD$i$vA9^BEKbdqAvIvx8@1Wi9uM)xHcTm`A2z)TUOxF_>;>V+|wdgU~b+G%uE_==)Ttwfbco!jaiV8+J?M7mMRC4Eb3t=)BMT z=!fP}VL+0L;_nTJbp(=|pY20(!hCE8O`Fhgl*9DiJ=5^J_&975OJ@O;uU^cti8&g?}+S<*Q`C9zDFkFC645v-`+CuWp%VU05XuPz zqtReQVT~CLBox@A+>pm7Z*ERsMWy(vhS78M!R_@M*Cx?wtNYw=nh`)S`62Gj{;3T{ zDaT$Ig!!FK5Fxv|$NOgMHCc)@^ik<_KoOrgXGvB#i1xQAerNeY`qe?42-DupjdN&q z8~1e#tMmS8EQVShiKFsg?|D5c5U}?fHHmdjkIJr+K6Qq)I0Y(Xop=0<{Jk(NeeB81 ze02r|{I<4|X)|!m-y3iu4&oMNN3Zw)YrofI8>>QfYZo@~IkLg5kMVM%WQs74t z;NdEXE$5kxH9tN1V+7-3+G8-7h{hufCoVB2-v2(Ske}0LxOuY`41^lh8=$tNBsRqG56imb3att}p zaGwYwpA{k!G>`L&W2IM=TV$ADVHn$_!&)$dxDd`&W*5$!+=0nrjQ02jRzBKN%u`qa zS~7l0h8Q4rEwc(i1!h~6xy@Dx&y^itG0mDroICKB5Yd#W=`G_AHtCMagtn$noUK68I=Nzwt)A#YG|Pm@ zMP|2;5V^?P+;`vRmR=FD`Uk5t6v#BW>olAUm~%I9COj^J!o^5^24Hlu#MG|MtY+ z0O;Eje*>Tw)7+{+qRtn21Au2Fe@uHsQEPzLCncEYh`a%eHxqdS0Dl=oUPZ@=yaOO9 z7TbT<5z#v{kJl)#%RQBP`o~;(DNr2v1DLbM{J^twGkF8|>jmka?c?>B_i)eKG=)l; z+cfpc2CAKhl>Ap@Q1JK-=pJoo5Hb#ZAn54m#%lQ%`co9SWocKgC0Q#owH%K?W)sKI5%N zeQ;Qc>Hnoi-X~=pn%Umlk?K%6fQDV3 zowzg|21jPvtxjjFrbe5bmxplB88Ia2yH^k0-$ur6;VPd7;zX9~%zr(?0}oL1rHRz_ zg7;4wLl$cTi}H(rg87O!6&+caU&2kft7&LCxRa1MJZ;y40&a~6nAP2S;YJMO%&Ten z4sAnj5e_fHn7p%IE11S5k)5ZoW2{lm2pj0KQp%Mca2rkSY3bNvqk|+ijdU(rAEOTd z90FSa7?X5(L8OJez{V#nd&_hGV#}KSa^4*kJ2J^RYd9QOZgmI>vu`20!?uvChzUB-|G4M$Err;o(@j84d|F zL>0`VELZ`&YSuW6DHlStq47EUK<^(H>kGiS8{`rndWvRLl6+k1MPG(OUYsnL!@ni` zMeUy&6KYyIf@;Y{sR57f9?C$Uc0*5{b9U;W;2j1G+3omukT2(2O=FBNK9ef5{AQ= zcB#s+8J9SP4)cbmB@c{73sr3Lgb{jAda2xE!$}OfOW%pj~8w z_8d_SdfAk_Ux3d3sUXX1iYFtxD{5 z*{=W*u17+8OrT-p$KGh9=*^u;FA^5wka|790iq%FiCzc{i!f3sSQd;wl6*TD{jdtA zy@r1i>9hbJdiZmN-2l5mC+_w_aMZeI~W*yFAnE}0Mk~lwHcO} z9#`4ZZO^eP{)a*{h^fW@h{nmCS`+dPx~OOdm=jTMVo5U5ZDQNCEdi-`Yi(C1b4fI~ z8|X~cGzP4p3l!6YB^uWB2Fx9^3bUowvt#B8bC~Gx_L_y4xsOaCegrwgs#W9y{CC8@ z6YoFAz;TA#BiJ23QKaF3TJ3{G&BPdWjbjV(lnuovgX1T06s_V$K{s3;1nIlQxf6I| z8`4t`?lUxtgbHE8zHJRLXkxo|1<~yiajoK_&7JSRQ7~VIsB5YXPt8v;V=gRXi|E*& z$G;j}KZSWScs@M?O{kelkO0kJt}A3P!@2w!qG0vL^LDF=3e*zJ9?Va=G=maN_-yf1 zHt=7Lf+DI$TvOjJpum}J@-B5{pyc>{v82_9bv-)5pVD0_nhqdAAtkpO)EJ68i3C{ z=e+aZ6Z1Fb13e*+p}*Awa6m?}Cqq z`(Vmnbk850U*tI+ZtZSQ(i)?(P%Mgv$T{Kla$DDS(t(-6Cm@D{aI5n4-Iz9uv0oGb}VLf z)5C(xAJYs9U^w*NRmipIS+wz%5~eynC(ChjQ%`GUDjnJam~CP~=za(=i|u0qO}L zJy0DLR0Xs}Hg9#VB!f*85v-?-rm@QhX(0vHV8Oxn6rst zm~^Oy>oDPDNPw>3Y#<@744_efvANXYnNvWk$XPQzC}L|Hk}zEWUqCPs!@rxPf>~px z+qO7V^1%Ge9m=R>S*8`JAu%vx!TMw!#d?^+0OS}9%O99V+>1Xq?yJ3=jY< zVn96A26Wj|twZeRR8Lml;8g1{`KNjk;rFFZH31c!>d9)!Q%ykmr+Ttl@>DB6d8c}^ zTJlsY7!&*HNQI|*vfArZ55NUL#r(c|@6d7$9gy=FBx87(^x|R#@NSH|A^K4mn~xia z9po&uxclswS&3q3`v@*P(P}@dH5(h=Ct%`LSW%0X0NTeTjKQr-|C1JCKh(V#f1CaX zx{QMypTO31)Mxpqu_ps0u+*FY5GrR9edpACqC~a+8~ibW2$Uz=sE5+Hp3D~w-ouL zRDj#pBP&QbZ|#^8WT*0XWh}B#e$@{vdGx|#5L-yQRMK3CkJ(QC!yOuP`M?3&-`vF0mg%^6k2@VaktZ_sZ3R@ePz z$#q|T17!BO_6C(+YyV}GxAa`3?E2sAvHn*?c$H8MaAhrFGb4AmQU1X!HQWZ;uLFOA zjL}vn*>;*klu@&Emx%#2attd&=>AIKGwe4F8CXb+%k*I07b+?7cjmY8g7T^A=d{)~ zYhAEEN|jwY5QkIkysX#7ZWX&RCQ41zUR8doqjC|In(Jqf2YfOStNStx3BDeg8F>lg zmU)0Y__5XJ4J_qK{TcGL#X(?tSjOh?K($91sHuwX@OoX@aTD*tm5MKs}+;{Uh3^Ldi$ z%JO^C4G1AXfDnTukW#du5KSQo5Ta>X0u>;TfTAf-_bA#CQ$MmGTUC`cl~qD?jMttB zJG^#y%JG@rueFbsKTgq6DbbfQZR7sY0bb3kP(ygkEWb51^TKrE3Y3R=U?W)-4OaZsbiQ zzk}7AoRo-trNCI|Av+KmO-yZi^R!Sm%6(XaA)8r3e9KPRg|m0la-u+1Clof#bE;t; zC(~~T0Y+yz9E7njOG%lVCMg#K*?OME)X7{;^OTDz=h=KQH9}R>B;{f(#q>E&rcR(~ zn&-POrbb?AnxtIJh37n(Iw_%Po^mneJe!|PjR4R*31#BEFe3I8+zav2Q)Ix4#j5{w zx-kc>V>ET0&|$kYiiWH;O+eGTX68(Mx@z+HF4_gfXW{~yqI1)vo3i7k=|BEH(-+j| zSerbs3011IQzYfk7H@4KN{(%%#k*03bBf-!%V%n3x!OsJMZH=#P3vN6=h>9V9z@#? zY^hMXo6hWP-C~+1DVFof_%yAHIo&u<^A$TVGcEh3nT-n7y=f)Q+ch>ru?}t5$Q+w2 ztAYKf*U_+&V) z7TA7QPZN9*!!pV`CReJ@WN%= z8EJLh`DgR0rbW?O?Uh1(`-52cb78~&T(Zln!{1#W zC>5%^sy;OX>n+WA{;b6)HsSf4Je5QrD2yOjYo@g)(INoOwc{!6n{w)EJC0sv)moGg zbv=}B-4su|gL(BsH77>X61HFsXnK{%>%x#w-0BzHl+b#k>v?9IU7zMY$jGY^64HdPm~|nF2b;^i^)}2+W-B)HP|bX;J4@Sh^rb1gbKYoS)I_qU zG?BECv)_&Fr3r<;+vuyova=8@J58gXDhOeV-Kf~>gSIW@_^mtrrHTVh8mA-pjZhVL zt9igO^fZ?}_wtEQ`XV$Ay4q0?q5eDUJnO6|#q&ww4}9g^q{=hu(u)z@yi0(y*9q9` zVU?kqjk(va$moiZ74k}mI?jWunv6@MdRO`j_6G@vypm-~JppRX>dGbDKCOP}%6ga1 zY;*O73Ox5>qb#*R-ZP)zRS-&pzcr&9IT?USPBMZgVqP$Qo zU(SGFg^^WZYM^c(zF|)TXFV7|*=t{A6gDhNSKoi6U%l53te3<9O!qFBa0XOA{79pr zfaFS&Bv@S4+v;~Olp=EPn)RDUj3Nps^qbdHQOIE|E;$80fh5*s@G65i7dUG~5Enbf z;VnavS7b7wbhah(dg!V?$_pI|l*18c1}l$4A8D_sUg6*^3&h_pPk?#9QWg z*zP**osFxGpGyZfjPEMF>b(DicCqu7U5;y=1^sVE{ZQs~X?~fo_Rx*xx!wY05x;u2 zA`G6{n7jGQ`jhXRR%bj;fG7{*J;Zc7p9!~?g;}4f*UB@yk`HwyGoBs0v8?g|6oWv# z_)IxEpAMdNPd&W*Zui>#M-3DGgPMu%Di&ZyEweuCT(VeTl9b~(CN6G0_Bah7t$xat0(=Vanu(krEwq4QU&$P8`+T6$5+!ZaS0;pNQL)WGR zZVOPz1soMTXs_Bl=8|#MTW?U2??m0*hID>%wtn;WdlfZfFvqv+^ z8Cn)M?o;1i|D{7kimY!q$}h!$oCV^!y(+!Ri?6x>0Ktd6TZs!zAIq!zuYdyyPL0om zadRCj5S+j|aXXbq=q?Xd1{B8V&v*OF{m}PgUA3>zHvspJInk*925+w8Awu{x)xjKe z)SdIrbq(Wg)+nwVDfC2W80o04n)hS_UF>?=)f2rfN}C_B-XmN%DB^JOTPuK4L(p$o z2@F`B3nfsny5bj+y=Hj{+E_G|OPg}+j(Ccp0cEikMjE>`tm=xu0QFHzRrAWE63C|K zDpc;U$P68~R&>vA>XSsWH1+HErHu!9Xa*tZrZU>BnQN0Y^lg!Q&(b6Dt8RfR;pn$& ze^X=!cz-nq&!sq>i+)8;Vq=j;SXCKXnN41k-p;{DWK6(=NRp8=^s2%p&q?{6{kmxx zE0txO(S$6(1QFXxF9qcwbJA$FH%;s)Egt|IYy#XfjRFZU-X-9(=$C>2Spj@+MTU=g zKqo+;r!F-;vLPc^mTvD~d;1XxRs$}~RTh)a#EB#38Q0C|hZ^<3`W(p;eB7xXKB99- z7;~mrfUHM7wOUbTVSm-ciM$l=anb+#j8RG4$@}r?=<6Ulq6Dt7Fj&B zSF&!XKadPYN{4M2{#P+etuv_;VF_B6K1Ec82+#+Bb3&Np-104rwdH3z52eZUJ7yKK zn`=ZQfi-9dIjK|BK1%r2|I%A8o}5zl&f3|tHtqPEuPb{G&F1xRPEbI!GdYOU7&|n^szrZ{ zzrRm2zb*{9s$G_zn%;TgrTUI_q`+8D>MGS1pKHyy^KbK0{Uu>9CDRYo+ zz3f4_kZhJf?E$4~B@lL;B(RJNI}X5ME&IOSaYc!=Z6ubwQS-FHS9k5h^FC6 z)oWM>oA5~MP!P7Z&<*M306Q3+omHsb5&JMCfD%nu1lleP5mQR8V52`;6*#fyp>@7X8z}LLg`^f1>%h;V-a|QD*d@ zXRQbWGg8AnS%Hf7W?ik8?(}5K9#mnL_XO?RvgEui57Db)`1{k|y?pJ__1n|k+xH&c zcyRODl-=!@hQ0NT)nd4hH4xi^g-|l622&{!@pjmT1IlkMM7uJ3RevSNQ=06+wYBx9 zgSD?ijOAd>7}MBv@TJiTEZKCNF>;?Zd6VS5j-ka4erznf5Bs$nN44&*fIgsId56!% z9=!DFqnkHxJdmB~tNQhyG`vRshQ}b+AeYnUlxs3xt@YriGAcf{<|t|@XiEkw$AF_} zUOmUyIVJ7F^SQ^~x}zigLUX&;jvA9r#*A@QZO%^t*d@bNOjipPFW)qCLRGFVc@$lT}%N^UKD6Xbi zkHuLfSa!it1oQSqU#LtvJ_Sk$GVhw~xlg0#AWe8QOgQuK3;9u>;x5=^zK8Ae*_}jz zWuuYTYi^>x4T{v*2E=U-_&OvC>v zI+__F_?dvOt!_4!D3{I9dm(fXOa_zMi}`tFt0UFV*)P=#7j@H&;e{TW4qUN`27&Pe z^v|I5v~Te#(JLCf`}XFx#&E>asgkV}ugV^-N~r7Z+Muhe3Wd}Y$D0Vg8VH{edL6Dn zj3xBOx@NkQ7s~RJC7qIP_f^KHvrbDq&eW6&OgzsmwQ?Ft6J4BDfsNYjeqVHu-~;d` zQmTBEi*EPQyumWo$;9Gt>tIokMHS5tb-u^u{iB+B*$uRPR)z7I z@!@Zr0%jNXVcbI~Jxkw@_yUUnCROn;xRA%XOS5xyXO=BxwLdG91U0v6vEZE=_^>xn z02}K1k^aqS{&JXOeK4SGOFe@Bs%A)xCK(Cxl4BAF2wrtl3kZETc1hCV9}l2F!>zV; ztOPgrtQGAqj)_%O)@^cc3(Nj)y!xDk8PMsx4wluk8w!6Ea-WbFaJPvhpr_2a;oE${ zU%N?3z~N;jo$tP*;GdQGXZn1uyIjBh6cYI$)#V>8N|!Ta_J7t}QCz`NyC`>GLK}f= z5{`8oSU9;GxE?cMb_WXHXWWvJF!L;un+I~m!_9)^Tep5biS^A4P@%)Kbp)SW=zY_l zuO%nj{xihWXfxU7KM^qE3g%Q|I*7(qfhvY9Kw>DwRgp0925YnvePL(y`$7Fb`Uch$ z%s-H0#)HcHMP!*j)7!WVFcOtj|G>@|4M)^g^v1eHJQ|{mbm&*tS|ECe>~eTTnDra; z<^Y67gJ0*G#D^LED|4awkZ1I+b0mzMWYnpZpuS^W%uB$6@kC=Wd1df34hr()CQ^wm zTyuTru!s=pGkb%1*|{KQNGHwgNA#IF;Tl6Sz3u1WBoxBt=rVRDf+U;!{?{#8_0iwd zUtKwjGR%sj26e8t*jrnZug83m@Z1t82cyJlnpR^ zCWF{=S22M+ic7H{-1!6tra9+bT!_(@*Y3<*JJX$>nX$g>w2?nc1A)O)dqD-$6;C)f z_%^mtUlfePSh&;d?xxfkSiYL^1=LaHZU6N-&^+EO__)V?fXp1MtIQE4{HppWx;sVu{o?!Q*QUPsU1R;|I_l8=2mgFidr?WVq8JB_@px(+ z>Ikz~k`a^$9*Wv%c}*fU`an;@8#IDwYIJ&YVUF6{#Ev_Ks|st-dnlvgZuH4Hy2qKr zcS^2++!Oe^(cF4I;Pe);3#v&JxR1;?zLF0l8)T`8wc&!oZGjxoHNRbq>xPRVYx(*k zB?n52z!ro~{~-}reB`vWRlIMjWrz72ZcrjF-|7k~WQsf*Mup?K`@l!gUh7+6&c4DJ z{Kr1Ab|Sm^7vcoxc7Zkq!NqflJ7_C5p7yF>@$fm|V>j;E2{6hvO9y6jP7SmtWfva4cUq|RyKwn;z;-b zp>}h#s(LJbh=o@MtTWx-aJ4tzml^39Oi_L}jR?ylMoU$Z*SgLPgYSP?>wm&TFWq9&sV6JcJl2^ zLm#&AldTzzj>-yq%&f3ovqQeN{cVjHWWhAzK17R6jIu|y0b^Fuv61%LNUbK)J;6kJ zOw#(R354x;Z_k)RsJinNN6!zYzo;Xgod*?3-D^8@!MKhHU~r!bKt0|s2G+u3kiV?YMM4^R#dnGMo<8vM}x zd=Qj}inV=@mQd;hIS%i$&~(R?c}rYbCUC+Ne{^pLD-*Ic(UB)q*H*2H z{*pF`lq*=lVz-;FfbQoYov4yp$t) zU*mB%z|&`BUsrkj=&sL)QK&KIH*Bi(@*+3UT- z#dA3V*P@kFKAPMq4{(i2;Sv$&) z^bVApivvk%8YNY;tr_Kz0>EK(-pZnJ1jXPqt)`~gRU;&+L1hgj`^A!-aRvgCc4K>N zM^p1wTY1%*$9F1tP>W1M?|h(oU2AioTg}t2OB;ngPw5?Z(LlNG@>d#RpO4VJJ}ZOL z%HxKS4r_7M!>W!VMh6_Z@Nf+@)O^pim#Xi-9NvF07%Zc0G=gzR81qw1aq!Hs#Y8Yt zm4zBG9*Ah+yU2#YBHA!xq1_Iclq+owN}+zAF7C}6*H%}hvd9Lf+tWRzPA|iaRRYX= z3s(K|K;<%~N=%>DfTUCYJ|L|5d2AVkBchL0pDZTPvh1(wT$&>i3#HT`uK?Vzpx2d~ zig`O10S-5_$Wq)}(g;gXY#eM9_nHSYQqeZp;W~Oz1JxZUM%zI2?81J)tw0Pd2w2T< zxeHmtB1!llCd5-WxTdKfkUpDmuib=kxXOY>Rj502^PI*1bLkqu+X8WGc#|Fi$R!!z62zROKsr*Hrtr!%ASQqNW&l!+ zy*f?vzBEtznoSyZrIH)bvNsXgZxxcGQMUpQB7F-~whgh4)RWp`u)QU*Z5!&i6zbBl z2oXb8CE3#bI$2=YKSF`q#yz51Pc>w?21FyoZ9}~;b4H2~7!SlyYBI^ir)5GLb{6$l z&SyN5a6?u5Ewk&?>9eA*ZG`r>VxP`8a!7;;%tBBv0YRQGYH&SIz_7{)C(x+j7m1r?KPei#&=U=_B6&8T!r#exRo|6jnQK=x;^ufd&!5uXAx$Khot%w5Qq|OR|nxKE_ z%YoeP-SbN4Yg)p=@v0f=^`e0PUZsnSY}Wq>1@1=8cQF2QCIXc0kT7?+soqT>WNJfM zoF?G5MtEQg^IOwBSB9^idL8UN^b525>xJV5{eH?B8{fW>^jN}>jj4^FqhgP z_67V_?zkG5zLO66fRy8fNoAM_ILBB}?m*?t6C92)$g)w;D`1!!%&rZ+=u^Y%M`P<$ z!&dJ4HNSH@x;)SUzjwJfQ`@rsLklKiezTwlP4qj(zc_B-UyfbG`CZn62tC2R%JLk~ ze6P?TsCSEn)-iVq4A*`6nQ$^YqWaeDYpW=>D8EoZD^o@)CMtilw*IHDRk*>NS8r8X02$ zox#&BjZpE=?1|MBR6)UF5$nJndn49dXnaFgZ0Gh<;7PiOJFG5d%jNs+IJs^mh4?wK z;6nN$3WgIAnnDIe=JanyL$^Lt#evv0Y$X>=&BBk(NHJd&!j1gw7FGl|o{nRhXjdTg z-#Ne)>=jg~_=(?V~!`M899#*(D%31d_6vh4zqa8haA zR9wGZp>NY>?^o<@#rwOHOwl&NQTbq^4$U6nMMNyJn8AdryB^3qHhFhoDWG*XLiqg` zZ6j$^+$HWTaA}|`6k;aV-`PXUgVvMrtkC!!WkE;`A3{of2XZ%c`ssF#*T8|k;o&5k z(px$r(7W2b886FJpmW#t>1R6Hh+6JU1eH9PuBg;yKHbd@ws}0i8s&KYP2Gs1vJzR( znZS#m&ke57VyJLMy%xG2)>;tqaNhcu<71AyUrOD=d3I4-bGh?xwSCoqZI5er4tQ ziz%9#;E@2lY*jHg6wO0D%f+@G{>LULAf-EkLCb;3IDwII`Pl;@$oB}}^H95M`i&w^;vf3`NJWa^>>v`62L`P|`$|AK ze<3gUNrB6rnd86szcqLdw%W}=kSp!!U;w@f%qKpk2i(Q1CWWM@Tl=p$!9uP9qm{X1 z74WsbE->69zN}@s^)25zffVLKb%*Xnuo!uvg zpQe|#T)Yl;u~9Kjc`ylW)a$Ykfm#k_t0u1V-RZ@}Hbraetq2<=+5egOkC-)w3a_Yg zfUR;NY5uxlIzEk1DrlLG1gp7z#{$JxLNy8_W1tdH20fwQiZS0lZ1;L}Y-ly~+0=2N z4itqMNh1!HFnyDx>H?|$>=$sXsJFv|1}kSWT{b;VH(SyG5l7s>Cra9WtQ#+6^w-XI z$H!P)EC!ifl_gA}te(ax@(^&(arun#$UK}b_zp) zDXSe?%6QoRFkWHlKA3aI!&oDL)Kx5W-0_kQ*=T+s6(p=5=}6!-xNRMu-S?C=;+Jk) z1;*rV%u70}Albgk5cX{$5F_L+S-S#`H3fBgQ0}nz#~X@=_9&D*=y8jQhzdH_3>0@o zFwncS-+S&-5=Vt0`oa00hlv?;&Ns)b$7zVYVF*t*tsWVX(dBU;+y1In`nCW(VUfPa zwr|^hthgly?}zdk_og3O7OC4MN}#F(q6Ng1R8=#~K*fPbMK$d@kMV2Mzp7braGy^k zq+h34%5jonfldI7U1 z9gwm4UDc3LChhNzhdtqR>tP21I&wnAVIPIhhMCcvL=#tJ|F;t}&X_mgOcjs9&{12c zpg<>w3tOXrVgjnQ%I4)WSP*cUVcX8?3_4a%=W`2lo++yBlIwzYBx|(}C5B43p^8g_ z8p}8mBO|B2ZPydYQ2JOvBQ%b45=%T41F85^<25l_BWes87kR2>64)JRR-NXc z4Xtsh6UW?qIiYRlbFSxfSWo>t@!RT(Uh$PY?~shR2uhqQ~_F2eFm zIQ@s>0YL_PZV0eep-N7MN14sCR4X3*upkx;L-|gNvB{yW^_et|gRtH0g5R%;` z>OXzbR~cv`)*;R?JIfPsnps`xW#P7~)>U1`Egf+!$ogaFkPi3g2vlFwCpN+}zPS{z zS3p$fJ)<~$>KgT7i@+U>U)Y}sxXXul%B$6IZg89vju zux1VgNtj#_=QCvylh;RPTN(^jCszkbT{P{Xx`zi1Tgr+cS>oS*OYe+B_a7~Gx(LYZ zTv2%16N&$eDv*Z)SsIaI4=pSkQFMrC&a=KQ&%45Hqjiggv#-arv(;H*amJ4gJK$WMO2Rmqk!T;r;n4Y5qp^bdbMCHr+*Mc53i&&ceI^Dz6SHdOaQC6<1zOHPNy%lMm9KjBnNh>Gv-u;t zG*~3PNF2Tp&vAC?V>GFdCn5ZyNQCL0C}2%%&K`@mD)3@Ipn^Moi~euKl{ba-oFG*^ zfSnIHwm=f2mfbGgoO69Rlxj8m$@&v1rbdc5&R6Y|qV2u*{ZLxiN`OsH|p>ZIxoN+32QY{7^( zM@ezRZXbBi3*yWcQK5yGw}5jA`-gVc?Io(KSYgjJ-7N5glVM?XeVYX@r&i*m+-DT=VQ3!YnYV z+`IkvC2XhGpn9T^fT`qQnN<(@ohV{S~kn1yfImj%EM`@ntw4%9w zt`Wu#O7kEr@C!t&%yxNYMmAAVLXAr2iA4@^+w>E(aT4wo1I!^@5QnadvvqkED-*%wI`4HmrY$;dM97(%$Mm2gn^ z4v&P>NGFUUV01gXaO2j*kHwsf*`;}p#CgR_`YW<%D#lXAOP8BRAlOq7&%6UKIN_{Y zK4iWDOA`Pu-ivrxv-^8W+M8b4=~TDod9R%D)53SNT_m>-v|Y*^hv?>Y>@$KJscqdm z=juqVu3qeBJ4R-U(T$vo(6)`=9N27Eqh`GaMeFdQ5z0X)IbmAbr59(!JeywJuNNy9 zH@&vg>&DbfMq4A)H)Je0NkqXE*q6q5Y37eN5H`41H3Jbw9hpXkcc)YLn&%JIu%LWy z2Le|}oTldJw*5*+=O%+l2_i3)gw}mi-6)qktKFlzo;eH(1_Etm%`OFEFN&pyvn*%z zZ_(LHk(+KX&gi|_?3gDW0jSwQq(Ah%A4qD+K@EfE#P z!Nwdzg$~O$t%OoN6-h3IiTL}mk`L8M(?Vw@;jT-hm9>_98Hr5&AkOK(sw75;R>%r- zF+*hx8DbTINi*`fLdpmg=gXlzUdL?z!sv9Ruc3sg2{pBvutP$~!6-kD647JBVHTp0 zZSHwp6<0U(rhYG?<+^X$0iw!-i0=#ah)9^wK~g*k8ZEI-pGNDSA)J5!JVn{b_?%g9 z^j!&0F`uCX3I~c5+`No~{d*6!ITQCMtN|mj-5z!yNfjaAy3DqNF-q09Qt_{fIMZ=W zu=l-%iL+e`di9!-{(`k-v6ttU)LO)k$BxPmo2Ta1Fc{Sx%>QXTm`C61XwdCs0fAuJ zM&>-Tl8BRbh1DgH_`ks;`X_!wkG60|5^jSTE*+10!Xi`zm9gd^o6gN!YL6V8xY!ns zZriA-oOn+OV&cN^ycPC37W?$%Vf5PJ_A!EYvI>6_8DTnfbB-^R{}oEG2q>RFPr zD>J^YE)!XH{x^mSGozT0*k7V{)w>#wc>FP^p|f5L!ScW@Q_--*fAdsFvjlFex1$QL zhC5!82(-bv>;3Bn9Qkrn92tv>)Q&+H8*wBFCl_r0z8u{@*C?AdZ(J(bc15t0XCRiT zxv{ck?If13&zAp~p%Puo7`4DJ@Cy7yh=`W>)^+H)H}(8g;pI)e&$BM+dj-5IzW{SF zm^uH#G*!hcbTlV!z~V+@QfJ*jES@Gz$5e(HF6a}&MR*YF<+*6;Dqt`{!u1WAnr#fU z!;lUJE*Cvh{+!bYW+M9kQsJV%*bm8u7987jCf)8#X!<2zq^v|Lc(UR-0EVz$owz__ z2@OLlQM{-`M4@qd`>_cdaHcH|Fnlt*wpxSF+fG(+!s&|)BigSvu`)i#X>4}(Q9_9C z5Yq_d$@IzFPcTlVPyP%>N1h`{%iRx7e<$(tl*(Nm#2b^lR!{@J{+s^*Y?u+pYW zX!*fds7>OMu&HcGBmg--#;@CXZ83HncahMXVhoCKt2@N=ZP7 z(#~jJZxfis+%2qFu-!DsN`f}ZDkDLI0mJ_9XkOo`_8GWB=t6O2>?bNa=l2sMs8OIO;Y9CBjDOpYxGcfo?Da6P z*;sif(}+|Rir#%5j3x?&)Hfe*kX0Ngh+*dGMhkChsNT2aPN`h`#N@e&?s9KdZiL!5 z)XOlWG7csDOW3!^imY1=akF)VkRDTch08i|vGuiK|JyY2>|Bg>Dn_ZfuAS9X+zLfG z^6NHw%;CAQ0DZ}#!$A!l;g&dbk~HpfV3_=kv=xdlyQ-Aglmc(NTou=%UhJ`~irnsn zN)c6?+_p=#tAnn4Bzq=2$ize(kZTE&$#kF<1)3kCC*uX@;>Wr|j<8%hm#9UO^qz>C z{R@Tn>&-jN!N^f=hG?8KBI99f?j(!61EPoX0-2G^~UcML;3rX|LVAnS7G(WdR@C$$H$lY*@r87HHX z0l$>9bgt9uEa(XcUzyFpy#kx~&ScaO8iB-!#Rc5Jbj357sS)=>@=t=>$S6b{X%j=1 zF-AQ>0qq#;k4)rj2L{1kRO?Vwl|HdcycbKOgPCBk=V@RFbOJAI(zjVsipI(yI$|Gg=U5&0zd zXmg{z6fwIF(WmX;K%PmsN^++^bJG}J|EQ^WHHEAkPq}%jLtEY-_QkO zBSNI#KHUEEhB2y^SkMI|1>F;}8#ExABs~4gr2)R^!a<^nF+HO;ZT(i*v`yhsl*H>= z4IywIkL|(lTraM)&w)~jxK0yFzOC-2_W%M$_8+Twl&?^`qa5mLD3HPgc=D<~$3i&y zthiV%ed1i>B39xrWdQiZi~wAaDOWS~Ok}_jifEq6_USYj9}@#JTlXXFOWtuvrzA%C+Rt@3p=uLsjjHdQyds&i-<-j2oxyR9b{VFp zCnC)3^r)S`WQ{rY#n)t5pm&_%a$@fLb>f7W!nrX*PDJxqR)-l!XB4i=~&e!R_NlE+{w&$+ixKzqjW;KZ{PG6L?!|;>q^qA zHS3F{1kZpKJ1t~k@6!Q63{)i%vOvH>N8HHUoqPp9f%_s%LJoceyyOg)AdL=)C=yU3 zGmJd($wcV4>)Iv3Iua<-t5!g9)>4uuC#`TRBU@@-_k(knlp~209#z^H>~nVa?#fn` zf`npL)n>kQq=cs@WF-t`W^FaW&t9%1K6$VDWDX9fJUng&dyZ-e>_E)`w^X{q)iub^ z)qu=SS_r@kg`V_1GObIokP}F8acweEbxuB#8Z@hod^*XTUN|>Itq)R-ni`3!v)BSl zRZ-8_6{QZpbC2fVV}R zz(R3HC9S9{jmh)v7<0B|53rmf-LdXlVkK9K>FwmDL9F*CR|YDq`W#5w4Pgj(#HF0_ zL#vTcP;VrRCe`ME)@V())9S|W-_HMDFR@F2NHV*bU0^7#cO{pz*0nXs-Kzw-1rd;4 zYvk6uHrXcCJG*Ij-_KZBHQ|_#J42uqWL4qCwamXBod?F=4&VO|FZdqe1txB^@9%VH zUKlXj`KHrrIsH-bze>@6f2LRP1?AxXH8sX>Dr#1+vPmTT-Fxz+I7Fe-T& z^@96@v*CW&9_nAW!{i_;*1=nwTVfK!|KSt2fXKhtlX>L1EglmyW{fE!n?i{=+Jj3S zs94{#DPyjOKMDg#Zy_oO)c`4fv1$`>4McTUsj;XW=rRaOq6sp2TZEI_XeQiOP(Ylg zB40hZ2pBFvJd~wUc?Pa6VZaRffde$MVmCF_L6a3T$ya9Nlw;2xj5|Y0k!1_HUNaH> z@yUJ#Q0|kD+ZIC}Dv$Vh6J*?nK=b%`jAyDmZh=QJuqizm!)nGJ6_%ujckiB%Eq}sl zc}=*-dP3gBReE#CQnp|%Fjsn7uIjWb&3b{`I0g3Q5OL6AVD<*Om0-27J?}v=p0lY#fT7{q}% z5O&)zxPCbmtZ~>?i>5(ovU%&=km|73&U)MuLkRkAoGESTzBKYeZ+`Y!?RYdh8toO} zHOVju`>AQ&fVNB^cYLGtw=?4u=8V0BSs1*il$NiW4}L2KOAOr<5

7MXAYAn4SkF+ESXIowc7_Wf&c1Ao>bG<{9kt)jblAm- z>`iN-v~}$SbR8Q#YP5QZSZPc0Fmj<-#e=bZzfx&KRKbtu*ppWhyk9k>CcgTyU)=t_e>rRImoNY57k{vyv8umfjCC+pcNt>` z?qIC?M#c_4jE`OsF!D{tUb_#^oFib%K>=HD6L8~u7<7NV_ZJIz=%9eZ?_$9-u4k;J z&4NE?!NJ{(U2q=@zIzp8^$8aI_$`oo4GVrnVQgPJt2zA{$owGN^!^QuT|C4#5&w%H zV4FT4V65$Swu$&vKPq7OBLddmD`4BV1U%>a0`7TAzzZ)BaO^_1c{Aj{{P+kEQ@z;Ce4599Nm0XFa#_%kNCskX|J%s&q1eq53|9S?qzJv zeQf9g=&j*=HoW^lu#RopF5u7&?6no3Tie1e3jvS9ZyN+|O9MRQ7{^dkK7Z z2{_zP_9OkPjCDO&_KUaoF*Y<kF@EZ08OEM=vYyeggVilPup`vyQP< zL*?W8^T2ztJpIlN$Wc}P_SJx!8pTYrADb63*8Ris z|9<|>kmK?4-#iX_?blT_2U@^yxMJ@)&{O%wimTS&$=KP~R$P4ow!QwAiW?rr_XD?A z{O-S?_jB(LG(7cL*rge0Y&pf)hPMWqkK*USrvqL8{B=BkW?;v5=y7dBV8{9OjP3YZ z;P92*jE(+%;PQ7pi|1Y!xct^2^!j>0$a}`40(PwyaPaeiE8b`_w)&1h`lW-6l??|L zuQ>rdJRsn%PYJj$BjDlnfw!IiBxC*82HtV}*VyM@1#b9M26)W^mfvT==LM`VE%<&ZxO?^AGS)m3WK(xzUw##= z{Tr-j9@QMCO*x||G6UVN>I*tdwyKgs6+ie0iZ?@on z3fS@{0XND5UT6q7*c^QEk?UbEtAj5e>&3Z z`N;W<9a;(ncZQzciF3cEp)&ki>_h*zC;F%Xy9{VKhsqsCP@2_qJzj);bZf?i<_+I7Lc77lGUL#;rvTAFz zA9nY=fV-X*aNnl|Jbbk3!11#f+uB|=eKGd6;Z0Rn^xXpeKT(yu@+sKw#;S$r&td=b zRo8t4>l%Ea>Ym@l@%c+t555(4{hFJqK6mQ%knhXY8}6uvpE^>#=X&rPysG-V>lE-^ z6mZv^fMb7MJ)HPI==Yn|6VH)<(W;L=X~0j-S3i0o_-`4n{^8oMGbSn3zkUVlKJU5e z-(80NJ$I{syDhly1@ZmiTdQB5gx=0O6b_tyA7dANG~Ds+`*ELb2rHjm3%TAFo@rge zzJ4p5*w6vL_HuYWhJC!~x8cm{XW@4)4c{2X{?^|iVAI<02l`;YZ6N{A{8s_@^jYwg z@Z+~Y&YrUHcN$0F=kBcuU-NC)#m{O+{t13&V4!An{--#%AF7E?B(c74)O@T4&sG0k z!0b0e7Iq<6X$zJS;OUZ&)|OP zYk12$5ku_$Zo|_R^*C=K5E~D}0$6~JvU#`|5XHY>PfX94mH4WLf7PeTnw}`52SaQM zk4EfAE2c&x^k7@hd`eSiR3+W3C(X33xo~QMqce>yv3a)F#;lyuwamP-w-k2R!M1Tj z0+&#myo?PlXFWT_de{j5MOZ%@w=t`F2YW_F`Xf=nHWOF%9?g*V?llxMlRBct6N4~2J!!djU4LhpBn1zFNNC92H1-%%?xI;lYnz9$yEGHxK>{!#9p$NPjU>XnlhHw zrxnA{(^IOl$mM8bQIL^A#$+j$0hu{`<*2bHYRYLdrK?G^B&`)F<)A!0m#>sIXf?uy zxN0WYR<7S+HexHNrZ+OwKQgg(q-WTrC4XAW5@uBoX=cr8qRY}Pn-OU ze9p^~e6668(F~;knGy^5qX`HNMB`fi3bwOO?4$;(BpXe`yd-X+5?kOF8)phW=|Zxy z1OIlibL<^%=^T>{Q;`;AEu%#HDXx^~M@Ozti=&38m&n^~_*?`QPtsii!Dx_ZsDwz)TF2XcAubFEH- z`!I`Y&CUH%7x%Tj8M6TMON%g%lr%Ehsu^s-DZXjBo8cB_$|cMOmjxQqOj@6Jc0m#v znJOaGI2>vU)<71t4PVL7ioq>N=B_ovf2MIw&BKo;x#g1ekloH(Kb86CL?hu6ZT*-g zFKtW783UG)NvD;hDWzo7RMJVQE1Ht0l_G*oKroGO5t+7O3n}5dKVGzrQBzMzDafZL z6Oul&a`_}&#O@=Ocd+ckQ#VE4!LW`>;e*l0_9G}DlT2cT^DJposOg=RlL0Dq4#0>K!~AryDpE`~bw@rYO#kEH_F@lwgNsl?i@9z`5E~Ti~$g^#uifP&Hs# znS`1w#G{qFz$9p=t?K{>%BEChNo5p5FSV?2|I7?F;?K4uFZ~rP$BWvA;E+OL6Msp& zov?kkF2cj4($2WP$d&0uZ_Pu`xHh^d}uVeZFFXa^zMDU z3Pz#A5S&mmIH6kcy7$?7n5=?lX?stxxJ^DVh_IB1H}@wO6irVlJ;``vMz=SrmZT|m zSX%mzrx1xDF1`XAoO8^ITY6~VctlMqRxCdN!Bo<@BicY(;jX29C~25!WFkp(Ad}>$ zxhI`c5(!o3$n|i`;#lwq!XXfaT(q`Q1j<>5ja1e_80!kNv^CSr#vw7q`uWL2xKB+B zzr#cR<&X2sSmu`fTjL#E?i7 zmV?}kZ6JNfu$V47Gp>ubTAw!M1*Oa2_v><~)x+{AAdErF2Ai`*3iYJrm^xixn?`g~ zLBcgXhfCBlt^M3RD$KA+1ozYJw_FO%5Mmk&BO9X=wB$O^;oez2jaYLj#ZA>`U3mh9 zKm>7=Bh0XTg`QrnFtu!!2RKQH}G%SPU3RyZn+dog&3`lWW#D)9U67XG5~v};FRn?*H~&$KtQBv zTT7cmC8}qV@#w6aa?F;OaoABd?5G!|oJlKhFM(=Rb6lvrmP0#JjB70}uOT?1iJX#5 zXkaKZ(LYYeE?4Rn*|qZ+^I|zz*(;4cQ9~ z3=j1U5xW-8^DYtn3uFZmN(fdEuXI(dAZn3yt@5nvh?+zw!nIM0_#wh3*#YQe#MVe? zEHZguXoPf96u03JE|Db2PZz!Q}}QI(j@hUWO3p0ERagx4p*GXb6|{_nQcdpe?w^wJh7sY|nn z;U#%NRy8WJ@Ond2ju^HL()zQRniIZ-cvi;m`vQ0oggS>HmWl;PSUkn3l$(iYHMcnA zPJ|_1D3ai^r*VJKcRO8S#^y0ik&zH1z=C&@rKGZGm5*YIxu_^fsbhyEC*xAbPA*(H zG98b?Q|;G}bGvIsj64o$;#@VkL0GVp>MXP);bB=#=2&a-_|W@&2wXj7w zk!`eK=iyA@#Z#4o%Es>Jqll6GcoZuCdza7$^Pm#6sG^Z&(?ukT6`U8orbs4!T{;6imk4!qF#bMg0EkQ7p3z9QxV(Sd*;C@1GfOXD+94*Ujl__7HHut6# z8HGx+wv@;o{D|(tRdgIAT@gNr=a*ajnY4-Q#HpneW)$|x%LCc8+^gp;&cl$#(Q~$L znd2>NeKr$0u1?!a_$`@|wPE~?f;0-eHhN`bcsPo)=!dh@W%A@1jzcIa9rM#@8-%}- zR?(S|l;f&lQt7G4X0+#U@uybHsTCz+TRs-p$+Ne4I;F02T0;jx>g+KJ9MvtrvQEzm ztf7@twd;O`ZJ|Afe1UaxVnx>31t(9NKvm2H>Xh@4G|CI933O)qxw|yUuI&w86`j== zx6P_?MT+Xl#8y$F_S^3Bd}!y039jPoQ|6LQP~ib=UZ**{tTm8fimb?M?d{-3mHF(Q zNZv)1M=rMM)gGCZ&5Z`HHC^l{a*1xrY6_&O(>E?J=J!LEiyT$1TrqMharW(Ck!{kg zPb;?qP3+vP^%+&D4LV@94jQ8hZb^zjw<-&`O?ir0MdYbj#qY{iIF1Z1iwuY^VDov? z)h19kOud`5v|vZ;bt8)5M0}jY@{6)Hf09yc9+mTO$z&Tcek}{0n{v<7g%$~woTypi zZda_yX;*N&vl;`UTTwlx%1M1(*F=|!jw8iqvgOj~azXk_pV_LbjzD$Xgvt0k1YQL# z1&>6pj!4cU)OJ`oMG13!^F&-sQ4JNlMZeL2^{a>yOl+v(D(|d{@=lyIkAf8%DYNQ~ zxjD*9JsuXXo*s%vusuk9=|ocyO;uHKtJB&I+kaBrL4mic;BMPrdw)8ur=`VN1V@sl z%W-~{+BNsk82^$V;4Va&PQ_m0Di!XO9IIimhI!k>8wEBG9cHLhKsN3sxd%s5#|=Yw zfC?zCeOkpR(!m4pTB0mL9kNZhX?5(VyDzq;SD#O%G1!2{>F9w2TWQom>e|$;ClY)Y z8^*+CISvPh9;;}ZHsV-j(HIiF!O zBUkKUM|@XJ$;hH>%}wJyN1P?6<;4Ok-hcpQ)T7C;Z3T4Cx;5D}HR@92f?i0E8z3be zc*R%NMgB8qf0~aVWOamHlotvJOZ5xaw1IsJ0yIHD2fI#K-bAlcR&4ZMxi(e>uF?WX z=b_X=nV8cxr1m&9)9ErLKQoX0BhN$MQ`P|3?c+8E@~AP!K3>1Wi5 zKjjL;&WP(76kxVu^kaIC=0L=l2y$3D&;^*6sPZ8pA!MiYSg7jN;Cj%m_jF+uerfrO zT;HU3TA}+awK%D_PT5)ZJcTJSaE-34G@kV0cf*Hghb>5xr(gxt*Df_k(L{q3k^y1d za}!?bG#e)<`X@X!-ZaOvx@KO99>#q+iX>`3pi>R6p6DMQ8{M{lY?yY`%Q*~81@?`? zfn$6V%6v-qd%6{OaFM8d-W!#Bxi#DCq_dREwaz52G|)lX^5b5rd0xlmjxHsq4<+@O zRdO4I(P(f^*+|&QLaGO4ZN`p-eUMA`bnCg9Q|%NbJ8}7yZNa(rGhvDcMeyPjB)KVb zw?bF3_vli5;;rWh401!FRN2kK+!>JbqDjqc)ry=kwN>bU`_SM!!pqiP+;ULWXdX{e znbhDB52o@|L|f$E2`&|C8Met? z!;f)tqlp8I)KI2#ObOl$LPZs3k>(W_I^3x1bcc`X8OfOCMK{#i7L>FpW;gf)=+x^( zK~H0hPckwoLPxw7TatKTC}U8_iM$D8Z)q6YjJYVMMH$*>L)rEM8(MIC>_xTOixNw) zos%D%LUxnq`bhIO3yja8@<@8i@qRuG%4p=(&oF%%V5?|k(lN^10H4f`QcbrpWzB%P zwiK&Vf+XSSxf25epPhsukO?O644H_Cy0XUaHt=i}o^CekmTNFLVR(*_Qu0M}C$sRM zGzgicM!iL0?pZ2=g8`GCgIvU)etwp%%6H|flIr!WQ-T4t%9K+kM06IoYIazmo|qBukFyXim>T~ z$YdO1%V;CB{=sT1cxs)^k!-doa;zex8xiM{BONAEW#WY56s7DaXFZCVm*SrvajHlwuE?^f|I&Vk zxN=;~T^1oun@6Du9W5GkjN*dd3cu@4q)FG}U^=av))8HricV}5<8M4OS9tndgqM_4 z=Jw%bA1;ydIP}T9ixA$DLzpg*IKMJ{7i2RL^?Bjem(8jjyG%7(y0d7HU7E59*V~q7 z*D0!}4AWJrXydb+;tmy2J->Nv3e_WY8)@nrMMLO_Y#K{R+aRbwKzl+d#{wK#!oiCo zu#k`=`Qp(C-V&rH2T8{6#jc57nZeao1fPnI^FQ-Y&)WPw{yT>uWx=;mE!T zHz$RW8vG*#6WN&-%5C})XwAT5(ikT^z3l~?da`3Jl9=S?t*s`F583Qb>x)Lt@t?A; zX;KUb*<`|fI>q$ZRzA5=0Kb)A_2R{+45C7cXPpbZ#)&+N2|?4*nACI?rGpcg(iGD* z{&MdEU#d4z{J(M)wM-`MuKqHV)P_B$Vt>|(tRAhcs+vB5 z>Lu97mEsC_>&J^&h4_FMac!g^e+`a!H46Pu)6z9LMKws893kIIjZ3HSTS=t?yi!^W z*E1|_bFH>Vr3+)%BOY)@@*Tdx0W?~8_0wPCS~Oef_UB2K&9QO_b503`kKFp>wLv$O zl2PPD)eS0>VyA2hH4!}_r&V)yUd$o;Q>n6g9Zpsopgu?8Wzzhf7;^z*n^};yf$yY0 z8yeYmk0b}k%nLK|@2U8cUT*wWuf@*Yz7qv1bJmUlR(y~9(pd35?n9;2Ez^vA6>T0W zYKtzW^;Tesig1&jPRL1h+HptLfh_ed^{PBXTWPZ}baKt!>Or;!;a8iX44DQ?OoZ7q zfv4lU!V!cuS!7$+jsd@d)Idavn!Jx=MHhy|t4~yCBGal9*_7q@`MTHpIc+YAouS!G zn;o55uO)H&_N7W!NVYgaje)`*vmPUu@m#0rL$L}IN7U(cE|g&BeqG}!VXd{=5gLTy zt7_#>^WYsgX;0E!-Pub4yp?a~W7A}yf3GJ9OwsJg$ExR8G?`~$JDpd7Dm#Zvq*~Lo z0r^!@XoaRvYJ4xL*?zZxj2oB;}m2Y?YW&N5a%@#cOS22Yo@<6py_lhmH3tju3x;(LM{RPNX% z&WrMXObP^LoWAva%x?J=<) zaml%(zIq;vqjPOihlne_hW`c>7rl~wygUr5Gm4Q^8gsIy51}EIYZghUt)sR+)ksl` zSBxS`vca=TGQ&Ko8?dfnYhIZ`X1b=SXqVI9a47R;)uNuJSM;3TK>^Cy+Pp}zi|ee8 zs`JHFwiaShHb6Z@vU}0#^9Dt=co&_1X$$YG`3go8iPnY3)kigcFO_hVeq&8x8qGPu zUh!AO>I^mR1Wi0NDG{FfV3dCArYVPw9hSBuwky!HwYRlKG)e4UV1T;aRt&YWkyi&Z z-?8AuCZs$4&^8Ty&^}UV>>TaptYaA&o#5{*h+q5RkX)PRs~kekYtgoUGEkxBp`k;e z_+)|e+%69%IuqIMBL$Q+#7Z4S7k}46)=r>*W`(2FuEPubD4O^#X-^SGZsIwkg{}tS z86H-PIO}L43tqfo=Pat8J74@F2wXcay56X*$|OzI)V#W)ZV(NNQrzS;)TxIm+VC_6 zMcYW4NuWXC)H-AMR80OjZGABcKr=s1$aiMX4E56u{O$~TcT!5|QVeegQlB!WSikR} z%EW8&_PgdKUxm+od<$4 z=iI#=yGWRh-FrLs@CI6&Nv|(b#RS3QXpG*Pw+~v$(Xe93?HH@0x?T47qlhLoWlxS_ z*Y{e#^h8sV33HZwTQQPS9!VP9ptOW`1;rry_%~(=r*uQj)~t$=ErI zA>A&xSfcC94VL22Y?)PjqxiAPSSRt6I zx3j;|)!FxqmpiMoV$K30m8yVMFQ_pkZhN6xgfgNr;Qr+zl@abTcmdsmu(FP!2YD^m u7tL}~-73esxQh4nV>HW|buNBFEVo$cVZYKkWghxUOOzf0rGqjT!v6!&xw#eq diff --git a/data/locale/zh.qm b/data/locale/zh.qm deleted file mode 100644 index b508851fcbc53df57006892ac2f6affea6261b91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32139 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 From 2e1bfb47a5a1f2f69f8dd7f0c0ee25c64e92feaa Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Fri, 26 Dec 2014 07:14:27 -0200 Subject: [PATCH 52/81] Fix PianoRoll changing editMode outside window If an user Ctrl+Clicked on a track, e.g. copying/muting it, but the focus was still on the PianoRoll window the mode would change Fix #1501 --- src/gui/PianoRoll.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index 4e37b752a..b2007b613 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -1480,10 +1480,13 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) } case Qt::Key_Control: - m_ctrlMode = m_editMode; - m_editMode = ModeSelect; - QApplication::changeOverrideCursor( Qt::ArrowCursor ); - event->accept(); + if ( isActiveWindow() ) + { + m_ctrlMode = m_editMode; + m_editMode = ModeSelect; + QApplication::changeOverrideCursor( Qt::ArrowCursor ); + event->accept(); + } break; default: break; From 8c2ebf287d9de57466ffa8b1f4bda184c171dde8 Mon Sep 17 00:00:00 2001 From: Dave French Date: Fri, 26 Dec 2014 12:33:00 +0000 Subject: [PATCH 53/81] Proposed fix for 1255 Segment/clip not showing whole last note in Song Editor --- src/tracks/Pattern.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index 5306b2185..15d826f39 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -943,7 +943,9 @@ void PatternView::paintEvent( QPaintEvent * ) const float ppt = fixedTCOs() ? ( parentWidget()->width() - 2 * TCO_BORDER_WIDTH ) / (float) m_pat->length().getTact() : - pixelsPerTact(); + ( width() - 2 * TCO_BORDER_WIDTH ) + / (float) m_pat->length().getTact(); + const int x_base = TCO_BORDER_WIDTH; p.setPen( c.darker( 300 ) ); From 34d28ebe63bb9b5784d26945971f6376c74d7a15 Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Fri, 26 Dec 2014 09:45:10 -0200 Subject: [PATCH 54/81] Use rounded rectangles to draw notes --- src/gui/PianoRoll.cpp | 46 +++++++++++++------------------------------ 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index 4e37b752a..bb326bdc8 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -963,47 +963,29 @@ inline void PianoRoll::drawNoteRect( QPainter & _p, int _x, int _y, { //step note col.setRgb( 0, 255, 0 ); - _p.fillRect( _x, _y, _width, KEY_LINE_HEIGHT - 2, col ); } else if( _n->selected() ) { col.setRgb( 0x00, 0x40, 0xC0 ); - _p.fillRect( _x, _y, _width, KEY_LINE_HEIGHT - 2, col ); - } - else - { - // adjust note to make it a bit faded if it has a lower volume - // in stereo using gradients - QColor lcol = QColor::fromHsv( col.hue(), col.saturation(), - volVal * leftPercent ); - QColor rcol = QColor::fromHsv( col.hue(), col.saturation(), - volVal * rightPercent ); - col = QColor::fromHsv( col.hue(), col.saturation(), volVal ); - - QLinearGradient gradient( _x, _y, _x+_width, - _y+KEY_LINE_HEIGHT ); - gradient.setColorAt( 0, lcol ); - gradient.setColorAt( 1, rcol ); - _p.setBrush( gradient ); - _p.setPen( Qt::NoPen ); - _p.drawRect( _x, _y, _width, KEY_LINE_HEIGHT-1 ); } - // hilighting lines around the note - _p.setPen( Qt::SolidLine ); - _p.setBrush( Qt::NoBrush ); + // adjust note to make it a bit faded if it has a lower volume + // in stereo using gradients + QColor lcol = QColor::fromHsv( col.hue(), col.saturation(), + volVal * leftPercent ); + QColor rcol = QColor::fromHsv( col.hue(), col.saturation(), + volVal * rightPercent ); + col = QColor::fromHsv( col.hue(), col.saturation(), volVal ); - col = QColor( noteCol ); + QLinearGradient gradient( _x, _y, _x+_width, + _y+KEY_LINE_HEIGHT ); + gradient.setColorAt( 0, lcol ); + gradient.setColorAt( 1, rcol ); + _p.setBrush( gradient ); _p.setPen( QColor::fromHsv( col.hue(), col.saturation(), qMin( 255, volVal*1.7f ) ) ); - _p.drawLine( _x, _y, _x + _width, _y ); - _p.drawLine( _x, _y, _x, _y + KEY_LINE_HEIGHT - 2 ); - - col = QColor( noteCol ); - _p.setPen( QColor::fromHsv( col.hue(), col.saturation(), volVal/1.7 ) ); - _p.drawLine( _x + _width, _y, _x + _width, _y + KEY_LINE_HEIGHT - 2 ); - _p.drawLine( _x, _y + KEY_LINE_HEIGHT - 2, _x + _width, - _y + KEY_LINE_HEIGHT - 2 ); + _p.setRenderHint(QPainter::Antialiasing); + _p.drawRoundedRect( _x, _y, _width, KEY_LINE_HEIGHT-1, 5, 2 ); // that little tab thing on the end hinting at the user // to resize the note From 1a5c085aa2bb15d46d3bf07a86da73193f538e86 Mon Sep 17 00:00:00 2001 From: Vesa Date: Fri, 26 Dec 2014 19:31:16 +0200 Subject: [PATCH 55/81] Faster dbv/linear conversions, separate safe functions for when the extra safety (0/inf handling) is needed --- include/lmms_math.h | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/include/lmms_math.h b/include/lmms_math.h index 7cde29153..4ab9b3471 100644 --- a/include/lmms_math.h +++ b/include/lmms_math.h @@ -239,10 +239,10 @@ static inline float linearToLogScale( float min, float max, float value ) -//! @brief Converts linear amplitude (0-1.0) to dBV scale. +//! @brief Converts linear amplitude (0-1.0) to dBV scale. Handles zeroes as -inf. //! @param amp Linear amplitude, where 1.0 = 0dBV. //! @return Amplitude in dBV. -inf for 0 amplitude. -static inline float ampToDbv( float amp ) +static inline float safeAmpToDbv( float amp ) { return amp == 0.0f ? -INFINITY @@ -250,10 +250,10 @@ static inline float ampToDbv( float amp ) } -//! @brief Converts dBV-scale to linear amplitude with 0dBV = 1.0 +//! @brief Converts dBV-scale to linear amplitude with 0dBV = 1.0. Handles infinity as zero. //! @param dbv The dBV value to convert: all infinites are treated as -inf and result in 0 //! @return Linear amplitude -static inline float dbvToAmp( float dbv ) +static inline float safeDbvToAmp( float dbv ) { return isinff( dbv ) ? 0.0f @@ -261,6 +261,24 @@ static inline float dbvToAmp( float dbv ) } +//! @brief Converts linear amplitude (>0-1.0) to dBV scale. +//! @param amp Linear amplitude, where 1.0 = 0dBV. ** Must be larger than zero! ** +//! @return Amplitude in dBV. +static inline float ampToDbv( float amp ) +{ + return log10f( amp ) * 20.0f; +} + + +//! @brief Converts dBV-scale to linear amplitude with 0dBV = 1.0 +//! @param dbv The dBV value to convert. ** Must be a real number - not inf/nan! ** +//! @return Linear amplitude +static inline float dbvToAmp( float dbv ) +{ + return exp10f( dbv * 0.05f ); +} + + //! returns 1.0f if val >= 0.0f, -1.0 else static inline float sign( float val ) From 44a2455429bf7fe03a09b15f54ba03df9716a2a4 Mon Sep 17 00:00:00 2001 From: Vesa Date: Fri, 26 Dec 2014 19:33:48 +0200 Subject: [PATCH 56/81] Correct type in macros --- include/lmms_math.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/lmms_math.h b/include/lmms_math.h index 4ab9b3471..d1a9dcc79 100644 --- a/include/lmms_math.h +++ b/include/lmms_math.h @@ -48,10 +48,10 @@ using namespace std; #define _isinff(x) isinf(x) #endif #ifndef exp10 -#define exp10(x) pow( 10, x ) +#define exp10(x) pow( 10.0, x ) #endif #ifndef exp10f -#define exp10f(x) powf( 10, x ) +#define exp10f(x) powf( 10.0f, x ) #endif #endif From a42d8a04eacc2628950b9f70b67a172dc705f293 Mon Sep 17 00:00:00 2001 From: Dave French Date: Fri, 26 Dec 2014 17:57:05 +0000 Subject: [PATCH 57/81] fix for 1255 added 1 pixel margin between border and top note --- src/tracks/Pattern.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index 15d826f39..727fbd948 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -998,7 +998,7 @@ void PatternView::paintEvent( QPaintEvent * ) // qDebug( "keyrange: %d", keyrange ); // determine height of the pattern view, sans borders - const int ht = height() - 1 - TCO_BORDER_WIDTH * 2; + const int ht = (height() - 1 - TCO_BORDER_WIDTH * 2) -1; // determine maximum height value for drawing bounds checking const int max_ht = height() - 1 - TCO_BORDER_WIDTH; @@ -1023,7 +1023,7 @@ void PatternView::paintEvent( QPaintEvent * ) const float y_key = ( float( central_key - ( *it )->key() ) / keyrange + 1.0f ) / 2; // multiply that by pattern height - const int y_pos = static_cast( TCO_BORDER_WIDTH + y_key * ht ); + const int y_pos = static_cast( TCO_BORDER_WIDTH + y_key * ht ) + 1; // debug code // if( ( *it )->length() > 0 ) qDebug( "key %d, central_key %d, y_key %f, y_pos %d", ( *it )->key(), central_key, y_key, y_pos ); From 21bd57b629845881732d0d2ae2ebba727ab361a9 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Fri, 26 Dec 2014 19:04:50 +0100 Subject: [PATCH 58/81] Make command line project export working again --- src/core/Song.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/core/Song.cpp b/src/core/Song.cpp index 91eb4e645..e15533cdf 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -911,7 +911,10 @@ void Song::loadProject( const QString & _file_name ) m_loadingProject = true; Engine::projectJournal()->setJournalling( false ); - Engine::mainWindow()->clearErrors(); + if( Engine::mainWindow() ) + { + Engine::mainWindow()->clearErrors(); + } m_fileName = _file_name; m_oldFileName = _file_name; @@ -1023,7 +1026,10 @@ void Song::loadProject( const QString & _file_name ) emit projectLoaded(); - Engine::mainWindow()->showErrors( tr( "The following errors occured while loading: " ) ); + if( Engine::mainWindow() ) + { + Engine::mainWindow()->showErrors( tr( "The following errors occured while loading: " ) ); + } m_loadingProject = false; m_modified = false; From 011dee25640c0052338c64c22740850bbdfa1914 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Fri, 26 Dec 2014 19:06:03 +0100 Subject: [PATCH 59/81] Fix some memory access issues --- src/core/AutomationPattern.cpp | 2 +- src/core/EnvelopeAndLfoParameters.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 7ab4b5977..02566b65c 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -867,7 +867,7 @@ void AutomationPattern::generateTangents() void AutomationPattern::generateTangents( timeMap::const_iterator it, int numToGenerate ) { - if( m_timeMap.size() < 2 ) + if( m_timeMap.size() < 2 && numToGenerate > 0 ) { m_tangents[it.key()] = 0; return; diff --git a/src/core/EnvelopeAndLfoParameters.cpp b/src/core/EnvelopeAndLfoParameters.cpp index 5685b46f6..90f6747f0 100644 --- a/src/core/EnvelopeAndLfoParameters.cpp +++ b/src/core/EnvelopeAndLfoParameters.cpp @@ -446,14 +446,14 @@ void EnvelopeAndLfoParameters::updateSampleVars() { sample_t * tmp = m_pahdEnv; m_pahdEnv = new sample_t[m_pahdFrames]; - delete tmp; + delete[] tmp; m_pahdBufSize = m_pahdFrames; } if( m_rBufSize < m_rFrames ) { sample_t * tmp = m_rEnv; m_rEnv = new sample_t[m_rFrames]; - delete tmp; + delete[] tmp; m_rBufSize = m_rFrames; } From bbbe515e58f8de915a1a579e7418ffdd36cbbc88 Mon Sep 17 00:00:00 2001 From: Hannu Haahti Date: Sat, 27 Dec 2014 11:46:19 +0200 Subject: [PATCH 60/81] attempt to fix #1512 --- include/AudioPort.h | 11 +++++++---- include/Track.h | 4 +++- src/core/audio/AudioPort.cpp | 33 ++++++++++++++++++++------------- src/tracks/InstrumentTrack.cpp | 24 ++++++++++++------------ src/tracks/SampleTrack.cpp | 13 ++++--------- 5 files changed, 46 insertions(+), 39 deletions(-) diff --git a/include/AudioPort.h b/include/AudioPort.h index 0de61ca4d..7412d5eb5 100644 --- a/include/AudioPort.h +++ b/include/AudioPort.h @@ -35,13 +35,15 @@ class EffectChain; class FloatModel; +class BoolModel; class AudioPort : public ThreadableJob { MM_OPERATORS public: - AudioPort( const QString & _name, bool _has_effect_chain = true, - FloatModel * volumeModel = NULL, FloatModel * panningModel = NULL ); + AudioPort( const QString & _name, bool _has_effect_chain = true, + FloatModel * volumeModel = NULL, FloatModel * panningModel = NULL, + BoolModel * mutedModel = NULL ); virtual ~AudioPort(); inline sampleFrame * buffer() @@ -117,14 +119,15 @@ private: fx_ch_t m_nextFxChannel; QString m_name; - + EffectChain * m_effects; PlayHandleList m_playHandles; QMutex m_playHandleLock; - + FloatModel * m_volumeModel; FloatModel * m_panningModel; + BoolModel * m_mutedModel; friend class Mixer; friend class MixerWorkerThread; diff --git a/include/Track.h b/include/Track.h index 396c41e52..f6218c53d 100644 --- a/include/Track.h +++ b/include/Track.h @@ -120,7 +120,7 @@ public: { return m_length; } - + virtual void movePosition( const MidiTime & _pos ); virtual void changeLength( const MidiTime & _length ); @@ -539,7 +539,9 @@ private: QString m_name; int m_height; +protected: BoolModel m_mutedModel; +private: BoolModel m_soloModel; bool m_mutedBeforeSolo; diff --git a/src/core/audio/AudioPort.cpp b/src/core/audio/AudioPort.cpp index b913babd1..e20146097 100644 --- a/src/core/audio/AudioPort.cpp +++ b/src/core/audio/AudioPort.cpp @@ -33,8 +33,9 @@ #include "panning.h" -AudioPort::AudioPort( const QString & _name, bool _has_effect_chain, - FloatModel * volumeModel, FloatModel * panningModel ) : +AudioPort::AudioPort( const QString & _name, bool _has_effect_chain, + FloatModel * volumeModel, FloatModel * panningModel, + BoolModel * mutedModel ) : m_bufferUsage( false ), m_portBuffer( NULL ), m_extOutputEnabled( false ), @@ -42,7 +43,8 @@ AudioPort::AudioPort( const QString & _name, bool _has_effect_chain, m_name( "unnamed port" ), m_effects( _has_effect_chain ? new EffectChain( NULL ) : NULL ), m_volumeModel( volumeModel ), - m_panningModel( panningModel ) + m_panningModel( panningModel ), + m_mutedModel( mutedModel ) { Engine::mixer()->addAudioPort( this ); setExtOutputEnabled( true ); @@ -102,6 +104,11 @@ bool AudioPort::processEffects() void AudioPort::doProcessing() { + if( m_mutedModel && m_mutedModel->value() ) + { + return; + } + const fpp_t fpp = Engine::mixer()->framesPerPeriod(); m_portBuffer = BufferManager::acquire(); // get buffer for processing @@ -118,11 +125,11 @@ void AudioPort::doProcessing() m_bufferUsage = true; MixHelpers::add( m_portBuffer, ph->buffer(), fpp ); } - ph->releaseBuffer(); // gets rid of playhandle's buffer and sets + ph->releaseBuffer(); // gets rid of playhandle's buffer and sets // pointer to null, so if it doesn't get re-acquired we know to skip it next time } } - + if( m_bufferUsage ) { // handle volume and panning @@ -131,7 +138,7 @@ void AudioPort::doProcessing() { ValueBuffer * volBuf = m_volumeModel->valueBuffer(); ValueBuffer * panBuf = m_panningModel->valueBuffer(); - + // both vol and pan have s.ex.data: if( volBuf && panBuf ) { @@ -143,7 +150,7 @@ void AudioPort::doProcessing() m_portBuffer[f][1] *= ( p >= 0 ? 1.0f : 1.0f + p ) * v; } } - + // only vol has s.ex.data: else if( volBuf ) { @@ -157,7 +164,7 @@ void AudioPort::doProcessing() m_portBuffer[f][1] *= v * r; } } - + // only pan has s.ex.data: else if( panBuf ) { @@ -169,7 +176,7 @@ void AudioPort::doProcessing() m_portBuffer[f][1] *= ( p >= 0 ? 1.0f : 1.0f + p ) * v; } } - + // neither has s.ex.data: else { @@ -182,12 +189,12 @@ void AudioPort::doProcessing() } } } - + // has vol model only else if( m_volumeModel ) { ValueBuffer * volBuf = m_volumeModel->valueBuffer(); - + if( volBuf ) { for( f_cnt_t f = 0; f < fpp; ++f ) @@ -210,7 +217,7 @@ void AudioPort::doProcessing() } // as of now there's no situation where we only have panning model but no volume model // if we have neither, we don't have to do anything here - just pass the audio as is - + // handle effects const bool me = processEffects(); if( me || m_bufferUsage ) @@ -219,7 +226,7 @@ void AudioPort::doProcessing() // TODO: improve the flow here - convert to pull model m_bufferUsage = false; } - + BufferManager::release( m_portBuffer ); // release buffer, we don't need it anymore } diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index 06219b942..4cbf2e9bd 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -104,7 +104,7 @@ InstrumentTrack::InstrumentTrack( TrackContainer* tc ) : tr( "Base note" ) ), m_volumeModel( DefaultVolume, MinVolume, MaxVolume, 0.1f, this, tr( "Volume" ) ), m_panningModel( DefaultPanning, PanningLeft, PanningRight, 0.1f, this, tr( "Panning" ) ), - m_audioPort( tr( "unnamed_track" ), true, &m_volumeModel, &m_panningModel ), + m_audioPort( tr( "unnamed_track" ), true, &m_volumeModel, &m_panningModel, &m_mutedModel ), m_pitchModel( 0, MinPitchDefault, MaxPitchDefault, 1, this, tr( "Pitch" ) ), m_pitchRangeModel( 1, 1, 24, this, tr( "Pitch range" ) ), m_effectChannelModel( 0, 0, 0, this, tr( "FX channel" ) ), @@ -338,7 +338,7 @@ void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& ti break; } break; - + default: break; } @@ -840,7 +840,7 @@ InstrumentTrackView::InstrumentTrackView( InstrumentTrack * _it, TrackContainerV { widgetWidth = DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT; } - else + else { widgetWidth = DEFAULT_SETTINGS_WIDGET_WIDTH; } @@ -949,8 +949,8 @@ InstrumentTrackWindow * InstrumentTrackView::topLevelInstrumentTrackWindow() -// TODO: Add windows to free list on freeInstrumentTrackWindow. -// But, don't NULL m_window or disconnect signals. This will allow windows +// TODO: Add windows to free list on freeInstrumentTrackWindow. +// But, don't NULL m_window or disconnect signals. This will allow windows // that are being show/hidden frequently to stay connected. void InstrumentTrackView::freeInstrumentTrackWindow() { @@ -975,7 +975,7 @@ void InstrumentTrackView::freeInstrumentTrackWindow() { delete m_window; } - + m_window = NULL; } } @@ -1002,7 +1002,7 @@ InstrumentTrackWindow * InstrumentTrackView::getInstrumentTrackWindow() else if( !s_windowCache.isEmpty() ) { m_window = s_windowCache.dequeue(); - + m_window->setInstrumentTrackView( this ); m_window->setModel( model() ); m_window->updateInstrumentView(); @@ -1028,7 +1028,7 @@ InstrumentTrackWindow * InstrumentTrackView::getInstrumentTrackWindow() s_windowCache << m_window; } } - + return m_window; } @@ -1059,7 +1059,7 @@ void InstrumentTrackView::dropEvent( QDropEvent * _de ) void InstrumentTrackView::toggleInstrumentWindow( bool _on ) { getInstrumentTrackWindow()->toggleVisibility( _on ); - + if( !_on ) { freeInstrumentTrackWindow(); @@ -1119,10 +1119,10 @@ void InstrumentTrackView::midiConfigChanged() -class fxLineLcdSpinBox : public LcdSpinBox +class fxLineLcdSpinBox : public LcdSpinBox { public: - fxLineLcdSpinBox( int _num_digits, QWidget * _parent, + fxLineLcdSpinBox( int _num_digits, QWidget * _parent, const QString & _name ) : LcdSpinBox( _num_digits, _parent, _name ) {} @@ -1336,7 +1336,7 @@ void InstrumentTrackWindow::modelChanged() this, SLOT( updateName() ) ); connect( m_track, SIGNAL( instrumentChanged() ), this, SLOT( updateInstrumentView() ) ); - + m_volumeKnob->setModel( &m_track->m_volumeModel ); m_panningKnob->setModel( &m_track->m_panningModel ); m_effectChannelNumber->setModel( &m_track->m_effectChannelModel ); diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index f55100698..891790af2 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -387,11 +387,11 @@ void SampleTCOView::paintEvent( QPaintEvent * _pe ) { p.setFont( pointSize<7>( p.font() ) ); - p.setPen( QColor( 0, 0, 0 ) ); + p.setPen( QColor( 0, 0, 0 ) ); p.drawText( 10, p.fontMetrics().height()+1, "Rec" ); - p.setPen( textColor() ); + p.setPen( textColor() ); p.drawText( 9, p.fontMetrics().height(), "Rec" ); - + p.setBrush( QBrush( textColor() ) ); p.drawEllipse( 4, 5, 4, 4 ); } @@ -408,7 +408,7 @@ SampleTrack::SampleTrack( TrackContainer* tc ) : tr( "Volume" ) ), m_panningModel( DefaultPanning, PanningLeft, PanningRight, 0.1f, this, tr( "Panning" ) ), - m_audioPort( tr( "Sample track" ), true, &m_volumeModel, &m_panningModel ) + m_audioPort( tr( "Sample track" ), true, &m_volumeModel, &m_panningModel, &m_mutedModel ) { setName( tr( "Sample track" ) ); m_panningModel.setCenterValue( DefaultPanning ); @@ -610,8 +610,3 @@ void SampleTrackView::modelChanged() TrackView::modelChanged(); } - - - - - From 1b688dc80b6b1360fd2669569a48cdd527c5ca38 Mon Sep 17 00:00:00 2001 From: Hannu Haahti Date: Sat, 27 Dec 2014 13:30:01 +0200 Subject: [PATCH 61/81] clear brush for selection box (also get rid of some whitespace) --- src/gui/PianoRoll.cpp | 110 ++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 58 deletions(-) diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index bb326bdc8..5321d8011 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -286,7 +286,7 @@ PianoRoll::PianoRoll() : s_toolOpen = new QPixmap( embed::getIconPixmap( "automation" ) ); } - + // init text-float if( s_textFloat == NULL ) { @@ -623,54 +623,54 @@ PianoRoll::PianoRoll() : tb_layout->addSpacing( 4 ); tb_layout->addWidget( m_chordComboBox ); tb_layout->addStretch(); - + m_zoomingComboBox->setWhatsThis( - tr( - "This controls the magnification of an axis. " + tr( + "This controls the magnification of an axis. " "It can be helpful to choose magnification for a specific " - "task. For ordinary editing, the magnification should be " + "task. For ordinary editing, the magnification should be " "fitted to your smallest notes. " ) ); - + m_quantizeComboBox->setWhatsThis( tr( - "The 'Q' stands for quantization, and controls the grid size " - "notes and control points snap to. " - "With smaller quantization values, you can draw shorter notes " - "in Piano Roll, and more exact control points in the " - "Automation Editor." + "The 'Q' stands for quantization, and controls the grid size " + "notes and control points snap to. " + "With smaller quantization values, you can draw shorter notes " + "in Piano Roll, and more exact control points in the " + "Automation Editor." + + ) ); - ) ); - m_noteLenComboBox->setWhatsThis( tr( - "This lets you select the length of new notes. " - "'Last Note' means that LMMS will use the note length of " - "the note you last edited" - ) ); - + "This lets you select the length of new notes. " + "'Last Note' means that LMMS will use the note length of " + "the note you last edited" + ) ); + m_scaleComboBox->setWhatsThis( tr( - "The feature is directly connected to the context-menu " - "on the virtual keyboard, to the left in Piano Roll. " - "After you have chosen the scale you want " - "in this drop-down menu, " - "you can right click on a desired key in the virtual keyboard, " - "and then choose 'Mark current Scale'. " - "LMMS will highlight all notes that belongs to the chosen scale, " - "and in the key you have selected!" + "The feature is directly connected to the context-menu " + "on the virtual keyboard, to the left in Piano Roll. " + "After you have chosen the scale you want " + "in this drop-down menu, " + "you can right click on a desired key in the virtual keyboard, " + "and then choose 'Mark current Scale'. " + "LMMS will highlight all notes that belongs to the chosen scale, " + "and in the key you have selected!" ) ); - + m_chordComboBox->setWhatsThis( tr( - "Let you select a chord which LMMS then can draw or highlight." - "You can find the most common chords in this drop-down menu. " - "After you have selected a chord, click anywhere to place the chord, and right " - "click on the virtual keyboard to open context menu and highlight the chord. " - "To return to single note placement, you need to choose 'No chord' " - "in this drop-down menu." - ) ); + "Let you select a chord which LMMS then can draw or highlight." + "You can find the most common chords in this drop-down menu. " + "After you have selected a chord, click anywhere to place the chord, and right " + "click on the virtual keyboard to open context menu and highlight the chord. " + "To return to single note placement, you need to choose 'No chord' " + "in this drop-down menu." + ) ); // setup our actual window setFocusPolicy( Qt::StrongFocus ); @@ -1580,7 +1580,7 @@ inline int PianoRoll::keyAreaBottom() const void PianoRoll::mousePressEvent( QMouseEvent * _me ) { m_startedWithShift = _me->modifiers() & Qt::ShiftModifier; - + if( hasValidPattern() == false ) { return; @@ -1980,11 +1980,11 @@ void PianoRoll::mouseDoubleClickEvent( QMouseEvent * _me ) const int ticks_end = ( x+pixel_range/2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; const int ticks_middle = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; - + // get note-vector of current pattern - NoteVector notes; + NoteVector notes; notes += m_pattern->notes(); - + // go through notes to figure out which one we want to change NoteVector nv; foreach( Note * i, notes ) @@ -2016,7 +2016,7 @@ void PianoRoll::mouseDoubleClickEvent( QMouseEvent * _me ) { if( ( *it )->pos().getTicks() != closest->pos().getTicks() ) { - it = nv.erase( it ); + it = nv.erase( it ); } else { @@ -2366,7 +2366,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) // if middle-click, set to defaults volume_t vol; panning_t pan; - + if( _me->buttons() & Qt::LeftButton ) { vol = tLimit( MinVolume + @@ -2385,7 +2385,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) vol = DefaultVolume; pan = DefaultPanning; } - + if( m_noteEditMode == NoteEditVolume ) { m_lastNoteVolume = vol; @@ -2473,7 +2473,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) } } - + else if( _me->buttons() == Qt::NoButton && m_editMode == ModeDraw ) { // set move- or resize-cursor @@ -2938,14 +2938,14 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) { QColor horizCol = QColor( gridColor() ); QColor vertCol = QColor( gridColor() ); - + QStyleOption opt; opt.initFrom( this ); QPainter p( this ); style()->drawPrimitive( QStyle::PE_Widget, &opt, &p, this ); QBrush bgColor = p.background(); - + // fill with bg color p.fillRect( 0,0, width(), height(), bgColor ); @@ -3379,6 +3379,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) int y = (int) y_base - sel_key_start * KEY_LINE_HEIGHT; int h = (int) y_base - sel_key_end * KEY_LINE_HEIGHT - y; p.setPen( QColor( 0, 64, 192 ) ); + p.setBrush( Qt::NoBrush ); p.drawRect( x + WHITE_KEY_WIDTH, y, w, h ); // TODO: Get this out of paint event @@ -3492,11 +3493,11 @@ void PianoRoll::wheelEvent( QWheelEvent * _we ) MidiTime::ticksPerTact() / m_ppt + m_currentPosition; int ticks_end = ( x+pixel_range/2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; - + // get note-vector of current pattern - NoteVector notes; + NoteVector notes; notes += m_pattern->notes(); - + // go through notes to figure out which one we want to change NoteVector nv; foreach( Note * i, notes ) @@ -3509,7 +3510,7 @@ void PianoRoll::wheelEvent( QWheelEvent * _we ) nv += i; } } - if( nv.size() > 0 ) + if( nv.size() > 0 ) { const int step = _we->delta() > 0 ? 1.0 : -1.0; if( m_noteEditMode == NoteEditVolume ) @@ -3550,7 +3551,7 @@ void PianoRoll::wheelEvent( QWheelEvent * _we ) update(); } } - + // not in note edit area, so handle scrolling/zooming and quantization change else if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::AltModifier ) @@ -3955,7 +3956,7 @@ void PianoRoll::enterValue( NoteVector* nv ) } m_lastNotePanning = new_val; } - + } } @@ -4092,7 +4093,7 @@ void PianoRoll::deleteSelectedNotes() bool update_after_delete = false; m_pattern->addJournalCheckPoint(); - + // get note-vector of current pattern const NoteVector & notes = m_pattern->notes(); @@ -4308,10 +4309,3 @@ Note * PianoRoll::noteUnderMouse() return *it; } - - - - - - - From d68f8d73027d2b320ccd4f3a6ddb132ffc4e0905 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sat, 27 Dec 2014 17:47:31 +0000 Subject: [PATCH 62/81] Proposed fix for 1352 Instrument crash on loading --- include/TrackContainerView.h | 18 ++++++++++++++++++ src/gui/TrackContainerView.cpp | 19 ++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/include/TrackContainerView.h b/include/TrackContainerView.h index 2745f86a4..5201a92c6 100644 --- a/include/TrackContainerView.h +++ b/include/TrackContainerView.h @@ -33,6 +33,7 @@ #include "Track.h" #include "JournallingObject.h" +#include "InstrumentTrack.h" class QVBoxLayout; @@ -182,6 +183,23 @@ signals: } ; +class InstrumentLoaderThread : public QThread +{ + Q_OBJECT +public: + InstrumentLoaderThread( QObject *parent = 0 , InstrumentTrack *it = 0, QString name = "" ); + + void run(); + + +private: + + InstrumentTrack *m_it; + QString m_name; + + + +}; #endif diff --git a/src/gui/TrackContainerView.cpp b/src/gui/TrackContainerView.cpp index 94c72d278..5d9d66013 100644 --- a/src/gui/TrackContainerView.cpp +++ b/src/gui/TrackContainerView.cpp @@ -47,6 +47,9 @@ #include "Track.h" + + + TrackContainerView::TrackContainerView( TrackContainer * _tc ) : QWidget(), ModelView( NULL, this ), @@ -325,7 +328,8 @@ void TrackContainerView::dropEvent( QDropEvent * _de ) InstrumentTrack * it = dynamic_cast( Track::create( Track::InstrumentTrack, m_tc ) ); - it->loadInstrument( value ); + InstrumentLoaderThread *ilt = new InstrumentLoaderThread( this, it, value); + ilt->start(); //it->toggledInstrumentTrackButton( true ); _de->accept(); } @@ -450,6 +454,19 @@ void TrackContainerView::scrollArea::wheelEvent( QWheelEvent * _we ) } } + InstrumentLoaderThread::InstrumentLoaderThread( QObject *parent, InstrumentTrack *it, QString name) : QThread( parent ) +{ + m_it = it; + m_name = name; +} + +void InstrumentLoaderThread::run() +{ + m_it->loadInstrument( m_name ); +} + + + From a485e9127ef102ef30f481b5e0e547de6381d84b Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 28 Dec 2014 16:00:04 +0000 Subject: [PATCH 63/81] EQ increase shelfing filters minimum resonace. to make stable --- plugins/Eq/EqControls.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/Eq/EqControls.cpp b/plugins/Eq/EqControls.cpp index 19b63fc4a..ccf1c8400 100644 --- a/plugins/Eq/EqControls.cpp +++ b/plugins/Eq/EqControls.cpp @@ -41,12 +41,12 @@ EqControls::EqControls( EqEffect *effect ) : m_para4GainModel( 0.0 , -40, 40, 0.001, this, tr( "Peak 4 gain" ) ), m_highShelfGainModel( 0.0 , -40, 40, 0.001, this, tr( "High Shelf gain" ) ), m_hpResModel( 0.707,0.003, 10.0 , 0.001, this, tr( "HP res" ) ), - m_lowShelfResModel( 1.4,0.0, 10.0 , 0.001, this , tr( "Low Shelf res" ) ), + m_lowShelfResModel( 1.4,0.55, 10.0 , 0.001, this , tr( "Low Shelf res" ) ), m_para1ResModel( 1.4 ,0.55, 10.0 , 0.001, this , tr( "Peak 1 res" ) ), m_para2ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 2 res" ) ), m_para3ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 3 res" ) ), m_para4ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 4 res" ) ), - m_highShelfResModel( 1.4, 0.001, 10.0 , 0.001, this , tr( "High Shelf res" ) ), + m_highShelfResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "High Shelf res" ) ), m_lpResModel( 0.707,0.003, 10.0 , 0.001, this , tr( "LP res" ) ), m_hpFeqModel( 31.0, 30.0, 20000, 0.001, this , tr( "HP freq" ) ), m_lowShelfFreqModel( 80.0, 25.0, 20000, 0.001, this , tr( "Low Shelf freq" ) ), From c203a5de3b23358fad3e7bf866fa51ea0a1e7ba4 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 28 Dec 2014 17:07:40 +0000 Subject: [PATCH 64/81] Eq remove oversample and antialysing filter --- plugins/Eq/EqControls.cpp | 2 +- plugins/Eq/EqEffect.cpp | 57 ++++++++++++++------------------------- plugins/Eq/EqEffect.h | 40 --------------------------- 3 files changed, 21 insertions(+), 78 deletions(-) diff --git a/plugins/Eq/EqControls.cpp b/plugins/Eq/EqControls.cpp index ccf1c8400..7921ba4be 100644 --- a/plugins/Eq/EqControls.cpp +++ b/plugins/Eq/EqControls.cpp @@ -42,7 +42,7 @@ EqControls::EqControls( EqEffect *effect ) : m_highShelfGainModel( 0.0 , -40, 40, 0.001, this, tr( "High Shelf gain" ) ), m_hpResModel( 0.707,0.003, 10.0 , 0.001, this, tr( "HP res" ) ), m_lowShelfResModel( 1.4,0.55, 10.0 , 0.001, this , tr( "Low Shelf res" ) ), - m_para1ResModel( 1.4 ,0.55, 10.0 , 0.001, this , tr( "Peak 1 res" ) ), + m_para1ResModel( 1.4, 0.55, 10.0, 0.001, this , tr( "Peak 1 res" ) ), m_para2ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 2 res" ) ), m_para3ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 3 res" ) ), m_para4ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 4 res" ) ), diff --git a/plugins/Eq/EqEffect.cpp b/plugins/Eq/EqEffect.cpp index 8bd5edb77..b130db02f 100644 --- a/plugins/Eq/EqEffect.cpp +++ b/plugins/Eq/EqEffect.cpp @@ -51,17 +51,9 @@ Plugin::Descriptor PLUGIN_EXPORT eq_plugin_descriptor = EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::Key *key) : Effect( &eq_plugin_descriptor, parent, key ), - m_eqControls( this ), - m_upBufFrames( 0 ) + m_eqControls( this ) { - m_dFilterCount = 2; - m_downsampleFilters = new EqLinkwitzRiley[m_dFilterCount]; - for( int i = 0; i < m_dFilterCount; i++) - { - m_downsampleFilters[i].setFrequency(21000); - m_downsampleFilters[i].setSR(Engine::mixer()->processingSampleRate() * 2 ); - } - m_upBuf = 0; + } @@ -69,10 +61,6 @@ EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::K EqEffect::~EqEffect() { - if(m_upBuf) - { - delete m_upBuf; - } } @@ -91,7 +79,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; } const float outGain = m_eqControls.m_outGainModel.value(); - const int sampleRate = Engine::mixer()->processingSampleRate() * 2; + const int sampleRate = Engine::mixer()->processingSampleRate(); sampleFrame m_inPeak = { 0, 0 }; if(m_eqControls.m_analyzeModel.value() ) @@ -102,97 +90,92 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) { m_eqControls.m_inFftBands.clear(); } - upsample( buf, frames ); - gain(m_upBuf , m_upBufFrames, m_eqControls.m_inGainModel.value(), &m_inPeak ); + gain(buf , frames, m_eqControls.m_inGainModel.value(), &m_inPeak ); m_eqControls.m_inPeakL = m_eqControls.m_inPeakL < m_inPeak[0] ? m_inPeak[0] : m_eqControls.m_inPeakL; m_eqControls.m_inPeakR = m_eqControls.m_inPeakR < m_inPeak[1] ? m_inPeak[1] : m_eqControls.m_inPeakR; if(m_eqControls.m_hpActiveModel.value() ){ m_hp12.setParameters( sampleRate, m_eqControls.m_hpFeqModel.value(), m_eqControls.m_hpResModel.value(), 1 ); - m_hp12.processBuffer( m_upBuf , m_upBufFrames ); + m_hp12.processBuffer( buf, frames ); if( m_eqControls.m_hp24Model.value() || m_eqControls.m_hp48Model.value() ) { m_hp24.setParameters( sampleRate, m_eqControls.m_hpFeqModel.value(), m_eqControls.m_hpResModel.value(), 1 ); - m_hp24.processBuffer( m_upBuf , m_upBufFrames ); + m_hp24.processBuffer( buf, frames ); } if( m_eqControls.m_hp48Model.value() ) { m_hp480.setParameters( sampleRate, m_eqControls.m_hpFeqModel.value(), m_eqControls.m_hpResModel.value(), 1 ); - m_hp480.processBuffer( m_upBuf , m_upBufFrames ); + m_hp480.processBuffer( buf, frames ); m_hp481.setParameters( sampleRate, m_eqControls.m_hpFeqModel.value(), m_eqControls.m_hpResModel.value(), 1 ); - m_hp481.processBuffer( m_upBuf , m_upBufFrames ); + m_hp481.processBuffer( buf, frames ); } } if( m_eqControls.m_lowShelfActiveModel.value() ) { m_lowShelf.setParameters( sampleRate, m_eqControls.m_lowShelfFreqModel.value(), m_eqControls.m_lowShelfResModel .value(), m_eqControls.m_lowShelfGainModel.value() ); - m_lowShelf.processBuffer( m_upBuf , m_upBufFrames ); + m_lowShelf.processBuffer( buf, frames ); } if( m_eqControls.m_para1ActiveModel.value() ) { m_para1.setParameters( sampleRate, m_eqControls.m_para1FreqModel.value(), m_eqControls.m_para1ResModel.value(), m_eqControls.m_para1GainModel.value() ); - m_para1.processBuffer( m_upBuf , m_upBufFrames ); + m_para1.processBuffer( buf, frames ); } if( m_eqControls.m_para2ActiveModel.value() ) { m_para2.setParameters( sampleRate, m_eqControls.m_para2FreqModel.value(), m_eqControls.m_para2ResModel.value(), m_eqControls.m_para2GainModel.value() ); - m_para2.processBuffer( m_upBuf , m_upBufFrames ); + m_para2.processBuffer( buf, frames ); } if( m_eqControls.m_para3ActiveModel.value() ) { m_para3.setParameters( sampleRate, m_eqControls.m_para3FreqModel.value(), m_eqControls.m_para3ResModel.value(), m_eqControls.m_para3GainModel.value() ); - m_para3.processBuffer( m_upBuf , m_upBufFrames ); + m_para3.processBuffer( buf, frames ); } if( m_eqControls.m_para4ActiveModel.value() ) { m_para4.setParameters( sampleRate, m_eqControls.m_para4FreqModel.value(), m_eqControls.m_para4ResModel.value(), m_eqControls.m_para4GainModel.value() ); - m_para4.processBuffer( m_upBuf , m_upBufFrames ); + m_para4.processBuffer( buf, frames ); } if( m_eqControls.m_highShelfActiveModel.value() ) { m_highShelf.setParameters( sampleRate, m_eqControls.m_highShelfFreqModel.value(), m_eqControls.m_highShelfResModel.value(), m_eqControls.m_highShelfGainModel.value()); - m_highShelf.processBuffer( m_upBuf , m_upBufFrames ); + m_highShelf.processBuffer( buf, frames ); } if(m_eqControls.m_lpActiveModel.value() ){ m_lp12.setParameters( sampleRate, m_eqControls.m_lpFreqModel.value(), m_eqControls.m_lpResModel.value(), 1 ); - m_lp12.processBuffer( m_upBuf , m_upBufFrames ); + m_lp12.processBuffer( buf, frames ); if( m_eqControls.m_lp24Model.value() || m_eqControls.m_lp48Model.value() ) { m_lp24.setParameters( sampleRate, m_eqControls.m_lpFreqModel.value(), m_eqControls.m_lpResModel.value(), 1 ); - m_lp24.processBuffer( m_upBuf , m_upBufFrames ); + m_lp24.processBuffer( buf, frames ); } if( m_eqControls.m_lp48Model.value() ) { m_lp480.setParameters( sampleRate, m_eqControls.m_lpFreqModel.value(), m_eqControls.m_lpResModel.value(), 1 ); - m_lp480.processBuffer( m_upBuf , m_upBufFrames ); + m_lp480.processBuffer( buf, frames ); m_lp481.setParameters( sampleRate, m_eqControls.m_lpFreqModel.value(), m_eqControls.m_lpResModel.value(), 1 ); - m_lp481.processBuffer( m_upBuf , m_upBufFrames ); + m_lp481.processBuffer( buf, frames ); } } sampleFrame outPeak = { 0, 0 }; - gain( m_upBuf , m_upBufFrames, outGain, &outPeak ); + gain( buf, frames, outGain, &outPeak ); m_eqControls.m_outPeakL = m_eqControls.m_outPeakL < outPeak[0] ? outPeak[0] : m_eqControls.m_outPeakL; m_eqControls.m_outPeakR = m_eqControls.m_outPeakR < outPeak[1] ? outPeak[1] : m_eqControls.m_outPeakR; - for( int i =0; i < m_dFilterCount; i++) - { - m_downsampleFilters[i].processBuffer(m_upBuf , m_upBufFrames ); - } - downSample( buf, frames ); + checkGate( outSum / frames ); if(m_eqControls.m_analyzeModel.value() ) { diff --git a/plugins/Eq/EqEffect.h b/plugins/Eq/EqEffect.h index de6d2289d..654ae5bd2 100644 --- a/plugins/Eq/EqEffect.h +++ b/plugins/Eq/EqEffect.h @@ -84,46 +84,6 @@ private: EqLp12Filter m_lp24; EqLp12Filter m_lp480; EqLp12Filter m_lp481; - EqLinkwitzRiley* m_downsampleFilters; - int m_dFilterCount; - sampleFrame* m_upBuf; - fpp_t m_upBufFrames; - sampleFrame m_lastUpFrame; - - inline void upsample( sampleFrame *buf, const fpp_t frames ) - { - - if( m_upBufFrames != frames * 2 ) - { - if( m_upBuf ) - { - delete m_upBuf; - } - m_upBuf = new sampleFrame[frames * 2]; - m_upBufFrames = frames * 2; - } - for( int f = 0, f2 = 0; f < frames; ++f, f2 += 2 ) - { - m_upBuf[f2][0] = linearInterpolate( m_lastUpFrame[0],buf[f][0], 0.5 ); - m_upBuf[f2][1] = linearInterpolate( m_lastUpFrame[1],buf[f][1], 0.5 ); - m_upBuf[f2+1][0] = buf[f][0]; - m_upBuf[f2+1][1] = buf[f][1]; - m_lastUpFrame[0] = buf[f][0]; - m_lastUpFrame[1] = buf[f][1]; - } - } - - - - - inline void downSample( sampleFrame *buf, const fpp_t frames ) - { - for( int f = 0, f2 = 0; f < frames; ++f, f2 += 2 ) - { - buf[f][0] = m_upBuf[f2+1][0]; - buf[f][1] = m_upBuf[f2+1][1]; - } - } From 76eba6456ea8db28a2ca439bd79148ed974f5961 Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 29 Dec 2014 18:11:16 +0000 Subject: [PATCH 65/81] EQ Seperate in out analysing toggle --- plugins/Eq/EqControls.cpp | 5 ++--- plugins/Eq/EqControls.h | 4 ++-- plugins/Eq/EqControlsDialog.cpp | 9 +-------- plugins/Eq/EqEffect.cpp | 4 ++-- plugins/Eq/EqParameterWidget.cpp | 23 ++++++++++++++++++++++- plugins/Eq/EqParameterWidget.h | 7 +++++-- 6 files changed, 34 insertions(+), 18 deletions(-) diff --git a/plugins/Eq/EqControls.cpp b/plugins/Eq/EqControls.cpp index 7921ba4be..8dc62243b 100644 --- a/plugins/Eq/EqControls.cpp +++ b/plugins/Eq/EqControls.cpp @@ -70,7 +70,6 @@ EqControls::EqControls( EqEffect *effect ) : m_hp12Model( false, this , tr( "HP 12" ) ), m_hp24Model( false, this , tr( "HP 24" ) ), m_hp48Model( false, this , tr( "HP 48" ) ), - m_analyzeModel( true, this , tr( "Analyze enable" ) ), m_lpTypeModel( 0,0,2,this, tr( "low pass type") ) , m_hpTypeModel( 0,0,2,this, tr( "high pass type") ) { @@ -94,6 +93,8 @@ EqControls::EqControls( EqEffect *effect ) : m_para4PeakL = 0; m_para4PeakR = 0; m_highShelfPeakL = 0; m_highShelfPeakR = 0; m_inProgress = false; + m_analyseIn = true; + m_analyseOut = true; } @@ -139,7 +140,6 @@ void EqControls::loadSettings( const QDomElement &_this ) m_hp12Model.loadSettings( _this , "HP12" ); m_hp24Model.loadSettings( _this , "HP24" ); m_hp48Model.loadSettings( _this , "HP48" ); - m_analyzeModel.loadSettings( _this, "Analyzeenable"); m_lpTypeModel.loadSettings( _this, "LP" ); m_hpTypeModel.loadSettings( _this, "HP" ); } @@ -188,7 +188,6 @@ void EqControls::saveSettings( QDomDocument &doc, QDomElement &parent ) m_hp12Model.saveSettings( doc, parent, "HP12" ); m_hp24Model.saveSettings( doc, parent, "HP24" ); m_hp48Model.saveSettings( doc, parent, "HP48" ); - m_analyzeModel.saveSettings( doc, parent, "Analyzeenable"); m_lpTypeModel.saveSettings( doc, parent, "LP" ); m_hpTypeModel.saveSettings( doc, parent, "HP" ); } diff --git a/plugins/Eq/EqControls.h b/plugins/Eq/EqControls.h index ed3f6aab7..cfec04c23 100644 --- a/plugins/Eq/EqControls.h +++ b/plugins/Eq/EqControls.h @@ -64,6 +64,8 @@ public: float m_para3PeakL, m_para3PeakR; float m_para4PeakL, m_para4PeakR; float m_highShelfPeakL, m_highShelfPeakR; + bool m_analyseIn; + bool m_analyseOut; EqAnalyser m_inFftBands; EqAnalyser m_outFftBands; @@ -123,8 +125,6 @@ private: BoolModel m_hp24Model; BoolModel m_hp48Model; - BoolModel m_analyzeModel; - IntModel m_lpTypeModel; IntModel m_hpTypeModel; diff --git a/plugins/Eq/EqControlsDialog.cpp b/plugins/Eq/EqControlsDialog.cpp index bfcbde45e..f74245f65 100644 --- a/plugins/Eq/EqControlsDialog.cpp +++ b/plugins/Eq/EqControlsDialog.cpp @@ -54,7 +54,7 @@ EqControlsDialog::EqControlsDialog( EqControls *controls ) : m_outSpec = new EqSpectrumView( &controls->m_outFftBands, this); m_outSpec->move( 51, 2 ); m_outSpec->color = QColor(145, 205, 22, 80); - m_parameterWidget = new EqParameterWidget( this ); + m_parameterWidget = new EqParameterWidget( this , controls ); m_parameterWidget->move( 51, 2 ); setBand( 0, &controls->m_hpActiveModel, &controls->m_hpFeqModel, &controls->m_hpResModel, 0, QColor(255 ,255, 255), tr( "HP" ) ,0,0); @@ -156,13 +156,6 @@ EqControlsDialog::EqControlsDialog( EqControls *controls ) : hpBtnGrp->addButton( m_hp48Box ); hpBtnGrp->setModel( &m_controls->m_hpTypeModel,false); - //Analize Box - m_analyzeBox = new LedCheckBox( tr( "Analyze" ), this , "" , LedCheckBox::Green ); - m_analyzeBox->move( cw*1 + ko + 5, 15 ); - m_analyzeBox->setModel( &controls->m_analyzeModel ); - - - } void EqControlsDialog::mouseDoubleClickEvent(QMouseEvent *event) diff --git a/plugins/Eq/EqEffect.cpp b/plugins/Eq/EqEffect.cpp index b130db02f..f968615f4 100644 --- a/plugins/Eq/EqEffect.cpp +++ b/plugins/Eq/EqEffect.cpp @@ -82,7 +82,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) const int sampleRate = Engine::mixer()->processingSampleRate(); sampleFrame m_inPeak = { 0, 0 }; - if(m_eqControls.m_analyzeModel.value() ) + if(m_eqControls.m_analyseIn ) { m_eqControls.m_inFftBands.analyze( buf, frames ); } @@ -177,7 +177,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) m_eqControls.m_outPeakR = m_eqControls.m_outPeakR < outPeak[1] ? outPeak[1] : m_eqControls.m_outPeakR; checkGate( outSum / frames ); - if(m_eqControls.m_analyzeModel.value() ) + if(m_eqControls.m_analyseOut ) { m_eqControls.m_outFftBands.analyze( buf, frames ); setBandPeaks( &m_eqControls.m_outFftBands , ( int )( sampleRate * 0.5 ) ); diff --git a/plugins/Eq/EqParameterWidget.cpp b/plugins/Eq/EqParameterWidget.cpp index 31c74a7f0..e65dc9c3d 100644 --- a/plugins/Eq/EqParameterWidget.cpp +++ b/plugins/Eq/EqParameterWidget.cpp @@ -28,8 +28,9 @@ #include "lmms_math.h" #include "MainWindow.h" #include "QMouseEvent" +#include "EqControls.h" -EqParameterWidget::EqParameterWidget( QWidget *parent ) : +EqParameterWidget::EqParameterWidget( QWidget *parent, EqControls * controls ) : QWidget( parent ), m_bands ( 0 ), m_selectedBand ( 0 ) @@ -46,6 +47,7 @@ EqParameterWidget::EqParameterWidget( QWidget *parent ) : m_pixelsPerUnitHeight = (height() - 4) / ( totalHeight ); m_scale = 1.5; m_pixelsPerOctave = freqToXPixel( 10000 ) - freqToXPixel( 5000 ); + m_controls = controls; } @@ -133,6 +135,25 @@ void EqParameterWidget::mouseReleaseEvent( QMouseEvent *event ) { m_selectedBand = 0; m_mouseAction = none; + const int inXmin = 228; + const int inXmax = 250; + const int inYmin = 20; + const int inYmax = 30; + + const int outXmin = 228; + const int outXmax = 250; + const int outYmin = 30; + const int outYmax = 40; + + if(event->x() > inXmin && event->x() < inXmax && event->y() > inYmin && event->y() < inYmax ) + { + m_controls->m_analyseIn = !m_controls->m_analyseIn; + } + + if(event->x() > outXmin && event->x() < outXmax && event->y() > outYmin && event->y() < outYmax ) + { + m_controls->m_analyseOut = !m_controls->m_analyseOut; + } } diff --git a/plugins/Eq/EqParameterWidget.h b/plugins/Eq/EqParameterWidget.h index 6cc7f1a89..b553ce6f2 100644 --- a/plugins/Eq/EqParameterWidget.h +++ b/plugins/Eq/EqParameterWidget.h @@ -28,6 +28,8 @@ #include #include "EffectControls.h" +class EqControls; + class EqBand { @@ -51,9 +53,9 @@ public : class EqParameterWidget : public QWidget { - + Q_OBJECT public: - explicit EqParameterWidget( QWidget *parent = 0 ); + explicit EqParameterWidget( QWidget *parent = 0, EqControls * controls = 0); ~EqParameterWidget(); const int bandCount() { @@ -113,6 +115,7 @@ protected: private: EqBand *m_bands; + EqControls *m_controls; float m_pixelsPerUnitWidth; float m_pixelsPerUnitHeight; float m_pixelsPerOctave; From 89b3f8f98c51e715af59b0a2ec6eef809bf2c8ad Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 29 Dec 2014 19:46:12 +0000 Subject: [PATCH 66/81] Eq FloatText in widget display frequency --- plugins/Eq/EqParameterWidget.cpp | 13 +++++++++++++ plugins/Eq/EqParameterWidget.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/plugins/Eq/EqParameterWidget.cpp b/plugins/Eq/EqParameterWidget.cpp index e65dc9c3d..1525877ee 100644 --- a/plugins/Eq/EqParameterWidget.cpp +++ b/plugins/Eq/EqParameterWidget.cpp @@ -48,6 +48,8 @@ EqParameterWidget::EqParameterWidget( QWidget *parent, EqControls * controls ) : m_scale = 1.5; m_pixelsPerOctave = freqToXPixel( 10000 ) - freqToXPixel( 5000 ); m_controls = controls; + tf = new TextFloat(); + tf->hide(); } @@ -154,6 +156,8 @@ void EqParameterWidget::mouseReleaseEvent( QMouseEvent *event ) { m_controls->m_analyseOut = !m_controls->m_analyseOut; } + + tf->hide(); } @@ -181,6 +185,15 @@ void EqParameterWidget::mouseMoveEvent( QMouseEvent *event ) break; } } + if( m_oldX > 0 && m_oldX < width() && m_oldY > 0 && m_oldY < height() ) + { + tf->setText( QString::number(xPixelToFreq( m_oldX )) + tr( "Hz ") ); + tf->show(); + const int x = event->x() > width() * 0.5 ? + m_oldX - tf->width() : + m_oldX; + tf->moveGlobal(this, QPoint( x, m_oldY - tf->height() ) ); + } } diff --git a/plugins/Eq/EqParameterWidget.h b/plugins/Eq/EqParameterWidget.h index b553ce6f2..eb83ec962 100644 --- a/plugins/Eq/EqParameterWidget.h +++ b/plugins/Eq/EqParameterWidget.h @@ -27,6 +27,7 @@ #define EQPARAMETERWIDGET_H #include #include "EffectControls.h" +#include "TextFloat.h" class EqControls; @@ -121,6 +122,7 @@ private: float m_pixelsPerOctave; float m_scale; EqBand* m_selectedBand; + TextFloat *tf; EqBand* selectNearestHandle( const int x, const int y ); From 22a603c9fd6b5eb7c6ecc3d06729274c02d8421f Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 29 Dec 2014 21:45:54 +0000 Subject: [PATCH 67/81] Eq Peak filters now use bandwidth instead of resonance --- plugins/Eq/EqControls.cpp | 24 ++++++++++++------------ plugins/Eq/EqControls.h | 8 ++++---- plugins/Eq/EqControlsDialog.cpp | 11 ++++++----- plugins/Eq/EqEffect.cpp | 24 ++++++++++++------------ plugins/Eq/EqFilter.h | 30 +++++++++++++++++++++++++++++- plugins/Eq/EqParameterWidget.cpp | 4 ++-- 6 files changed, 65 insertions(+), 36 deletions(-) diff --git a/plugins/Eq/EqControls.cpp b/plugins/Eq/EqControls.cpp index 8dc62243b..0de83a3ba 100644 --- a/plugins/Eq/EqControls.cpp +++ b/plugins/Eq/EqControls.cpp @@ -42,10 +42,10 @@ EqControls::EqControls( EqEffect *effect ) : m_highShelfGainModel( 0.0 , -40, 40, 0.001, this, tr( "High Shelf gain" ) ), m_hpResModel( 0.707,0.003, 10.0 , 0.001, this, tr( "HP res" ) ), m_lowShelfResModel( 1.4,0.55, 10.0 , 0.001, this , tr( "Low Shelf res" ) ), - m_para1ResModel( 1.4, 0.55, 10.0, 0.001, this , tr( "Peak 1 res" ) ), - m_para2ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 2 res" ) ), - m_para3ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 3 res" ) ), - m_para4ResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "Peak 4 res" ) ), + m_para1BwModel( 0.3, 0.1, 4 , 0.001, this , tr( "Peak 1 BW" ) ), + m_para2BwModel( 0.3, 0.1, 4 , 0.001, this , tr( "Peak 2 BW" ) ), + m_para3BwModel( 0.3, 0.1, 4 , 0.001, this , tr( "Peak 3 BW" ) ), + m_para4BwModel( 0.3, 0.1, 4 , 0.001, this , tr( "Peak 4 BW" ) ), m_highShelfResModel( 1.4, 0.55, 10.0 , 0.001, this , tr( "High Shelf res" ) ), m_lpResModel( 0.707,0.003, 10.0 , 0.001, this , tr( "LP res" ) ), m_hpFeqModel( 31.0, 30.0, 20000, 0.001, this , tr( "HP freq" ) ), @@ -112,10 +112,10 @@ void EqControls::loadSettings( const QDomElement &_this ) m_highShelfGainModel.loadSettings( _this , "HighShelfgain"); m_hpResModel.loadSettings( _this ,"HPres"); m_lowShelfResModel.loadSettings( _this, "LowShelfres" ); - m_para1ResModel.loadSettings( _this ,"Peak1res" ); - m_para2ResModel.loadSettings( _this ,"Peak2res" ); - m_para3ResModel.loadSettings( _this ,"Peak3res" ); - m_para4ResModel.loadSettings( _this ,"Peak4res" ); + m_para1BwModel.loadSettings( _this ,"Peak1bw" ); + m_para2BwModel.loadSettings( _this ,"Peak2bw" ); + m_para3BwModel.loadSettings( _this ,"Peak3bw" ); + m_para4BwModel.loadSettings( _this ,"Peak4bw" ); m_highShelfResModel.loadSettings( _this, "HighShelfres" ); m_lpResModel.loadSettings( _this, "LPres"); m_hpFeqModel.loadSettings( _this, "HPfreq" ); @@ -160,10 +160,10 @@ void EqControls::saveSettings( QDomDocument &doc, QDomElement &parent ) m_highShelfGainModel.saveSettings( doc, parent, "HighShelfgain"); m_hpResModel.saveSettings( doc, parent ,"HPres"); m_lowShelfResModel.saveSettings( doc, parent, "LowShelfres" ); - m_para1ResModel.saveSettings( doc, parent,"Peak1res" ); - m_para2ResModel.saveSettings( doc, parent,"Peak2res" ); - m_para3ResModel.saveSettings( doc, parent,"Peak3res" ); - m_para4ResModel.saveSettings( doc, parent,"Peak4res" ); + m_para1BwModel.saveSettings( doc, parent,"Peak1bw" ); + m_para2BwModel.saveSettings( doc, parent,"Peak2bw" ); + m_para3BwModel.saveSettings( doc, parent,"Peak3bw" ); + m_para4BwModel.saveSettings( doc, parent,"Peak4bw" ); m_highShelfResModel.saveSettings( doc, parent, "HighShelfres" ); m_lpResModel.saveSettings( doc, parent, "LPres"); m_hpFeqModel.saveSettings( doc, parent, "HPfreq" ); diff --git a/plugins/Eq/EqControls.h b/plugins/Eq/EqControls.h index cfec04c23..874d75ea8 100644 --- a/plugins/Eq/EqControls.h +++ b/plugins/Eq/EqControls.h @@ -92,10 +92,10 @@ private: FloatModel m_hpResModel; FloatModel m_lowShelfResModel; - FloatModel m_para1ResModel; - FloatModel m_para2ResModel; - FloatModel m_para3ResModel; - FloatModel m_para4ResModel; + FloatModel m_para1BwModel; + FloatModel m_para2BwModel; + FloatModel m_para3BwModel; + FloatModel m_para4BwModel; FloatModel m_highShelfResModel; FloatModel m_lpResModel; diff --git a/plugins/Eq/EqControlsDialog.cpp b/plugins/Eq/EqControlsDialog.cpp index f74245f65..f53801967 100644 --- a/plugins/Eq/EqControlsDialog.cpp +++ b/plugins/Eq/EqControlsDialog.cpp @@ -59,10 +59,10 @@ EqControlsDialog::EqControlsDialog( EqControls *controls ) : setBand( 0, &controls->m_hpActiveModel, &controls->m_hpFeqModel, &controls->m_hpResModel, 0, QColor(255 ,255, 255), tr( "HP" ) ,0,0); setBand( 1, &controls->m_lowShelfActiveModel, &controls->m_lowShelfFreqModel, &controls->m_lowShelfResModel, &controls->m_lowShelfGainModel, QColor(255 ,255, 255), tr( "Low Shelf" ), &controls->m_lowShelfPeakL , &controls->m_lowShelfPeakR ); - setBand( 2, &controls->m_para1ActiveModel, &controls->m_para1FreqModel, &controls->m_para1ResModel, &controls->m_para1GainModel, QColor(255 ,255, 255), tr( "Peak 1" ), &controls->m_para1PeakL, &controls->m_para1PeakR ); - setBand( 3, &controls->m_para2ActiveModel, &controls->m_para2FreqModel, &controls->m_para2ResModel, &controls->m_para2GainModel, QColor(255 ,255, 255), tr( "Peak 2" ), &controls->m_para2PeakL, &controls->m_para2PeakR ); - setBand( 4, &controls->m_para3ActiveModel, &controls->m_para3FreqModel, &controls->m_para3ResModel, &controls->m_para3GainModel, QColor(255 ,255, 255), tr( "Peak 3" ), &controls->m_para3PeakL, &controls->m_para3PeakR ); - setBand( 5, &controls->m_para4ActiveModel, &controls->m_para4FreqModel, &controls->m_para4ResModel, &controls->m_para4GainModel, QColor(255 ,255, 255), tr( "Peak 4" ), &controls->m_para4PeakL, &controls->m_para4PeakR ); + setBand( 2, &controls->m_para1ActiveModel, &controls->m_para1FreqModel, &controls->m_para1BwModel, &controls->m_para1GainModel, QColor(255 ,255, 255), tr( "Peak 1" ), &controls->m_para1PeakL, &controls->m_para1PeakR ); + setBand( 3, &controls->m_para2ActiveModel, &controls->m_para2FreqModel, &controls->m_para2BwModel, &controls->m_para2GainModel, QColor(255 ,255, 255), tr( "Peak 2" ), &controls->m_para2PeakL, &controls->m_para2PeakR ); + setBand( 4, &controls->m_para3ActiveModel, &controls->m_para3FreqModel, &controls->m_para3BwModel, &controls->m_para3GainModel, QColor(255 ,255, 255), tr( "Peak 3" ), &controls->m_para3PeakL, &controls->m_para3PeakR ); + setBand( 5, &controls->m_para4ActiveModel, &controls->m_para4FreqModel, &controls->m_para4BwModel, &controls->m_para4GainModel, QColor(255 ,255, 255), tr( "Peak 4" ), &controls->m_para4PeakL, &controls->m_para4PeakR ); setBand( 6, &controls->m_highShelfActiveModel, &controls->m_highShelfFreqModel, &controls->m_highShelfResModel, &controls->m_highShelfGainModel, QColor(255 ,255, 255), tr( "High Shelf" ), &controls->m_highShelfPeakL, &controls->m_highShelfPeakR ); setBand( 7, &controls->m_lpActiveModel, &controls->m_lpFreqModel, &controls->m_lpResModel, 0, QColor(255 ,255, 255), tr( "LP" ) ,0,0); int cw = width()/8; //the chanel width in pixels @@ -100,7 +100,8 @@ EqControlsDialog::EqControlsDialog( EqControls *controls ) : } m_resKnob->setVolumeKnob(false); m_resKnob->setModel( m_parameterWidget->getBandModels( i )->res ); - m_resKnob->setHintText( tr( "Resonance:") , ""); + if(i > 1 && i < 6) { m_resKnob->setHintText( tr( "Bandwidth: " ) , " Octave" ); } + else { m_resKnob->setHintText( tr( "Resonance : " ) , "" ); } m_freqKnob = new Knob( knobBright_26, this ); if( i == 0 || i == 7 ) diff --git a/plugins/Eq/EqEffect.cpp b/plugins/Eq/EqEffect.cpp index f968615f4..6df5b2a33 100644 --- a/plugins/Eq/EqEffect.cpp +++ b/plugins/Eq/EqEffect.cpp @@ -123,25 +123,25 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) if( m_eqControls.m_para1ActiveModel.value() ) { - m_para1.setParameters( sampleRate, m_eqControls.m_para1FreqModel.value(), m_eqControls.m_para1ResModel.value(), m_eqControls.m_para1GainModel.value() ); + m_para1.setParameters( sampleRate, m_eqControls.m_para1FreqModel.value(), m_eqControls.m_para1BwModel.value(), m_eqControls.m_para1GainModel.value() ); m_para1.processBuffer( buf, frames ); } if( m_eqControls.m_para2ActiveModel.value() ) { - m_para2.setParameters( sampleRate, m_eqControls.m_para2FreqModel.value(), m_eqControls.m_para2ResModel.value(), m_eqControls.m_para2GainModel.value() ); + m_para2.setParameters( sampleRate, m_eqControls.m_para2FreqModel.value(), m_eqControls.m_para2BwModel.value(), m_eqControls.m_para2GainModel.value() ); m_para2.processBuffer( buf, frames ); } if( m_eqControls.m_para3ActiveModel.value() ) { - m_para3.setParameters( sampleRate, m_eqControls.m_para3FreqModel.value(), m_eqControls.m_para3ResModel.value(), m_eqControls.m_para3GainModel.value() ); + m_para3.setParameters( sampleRate, m_eqControls.m_para3FreqModel.value(), m_eqControls.m_para3BwModel.value(), m_eqControls.m_para3GainModel.value() ); m_para3.processBuffer( buf, frames ); } if( m_eqControls.m_para4ActiveModel.value() ) { - m_para4.setParameters( sampleRate, m_eqControls.m_para4FreqModel.value(), m_eqControls.m_para4ResModel.value(), m_eqControls.m_para4GainModel.value() ); + m_para4.setParameters( sampleRate, m_eqControls.m_para4FreqModel.value(), m_eqControls.m_para4BwModel.value(), m_eqControls.m_para4GainModel.value() ); m_para4.processBuffer( buf, frames ); } @@ -217,30 +217,30 @@ void EqEffect::setBandPeaks(EqAnalyser *fft, int samplerate ) m_eqControls.m_para1PeakL = m_eqControls.m_para1PeakR = peakBand( m_eqControls.m_para1FreqModel.value() - - (m_eqControls.m_para1FreqModel.value() / m_eqControls.m_para1ResModel.value() * 0.5), + - (m_eqControls.m_para1FreqModel.value() * m_eqControls.m_para1BwModel.value() * 0.5), m_eqControls.m_para1FreqModel.value() - + (m_eqControls.m_para1FreqModel.value() / m_eqControls.m_para1ResModel.value() * 0.5), + + (m_eqControls.m_para1FreqModel.value() * m_eqControls.m_para1BwModel.value() * 0.5), fft , samplerate ); m_eqControls.m_para2PeakL = m_eqControls.m_para2PeakR = peakBand( m_eqControls.m_para2FreqModel.value() - - (m_eqControls.m_para2FreqModel.value() / m_eqControls.m_para2ResModel.value() * 0.5), + - (m_eqControls.m_para2FreqModel.value() * m_eqControls.m_para2BwModel.value() * 0.5), m_eqControls.m_para2FreqModel.value() - + (m_eqControls.m_para2FreqModel.value() / m_eqControls.m_para2ResModel.value() * 0.5), + + (m_eqControls.m_para2FreqModel.value() * m_eqControls.m_para2BwModel.value() * 0.5), fft , samplerate ); m_eqControls.m_para3PeakL = m_eqControls.m_para3PeakR = peakBand( m_eqControls.m_para3FreqModel.value() - - (m_eqControls.m_para3FreqModel.value() / m_eqControls.m_para3ResModel.value() * 0.5), + - (m_eqControls.m_para3FreqModel.value() * m_eqControls.m_para3BwModel.value() * 0.5), m_eqControls.m_para3FreqModel.value() - + (m_eqControls.m_para3FreqModel.value() / m_eqControls.m_para3ResModel.value() * 0.5), + + (m_eqControls.m_para3FreqModel.value() * m_eqControls.m_para3BwModel.value() * 0.5), fft , samplerate ); m_eqControls.m_para4PeakL = m_eqControls.m_para4PeakR = peakBand( m_eqControls.m_para4FreqModel.value() - - (m_eqControls.m_para4FreqModel.value() / m_eqControls.m_para4ResModel.value() * 0.5), + - (m_eqControls.m_para4FreqModel.value() * m_eqControls.m_para4BwModel.value() * 0.5), m_eqControls.m_para4FreqModel.value() - + (m_eqControls.m_para4FreqModel.value() / m_eqControls.m_para4ResModel.value() * 0.5), + + (m_eqControls.m_para4FreqModel.value() * m_eqControls.m_para4BwModel.value() * 0.5), fft , samplerate ); m_eqControls.m_highShelfPeakL = m_eqControls.m_highShelfPeakR = diff --git a/plugins/Eq/EqFilter.h b/plugins/Eq/EqFilter.h index db5087739..7e75a2e6c 100644 --- a/plugins/Eq/EqFilter.h +++ b/plugins/Eq/EqFilter.h @@ -150,6 +150,7 @@ protected: float m_freq; float m_res; float m_gain; + float m_bw; }; @@ -258,7 +259,7 @@ public: float c = cosf( w0 ); float s = sinf( w0 ); float A = pow( 10, m_gain * 0.025); - float alpha = s / ( 2 * m_res ); + float alpha = s * sinh( log( 2 ) / 2 * m_bw * w0 / sinf(w0) ); float a0, a1, a2, b0, b1, b2; // coeffs to calculate @@ -280,6 +281,33 @@ public: setCoeffs( a1, a2, b0, b1, b2 ); } + + virtual inline void setParameters( float sampleRate, float freq, float bw, float gain ) + { + bool hasChanged = false; + if( sampleRate != m_sampleRate ) + { + m_sampleRate = sampleRate; + hasChanged = true; + } + if ( freq != m_freq ) + { + m_freq = freq; + hasChanged = true; + } + if ( bw != m_bw ) + { + m_bw = bw; + hasChanged = true; + } + if ( gain != m_gain ) + { + m_gain = gain; + hasChanged = true; + } + + if ( hasChanged ) { calcCoefficents(); } + } }; diff --git a/plugins/Eq/EqParameterWidget.cpp b/plugins/Eq/EqParameterWidget.cpp index 1525877ee..d7318de3b 100644 --- a/plugins/Eq/EqParameterWidget.cpp +++ b/plugins/Eq/EqParameterWidget.cpp @@ -100,7 +100,7 @@ void EqParameterWidget::paintEvent( QPaintEvent *event ) gain = m_bands[i].gain->value(); } y = gainToYPixel( gain ); - float bw = m_bands[i].freq->value() / m_bands[i].res->value(); + float bw = m_bands[i].freq->value() * m_bands[i].res->value(); m_bands[i].x = x; m_bands[i].y = y; const int radius = 7; painter.drawEllipse( x - radius , y - radius, radius * 2 ,radius * 2 ); @@ -178,7 +178,7 @@ void EqParameterWidget::mouseMoveEvent( QMouseEvent *event ) if( m_selectedBand->gain )m_selectedBand->gain->setValue( yPixelToGain( m_oldY ) ); break; case res: - if( m_selectedBand->res )m_selectedBand->res->incValue( deltaX * resPixelMultiplyer() ); + if( m_selectedBand->res )m_selectedBand->res->incValue( ( deltaX) * resPixelMultiplyer() ); if( m_selectedBand->res )m_selectedBand->res->incValue( (-deltaR) * resPixelMultiplyer() ); break; default: From 6d4d958ec64ceb45e3ece99a6698d6dbb31d3278 Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 29 Dec 2014 22:48:54 +0000 Subject: [PATCH 68/81] Proposed fix 1527 Not all Played Notes shows the indicator on the InstrumentTrackView --- src/tracks/InstrumentTrack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index 06219b942..b895c8f23 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -378,9 +378,9 @@ void InstrumentTrack::processOutEvent( const MidiEvent& event, const MidiTime& t } ++m_runningMidiNotes[key]; m_instrument->handleMidiEvent( MidiEvent( MidiNoteOn, midiPort()->realOutputChannel(), key, event.velocity() ), time, offset ); - emit newNote(); } m_midiNotesMutex.unlock(); + emit newNote(); break; case MidiNoteOff: From 1e25b914102e29e8c6859ea6ccdf74eeda3164cb Mon Sep 17 00:00:00 2001 From: Dave French Date: Tue, 30 Dec 2014 14:07:28 +0000 Subject: [PATCH 69/81] 1527 removed socket slot for indicator activation --- include/InstrumentTrack.h | 5 ++++- src/tracks/InstrumentTrack.cpp | 14 ++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/include/InstrumentTrack.h b/include/InstrumentTrack.h index 04b93997f..8bb9bd526 100644 --- a/include/InstrumentTrack.h +++ b/include/InstrumentTrack.h @@ -38,6 +38,7 @@ #include "Track.h" + class QLineEdit; template class QQueue; class InstrumentFunctionArpeggioView; @@ -202,10 +203,10 @@ public: return &m_effectChannelModel; } + void setIndicator( FadeButton *fb ); signals: void instrumentChanged(); - void newNote(); void midiNoteOn( const Note& ); void midiNoteOff( const Note& ); void nameChanged(); @@ -250,6 +251,8 @@ private: IntModel m_pitchRangeModel; IntModel m_effectChannelModel; + FadeButton *m_fb; + Instrument * m_instrument; InstrumentSoundShaping m_soundShaping; diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index b895c8f23..14c96a5d3 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -49,6 +49,7 @@ #include "EffectRackView.h" #include "embed.h" #include "Engine.h" +#include "FadeButton.h" #include "FileBrowser.h" #include "FxMixer.h" #include "FxMixerView.h" @@ -378,9 +379,10 @@ void InstrumentTrack::processOutEvent( const MidiEvent& event, const MidiTime& t } ++m_runningMidiNotes[key]; m_instrument->handleMidiEvent( MidiEvent( MidiNoteOn, midiPort()->realOutputChannel(), key, event.velocity() ), time, offset ); + } m_midiNotesMutex.unlock(); - emit newNote(); + m_fb->activate(); break; case MidiNoteOff: @@ -561,6 +563,12 @@ void InstrumentTrack::removeMidiPortNode( DataFile & _dataFile ) n.item( 0 ).parentNode().removeChild( n.item( 0 ) ); } +void InstrumentTrack::setIndicator(FadeButton *fb) +{ + m_fb = fb; +} + + @@ -910,9 +918,7 @@ InstrumentTrackView::InstrumentTrackView( InstrumentTrack * _it, TrackContainerV this, SLOT( activityIndicatorPressed() ) ); connect( m_activityIndicator, SIGNAL( released() ), this, SLOT( activityIndicatorReleased() ) ); - connect( _it, SIGNAL( newNote() ), - m_activityIndicator, SLOT( activate() ) ); - + _it->setIndicator( m_activityIndicator ); setModel( _it ); } From f67eaaced7f82765a26273702611b51762cfbcd8 Mon Sep 17 00:00:00 2001 From: Dave French Date: Wed, 31 Dec 2014 00:14:44 +0000 Subject: [PATCH 70/81] EQ changed gain faders to use dB --- plugins/Eq/EqControls.cpp | 6 ++++-- plugins/Eq/EqControlsDialog.cpp | 5 +++++ plugins/Eq/EqEffect.cpp | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/plugins/Eq/EqControls.cpp b/plugins/Eq/EqControls.cpp index 0de83a3ba..833ea7080 100644 --- a/plugins/Eq/EqControls.cpp +++ b/plugins/Eq/EqControls.cpp @@ -32,8 +32,8 @@ EqControls::EqControls( EqEffect *effect ) : EffectControls( effect ), m_effect( effect ), - m_inGainModel( 1.0, 0.0, 2.0, 0.001, this, tr( "Input gain") ), - m_outGainModel( 1.0, 0.0, 2.0, 0.001, this, tr( "Output gain" ) ), + m_inGainModel( 0.0, -60.0, 6.0, 0.01, this, tr( "Input gain") ), + m_outGainModel( -.0, -60.0, 6.0, 0.1, this, tr( "Output gain" ) ), m_lowShelfGainModel( 0.0 , -40, 40, 0.001, this, tr( "Low shelf gain" ) ), m_para1GainModel( 0.0 , -40, 40, 0.001, this, tr( "Peak 1 gain" ) ), m_para2GainModel( 0.0 , -40, 40, 0.001, this, tr( "Peak 2 gain" ) ), @@ -95,6 +95,8 @@ EqControls::EqControls( EqEffect *effect ) : m_inProgress = false; m_analyseIn = true; m_analyseOut = true; + + m_inGainModel.setScaleLogarithmic( true ); } diff --git a/plugins/Eq/EqControlsDialog.cpp b/plugins/Eq/EqControlsDialog.cpp index f53801967..ee91ca8f4 100644 --- a/plugins/Eq/EqControlsDialog.cpp +++ b/plugins/Eq/EqControlsDialog.cpp @@ -70,10 +70,15 @@ EqControlsDialog::EqControlsDialog( EqControls *controls ) : m_inGainFader = new EqFader( &controls->m_inGainModel, tr( "In Gain" ), this, &controls->m_inPeakL, &controls->m_inPeakR); m_inGainFader->move( 10, 5 ); + m_inGainFader->setDisplayConversion( false ); + m_inGainFader->setHintText( tr( "Gain" ), "dBv"); + m_outGainFader = new EqFader( &controls->m_outGainModel, tr( "Out Gain" ), this, &controls->m_outPeakL, &controls->m_outPeakR ); m_outGainFader->move( 315, 5 ); + m_outGainFader->setDisplayConversion( false ); + m_outGainFader->setHintText( tr( "Gain" ), "dBv"); //gain faders int fo = (cw * 0.5) - (m_outGainFader->width() * 0.5 ); diff --git a/plugins/Eq/EqEffect.cpp b/plugins/Eq/EqEffect.cpp index 6df5b2a33..9663926f8 100644 --- a/plugins/Eq/EqEffect.cpp +++ b/plugins/Eq/EqEffect.cpp @@ -78,7 +78,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) { outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; } - const float outGain = m_eqControls.m_outGainModel.value(); + const float outGain = dbvToAmp( m_eqControls.m_outGainModel.value() ); const int sampleRate = Engine::mixer()->processingSampleRate(); sampleFrame m_inPeak = { 0, 0 }; @@ -90,7 +90,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) { m_eqControls.m_inFftBands.clear(); } - gain(buf , frames, m_eqControls.m_inGainModel.value(), &m_inPeak ); + gain(buf , frames, dbvToAmp( m_eqControls.m_inGainModel.value() ), &m_inPeak ); m_eqControls.m_inPeakL = m_eqControls.m_inPeakL < m_inPeak[0] ? m_inPeak[0] : m_eqControls.m_inPeakL; m_eqControls.m_inPeakR = m_eqControls.m_inPeakR < m_inPeak[1] ? m_inPeak[1] : m_eqControls.m_inPeakR; From 420bc1b7eda2ef96cca6bc33c343877738034775 Mon Sep 17 00:00:00 2001 From: Dave French Date: Wed, 31 Dec 2014 12:27:40 +0000 Subject: [PATCH 71/81] Eq Gain Faders using dBv scale --- plugins/Eq/CMakeLists.txt | 4 ++-- plugins/Eq/DBvModel.cpp | 14 ++++++++++++++ plugins/Eq/DBvModel.h | 31 +++++++++++++++++++++++++++++++ plugins/Eq/EqControls.cpp | 4 ++-- plugins/Eq/EqControls.h | 6 ++++-- plugins/Eq/EqEffect.cpp | 5 +++-- 6 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 plugins/Eq/DBvModel.cpp create mode 100644 plugins/Eq/DBvModel.h diff --git a/plugins/Eq/CMakeLists.txt b/plugins/Eq/CMakeLists.txt index 3cd4b8885..75c9b2911 100644 --- a/plugins/Eq/CMakeLists.txt +++ b/plugins/Eq/CMakeLists.txt @@ -2,5 +2,5 @@ INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${FFTW3F_INCLUDE_DIRS}) LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) LINK_LIBRARIES(${FFTW3F_LIBRARIES}) -BUILD_PLUGIN(eq EqEffect.cpp EqControls.cpp EqControlsDialog.cpp EqFilter.h EqParameterWidget.cpp EqFader.h EqSpectrumView.h -MOCFILES EqControls.h EqParameterWidget.h EqFader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") +BUILD_PLUGIN(eq EqEffect.cpp EqControls.cpp EqControlsDialog.cpp EqFilter.h EqParameterWidget.cpp EqFader.h EqSpectrumView.h DBvModel.cpp DBvModel.h +MOCFILES EqControls.h EqParameterWidget.h EqFader.h DBvModel.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/Eq/DBvModel.cpp b/plugins/Eq/DBvModel.cpp new file mode 100644 index 000000000..3bd128ea6 --- /dev/null +++ b/plugins/Eq/DBvModel.cpp @@ -0,0 +1,14 @@ +#include "DBvModel.h" + +DBvModel::DBvModel(float val, float min, float max, float step, + Model *parent, const QString &displayName, + bool defaultConstructed) : + FloatModel( val, min, max, step, parent, displayName, defaultConstructed ) +{ + connect(this, SIGNAL( dataChanged() ), this,SLOT( calcAmp() ) ); +} + +void DBvModel::calcAmp() +{ + m_amp = dbvToAmp( value() ); +} diff --git a/plugins/Eq/DBvModel.h b/plugins/Eq/DBvModel.h new file mode 100644 index 000000000..ef6d80a03 --- /dev/null +++ b/plugins/Eq/DBvModel.h @@ -0,0 +1,31 @@ +#ifndef DBVMODEL +#define DBVMODEL + +#include "AutomatableModel.h" + + +class DBvModel : public FloatModel +{ + Q_OBJECT +public: + DBvModel( float val = 0, float min = 0, float max = 0, float step = 0, + Model * parent = NULL, + const QString& displayName = QString(), + bool defaultConstructed = false ); + inline float getAmp() const + { + return m_amp; + } + +private slots: + void calcAmp(); + +private: + float m_amp; +}; + + + + +#endif // DBVMODEL + diff --git a/plugins/Eq/EqControls.cpp b/plugins/Eq/EqControls.cpp index 833ea7080..76e5b4a95 100644 --- a/plugins/Eq/EqControls.cpp +++ b/plugins/Eq/EqControls.cpp @@ -32,8 +32,8 @@ EqControls::EqControls( EqEffect *effect ) : EffectControls( effect ), m_effect( effect ), - m_inGainModel( 0.0, -60.0, 6.0, 0.01, this, tr( "Input gain") ), - m_outGainModel( -.0, -60.0, 6.0, 0.1, this, tr( "Output gain" ) ), + m_inGainModel( 0.0, -60.0, 20.0, 0.01, this, tr( "Input gain") ), + m_outGainModel( -.0, -60.0, 20.0, 0.01, this, tr( "Output gain" ) ), m_lowShelfGainModel( 0.0 , -40, 40, 0.001, this, tr( "Low shelf gain" ) ), m_para1GainModel( 0.0 , -40, 40, 0.001, this, tr( "Peak 1 gain" ) ), m_para2GainModel( 0.0 , -40, 40, 0.001, this, tr( "Peak 2 gain" ) ), diff --git a/plugins/Eq/EqControls.h b/plugins/Eq/EqControls.h index 874d75ea8..dfb75287e 100644 --- a/plugins/Eq/EqControls.h +++ b/plugins/Eq/EqControls.h @@ -28,9 +28,11 @@ #include "EffectControls.h" #include "EqControlsDialog.h" #include "Knob.h" +#include "DBvModel.h" class EqEffect; + class EqControls : public EffectControls { Q_OBJECT @@ -81,8 +83,8 @@ public: private: EqEffect* m_effect; - FloatModel m_inGainModel; - FloatModel m_outGainModel; + DBvModel m_inGainModel; + DBvModel m_outGainModel; FloatModel m_lowShelfGainModel; FloatModel m_para1GainModel; FloatModel m_para2GainModel; diff --git a/plugins/Eq/EqEffect.cpp b/plugins/Eq/EqEffect.cpp index 9663926f8..3407c7953 100644 --- a/plugins/Eq/EqEffect.cpp +++ b/plugins/Eq/EqEffect.cpp @@ -29,6 +29,7 @@ #include "interpolation.h" #include "Engine.h" #include "MainWindow.h" +#include "EqFader.h" extern "C" { @@ -78,7 +79,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) { outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; } - const float outGain = dbvToAmp( m_eqControls.m_outGainModel.value() ); + const float outGain = m_eqControls.m_outGainModel.getAmp(); const int sampleRate = Engine::mixer()->processingSampleRate(); sampleFrame m_inPeak = { 0, 0 }; @@ -90,7 +91,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) { m_eqControls.m_inFftBands.clear(); } - gain(buf , frames, dbvToAmp( m_eqControls.m_inGainModel.value() ), &m_inPeak ); + gain(buf , frames, m_eqControls.m_inGainModel.getAmp() , &m_inPeak ); m_eqControls.m_inPeakL = m_eqControls.m_inPeakL < m_inPeak[0] ? m_inPeak[0] : m_eqControls.m_inPeakL; m_eqControls.m_inPeakR = m_eqControls.m_inPeakR < m_inPeak[1] ? m_inPeak[1] : m_eqControls.m_inPeakR; From 93b6888394aaed5d9df2ab4e9a948de74f1f2584 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Fri, 2 Jan 2015 13:08:11 +0100 Subject: [PATCH 72/81] Fix export for some locales --- src/gui/export_project_dialog.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/export_project_dialog.cpp b/src/gui/export_project_dialog.cpp index cd26ab955..66040cbf3 100644 --- a/src/gui/export_project_dialog.cpp +++ b/src/gui/export_project_dialog.cpp @@ -253,10 +253,13 @@ ProjectRenderer* exportProjectDialog::prepRender() static_cast(interpolationCB->currentIndex()), static_cast(oversamplingCB->currentIndex()) ); + int samplerates[5] = { 44100, 48000, 88200, 96000, 192000 }; + int bitrates[6] = { 64, 128, 160, 192, 256, 320 }; + ProjectRenderer::OutputSettings os = ProjectRenderer::OutputSettings( - samplerateCB->currentText().section(" ", 0, 0).toUInt(), + samplerates[ samplerateCB->currentIndex() ], false, - bitrateCB->currentText().section(" ", 0, 0).toUInt(), + bitrates[ bitrateCB->currentIndex() ], static_cast( depthCB->currentIndex() ) ); engine::getSong()->setExportLoop( exportLoopCB->isChecked() ); From 44f72b0f13e89d7f8352a149e85002ec59f99fd5 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Fri, 2 Jan 2015 14:21:39 +0100 Subject: [PATCH 73/81] Added const --- src/gui/export_project_dialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/export_project_dialog.cpp b/src/gui/export_project_dialog.cpp index 66040cbf3..1a18b5695 100644 --- a/src/gui/export_project_dialog.cpp +++ b/src/gui/export_project_dialog.cpp @@ -253,8 +253,8 @@ ProjectRenderer* exportProjectDialog::prepRender() static_cast(interpolationCB->currentIndex()), static_cast(oversamplingCB->currentIndex()) ); - int samplerates[5] = { 44100, 48000, 88200, 96000, 192000 }; - int bitrates[6] = { 64, 128, 160, 192, 256, 320 }; + const int samplerates[5] = { 44100, 48000, 88200, 96000, 192000 }; + const int bitrates[6] = { 64, 128, 160, 192, 256, 320 }; ProjectRenderer::OutputSettings os = ProjectRenderer::OutputSettings( samplerates[ samplerateCB->currentIndex() ], From 7789d646329473ca03d37e8d94e29b53a4930a95 Mon Sep 17 00:00:00 2001 From: rgwan Date: Sat, 3 Jan 2015 03:00:13 +0800 Subject: [PATCH 74/81] locale: Fixed some ugly translation in Chinese locale --- data/locale/zh.ts | 88 +++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/data/locale/zh.ts b/data/locale/zh.ts index f27c9dbe6..a4993226a 100644 --- a/data/locale/zh.ts +++ b/data/locale/zh.ts @@ -382,7 +382,7 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com Click here and the values from the clipboard will be pasted at the first visible measure. - + 点击这里,选择的值将从剪贴板粘贴到第一个可见的小节。 Automation Editor - no pattern @@ -682,19 +682,19 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com DualFilterControls Filter 1 enabled - 过滤器 1 已启用 + 滤波器 1 已启用 Filter 1 type - 过滤器 1 的类型 + 滤波器 1 的类型 Cutoff 1 frequency - 频谱刀 1 的频率 + 滤波器 1 截频 Q/Resonance 1 - + 滤波器 1 Q值 Gain 1 @@ -702,23 +702,23 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com Mix - + 混合 Filter 2 enabled - 已启用过滤器 2 + 滤波器 2 已启用 Filter 2 type - 过滤器 2 的类型 + 滤波器 2 的类型 Cutoff 2 frequency - 频谱刀 2 的频率 + 滤波器 2 截频 Q/Resonance 2 - + 滤波器 2 Q值 Gain 2 @@ -754,31 +754,31 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com 2x LowPass - + 2 个低通串联 RC LowPass 12dB - + RC 低通(12dB) RC BandPass 12dB - + RC 带通(12dB) RC HighPass 12dB - + RC 高通(12dB) RC LowPass 24dB - + RC 低通(24dB) RC BandPass 24dB - + RC 带通(24dB) RC HighPass 24dB - + RC 高通(24dB) Vocal Formant Filter @@ -849,7 +849,7 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com Wet Level: - 湿度: + 效果度: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. @@ -865,7 +865,7 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. - + 衰减旋钮控制在插件停止工作前,缓冲区中加入的静音时常。较小的数值会降低CPU占用率但是可能导致延迟或混响产生撕裂。 GATE @@ -877,11 +877,11 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. - + 门限旋钮设置自动静音时,被认为是静音的信号幅度。 Controls - 控制 + 控制器 Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. @@ -924,7 +924,7 @@ Right clicking will bring up a context menu where you can change the order in wh Attack - 打进声 + 起音 Hold @@ -940,7 +940,7 @@ Right clicking will bring up a context menu where you can change the order in wh Release - 释放 + 释音 Modulation @@ -952,7 +952,7 @@ Right clicking will bring up a context menu where you can change the order in wh LFO Attack - LFO 打进声(attack) + LFO 起音 LFO speed @@ -968,11 +968,11 @@ Right clicking will bring up a context menu where you can change the order in wh Freq x 100 - + 频率 x 100 Modulate Env-Amount - + 调制所有包络 @@ -983,11 +983,11 @@ Right clicking will bring up a context menu where you can change the order in wh Predelay: - + 预延迟 Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. - + 使用预延迟旋钮设定此包络的预延迟,较大的值会加长包络开始的时间。 ATT @@ -995,15 +995,15 @@ Right clicking will bring up a context menu where you can change the order in wh Attack: - 打进: + 起音: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. - (ADSR Attack) + 使用起音旋钮设定此包络的起音时间,较大的值会让包络达到起音值的时间增加。为钢琴等乐器选择小值而弦乐选择大值。 HOLD - HOLD + 持续 Hold: @@ -1011,43 +1011,43 @@ Right clicking will bring up a context menu where you can change the order in wh Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. - + 使用持续旋钮设定此包络的持续时间。较大的值会在它衰减到持续值时,保持包络在起音值更久。 DEC - DEC + 衰减 Decay: - 衰减: + 衰减: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. - (ADSR Decay) + 使用衰减旋钮设定此包络的衰减值。较大的值会延长包络从起音值衰减到持续值的时间。为钢琴等乐器选择一个小值。 SUST - SUST + 持续 Sustain: - 持幅: + 持续: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. - (ADSR Sustain) + 使用持续旋钮设置此包络的持续值,较大的值会增加释放前,包络在此保持的值。 REL - REL + 释音 Release: - 消退: + 释音: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. - (ADSR Release) + 使用释音旋钮设定此包络的释音时间,较大值会增加包络衰减到零的时间。为弦乐等乐器选择一个大值。 AMT @@ -1055,15 +1055,15 @@ Right clicking will bring up a context menu where you can change the order in wh Modulation amount: - + 调制量 Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. - + 使用调制量旋钮设置LFO对此包络的调制量,较大的值会对此包络控制的值(如音量或截频)影响更大。 LFO predelay: - + LFO 预延迟 Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. From 40438689922e843fcf07d22dd52378cb7e5237d5 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Fri, 2 Jan 2015 21:40:49 +0100 Subject: [PATCH 75/81] Add "Remove unused channels" option to FX-Mixer This makes it easier to delete all FX-Channels that are not in use. --- include/FxLine.h | 1 + include/FxMixerView.h | 3 +++ src/gui/FxMixerView.cpp | 33 +++++++++++++++++++++++++++++++++ src/gui/widgets/FxLine.cpp | 15 +++++++++++++-- 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/include/FxLine.h b/include/FxLine.h index 2cc479799..69f6a9ed0 100644 --- a/include/FxLine.h +++ b/include/FxLine.h @@ -73,6 +73,7 @@ private: private slots: void renameChannel(); void removeChannel(); + void removeUnusedChannels(); void moveChannelLeft(); void moveChannelRight(); void displayHelp(); diff --git a/include/FxMixerView.h b/include/FxMixerView.h index e2cee4be6..76d6bbb21 100644 --- a/include/FxMixerView.h +++ b/include/FxMixerView.h @@ -92,6 +92,9 @@ public: // notify the view that an fx channel was deleted void deleteChannel(int index); + // delete all unused channels + void deleteUnusedChannels(); + // move the channel to the left or right void moveChannelLeft(int index); void moveChannelRight(int index); diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp index aefdcf274..55bed9e7a 100644 --- a/src/gui/FxMixerView.cpp +++ b/src/gui/FxMixerView.cpp @@ -395,6 +395,39 @@ void FxMixerView::deleteChannel(int index) +void FxMixerView::deleteUnusedChannels() +{ + TrackContainer::TrackList tracks; + tracks += Engine::getSong()->tracks(); + tracks += Engine::getBBTrackContainer()->tracks(); + + // go through all FX Channels + for(int i = m_fxChannelViews.size()-1; i>0; --i) + { + // check if an instrument references to the current channel + bool empty=true; + foreach( Track* t, tracks ) + { + if( t->type() == Track::InstrumentTrack ) + { + InstrumentTrack* inst = dynamic_cast( t ); + if( i == inst->effectChannelModel()->value(0) ) + { + empty=false; + break; + } + } + } + // delete channel if no references found + if( empty ) + { + deleteChannel( i ); + } + } +} + + + void FxMixerView::moveChannelLeft(int index) { // can't move master or first channel left or last channel right diff --git a/src/gui/widgets/FxLine.cpp b/src/gui/widgets/FxLine.cpp index 8f39af38c..adb47d4f8 100644 --- a/src/gui/widgets/FxLine.cpp +++ b/src/gui/widgets/FxLine.cpp @@ -192,14 +192,18 @@ void FxLine::contextMenuEvent( QContextMenuEvent * ) } contextMenu->addAction( tr( "Rename &channel" ), this, SLOT( renameChannel() ) ); contextMenu->addSeparator(); - + if( m_channelIndex != 0 ) // no remove-option in master { contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "R&emove channel" ), this, SLOT( removeChannel() ) ); contextMenu->addSeparator(); } - + + contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "Remove &unused channels" ), + this, SLOT( removeUnusedChannels() ) ); + contextMenu->addSeparator(); + contextMenu->addHelpAction(); contextMenu->exec( QCursor::pos() ); delete contextMenu; @@ -230,6 +234,13 @@ void FxLine::removeChannel() } +void FxLine::removeUnusedChannels() +{ + FxMixerView * mix = Engine::fxMixerView(); + mix->deleteUnusedChannels(); +} + + void FxLine::moveChannelLeft() { FxMixerView * mix = Engine::fxMixerView(); From e6e8f28fc867d836020e6199e36313c9d56f3569 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Sat, 3 Jan 2015 06:52:05 +0100 Subject: [PATCH 76/81] Don't count channels reveiving input from another channel as unused --- src/gui/FxMixerView.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp index 55bed9e7a..b1787bac3 100644 --- a/src/gui/FxMixerView.cpp +++ b/src/gui/FxMixerView.cpp @@ -418,8 +418,9 @@ void FxMixerView::deleteUnusedChannels() } } } + FxChannel * ch = Engine::fxMixer()->effectChannel( i ); // delete channel if no references found - if( empty ) + if( empty && ch->m_receives.isEmpty() ) { deleteChannel( i ); } From c11a15d0d0be7b9fd4e56f041e3a4c6a6b1eb2f5 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Sun, 4 Jan 2015 12:38:44 +0100 Subject: [PATCH 77/81] Get correct value for scrollbar width --- include/TrackContainerView.h | 2 +- src/gui/SongEditor.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/TrackContainerView.h b/include/TrackContainerView.h index 5201a92c6..e4a8c0d20 100644 --- a/include/TrackContainerView.h +++ b/include/TrackContainerView.h @@ -52,7 +52,7 @@ public: virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); virtual void loadSettings( const QDomElement & _this ); - QWidget * contentWidget() + QScrollArea * contentWidget() { return( m_scrollArea ); } diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index bb477be56..ae7236dc2 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -722,7 +722,7 @@ void SongEditor::updatePosition( const MidiTime & _t ) { const int w = width() - widgetWidth - trackOpWidth - - 32; // rough estimation for width of right scrollbar + - contentWidget()->verticalScrollBar()->width(); // width of right scrollbar if( _t > m_currentPosition + w * MidiTime::ticksPerTact() / pixelsPerTact() ) { From 5e4752e041f007dea1b50d98fc962511cd7c8f46 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Sun, 4 Jan 2015 16:33:19 +0100 Subject: [PATCH 78/81] Adjust coding style --- src/gui/FxMixerView.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp index b1787bac3..8692245ff 100644 --- a/src/gui/FxMixerView.cpp +++ b/src/gui/FxMixerView.cpp @@ -402,7 +402,7 @@ void FxMixerView::deleteUnusedChannels() tracks += Engine::getBBTrackContainer()->tracks(); // go through all FX Channels - for(int i = m_fxChannelViews.size()-1; i>0; --i) + for(int i = m_fxChannelViews.size()-1; i > 0; --i) { // check if an instrument references to the current channel bool empty=true; From 0cbb506f5036db80053ca065a62994e0a5edbb13 Mon Sep 17 00:00:00 2001 From: Vesa Date: Sun, 4 Jan 2015 18:47:05 +0200 Subject: [PATCH 79/81] Fix preview crash caused by earlier commit --- src/tracks/InstrumentTrack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index 39d7765c7..f2e14fee5 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -382,7 +382,7 @@ void InstrumentTrack::processOutEvent( const MidiEvent& event, const MidiTime& t } m_midiNotesMutex.unlock(); - m_fb->activate(); + if( m_fb ) { m_fb->activate(); } break; case MidiNoteOff: From 1bb6fa072f2faf62ca5fc9bbee6a267d502a308b Mon Sep 17 00:00:00 2001 From: Vesa V Date: Sun, 4 Jan 2015 18:48:12 +0200 Subject: [PATCH 80/81] Revert "Proposed fix for 1352 Ifreeze when adding instruments or moving mixer tracks" --- include/TrackContainerView.h | 18 ------------------ src/gui/TrackContainerView.cpp | 19 +------------------ 2 files changed, 1 insertion(+), 36 deletions(-) diff --git a/include/TrackContainerView.h b/include/TrackContainerView.h index e4a8c0d20..7e9dee437 100644 --- a/include/TrackContainerView.h +++ b/include/TrackContainerView.h @@ -33,7 +33,6 @@ #include "Track.h" #include "JournallingObject.h" -#include "InstrumentTrack.h" class QVBoxLayout; @@ -183,23 +182,6 @@ signals: } ; -class InstrumentLoaderThread : public QThread -{ - Q_OBJECT -public: - InstrumentLoaderThread( QObject *parent = 0 , InstrumentTrack *it = 0, QString name = "" ); - - void run(); - - -private: - - InstrumentTrack *m_it; - QString m_name; - - - -}; #endif diff --git a/src/gui/TrackContainerView.cpp b/src/gui/TrackContainerView.cpp index 5d9d66013..94c72d278 100644 --- a/src/gui/TrackContainerView.cpp +++ b/src/gui/TrackContainerView.cpp @@ -47,9 +47,6 @@ #include "Track.h" - - - TrackContainerView::TrackContainerView( TrackContainer * _tc ) : QWidget(), ModelView( NULL, this ), @@ -328,8 +325,7 @@ void TrackContainerView::dropEvent( QDropEvent * _de ) InstrumentTrack * it = dynamic_cast( Track::create( Track::InstrumentTrack, m_tc ) ); - InstrumentLoaderThread *ilt = new InstrumentLoaderThread( this, it, value); - ilt->start(); + it->loadInstrument( value ); //it->toggledInstrumentTrackButton( true ); _de->accept(); } @@ -454,19 +450,6 @@ void TrackContainerView::scrollArea::wheelEvent( QWheelEvent * _we ) } } - InstrumentLoaderThread::InstrumentLoaderThread( QObject *parent, InstrumentTrack *it, QString name) : QThread( parent ) -{ - m_it = it; - m_name = name; -} - -void InstrumentLoaderThread::run() -{ - m_it->loadInstrument( m_name ); -} - - - From f57d98fb0b249fb5e42d05814128620cc0237c6f Mon Sep 17 00:00:00 2001 From: Dave French Date: Tue, 6 Jan 2015 00:09:08 +0000 Subject: [PATCH 81/81] Proposed fix for 1350 Minimized Song_Editor & BB_Editor tracks should not allow graphics to be cut off. --- include/Track.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/Track.h b/include/Track.h index f6218c53d..800524a9e 100644 --- a/include/Track.h +++ b/include/Track.h @@ -67,7 +67,7 @@ const int TRACK_OP_WIDTH_COMPACT = 60; * Tracks can be resized by shift-dragging anywhere inside the track * display. This sets the minimum size in pixels for a track. */ -const int MINIMAL_TRACK_HEIGHT = 8; +const int MINIMAL_TRACK_HEIGHT = 32; const int DEFAULT_TRACK_HEIGHT = 32; const int TCO_BORDER_WIDTH = 2;