added automation to many knobs

git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@173 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Javier Serrano Polo
2006-06-26 23:23:40 +00:00
parent ecf9d0e09c
commit 912eccce7b
8 changed files with 120 additions and 141 deletions

View File

@@ -169,7 +169,8 @@ audioFileProcessor::audioFileProcessor( instrumentTrack * _channel_track ) :
"This is useful for things like string- and choir-"
"samples." ) );
m_ampKnob = new volumeKnob( knobDark_28, this, tr( "Amplify" ), eng() );
m_ampKnob = new volumeKnob( knobDark_28, this, tr( "Amplify" ), eng(),
_channel_track );
m_ampKnob->setRange( 0, 500, 1.0f );
m_ampKnob->move( 6, 114 );
m_ampKnob->setInitValue( 100.0f );
@@ -188,7 +189,7 @@ audioFileProcessor::audioFileProcessor( instrumentTrack * _channel_track ) :
"actual sample-file isn't touched!)" ) );
m_startKnob = new knob( knobDark_28, this, tr( "Start of sample" ),
eng() );
eng(), _channel_track );
m_startKnob->setRange( 0.0f, 1.0f, 0.00001f );
m_startKnob->move( 46, 114 );
m_startKnob->setInitValue( 0.0f );
@@ -207,7 +208,8 @@ audioFileProcessor::audioFileProcessor( instrumentTrack * _channel_track ) :
"which AudioFileProcessor returns if a note is longer "
"than the sample between start- and end-point." ) );
m_endKnob = new knob( knobDark_28, this, tr( "End of sample" ), eng() );
m_endKnob = new knob( knobDark_28, this, tr( "End of sample" ), eng(),
_channel_track );
m_endKnob->setRange( 0.0f, 1.0f, 0.00001f );
m_endKnob->move( 84, 114 );
m_endKnob->setInitValue( 1.0f );
@@ -303,7 +305,7 @@ void audioFileProcessor::saveSettings( QDomDocument & _doc,
m_reverseButton->isChecked() ) );
_this.setAttribute( "looped", QString::number(
m_loopButton->isChecked() ) );
_this.setAttribute( "amp", QString::number( m_ampKnob->value() ) );
m_ampKnob->saveSettings( _doc, _this, "amp" );
}
@@ -323,7 +325,7 @@ void audioFileProcessor::loadSettings( const QDomElement & _this )
_this.attribute( "eframe" ).toFloat() );
m_reverseButton->setChecked( _this.attribute( "reversed" ).toInt() );
m_loopButton->setChecked( _this.attribute( "looped" ).toInt() );
m_ampKnob->setValue( _this.attribute( "amp" ).toFloat() );
m_ampKnob->loadSettings( _this, "amp" );
}

View File

@@ -188,7 +188,7 @@ bitInvader::bitInvader( instrumentTrack * _channel_track ) :
m_sampleLengthKnob = new knob( knobDark_28, this, tr( "Samplelength" ),
eng() );
eng(), _channel_track );
m_sampleLengthKnob->setRange( 8, 128, 1 );
m_sampleLengthKnob->setInitValue( 128 );
m_sampleLengthKnob->move( 10, 120 );

View File

