From 269261e30015af913e62713d57a9a91f17460647 Mon Sep 17 00:00:00 2001 From: Andreas Brandmaier Date: Sun, 19 Feb 2006 15:21:12 +0000 Subject: [PATCH] added waveshape knob reorganized presets git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@87 0778d3d1-df1d-0410-868b-ea421aaaa00d --- plugins/organic/artwork.png | Bin 11387 -> 12010 bytes plugins/organic/organic.cpp | 90 +++++++++++++++++++++++++++++++----- plugins/organic/organic.h | 12 +++++ 3 files changed, 91 insertions(+), 11 deletions(-) diff --git a/plugins/organic/artwork.png b/plugins/organic/artwork.png index 9904d669edf20088189cfbdb904d3c77fc3327f1..f80e17e15d4e6f00366ce5e1c84936ea028c1431 100644 GIT binary patch literal 12010 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 Za!x&cOyrh|I)V=PD5LbgQpz~+e*id0>L>sJ delta 10995 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 25+i*20, 90 ); + m_osc[i].oscKnob->setRange( 0.0f, 5.0f, 0.25f ); + m_osc[i].oscKnob->setValue( 0.0f, TRUE ); + m_osc[i].oscKnob->setHintText( tr( "Osc %1 waveform:" ).arg( + i+1 ) + " ", "%" ); + + connect( m_osc[i].oscKnob, SIGNAL( valueChanged( float ) ), + this, SLOT (oscButtonChanged( void ) ) + ); + // setup volume-knob m_osc[i].volKnob = new knob( knobGreen_17, this, tr( "Osc %1 volume" ).arg( i+1 ), eng() ); - m_osc[i].volKnob->move( 25+i*20, 90 ); + m_osc[i].volKnob->move( 25+i*20, 110 ); m_osc[i].volKnob->setRange( 0, 100, 1.0f ); m_osc[i].volKnob->setValue( 100, TRUE ); m_osc[i].volKnob->setHintText( tr( "Osc %1 volume:" ).arg( @@ -127,7 +140,7 @@ organicInstrument::organicInstrument( channelTrack * _channel_track ) : // setup panning-knob m_osc[i].panKnob = new knob( knobGreen_17, this, tr( "Osc %1 panning" ).arg( i + 1 ), eng() ); - m_osc[i].panKnob->move( 25+i*20, 110 ); + m_osc[i].panKnob->move( 25+i*20, 130 ); m_osc[i].panKnob->setRange( PANNING_LEFT, PANNING_RIGHT, 1.0f ); m_osc[i].panKnob->setValue( DEFAULT_PANNING, TRUE ); m_osc[i].panKnob->setHintText( tr("Osc %1 panning:").arg( i+1 ) @@ -137,7 +150,7 @@ organicInstrument::organicInstrument( channelTrack * _channel_track ) : m_osc[i].detuneKnob = new knob( knobGreen_17, this, tr( "Osc %1 fine detuning left" ).arg( i+1 ), eng() ); - m_osc[i].detuneKnob->move( 25+i*20, 130 ); + m_osc[i].detuneKnob->move( 25+i*20, 150 ); m_osc[i].detuneKnob->setRange( -100.0f, 100.0f, 1.0f ); m_osc[i].detuneKnob->setValue( 0.0f, TRUE ); m_osc[i].detuneKnob->setHintText( tr( "Osc %1 fine detuning " @@ -153,14 +166,14 @@ organicInstrument::organicInstrument( channelTrack * _channel_track ) : fx1Knob = new knob( knobGreen_17, this, tr( "FX1" ), eng() ); - fx1Knob->move( 20, 160 ); + fx1Knob->move( 20, 200 ); fx1Knob->setRange( 0.0f, 0.99f, 0.01f ); fx1Knob->setValue( 0.0f, TRUE ); // setup volume-knob volKnob = new knob( knobGreen_17, this, tr( "Osc %1 volume" ).arg( 1 ), eng() ); - volKnob->move( 50, 160 ); + volKnob->move( 50, 200 ); volKnob->setRange( 0, 200, 1.0f ); volKnob->setValue( 100, TRUE ); volKnob->setHintText( tr( "Osc %1 volume:" ).arg( @@ -253,13 +266,16 @@ void organicInstrument::loadSettings( const QDomElement & _this ) toFloat() ); m_osc[i].panKnob->setValue( _this.attribute( "pan" + is ). toFloat() ); - // m_osc[i].waveShape = _this.attribute( "wavetype"+is ).toInt(); + m_osc[i].oscKnob->setValue( _this.attribute( "wavetype"+is ). + toInt() ); } volKnob->setValue( _this.attribute( "vol" ). toFloat() ); fx1Knob->setValue( _this.attribute( "foldback" ). - toFloat() ); + toFloat() ); + + oscButtonChanged(); } @@ -376,12 +392,12 @@ void organicInstrument::playNote( notePlayHandle * _n ) // -- fx section -- // fxKnob is [0;1] - float t = fx1Knob->value() * 5.0f;t++; + float t = fx1Knob->value(); for (int i=0 ; i < frames ; i++) { - buf[i][0] = distort( buf[i][0], t ) * volKnob->value() / 100.0; - buf[i][1] = distort( buf[i][1], t ) * volKnob->value() / 100.0; + buf[i][0] = waveshape( buf[i][0], t ) * volKnob->value() / 100.0; + buf[i][1] = waveshape( buf[i][1], t ) * volKnob->value() / 100.0; } // -- -- @@ -440,6 +456,50 @@ float organicInstrument::saturate(float x, float t) } } +float organicInstrument::waveshape(float in, float amount) +{ + float k = 2.0f*amount/(1.0f-amount); + + return (1.0f + k) * + in / (1.0f + k * fabs( in )); +} + +void organicInstrument::oscButtonChanged( ) +{ + + for (int i = 0; i < m_num_oscillators; i++) + { + float value = m_osc[i].oscKnob->value(); + + if ( value <= 0.5 ) { + m_osc[i].waveShape = oscillator::SIN_WAVE; + continue; + } + + if ( value <= 1.5 ) { + m_osc[i].waveShape = oscillator::SAW_WAVE; + continue; + } + + if ( value <= 2.5 ) { + m_osc[i].waveShape = oscillator::SQUARE_WAVE; + continue; + } + + if ( value <= 3.5 ) { + m_osc[i].waveShape = oscillator::TRIANGLE_WAVE; + continue; + } + + if ( value <= 4.5 ) { + m_osc[i].waveShape = oscillator::MOOG_SAW_WAVE; + continue; + } + + m_osc[i].waveShape = oscillator::EXP_WAVE; + + } +} extern "C" @@ -454,4 +514,12 @@ plugin * lmms_plugin_main( void * _data ) } +/* + * some notes & ideas for the future of this plugin: + * + * - 32.692 Hz in the bass to 5919.85 Hz of treble in a Hammond organ + * => implement harmonic foldback + * + * - randomize preset + */ diff --git a/plugins/organic/organic.h b/plugins/organic/organic.h index aee1142a6..15cf2c18c 100644 --- a/plugins/organic/organic.h +++ b/plugins/organic/organic.h @@ -67,11 +67,22 @@ public: virtual QString nodeName( void ) const; +public slots: + + void oscButtonChanged( void ); + private: float foldback(float in, float threshold); float saturate(float x, float t); float distort(float in, float dist); + float waveshape(float in, float amount); + + // fast atan, fast rather than accurate + inline float fastatan( float x ) + { + return (x / (1.0 + 0.28 * (x * x))); + } static QPixmap * s_artwork; @@ -80,6 +91,7 @@ private: struct oscillatorData { oscillator::waveShapes waveShape; + knob * oscKnob; knob * volKnob; knob * panKnob; knob * detuneKnob;