Skip to content

Commit

Permalink
Merge pull request #1 from LMMS/master
Browse files Browse the repository at this point in the history
Rebase from original
  • Loading branch information
curlymorphic committed Dec 6, 2014
2 parents e660f47 + fd6e49c commit 10ca77b
Show file tree
Hide file tree
Showing 12 changed files with 149 additions and 481 deletions.
97 changes: 95 additions & 2 deletions include/BasicFilters.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,102 @@
#include "interpolation.h"
#include "MemoryManager.h"

//#include <iostream>
//#include <cstdlib>
template<ch_cnt_t CHANNELS> class BasicFilters;

template<ch_cnt_t CHANNELS>
class LinkwitzRiley
{
MM_OPERATORS
public:
LinkwitzRiley( float sampleRate )
{
m_sampleRate = sampleRate;
clearHistory();
}
virtual ~LinkwitzRiley() {}

inline void clearHistory()
{
for( int i = 0; i < CHANNELS; ++i )
{
m_z1[i] = m_z2[i] = m_z3[i] = m_z4[i] = 0.0f;
}
}

inline void setSampleRate( float sampleRate )
{
m_sampleRate = sampleRate;
}

inline void setCoeffs( float freq )
{
// wc
const float wc = F_2PI * freq;
const float wc2 = wc * wc;
const float wc3 = wc2 * wc;
m_wc4 = wc2 * wc2;

// k
const float k = wc / tanf( F_PI * freq / m_sampleRate );
const float k2 = k * k;
const float k3 = k2 * k;
m_k4 = k2 * k2;

// a
static const float sqrt2 = sqrtf( 2.0f );
const float sq_tmp1 = sqrt2 * wc3 * k;
const float sq_tmp2 = sqrt2 * wc * k3;
m_a = 4.0f * wc2 * k2 + 2.0f * sq_tmp1 + m_k4 + 2.0f * sq_tmp2 + m_wc4;

// b
m_b1 = ( 4.0f * ( m_wc4 + sq_tmp1 - m_k4 - sq_tmp2 ) ) / m_a;
m_b2 = ( 6.0f * m_wc4 - 8.0f * wc2 * k2 + 6.0f * m_k4 ) / m_a;
m_b3 = ( 4.0f * ( m_wc4 - sq_tmp1 + sq_tmp2 - m_k4 ) ) / m_a;
m_b4 = ( m_k4 - 2.0f * sq_tmp1 + m_wc4 - 2.0f * sq_tmp2 + 4.0f * wc2 * k2 ) / m_a;
}

inline void setLowpass( float freq )
{
setCoeffs( freq );
m_a0 = m_wc4 / m_a;
m_a1 = 4.0f * m_a0;
m_a2 = 6.0f * m_a0;
}

inline void setHighpass( float freq )
{
setCoeffs( freq );
m_a0 = m_k4 / m_a;
m_a1 = 4.0f * m_a0;
m_a2 = 6.0f * m_a0;
}

inline float update( float in, ch_cnt_t ch )
{
const float a0in = m_a0 * in;
const float a1in = m_a1 * in;
const float out = m_z1[ch] + a0in;

m_z1[ch] = a1in + m_z2[ch] - ( m_b1 * out );
m_z2[ch] = ( m_a2 * in ) + m_z3[ch] - ( m_b2 * out );
m_z3[ch] = a1in + m_z4[ch] - ( m_b3 * out );
m_z4[ch] = a0in - ( m_b4 * out );

return out;
}

private:
float m_sampleRate;
float m_wc4;
float m_k4;
float m_a, m_a0, m_a1, m_a2;
float m_b1, m_b2, m_b3, m_b4;

typedef float frame[CHANNELS];
frame m_z1, m_z2, m_z3, m_z4;
};
typedef LinkwitzRiley<2> StereoLinkwitzRiley;