@@ -121,7 +121,8 @@ organicInstrument::organicInstrument( instrumentTrack * _channel_track ) :
// setup volume-knob
m_osc[i].oscKnob = new knob( knobGreen_17, this, tr(
"Osc %1 waveform" ).arg( i+1 ), eng() );
"Osc %1 waveform" ).arg( i+1 ), eng(),
_channel_track );
m_osc[i].oscKnob->move( 25+i*20, 90 );
m_osc[i].oscKnob->setRange( 0.0f, 5.0f, 0.25f );
m_osc[i].oscKnob->setInitValue( 0.0f );
@@ -134,7 +135,8 @@ organicInstrument::organicInstrument( instrumentTrack * _channel_track ) :
// setup volume-knob
m_osc[i].volKnob = new volumeKnob( knobGreen_17, this, tr(
"Osc %1 volume" ).arg( i+1 ), eng() );
"Osc %1 volume" ).arg( i+1 ), eng(),
_channel_track );
m_osc[i].volKnob->setData( i );
m_osc[i].volKnob->move( 25+i*20, 110 );
m_osc[i].volKnob->setRange( 0, 100, 1.0f );
@@ -144,7 +146,8 @@ organicInstrument::organicInstrument( instrumentTrack * _channel_track ) :
// setup panning-knob
m_osc[i].panKnob = new knob( knobGreen_17, this,
tr( "Osc %1 panning" ).arg( i + 1 ), eng() );
tr( "Osc %1 panning" ).arg( i + 1 ), eng(),
_channel_track );
m_osc[i].panKnob->setData( i );
m_osc[i].panKnob->move( 25+i*20, 130 );
m_osc[i].panKnob->setRange( PANNING_LEFT, PANNING_RIGHT, 1.0f );
@@ -155,7 +158,7 @@ organicInstrument::organicInstrument( instrumentTrack * _channel_track ) :
// setup knob for left fine-detuning
m_osc[i].detuneKnob = new knob( knobGreen_17, this,
tr( "Osc %1 fine detuning left" ).arg( i+1 ),
eng() );
eng(), _channel_track );
m_osc[i].detuneKnob->setData( i );
m_osc[i].detuneKnob->move( 25+i*20, 150 );
m_osc[i].detuneKnob->setRange( -100.0f, 100.0f, 1.0f );
@@ -185,14 +188,15 @@ organicInstrument::organicInstrument( instrumentTrack * _channel_track ) :
// setup knob for FX1
fx1Knob = new knob( knobGreen_17, this,
tr( "FX1" ), eng() );
tr( "FX1" ), eng(), _channel_track );
fx1Knob->move( 20, 200 );
fx1Knob->setRange( 0.0f, 0.99f, 0.01f );
fx1Knob->setInitValue( 0.0f);
// setup volume-knob
volKnob = new knob( knobGreen_17, this, tr(
"Osc %1 volume" ).arg( 1 ), eng() );
"Osc %1 volume" ).arg( 1 ), eng(),
_channel_track );
volKnob->move( 50, 200 );
volKnob->setRange( 0, 200, 1.0f );
volKnob->setInitValue( 100 );
@@ -244,20 +248,17 @@ organicInstrument::~organicInstrument()
void organicInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this )
{
_this.setAttribute( "num_osc", QString::number( m_num_oscillators ) );
_this.setAttribute( "foldback", QString::number( fx1Knob->value() ) );
_this.setAttribute( "vol", QString::number( volKnob->value() ) );
fx1Knob->saveSettings( _doc, _this, "foldback" );
volKnob->saveSettings( _doc, _this, "vol" );
for( int i = 0; i < m_num_oscillators; ++i )
{
QString is = QString::number( i );
_this.setAttribute( "vol" + is, QString::number(
m_osc[i].volKnob->value() ) );
_this.setAttribute( "pan" + is, QString::number(
m_osc[i].panKnob->value() ) );
m_osc[i].volKnob->saveSettings( _doc, _this, "vol" + is );
m_osc[i].panKnob->saveSettings( _doc, _this, "pan" + is );
_this.setAttribute( "harmonic" + is, QString::number(
m_osc[i].harmonic ) );
_this.setAttribute( "detune" + is, QString::number(
m_osc[i].detuneKnob->value() ) );
m_osc[i].detuneKnob->saveSettings( _doc, _this, "detune" + is );
_this.setAttribute( "wavetype" + is, QString::number(
m_osc[i].waveShape ) );
}
@@ -274,20 +275,15 @@ void organicInstrument::loadSettings( const QDomElement & _this )
for( int i = 0; i < m_num_oscillators; ++i )
{
QString is = QString::number( i );
m_osc[i].volKnob->setValue( _this.attribute( "vol" + is ).
toFloat() );
m_osc[i].detuneKnob->setValue( _this.attribute( "detune" + is ).
toFloat() );
m_osc[i].panKnob->setValue( _this.attribute( "pan" + is ).
toFloat() );
m_osc[i].volKnob->loadSettings( _this, "vol" + is );
m_osc[i].detuneKnob->loadSettings( _this, "detune" + is );
m_osc[i].panKnob->loadSettings( _this, "pan" + is );
m_osc[i].oscKnob->setValue( _this.attribute( "wavetype"+is ).
toInt() );
}
volKnob->setValue( _this.attribute( "vol" ).
toFloat() );
fx1Knob->setValue( _this.attribute( "foldback" ).
toFloat() );
volKnob->loadSettings( _this, "vol" );
fx1Knob->loadSettings( _this, "foldback" );
oscButtonChanged();
}

