Add hold knob

This commit is contained in:
Vesa
2014-03-23 14:13:53 +02:00
parent ea8744b2ce
commit e58e55660a
3 changed files with 35 additions and 10 deletions

View File

@@ -412,8 +412,9 @@ void WTSynthInstrument::playNote( NotePlayHandle * _n,
// envelope parameters
const float envAmt = m_envAmt.value();
const float envAtt = ( m_envAtt.value() * w->samplerate() ) / 1000.0f;
const float envHold = ( m_envHold.value() * w->samplerate() ) / 1000.0f;
const float envDec = ( m_envDec.value() * w->samplerate() ) / 1000.0f;
const float envLen = envAtt + envDec;
const float envLen = envAtt + envDec + envHold;
const float tfp_ = static_cast<float>( _n->totalFramesPlayed() );
// if sample-exact is enabled, use sample-exact calculations...
@@ -430,9 +431,13 @@ void WTSynthInstrument::playNote( NotePlayHandle * _n,
{
mixvalue = qBound( -100.0f, mixvalue + ( tfp / envAtt * envAmt ), 100.0f );
}
else if ( tfp >= envAtt && tfp < envAtt + envHold )
{
mixvalue = qBound( -100.0f, mixvalue + envAmt, 100.0f );
}
else
{
mixvalue = qBound( -100.0f, mixvalue + envAmt - ( ( tfp - envAtt ) / envDec * envAmt ), 100.0f );
mixvalue = qBound( -100.0f, mixvalue + envAmt - ( ( tfp - ( envAtt + envHold ) ) / envDec * envAmt ), 100.0f );
}
}
// get knob values in sample-exact way
@@ -461,9 +466,13 @@ void WTSynthInstrument::playNote( NotePlayHandle * _n,
{
mixvalue = qBound( -100.0f, mixvalue + ( tfp / envAtt * envAmt ), 100.0f );
}
else if ( tfp >= envAtt && tfp < envAtt + envHold )
{
mixvalue = qBound( -100.0f, mixvalue + envAmt, 100.0f );
}
else
{
mixvalue = qBound( -100.0f, mixvalue + envAmt - ( ( tfp - envAtt ) / envDec * envAmt ), 100.0f );
mixvalue = qBound( -100.0f, mixvalue + envAmt - ( ( tfp - ( envAtt + envHold ) ) / envDec * envAmt ), 100.0f );
}
// get knob values
@@ -549,6 +558,7 @@ void WTSynthInstrument::saveSettings( QDomDocument & _doc,
m_abmix.saveSettings( _doc, _this, "abmix" );
m_envAmt.saveSettings( _doc, _this, "envAmt" );
m_envAtt.saveSettings( _doc, _this, "envAtt" );
m_envHold.saveSettings( _doc, _this, "envHold" );
m_envDec.saveSettings( _doc, _this, "envDec" );
m_amod.saveSettings( _doc, _this, "amod" );
@@ -603,6 +613,7 @@ void WTSynthInstrument::loadSettings( const QDomElement & _this )
m_envAmt.loadSettings( _this, "envAmt" );
m_envAtt.loadSettings( _this, "envAtt" );
m_envHold.loadSettings( _this, "envHold" );
m_envDec.loadSettings( _this, "envDec" );
m_amod.loadSettings( _this, "amod" );
@@ -677,8 +688,10 @@ WTSynthView::WTSynthView( Instrument * _instrument,
makeknob( m_abmixKnob, 4, 3, "A-B Mix", "", "mixKnob" )
makeknob( m_envAmtKnob, 88, 3, "Mix envelope amount", "", "mixenvKnob" )
makeknob( m_envAttKnob, 88, A1ROW, "Mix envelope attack", " ms", "mixenvKnob" )
makeknob( m_envDecKnob, 88, A2ROW, "Mix envelope decay", " ms", "mixenvKnob" )
maketsknob( m_envAttKnob, 88, A1ROW, "Mix envelope attack", " ms", "mixenvKnob" )
maketsknob( m_envHoldKnob, 88, A2ROW, "Mix envelope hold", " ms", "mixenvKnob" )
maketsknob( m_envDecKnob, 88, B1ROW, "Mix envelope decay", " ms", "mixenvKnob" )
// let's set volume knobs
a1_volKnob -> setVolumeKnob( true );
@@ -1199,6 +1212,7 @@ void WTSynthView::modelChanged()
m_envAmtKnob -> setModel( &w -> m_envAmt );
m_envAttKnob -> setModel( &w -> m_envAtt );
m_envHoldKnob -> setModel( &w -> m_envHold );
m_envDecKnob -> setModel( &w -> m_envDec );
}

View File

@@ -37,7 +37,14 @@
#define makeknob( name, x, y, hint, unit, oname ) \
name = new knob( knobStyled, this); \
name = new knob( knobStyled, this ); \
name ->move( x, y ); \
name ->setHintText( tr( hint ) + " ", unit ); \
name ->setObjectName( oname ); \
name ->setFixedSize( 19, 19 );
#define maketsknob( name, x, y, hint, unit, oname ) \
name = new TempoSyncKnob( knobStyled, this ); \
name ->move( x, y ); \
name ->setHintText( tr( hint ) + " ", unit ); \
name ->setObjectName( oname ); \
@@ -198,8 +205,10 @@ private:
FloatModel m_abmix;
FloatModel m_envAmt;
FloatModel m_envAtt;
FloatModel m_envDec;
TempoSyncKnobModel m_envAtt;
TempoSyncKnobModel m_envHold;
TempoSyncKnobModel m_envDec;
IntModel m_amod;
IntModel m_bmod;
@@ -268,8 +277,10 @@ private:
knob * m_abmixKnob;
knob * m_envAmtKnob;
knob * m_envAttKnob;
knob * m_envDecKnob;
TempoSyncKnob * m_envAttKnob;
TempoSyncKnob * m_envHoldKnob;
TempoSyncKnob * m_envDecKnob;
automatableButtonGroup * m_selectedGraphGroup;
automatableButtonGroup * m_aModGroup;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 93 KiB