Add more filters!

This commit is contained in:
Vesa
2014-10-22 16:17:28 +03:00
parent eb86428f10
commit e9ab240558
3 changed files with 41 additions and 9 deletions

View File

@@ -68,7 +68,10 @@ public:
Bandpass_RC24,
Highpass_RC24,
Formantfilter,
DoubleMoog,
Lowpass_SV,
Bandpass_SV,
Highpass_SV,
NumFilters
} ;
@@ -84,7 +87,7 @@ public:
inline void setFilterType( const int _idx )
{
m_doubleFilter = _idx == DoubleLowPass;
m_doubleFilter = _idx == DoubleLowPass || _idx == DoubleMoog;
if( !m_doubleFilter )
{
m_type = static_cast<FilterTypes>( _idx );
@@ -93,7 +96,9 @@ public:
// Double lowpass mode, backwards-compat for the goofy
// Add-NumFilters to signify doubleFilter stuff
m_type = static_cast<FilterTypes>( LowPass );
m_type = _idx == DoubleLowPass
? LowPass
: Moog;
if( m_subFilter == NULL )
{
m_subFilter = new basicFilters<CHANNELS>(
@@ -150,7 +155,7 @@ public:
for(int i=0; i<6; i++)
m_vfbp[i][_chnl] = m_vfhp[i][_chnl] = m_vflast[i][_chnl] = 0.0f;
// reset in/out history for Lowpass_SV
// reset in/out history for SV-filters
m_delay1[_chnl] = 0.0f;
m_delay2[_chnl] = 0.0f;
m_delay3[_chnl] = 0.0f;
@@ -200,6 +205,7 @@ public:
// /* Hal Chamberlin's state variable filter */
case Lowpass_SV:
case Bandpass_SV:
{
m_sva[_chnl] += ( qAbs( _in0 ) - m_sva[_chnl] ) * m_svsr;
@@ -212,7 +218,21 @@ public:
m_delay3[_chnl] = m_svf2 * highpass + m_delay3[_chnl];
/* mix filter output into output buffer */
out = atanf( 3.0f * m_delay4[_chnl] * m_sva[_chnl] );
out = m_type == Lowpass_SV
? atanf( 3.0f * m_delay4[_chnl] * m_sva[_chnl] )
: atanf( 3.0f * m_delay3[_chnl] * m_sva[_chnl] );
break;
}
case Highpass_SV:
{
m_sva[_chnl] += ( qAbs( _in0 ) - m_sva[_chnl] ) * m_svsr;
m_delay2[_chnl] = m_delay2[_chnl] + m_svf1 * m_delay1[_chnl];
float hp = _in0 - m_delay2[_chnl] - m_svq * m_delay1[_chnl];
m_delay1[_chnl] = m_svf1 * hp + m_delay1[_chnl];
out = atanf( 3.0f * hp * m_sva[_chnl] );
break;
}
@@ -541,7 +561,8 @@ public:
return;
}
if( m_type == Moog )
if( m_type == Moog ||
m_type == DoubleMoog )
{
_freq = qBound( minFreq(), _freq, 20000.0f );
@@ -561,7 +582,9 @@ public:
return;
}
if( m_type == Lowpass_SV )
if( m_type == Lowpass_SV ||
m_type == Bandpass_SV ||
m_type == Highpass_SV )
{
const float f = qMax( minFreq(), _freq ) * m_sampleRatio;
m_svf1 = qMin( f * 2.0f, 0.825f );

View File

@@ -74,7 +74,10 @@ DualFilterControls::DualFilterControls( DualFilterEffect* effect ) :
m_filter1Model.addItem( tr( "RC BandPass 24dB" ), new PixmapLoader( "filter_bp" ) );
m_filter1Model.addItem( tr( "RC HighPass 24dB" ), new PixmapLoader( "filter_hp" ) );
m_filter1Model.addItem( tr( "Vocal Formant Filter" ), new PixmapLoader( "filter_hp" ) );
m_filter1Model.addItem( tr( "SV Lowpass" ), new PixmapLoader( "filter_lp" ) );
m_filter1Model.addItem( tr( "2x Moog" ), new PixmapLoader( "filter_2lp" ) );
m_filter1Model.addItem( tr( "SV LowPass" ), new PixmapLoader( "filter_lp" ) );
m_filter1Model.addItem( tr( "SV BandPass" ), new PixmapLoader( "filter_bp" ) );
m_filter1Model.addItem( tr( "SV HighPass" ), new PixmapLoader( "filter_hp" ) );
m_filter2Model.addItem( tr( "LowPass" ), new PixmapLoader( "filter_lp" ) );
m_filter2Model.addItem( tr( "HiPass" ), new PixmapLoader( "filter_hp" ) );
@@ -91,7 +94,10 @@ DualFilterControls::DualFilterControls( DualFilterEffect* effect ) :
m_filter2Model.addItem( tr( "RC BandPass 24dB" ), new PixmapLoader( "filter_bp" ) );
m_filter2Model.addItem( tr( "RC HighPass 24dB" ), new PixmapLoader( "filter_hp" ) );
m_filter2Model.addItem( tr( "Vocal Formant Filter" ), new PixmapLoader( "filter_hp" ) );
m_filter2Model.addItem( tr( "SV Lowpass" ), new PixmapLoader( "filter_lp" ) );
m_filter2Model.addItem( tr( "2x Moog" ), new PixmapLoader( "filter_2lp" ) );
m_filter2Model.addItem( tr( "SV LowPass" ), new PixmapLoader( "filter_lp" ) );
m_filter2Model.addItem( tr( "SV BandPass" ), new PixmapLoader( "filter_bp" ) );
m_filter2Model.addItem( tr( "SV HighPass" ), new PixmapLoader( "filter_hp" ) );
connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateFilters() ) );
}

View File

@@ -94,7 +94,10 @@ InstrumentSoundShaping::InstrumentSoundShaping(
m_filterModel.addItem( tr( "RC BandPass 24dB" ), new PixmapLoader( "filter_bp" ) );
m_filterModel.addItem( tr( "RC HighPass 24dB" ), new PixmapLoader( "filter_hp" ) );
m_filterModel.addItem( tr( "Vocal Formant Filter" ), new PixmapLoader( "filter_hp" ) );
m_filterModel.addItem( tr( "SV LowPass" ), new PixmapLoader( "filter_lp" ) );
m_filterModel.addItem( tr( "2x Moog" ), new PixmapLoader( "filter_2lp" ) );
m_filterModel.addItem( tr( "SV LowPass" ), new PixmapLoader( "filter_lp" ) );
m_filterModel.addItem( tr( "SV BandPass" ), new PixmapLoader( "filter_bp" ) );
m_filterModel.addItem( tr( "SV HighPass" ), new PixmapLoader( "filter_hp" ) );
}