template<ch_cnt_t CHANNELS>
class BiQuad
{
Expand Down
5 changes: 0 additions & 5 deletions include/LmmsStyle.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,6 @@ class LmmsStyle : public QProxyStyle

virtual QPalette standardPalette( void ) const;

// virtual void drawControl( ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget ) const;

virtual void drawComplexControl(
ComplexControl control,
const QStyleOptionComplex * option,
Expand All @@ -85,9 +83,6 @@ class LmmsStyle : public QProxyStyle
const QStyleOption * option = 0,
const QWidget * widget = 0 ) const;

// QSize sizeFromContents( ContentsType type, const QStyleOption* option, const QSize& size, const QWidget* widget ) const;
// QRect subControlRect( ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget ) const;

static QPalette * s_palette;

private:
Expand Down
1 change: 1 addition & 0 deletions include/MainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ public slots:
void finalize();

void toggleWindow( QWidget *window, bool forceShow = false );
void refocus();


QMdiArea * m_workspace;
Expand Down
2 changes: 1 addition & 1 deletion plugins/MultitapEcho/MultitapEcho.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ MultitapEchoEffect::MultitapEchoEffect( Model* parent, const Descriptor::SubPlug
Effect( &multitapecho_plugin_descriptor, parent, key ),
m_stages( 1 ),
m_controls( this ),
m_buffer( 20100.0f ),
m_buffer( 16100.0f ),
m_sampleRate( Engine::mixer()->processingSampleRate() ),
m_sampleRatio( 1.0f / m_sampleRate )
{
Expand Down
2 changes: 1 addition & 1 deletion plugins/MultitapEcho/MultitapEchoControls.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ MultitapEchoControls::MultitapEchoControls( MultitapEchoEffect * eff ) :
EffectControls( eff ),
m_effect( eff ),
m_steps( 16, 4, 32, this, "Steps" ),
m_stepLength( 100.0f, 1.0f, 1000.0f, 0.1f, 1000.0f, this, "Step length" ),
m_stepLength( 100.0f, 1.0f, 500.0f, 0.1f, 500.0f, this, "Step length" ),
m_dryGain( 0.0f, -80.0f, 20.0f, 0.1f, this, "Dry gain" ),
m_swapInputs( false, this, "Swap inputs" ),
m_stages( 1.0f, 1.0f, 4.0f, 1.0f, this, "Lowpass stages" ),
Expand Down
4 changes: 2 additions & 2 deletions src/core/RingBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ RingBuffer::RingBuffer( float size ) :

RingBuffer::~RingBuffer()
{
delete m_buffer;
delete[] m_buffer;
}


Expand Down Expand Up @@ -308,7 +308,7 @@ void RingBuffer::updateSamplerate()
float newsize = static_cast<float>( ( m_size - m_fpp ) * Engine::mixer()->processingSampleRate() ) / m_samplerate;
m_size = static_cast<f_cnt_t>( ceilf( newsize ) ) + m_fpp;
m_samplerate = Engine::mixer()->processingSampleRate();
delete m_buffer;
delete[] m_buffer;
m_buffer = new sampleFrame[ m_size ];
memset( m_buffer, 0, m_size * sizeof( sampleFrame ) );
m_position = 0;
Expand Down
12 changes: 3 additions & 9 deletions src/core/SampleBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,9 @@ SampleBuffer::SampleBuffer( const f_cnt_t _frames ) :

SampleBuffer::~SampleBuffer()
{
MM_FREE( m_origData );
if( m_origData != NULL )
MM_FREE( m_origData );

MM_FREE( m_data );
}

Expand Down Expand Up @@ -1477,11 +1479,3 @@ SampleBuffer::handleState::~handleState()
{
src_delete( m_resamplingData );
}







/* vim: set tw=0 noexpandtab: */
3 changes: 0 additions & 3 deletions src/core/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -542,6 +542,3 @@ int main( int argc, char * * argv )

return( ret );
}


/* vim: set tw=0 noexpandtab: */
7 changes: 0 additions & 7 deletions src/gui/ExportProjectDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -340,10 +340,3 @@ void ExportProjectDialog::updateTitleBar( int _prog )
Engine::mainWindow()->setWindowTitle(
tr( "Rendering: %1%" ).arg( _prog ) );
}






/* vim: set tw=0 noexpandtab: */
Loading

0 comments on commit 10ca77b

Please sign in to comment.