View File

@@ -72,14 +72,14 @@ pluckedStringSynth::pluckedStringSynth( instrumentTrack * _channel_track ) :
instrument( _channel_track, &pluckedstringsynth_plugin_descriptor )
{
m_pickKnob = new knob( knobDark_28, this, tr( "Pick position" ),
eng() );
eng(), _channel_track );
m_pickKnob->setRange( 0.0f, 0.5f, 0.005f );
m_pickKnob->setInitValue( 0.0f );
m_pickKnob->move( 86, 134 );
m_pickKnob->setHintText( tr( "Pick position:" ) + " ", "" );
m_pickupKnob = new knob( knobDark_28, this, tr( "Pickup position" ),
eng() );
eng(), _channel_track );
m_pickupKnob->setRange( 0.0f, 0.5f, 0.005f );
m_pickupKnob->setInitValue( 0.05f );
m_pickupKnob->move( 138, 134 );
@@ -108,9 +108,8 @@ pluckedStringSynth::~pluckedStringSynth()
void pluckedStringSynth::saveSettings( QDomDocument & _doc,
QDomElement & _this )
{
_this.setAttribute( "pick", QString::number( m_pickKnob->value() ) );
_this.setAttribute( "pickup", QString::number(
m_pickupKnob->value() ) );
m_pickKnob->saveSettings( _doc, _this, "pick" );
m_pickupKnob->saveSettings( _doc, _this, "pickup" );
}
@@ -118,8 +117,8 @@ void pluckedStringSynth::saveSettings( QDomDocument & _doc,
void pluckedStringSynth::loadSettings( const QDomElement & _this )
{
m_pickKnob->setValue( _this.attribute( "pick" ).toFloat() );
m_pickupKnob->setValue( _this.attribute( "pickup" ).toFloat() );
m_pickKnob->loadSettings( _this, "pick" );
m_pickupKnob->loadSettings( _this, "pickup" );
}

View File

@@ -246,7 +246,8 @@ tripleOscillator::tripleOscillator( instrumentTrack * _channel_track ) :
// setup volume-knob
m_osc[i].volKnob = new volumeKnob( knobSmall_17, this, tr(
"Osc %1 volume" ).arg( i+1 ), eng() );
"Osc %1 volume" ).arg( i+1 ), eng(),
_channel_track );
m_osc[i].volKnob->setData( i );
m_osc[i].volKnob->move( 6, 104+i*50 );
m_osc[i].volKnob->setRange( MIN_VOLUME, MAX_VOLUME, 1.0f );
@@ -267,7 +268,8 @@ tripleOscillator::tripleOscillator( instrumentTrack * _channel_track ) :
// setup panning-knob
m_osc[i].panKnob = new knob( knobSmall_17, this,
tr( "Osc %1 panning" ).arg( i + 1 ), eng() );
tr( "Osc %1 panning" ).arg( i + 1 ), eng(),
_channel_track );
m_osc[i].panKnob->setData( i );
m_osc[i].panKnob->move( 33, 104+i*50 );
m_osc[i].panKnob->setRange( PANNING_LEFT, PANNING_RIGHT, 1.0f );
@@ -287,7 +289,7 @@ tripleOscillator::tripleOscillator( instrumentTrack * _channel_track ) :
// setup coarse-knob
m_osc[i].coarseKnob = new knob( knobSmall_17, this,
tr( "Osc %1 coarse detuning" ).arg( i + 1 ),
eng() );
eng(), _channel_track );
m_osc[i].coarseKnob->setData( i );
m_osc[i].coarseKnob->move( 66, 104 + i * 50 );
m_osc[i].coarseKnob->setRange( -2 * NOTES_PER_OCTAVE,
@@ -310,7 +312,7 @@ tripleOscillator::tripleOscillator( instrumentTrack * _channel_track ) :
// setup knob for left fine-detuning
m_osc[i].fineLKnob = new knob( knobSmall_17, this,
tr( "Osc %1 fine detuning left" ).arg( i+1 ),
eng() );
eng(), _channel_track );
m_osc[i].fineLKnob->setData( i );
m_osc[i].fineLKnob->move( 90, 104 + i * 50 );
m_osc[i].fineLKnob->setRange( -100.0f, 100.0f, 1.0f );
@@ -334,7 +336,7 @@ tripleOscillator::tripleOscillator( instrumentTrack * _channel_track ) :
m_osc[i].fineRKnob = new knob( knobSmall_17, this,
tr( "Osc %1 fine detuning right"
).arg( i + 1 ),
eng() );
eng(), _channel_track );
m_osc[i].fineRKnob->setData( i );
m_osc[i].fineRKnob->move( 110, 104 + i * 50 );
m_osc[i].fineRKnob->setRange( -100.0f, 100.0f, 1.0f );
@@ -357,7 +359,8 @@ tripleOscillator::tripleOscillator( instrumentTrack * _channel_track ) :
m_osc[i].phaseOffsetKnob = new knob( knobSmall_17, this,
tr( "Osc %1 phase-"
"offset" ).arg( i+1 ),
eng() );
eng(),
_channel_track );
m_osc[i].phaseOffsetKnob->setData( i );
m_osc[i].phaseOffsetKnob->move( 142, 104 + i * 50 );
m_osc[i].phaseOffsetKnob->setRange( 0.0f, 360.0f, 1.0f );
@@ -384,7 +387,8 @@ tripleOscillator::tripleOscillator( instrumentTrack * _channel_track ) :
m_osc[i].stereoPhaseDetuningKnob = new knob( knobSmall_17, this,
tr( "Osc %1 stereo phase-"
"detuning" ).arg( i+1 ),
eng() );
eng(),
_channel_track );
m_osc[i].stereoPhaseDetuningKnob->setData( i );
m_osc[i].stereoPhaseDetuningKnob->move( 166, 104 + i * 50 );
m_osc[i].stereoPhaseDetuningKnob->setRange( 0.0f, 360.0f,
@@ -593,20 +597,15 @@ void tripleOscillator::saveSettings( QDomDocument & _doc, QDomElement & _this )
for( int i = 0; i < NUM_OF_OSCILLATORS; ++i )
{
QString is = QString::number( i );
_this.setAttribute( "vol" + is, QString::number(
m_osc[i].volKnob->value() ) );
_this.setAttribute( "pan" + is, QString::number(
m_osc[i].panKnob->value() ) );
_this.setAttribute( "coarse" + is, QString::number(
m_osc[i].coarseKnob->value() ) );
_this.setAttribute( "finel" + is, QString::number(
m_osc[i].fineLKnob->value() ) );
_this.setAttribute( "finer" + is, QString::number(
m_osc[i].fineRKnob->value() ) );
_this.setAttribute( "phoffset" + is, QString::number(
m_osc[i].phaseOffsetKnob->value() ) );
_this.setAttribute( "stphdetun" + is, QString::number(
m_osc[i].stereoPhaseDetuningKnob->value() ) );
m_osc[i].volKnob->saveSettings( _doc, _this, "vol" + is );
m_osc[i].panKnob->saveSettings( _doc, _this, "pan" + is );
m_osc[i].coarseKnob->saveSettings( _doc, _this, "coarse" + is );
m_osc[i].fineLKnob->saveSettings( _doc, _this, "finel" + is );
m_osc[i].fineRKnob->saveSettings( _doc, _this, "finer" + is );
m_osc[i].phaseOffsetKnob->saveSettings( _doc, _this,
"phoffset" + is );
m_osc[i].stereoPhaseDetuningKnob->saveSettings( _doc, _this,
"stphdetun" + is );
_this.setAttribute( "wavetype" + is, QString::number(
m_osc[i].waveShape ) );
_this.setAttribute( "userwavefile" + is,
@@ -630,20 +629,15 @@ void tripleOscillator::loadSettings( const QDomElement & _this )
for( int i = 0; i < NUM_OF_OSCILLATORS; ++i )
{
QString is = QString::number( i );
m_osc[i].volKnob->setValue( _this.attribute( "vol" + is ).
toFloat() );
m_osc[i].panKnob->setValue( _this.attribute( "pan" + is ).
toFloat() );
m_osc[i].coarseKnob->setValue( _this.attribute( "coarse" + is ).
toFloat() );
m_osc[i].fineLKnob->setValue( _this.attribute( "finel" + is ).
toFloat() );
m_osc[i].fineRKnob->setValue( _this.attribute( "finer" + is ).
toFloat() );
m_osc[i].phaseOffsetKnob->setValue( _this.attribute(
"phoffset" + is ).toFloat() );
m_osc[i].stereoPhaseDetuningKnob->setValue( _this.attribute(
"stphdetun" + is ).toFloat() );
m_osc[i].volKnob->loadSettings( _this, "vol" + is );
m_osc[i].panKnob->loadSettings( _this, "pan" + is );
m_osc[i].coarseKnob->loadSettings( _this, "coarse" + is );
m_osc[i].fineLKnob->loadSettings( _this, "finel" + is );
m_osc[i].fineRKnob->loadSettings( _this, "finer" + is );
m_osc[i].phaseOffsetKnob->loadSettings( _this,
"phoffset" + is );
m_osc[i].stereoPhaseDetuningKnob->loadSettings( _this,
"stphdetun" + is );
m_osc[i].m_sampleBuffer->setAudioFile( _this.attribute(
"userwavefile" + is ) );
m_osc[i].waveBtnGrp->setValue( _this.attribute( "wavetype" +

View File

@@ -118,8 +118,7 @@ vibed::vibed( instrumentTrack * _channel_track ) :
"The 'N' button will normalize the waveform.") );
m_volumeKnob = new volumeKnob( knobBright_26, this,
tr( "Volume" ),
eng() );
tr( "Volume" ), eng(), _channel_track );
m_volumeKnob->setRange( MIN_VOLUME, MAX_VOLUME, 1.0f );
m_volumeKnob->setInitValue( DEFAULT_VOLUME );
m_volumeKnob->move( 103, 142 );
@@ -135,8 +134,8 @@ vibed::vibed( instrumentTrack * _channel_track ) :
"The 'V' knob sets the volume of the selected string." ) );
m_stiffnessKnob = new knob( knobBright_26, this,
tr( "String stiffness" ),
eng() );
tr( "String stiffness" ),
eng(), _channel_track );
m_stiffnessKnob->setRange( 0.0f, 0.05f, 0.001f );
m_stiffnessKnob->setInitValue( 0.0f );
m_stiffnessKnob->move( 129, 142 );
@@ -156,8 +155,8 @@ vibed::vibed( instrumentTrack * _channel_track ) :
m_pickKnob = new knob( knobBright_26, this,
tr( "Pick position" ),
eng() );
tr( "Pick position" ),
eng(), _channel_track );
m_pickKnob->setRange( 0.0f, 0.5f, 0.005f );
m_pickKnob->setInitValue( 0.0f );
m_pickKnob->move( 153, 142 );
@@ -174,8 +173,8 @@ vibed::vibed( instrumentTrack * _channel_track ) :
"The lower the setting the closer the pick is to the bridge." ) );
m_pickupKnob = new knob( knobBright_26, this,
tr( "Pickup position" ),
eng() );
tr( "Pickup position" ),
eng(), _channel_track );
m_pickupKnob->setRange( 0.0f, 0.5f, 0.005f );
m_pickupKnob->setInitValue( 0.05f );
m_pickupKnob->move( 177, 142 );
@@ -194,8 +193,7 @@ vibed::vibed( instrumentTrack * _channel_track ) :
"pickup is to the bridge." ) );
m_panKnob = new knob( knobBright_26, this,
tr( "Pan" ),
eng() );
tr( "Pan" ), eng(), _channel_track );
m_panKnob->setRange( -1.0f, 1.0f, 0.01f );
m_panKnob->setInitValue( 0.0f );
m_panKnob->move( 105, 187 );
@@ -212,8 +210,8 @@ vibed::vibed( instrumentTrack * _channel_track ) :
"field." ) );
m_detuneKnob = new knob( knobBright_26, this,
tr( "Detune" ),
eng() );
tr( "Detune" ),
eng(), _channel_track );
m_detuneKnob->setRange( -0.1f, 0.1f, 0.001f );
m_detuneKnob->setInitValue( 0.0f );
m_detuneKnob->move( 150, 187 );
@@ -231,8 +229,8 @@ vibed::vibed( instrumentTrack * _channel_track ) :
"will cause the string to sound sharp." ) );
m_randomKnob = new knob( knobBright_26, this,
tr( "Fuzziness" ),
eng() );
tr( "Fuzziness" ),
eng(), _channel_track );
m_randomKnob->setRange( 0.0f, 0.75f, 0.01f );
m_randomKnob->setInitValue( 0.0f );
m_randomKnob->move( 194, 187 );
@@ -251,8 +249,7 @@ vibed::vibed( instrumentTrack * _channel_track ) :
"sound more 'metallic'.") );
m_lengthKnob = new knob( knobBright_26, this,
tr( "Length" ),
eng() );
tr( "Length" ), eng(), _channel_track );
m_lengthKnob->setRange( 1, 16, 1 );
m_lengthKnob->setInitValue( 1 );
m_lengthKnob->move( 23, 193 );
@@ -430,40 +427,32 @@ void vibed::saveSettings( QDomDocument & _doc,
if( m_editors[i]->isOn() )
{
name = "volume" + QString::number( i );
_this.setAttribute( name, QString::number(
m_volumeKnobs[i]->value() ) );
m_volumeKnobs[i]->saveSettings( _doc, _this, name );
name = "stiffness" + QString::number( i );
_this.setAttribute( name, QString::number(
m_stiffnessKnobs[i]->value() ) );
m_stiffnessKnobs[i]->saveSettings( _doc, _this, name );
name = "pick" + QString::number( i );
_this.setAttribute( name, QString::number(
m_pickKnobs[i]->value() ) );
m_pickKnobs[i]->saveSettings( _doc, _this, name );
name = "pickup" + QString::number( i );
_this.setAttribute( name, QString::number(
m_pickupKnobs[i]->value() ) );
m_pickupKnobs[i]->saveSettings( _doc, _this, name );
name = "octave" + QString::number( i );
_this.setAttribute( name, QString::number(
m_harmonics[i]->getSelected() ) );
name = "length" + QString::number( i );
_this.setAttribute( name, QString::number(
m_lengthKnobs[i]->value() ) );
m_lengthKnobs[i]->saveSettings( _doc, _this, name );
name = "pan" + QString::number( i );
_this.setAttribute( name, QString::number(
m_panKnobs[i]->value() ) );
m_panKnobs[i]->saveSettings( _doc, _this, name );
name = "detune" + QString::number( i );
_this.setAttribute( name, QString::number(
m_detuneKnobs[i]->value() ) );
m_detuneKnobs[i]->saveSettings( _doc, _this, name );
name = "slap" + QString::number( i );
_this.setAttribute( name, QString::number(
m_randomKnobs[i]->value() ) );
m_randomKnobs[i]->saveSettings( _doc, _this, name );
name = "impulse" + QString::number( i );
_this.setAttribute( name, QString::number(
@@ -495,40 +484,32 @@ void vibed::loadSettings( const QDomElement & _this )
if( m_editors[i]->isOn() )
{
name = "volume" + QString::number( i );
m_volumeKnobs[i]->setValue(
_this.attribute( name ).toFloat() );
m_volumeKnobs[i]->loadSettings( _this, name );
name = "stiffness" + QString::number( i );
m_stiffnessKnobs[i]->setValue(
_this.attribute( name ).toFloat() );
m_stiffnessKnobs[i]->loadSettings( _this, name );
name = "pick" + QString::number( i );
m_pickKnobs[i]->setValue(
_this.attribute( name ).toFloat() );
m_pickKnobs[i]->loadSettings( _this, name );
name = "pickup" + QString::number( i );
m_pickupKnobs[i]->setValue(
_this.attribute( name ).toFloat() );
m_pickupKnobs[i]->loadSettings( _this, name );
name = "octave" + QString::number( i );
m_harmonics[i]->setSelected(
_this.attribute( name ).toInt() );
name = "length" + QString::number( i );
m_lengthKnobs[i]->setValue(
_this.attribute( name ).toFloat() );
m_lengthKnobs[i]->loadSettings( _this, name );
name = "pan" + QString::number( i );
m_panKnobs[i]->setValue(
_this.attribute( name ).toFloat() );
m_panKnobs[i]->loadSettings( _this, name );
name = "detune" + QString::number( i );
m_detuneKnobs[i]->setValue(
_this.attribute( name ).toFloat() );
m_detuneKnobs[i]->loadSettings( _this, name );
name = "slap" + QString::number( i );
m_randomKnobs[i]->setValue(
_this.attribute( name ).toFloat() );
m_randomKnobs[i]->loadSettings( _this, name );
name = "impulse" + QString::number( i );
m_impulses[i]->setChecked(