mirror of
https://github.com/LMMS/lmms.git
synced 2026-05-18 11:45:04 -04:00
Modify BassBooster to show how to replace signals/slots in DSP
This commit is contained in:
@@ -240,6 +240,9 @@ public:
|
||||
return m_hasLinkedModels;
|
||||
}
|
||||
|
||||
// a way to track changed values in the model and avoid using signals/slots - useful for speed-critical code.
|
||||
// note that this method should only be called once per period since it resets the state of the variable - so if your model
|
||||
// has to be accessed by more than one object, then this function shouldn't be used.
|
||||
bool isValueChanged()
|
||||
{
|
||||
if( m_valueChanged )
|
||||
@@ -247,6 +250,7 @@ public:
|
||||
m_valueChanged = false;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
float globalAutomationValueAt( const MidiTime& time );
|
||||
|
||||
@@ -52,6 +52,9 @@ BassBoosterEffect::BassBoosterEffect( Model* parent, const Descriptor::SubPlugin
|
||||
m_bbFX( DspEffectLibrary::FastBassBoost( 70.0f, 1.0f, 2.8f ) ),
|
||||
m_bbControls( this )
|
||||
{
|
||||
changeFrequency();
|
||||
changeGain();
|
||||
changeRatio();
|
||||
}
|
||||
|
||||
|
||||
@@ -70,6 +73,10 @@ bool BassBoosterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames
|
||||
{
|
||||
return( false );
|
||||
}
|
||||
// check out changed controls
|
||||
if( m_bbControls.m_freqModel.isValueChanged() ) { changeFrequency(); }
|
||||
if( m_bbControls.m_gainModel.isValueChanged() ) { changeGain(); }
|
||||
if( m_bbControls.m_ratioModel.isValueChanged() ) { changeRatio(); }
|
||||
|
||||
double outSum = 0.0;
|
||||
const float d = dryLevel();
|
||||
@@ -91,6 +98,32 @@ bool BassBoosterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames
|
||||
}
|
||||
|
||||
|
||||
inline void BassBoosterEffect::changeFrequency()
|
||||
{
|
||||
const sample_t fac = engine::mixer()->processingSampleRate() / 44100.0f;
|
||||
|
||||
m_bbFX.leftFX().setFrequency( m_bbControls.m_freqModel.value() * fac );
|
||||
m_bbFX.rightFX().setFrequency( m_bbControls.m_freqModel.value() * fac );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
inline void BassBoosterEffect::changeGain()
|
||||
{
|
||||
m_bbFX.leftFX().setGain( m_bbControls.m_gainModel.value() );
|
||||
m_bbFX.rightFX().setGain( m_bbControls.m_gainModel.value() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
inline void BassBoosterEffect::changeRatio()
|
||||
{
|
||||
m_bbFX.leftFX().setRatio( m_bbControls.m_ratioModel.value() );
|
||||
m_bbFX.rightFX().setRatio( m_bbControls.m_ratioModel.value() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _BASS_BOOSTER_H
|
||||
#define _BASS_BOOSTER_H
|
||||
#ifndef BASS_BOOSTER_H
|
||||
#define BASS_BOOSTER_H
|
||||
|
||||
#include "Effect.h"
|
||||
#include "DspEffectLibrary.h"
|
||||
@@ -45,6 +45,10 @@ public:
|
||||
|
||||
|
||||
private:
|
||||
void changeFrequency();
|
||||
void changeGain();
|
||||
void changeRatio();
|
||||
|
||||
DspEffectLibrary::MonoToStereoAdaptor<DspEffectLibrary::FastBassBoost> m_bbFX;
|
||||
|
||||
BassBoosterControls m_bbControls;
|
||||
|
||||
@@ -37,48 +37,17 @@ BassBoosterControls::BassBoosterControls( BassBoosterEffect* effect ) :
|
||||
m_gainModel( 1.0f, 0.1f, 5.0f, 0.05f, this, tr( "Gain" ) ),
|
||||
m_ratioModel( 2.0f, 0.1f, 10.0f, 0.1f, this, tr( "Ratio" ) )
|
||||
{
|
||||
connect( &m_freqModel, SIGNAL( dataChanged() ), this, SLOT( changeFrequency() ) );
|
||||
connect( &m_gainModel, SIGNAL( dataChanged() ), this, SLOT( changeGain() ) );
|
||||
connect( &m_ratioModel, SIGNAL( dataChanged() ), this, SLOT( changeRatio() ) );
|
||||
connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( changeFrequency() ) );
|
||||
|
||||
changeFrequency();
|
||||
changeGain();
|
||||
changeRatio();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void BassBoosterControls::changeFrequency()
|
||||
{
|
||||
const sample_t fac = engine::mixer()->processingSampleRate() / 44100.0f;
|
||||
|
||||
m_effect->m_bbFX.leftFX().setFrequency( m_freqModel.value() * fac );
|
||||
m_effect->m_bbFX.rightFX().setFrequency( m_freqModel.value() * fac );
|
||||
m_effect->changeFrequency();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void BassBoosterControls::changeGain()
|
||||
{
|
||||
m_effect->m_bbFX.leftFX().setGain( m_gainModel.value() );
|
||||
m_effect->m_bbFX.rightFX().setGain( m_gainModel.value() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void BassBoosterControls::changeRatio()
|
||||
{
|
||||
m_effect->m_bbFX.leftFX().setRatio( m_ratioModel.value() );
|
||||
m_effect->m_bbFX.rightFX().setRatio( m_ratioModel.value() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void BassBoosterControls::loadSettings( const QDomElement& _this )
|
||||
{
|
||||
m_freqModel.loadSettings( _this, "freq" );
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _BASSBOOSTER_CONTROLS_H
|
||||
#define _BASSBOOSTER_CONTROLS_H
|
||||
#ifndef BASSBOOSTER_CONTROLS_H
|
||||
#define BASSBOOSTER_CONTROLS_H
|
||||
|
||||
#include "EffectControls.h"
|
||||
#include "BassBoosterControlDialog.h"
|
||||
@@ -62,9 +62,6 @@ public:
|
||||
|
||||
private slots:
|
||||
void changeFrequency();
|
||||
void changeGain();
|
||||
void changeRatio();
|
||||
|
||||
|
||||
private:
|
||||
BassBoosterEffect* m_effect;
|
||||
@@ -73,7 +70,7 @@ private:
|
||||
FloatModel m_ratioModel;
|
||||
|
||||
friend class BassBoosterControlDialog;
|
||||
|
||||
friend class BassBoosterEffect;
|
||||
} ;
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user