From f94614cd778e5eace6d0793054bdecc9a8bddc6a Mon Sep 17 00:00:00 2001 From: Javier Serrano Polo Date: Wed, 25 Apr 2007 20:48:18 +0000 Subject: [PATCH] simplified filtering, VST fixes git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@478 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 18 ++++ configure.in | 4 +- data/locale/ca.qm | Bin 110512 -> 110296 bytes data/locale/ca.ts | 12 +-- include/basic_filters.h | 138 +++++++++++++----------------- plugins/flp_import/flp_import.cpp | 6 +- plugins/vestige/vestige.cpp | 4 +- plugins/vst_base/lvsl_client.cpp | 11 +++ plugins/vst_base/lvsl_client.h | 1 + plugins/vst_base/lvsl_server.c | 3 +- src/core/envelope_tab_widget.cpp | 3 +- 11 files changed, 108 insertions(+), 92 deletions(-) diff --git a/ChangeLog b/ChangeLog index bb19360fb..b2ce08d05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2007-04-25 Javier Serrano Polo + + * include/basic_filters.h: + * plugins/flp_import/flp_import.cpp: + * src/core/envelope_tab_widget.cpp: + simplified filtering + + * plugins/vst_base/lvsl_server.c: + clear output buffers before processing + + * plugins/vestige/vestige.cpp: + * plugins/vst_base/lvsl_client.cpp: + * plugins/vst_base/lvsl_client.h: + fixed sample rate change + + * data/locale/ca.ts: + updated translation + 2007-04-24 Javier Serrano Polo * include/buffer_allocator.h: diff --git a/configure.in b/configure.in index 967515220..20ba08801 100644 --- a/configure.in +++ b/configure.in @@ -2,8 +2,8 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.50) -AC_INIT(lmms, 0.2.1-svn20070424, lmms-devel/at/lists/dot/sf/dot/net) -AM_INIT_AUTOMAKE(lmms, 0.2.1-svn20070424) +AC_INIT(lmms, 0.2.1-svn20070425, lmms-devel/at/lists/dot/sf/dot/net) +AM_INIT_AUTOMAKE(lmms, 0.2.1-svn20070425) AM_CONFIG_HEADER(config.h) diff --git a/data/locale/ca.qm b/data/locale/ca.qm index d1aee03954c8df1085443cf43bb231f5d4a62614..fdc616c85e741aa87f355eeeea1a79f013ba6f65 100644 GIT binary patch delta 5650 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 delta 5764 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 diff --git a/data/locale/ca.ts b/data/locale/ca.ts index 3beea0a7d..b35e49709 100644 --- a/data/locale/ca.ts +++ b/data/locale/ca.ts @@ -4236,11 +4236,11 @@ clic dret = apaga totes les altres pistes (solo) use frequency modulation for modulating oscillator 2 with oscillator 1 - usa modulació de freqüència per a modular l'oscil·lador 2 amb l'oscil·lador 1 + modula la freqüència de l'oscil·lador 1 amb l'oscil·lador 2 use amplitude modulation for modulating oscillator 2 with oscillator 1 - usa modulació d'amplitud per a modular l'oscil·lador 2 amb l'oscil·lador 1 + modula l'amplitud de l'oscil·lador 1 amb l'oscil·lador 2 mix output of oscillator 1 & 2 @@ -4252,11 +4252,11 @@ clic dret = apaga totes les altres pistes (solo) use frequency modulation for modulating oscillator 3 with oscillator 2 - usa modulació de freqüència per a modular l'oscil·lador 3 amb l'oscil·lador 2 + modula la freqüència de l'oscil·lador 2 amb l'oscil·lador 3 use amplitude modulation for modulating oscillator 3 with oscillator 2 - usa modulació d'amplitud per a modular l'oscil·lador 3 amb l'oscil·lador 2 + modula l'amplitud de l'oscil·lador 2 amb l'oscil·lador 3 mix output of oscillator 2 & 3 @@ -4356,11 +4356,11 @@ clic dret = apaga totes les altres pistes (solo) use phase modulation for modulating oscillator 2 with oscillator 1 - usa modulació de fase per a modular l'oscil·lador 2 amb l'oscil·lador 1 + modula la fase de l'oscil·lador 1 amb l'oscil·lador 2 use phase modulation for modulating oscillator 3 with oscillator 2 - usa modulació de fase per a modular l'oscil·lador 3 amb l'oscil·lador 2 + modula la fase de l'oscil·lador 2 amb l'oscil·lador 3 Modulation type 1 diff --git a/include/basic_filters.h b/include/basic_filters.h index 53bca10b9..1f4856446 100644 --- a/include/basic_filters.h +++ b/include/basic_filters.h @@ -46,7 +46,6 @@ template class basicFilters { public: - enum filterTypes { LOWPASS, @@ -56,9 +55,7 @@ public: NOTCH, ALLPASS, MOOG, - SIMPLE_FLT_CNT, - DOUBLE_LOWPASS = 16+LOWPASS, - DOUBLE_MOOG = 16+MOOG + SIMPLE_FLT_CNT } ; static inline float minQ( void ) @@ -66,14 +63,23 @@ public: return( 0.01f ); } - static inline filterTypes getFilterType( const int _idx ) + inline void setFilterType( const int _idx ) { - if( _idx < SIMPLE_FLT_CNT ) + m_double_filter = _idx >= SIMPLE_FLT_CNT; + if( !m_double_filter ) { - return( static_cast( _idx ) ); + m_type = static_cast( _idx ); + return; } - return( static_cast( DOUBLE_LOWPASS + _idx - - SIMPLE_FLT_CNT ) ); + m_type = static_cast( LOWPASS + _idx - + SIMPLE_FLT_CNT ); + if( m_subFilter == NULL ) + { + m_subFilter = new basicFilters( + static_cast( + m_sampleRate ) ); + } + m_subFilter->m_type = m_type; } inline basicFilters( const sample_rate_t _sample_rate ) : @@ -82,6 +88,7 @@ public: m_b2a0( 0.0f ), m_a1a0( 0.0f ), m_a2a0( 0.0f ), + m_double_filter( FALSE ), m_sampleRate( _sample_rate ), m_subFilter( NULL ) { @@ -109,27 +116,26 @@ public: switch( m_type ) { case MOOG: - case DOUBLE_MOOG: { sample_t x = _in0 - m_r*m_y4[_chnl]; // four cascaded onepole filters // (bilinear transform) m_y1[_chnl] = tLimit( - x*m_p + m_oldx[_chnl]*m_p - - m_k*m_y1[_chnl], + ( x + m_oldx[_chnl] ) * m_p + - m_k * m_y1[_chnl], -10.0f, 10.0f ); m_y2[_chnl] = tLimit( - m_y1[_chnl]*m_p+m_oldy1[_chnl]* - m_p - m_k*m_y2[_chnl], + ( m_y1[_chnl] + m_oldy1[_chnl] ) * m_p + - m_k * m_y2[_chnl], -10.0f, 10.0f ); m_y3[_chnl] = tLimit( - m_y2[_chnl]*m_p+m_oldy2[_chnl]* - m_p - m_k*m_y3[_chnl], + ( m_y2[_chnl] + m_oldy2[_chnl] ) * m_p + - m_k * m_y3[_chnl], -10.0f, 10.0f ); m_y4[_chnl] = tLimit( - m_y3[_chnl]*m_p+m_oldy3[_chnl]* - m_p - m_k*m_y4[_chnl], + ( m_y3[_chnl] + m_oldy3[_chnl] ) * m_p + - m_k * m_y4[_chnl], -10.0f, 10.0f ); m_oldx[_chnl] = x; @@ -222,7 +228,7 @@ public: break; } - if( m_subFilter != NULL ) + if( m_double_filter ) { return( m_subFilter->update( out, _chnl ) ); } @@ -232,12 +238,6 @@ public: } - void setType( const filterTypes _type ) - { - m_type = _type; - } - - inline void calcFilterCoeffs( float _freq, float _q /*, const bool _q_is_bandwidth = FALSE*/ ) { @@ -246,30 +246,22 @@ public: // bad noise out of the filter... _q = tMax( _q, minQ() ); - switch( m_type ) + if( m_type == MOOG ) { - case DOUBLE_MOOG: - { - if( m_subFilter == NULL ) - { - m_subFilter = - new basicFilters( - static_cast( m_sampleRate ) ); - m_subFilter->setType( MOOG ); - } - m_subFilter->calcFilterCoeffs( _freq, _q ); - } + // [ 0 - 0.5 ] + const float f = _freq / m_sampleRate; + // (Empirical tunning) + m_p = ( 3.6f - 3.2f * f ) * f; + m_k = 2.0f * m_p - 1; + m_r = _q * powf( M_E, ( 1 - m_p ) * 1.386249f ); - case MOOG: + if( m_double_filter ) { - // [ 0 - 1 ] - const float f = 2 * _freq / m_sampleRate; - // (Empirical tunning) - m_k = 3.6f * f - 1.6f * f * f - 1; - m_p = ( m_k + 1 ) * 0.5f; - m_r = _q * powf( M_E, ( 1 - m_p ) * 1.386249f ); - return; + m_subFilter->m_r = m_r; + m_subFilter->m_p = m_p; + m_subFilter->m_k = m_k; } + return; /* case DOUBLE_MOOG2: { @@ -297,9 +289,6 @@ public: m_r = 4 * _q * kacr; break; }*/ - - default: - break; } // other filters @@ -316,62 +305,53 @@ public: const float a0 = 1.0f / ( 1.0f + alpha ); + m_a1a0 = -2.0f * tcos * a0; + m_a2a0 = ( 1.0f - alpha ) * a0; + switch( m_type ) { case LOWPASS: - case DOUBLE_LOWPASS: - m_b0a0 = ( 1.0f - tcos ) * 0.5f * a0; m_b1a0 = ( 1.0f - tcos ) * a0; + m_b0a0 = m_b1a0 * 0.5f; m_b2a0 = m_b0a0;//((1.0f-tcos)/2.0f)*a0; - m_a1a0 = -2.0f * tcos * a0; - if( m_type == DOUBLE_LOWPASS ) - { - if( m_subFilter == NULL ) - { - m_subFilter = - new basicFilters( static_cast( - m_sampleRate ) ); - m_subFilter->setType( LOWPASS ); - } - m_subFilter->calcFilterCoeffs( _freq, - _q ); - } break; case HIPASS: - m_b0a0 = ( 1.0f + tcos ) * 0.5f * a0; m_b1a0 = ( -1.0f - tcos ) * a0; + m_b0a0 = m_b1a0 * -0.5f; m_b2a0 = m_b0a0;//((1.0f+tcos)/2.0f)*a0; - m_a1a0 = -2.0f * tcos * a0; break; case BANDPASS_CSG: - m_b0a0 = tsin * 0.5f * a0; m_b1a0 = 0.0f; - m_b2a0 = -tsin * 0.5f * a0; - m_a1a0 = -2.0f * tcos * a0; + m_b0a0 = tsin * 0.5f * a0; + m_b2a0 = -m_b0a0; break; case BANDPASS_CZPG: - m_b0a0 = alpha * a0; m_b1a0 = 0.0f; - m_b2a0 = -alpha * a0; - m_a1a0 = -2.0f * tcos * a0; + m_b0a0 = alpha * a0; + m_b2a0 = -m_b0a0; break; case NOTCH: + m_b1a0 = m_a1a0; m_b0a0 = a0; - m_b1a0 = -2.0f * tcos * a0; m_b2a0 = a0; - m_a1a0 = m_b1a0;//(-2.0f*tcos)*a0; break; case ALLPASS: - m_b0a0 = ( 1.0f - alpha ) * a0; - m_b1a0 = -2.0f * tcos * a0; + m_b1a0 = m_a1a0; + m_b0a0 = m_a2a0; m_b2a0 = 1.0f;//(1.0f+alpha)*a0; - m_a1a0 = m_b1a0;//(-2.0f*tcos)*a0; - //m_a2a0 = m_b0a0;//(1.0f-alpha)*a0; break; default: break; } - m_a2a0 = ( 1.0f - alpha ) * a0; + + if( m_double_filter ) + { + m_subFilter->m_b0a0 = m_b0a0; + m_subFilter->m_b1a0 = m_b1a0; + m_subFilter->m_b2a0 = m_b2a0; + m_subFilter->m_a1a0 = m_a1a0; + m_subFilter->m_a2a0 = m_a2a0; + } } @@ -391,9 +371,11 @@ private: frame m_y1, m_y2, m_y3, m_y4, m_oldx, m_oldy1, m_oldy2, m_oldy3; filterTypes m_type; + bool m_double_filter; float m_sampleRate; basicFilters * m_subFilter; + } ; diff --git a/plugins/flp_import/flp_import.cpp b/plugins/flp_import/flp_import.cpp index f0be546ea..b4791c59c 100644 --- a/plugins/flp_import/flp_import.cpp +++ b/plugins/flp_import/flp_import.cpp @@ -700,6 +700,8 @@ bool flpImport::tryImport( trackContainer * _tc ) case FLP_FilterParams: { + // TODO: Dirty hack! + // SIMPLE_FLT_CNT equals to old DOUBLE_LOWPASS const basicFilters<>::filterTypes mappedFilter[] = { @@ -708,9 +710,9 @@ bool flpImport::tryImport( trackContainer * _tc ) basicFilters<>::BANDPASS_CSG, basicFilters<>::HIPASS, basicFilters<>::NOTCH, - basicFilters<>::DOUBLE_LOWPASS, + basicFilters<>::SIMPLE_FLT_CNT, basicFilters<>::LOWPASS, - basicFilters<>::DOUBLE_LOWPASS + basicFilters<>::SIMPLE_FLT_CNT } ; Uint32 * p = (Uint32 *) text; envelopeTabWidget * etw = it->m_envWidget; diff --git a/plugins/vestige/vestige.cpp b/plugins/vestige/vestige.cpp index 7c107807d..964f78973 100644 --- a/plugins/vestige/vestige.cpp +++ b/plugins/vestige/vestige.cpp @@ -262,8 +262,10 @@ void vestigeInstrument::setParameter( const QString & _param, m_plugin->showEditor(); connect( engine::getSongEditor(), SIGNAL( tempoChanged( bpm_t ) ), - m_plugin, SLOT( setTempo( bpm_t ) ) ); + m_plugin, SLOT( setTempo( bpm_t ) ) ); m_plugin->setTempo( engine::getSongEditor()->getTempo() ); + connect( engine::getMixer(), SIGNAL( sampleRateChanged() ), + m_plugin, SLOT( updateSampleRate() ) ); if( set_ch_name == TRUE ) { getInstrumentTrack()->setName( m_plugin->name() ); diff --git a/plugins/vst_base/lvsl_client.cpp b/plugins/vst_base/lvsl_client.cpp index cbc91462a..68accffcb 100644 --- a/plugins/vst_base/lvsl_client.cpp +++ b/plugins/vst_base/lvsl_client.cpp @@ -453,6 +453,17 @@ void remoteVSTPlugin::setTempo( bpm_t _bpm ) +void remoteVSTPlugin::updateSampleRate( void ) +{ + lock(); + writeValueS( VST_SAMPLE_RATE ); + writeValueS( engine::getMixer()->sampleRate() ); + unlock(); +} + + + + const QMap & remoteVSTPlugin::parameterDump( void ) { writeValueS( VST_GET_PARAMETER_DUMP ); diff --git a/plugins/vst_base/lvsl_client.h b/plugins/vst_base/lvsl_client.h index d3bda2581..d3c0f8f97 100644 --- a/plugins/vst_base/lvsl_client.h +++ b/plugins/vst_base/lvsl_client.h @@ -127,6 +127,7 @@ public: public slots: void setTempo( bpm_t _bpm ); + void updateSampleRate( void ); private: diff --git a/plugins/vst_base/lvsl_server.c b/plugins/vst_base/lvsl_server.c index 5693ce78d..ed0a9f587 100644 --- a/plugins/vst_base/lvsl_server.c +++ b/plugins/vst_base/lvsl_server.c @@ -1,7 +1,7 @@ /* * lvsl_server.cpp - LMMS VST Support Layer Server * - * Copyright (c) 2005-2006 Tobias Doerffel + * Copyright (c) 2005-2007 Tobias Doerffel * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * @@ -466,6 +466,7 @@ void VSTPlugin::process( void ) for( ch_cnt_t i = 0; i < outputCount(); ++i ) { m_outputs[i] = &m_shm[( i + inputCount() ) * m_blockSize]; + memset( m_outputs[i], 0, m_blockSize * sizeof( float ) ); } #ifdef OLD_VST_SDK diff --git a/src/core/envelope_tab_widget.cpp b/src/core/envelope_tab_widget.cpp index 63afa3e1e..72051d119 100644 --- a/src/core/envelope_tab_widget.cpp +++ b/src/core/envelope_tab_widget.cpp @@ -280,8 +280,7 @@ void envelopeTabWidget::processAudioBuffer( sampleFrame * _ab, _n->m_filter = new basicFilters<>( engine::getMixer()->sampleRate() ); } - _n->m_filter->setType( basicFilters<>::getFilterType( - m_filterComboBox->value() ) ); + _n->m_filter->setFilterType( m_filterComboBox->value() ); float * cut_buf = NULL; float * res_buf = NULL;