From 0f23db9f9aa755eb8274bd02960e05678d5fdb89 Mon Sep 17 00:00:00 2001 From: Paul Giblock Date: Thu, 24 Jan 2008 05:50:29 +0000 Subject: [PATCH] updated boolModel, split lb302 for MV but there is a bug git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/branches/lmms-mv@669 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 17 + include/automatable_model.h | 12 +- .../audio_file_processor.cpp | 4 +- plugins/lb302/lb302.cpp | 343 ++++++++++-------- plugins/lb302/lb302.h | 65 +++- src/core/arp_and_chords_tab_widget.cpp | 4 +- src/core/effect.cpp | 2 +- src/core/envelope_tab_widget.cpp | 2 +- src/core/ladspa_control.cpp | 6 +- src/widgets/knob.cpp | 2 +- 10 files changed, 274 insertions(+), 183 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5669407f6..7a8ebd363 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2008-01-24 Paul Giblock + + * include/automatable_model.h: + * src/widgets/knob.cpp: + * src/core/arp_and_chords_tab_widget.cpp: + * src/core/effect.cpp: + * src/core/ladspa_control.cpp: + * src/core/envelope_tab_widget.cpp: + * plugins/audio_file_processor/audio_file_processor.cpp: + add boolModel subclass in order to simplify the constructor + + * plugins/lb302/lb302.cpp: + * plugins/lb302/lb302.h: + split lb302 for M/V. However, lmms_plugin_main() receives null data, + which means the instrumentTrack cannot be set.. + + 2008-01-18 Tobias Doerffel * src/core/effect_chain.cpp: diff --git a/include/automatable_model.h b/include/automatable_model.h index 88249c7cc..3cf537cb0 100644 --- a/include/automatable_model.h +++ b/include/automatable_model.h @@ -288,10 +288,20 @@ public: // some model-primitives -generateModelPrimitive(bool,signed char); +//generateModelPrimitive(bool,signed char); generateModelPrimitive(float,float); generateModelPrimitive(int,int); +class boolModel : public automatableModel { +public: + boolModel( const bool _val = FALSE, + ::model * _parent = NULL, + bool _default_constructed = FALSE ) : + automatableModel( _val, FALSE, TRUE, defaultRelStep(), _parent, _default_constructed ) + {} +}; + +typedef automatableModelView boolModelView; #endif diff --git a/plugins/audio_file_processor/audio_file_processor.cpp b/plugins/audio_file_processor/audio_file_processor.cpp index d66d55dee..25fc3fc39 100644 --- a/plugins/audio_file_processor/audio_file_processor.cpp +++ b/plugins/audio_file_processor/audio_file_processor.cpp @@ -77,8 +77,8 @@ audioFileProcessor::audioFileProcessor( instrumentTrack * _instrument_track ) : m_ampModel( 100, 0, 500, 1, this ), m_startPointModel( 0, 0, 1, 0.0000001f, this ), m_endPointModel( 1, 0, 1, 0.0000001f, this ), - m_reverseModel( FALSE, FALSE, TRUE, boolModel::defaultRelStep(), this ), - m_loopModel( FALSE, FALSE, TRUE, boolModel::defaultRelStep(), this ) + m_reverseModel( FALSE, this ), + m_loopModel( FALSE, this ) { connect( &m_reverseModel, SIGNAL( dataChanged() ), this, SLOT( reverseModelChanged() ) ); diff --git a/plugins/lb302/lb302.cpp b/plugins/lb302/lb302.cpp index 787e624bc..9019c847c 100644 --- a/plugins/lb302/lb302.cpp +++ b/plugins/lb302/lb302.cpp @@ -39,6 +39,7 @@ #include "note_play_handle.h" #include "templates.h" #include "audio_port.h" +#include "automatable_model_templates.h" #undef SINGLE_SOURCE_COMPILE #include "embed.cpp" @@ -306,132 +307,65 @@ void lb302Filter3Pole::setState(const lb302FilterState* fs) // LBSynth // -lb302Synth::lb302Synth( instrumentTrack * _channel_track ) : - instrument( _channel_track, &lb302_plugin_descriptor ) +lb302Synth::lb302Synth( instrumentTrack * _instrumentTrack ) : + instrument( _instrumentTrack, &lb302_plugin_descriptor ), + vcf_cut_knob( 0.75f, 0.0f, 1.5f, 0.005f, this ), + vcf_res_knob( 0.75f, 0.0f, 1.25f, 0.005f, this ), + vcf_mod_knob( 0.1f, 0.0f, 1.0f, 0.005f, this ), + vcf_dec_knob( 0.1f, 0.0f, 1.0f, 0.005f, this ), + vco_fine_detune_knob( 0.0f, -100.0f, 100.0f, 1.0f, this ), + dist_knob( 0.0f, 0.0f, 1.0f, 0.01f, this ), + wave_knob( 0.0f, 0.0f, 5.0f, 1.0f, this ), + slide_dec_knob( 0.6f, 0.0f, 1.0f, 0.005f, this ), + slideToggle( FALSE, this ), + accentToggle( FALSE, this ), + deadToggle( FALSE, this ), + db24Toggle( FALSE, this ) + { - // GUI +printf("Set track: %Lx\n", (unsigned long long)_instrumentTrack); - vcf_cut_knob = new knob( knobBright_26, this, tr( "VCF Cutoff Frequency" ), - _channel_track ); - vcf_cut_knob->setRange( 0.0f, 1.5f, 0.005f ); // Originally [0,1.0] - vcf_cut_knob->setInitValue( 0.75f ); - vcf_cut_knob->move( 75, 130 ); - vcf_cut_knob->setHintText( tr( "Cutoff Freq:" ) + " ", "" ); - vcf_cut_knob->setLabel( tr("CUT") ); - - vcf_res_knob = new knob( knobBright_26, this, tr( "VCF Resonance" ), - _channel_track ); - vcf_res_knob->setRange( 0.0f, 1.25f, 0.005f ); // Originally [0,1.0] - vcf_res_knob->setInitValue( 0.75f ); - vcf_res_knob->move( 120, 130 ); - vcf_res_knob->setHintText( tr( "Resonance:" ) + " ", "" ); - vcf_res_knob->setLabel( tr("RES") ); - - vcf_mod_knob = new knob( knobBright_26, this, tr( "VCF Envelope Mod" ), - _channel_track ); - vcf_mod_knob->setRange( 0.0f, 1.0f, 0.005f ); // Originally [0,1.0] - vcf_mod_knob->setInitValue( 1.0f ); - vcf_mod_knob->move( 165, 130 ); - vcf_mod_knob->setHintText( tr( "Env Mod:" ) + " ", "" ); - vcf_mod_knob->setLabel( tr("ENV MOD") ); - - vcf_dec_knob = new knob( knobBright_26, this, tr( "VCF Envelope Decay" ), - _channel_track ); - vcf_dec_knob->setRange( 0.0f, 1.0f, 0.005f ); // Originally [0,1.0] - vcf_dec_knob->setInitValue( 0.1f ); - vcf_dec_knob->move( 210, 130 ); - vcf_dec_knob->setHintText( tr( "Decay:" ) + " ", "" ); - vcf_dec_knob->setLabel( tr("DEC") ); - - slideToggle = new ledCheckBox( "Slide", this, - tr( "Slide" ), - _channel_track ); - slideToggle->move( 10, 180 ); - - - accentToggle = new ledCheckBox( "Accent", this, - tr( "Accent" ), - _channel_track ); - accentToggle->move( 10, 200 ); - accentToggle->setDisabled(true); - - - deadToggle = new ledCheckBox( "Dead", this, - tr( "Dead" ), - _channel_track ); - deadToggle->move( 10, 220 ); - - db24Toggle = new ledCheckBox( "24dB/oct", this, - tr( "303-es-que, 24dB/octave, 3 pole filter" ), - _channel_track ); - db24Toggle->move( 10, 150); - - - slide_dec_knob = new knob( knobBright_26, this, tr( "Slide Decay" ), - _channel_track ); - slide_dec_knob->setRange( 0.0f, 1.0f, 0.005f ); // Originally [0,1.0] - slide_dec_knob->setInitValue( 0.6f ); - slide_dec_knob->move( 210, 75 ); - slide_dec_knob->setHintText( tr( "Slide Decay:" ) + " ", "" ); - slide_dec_knob->setLabel( tr( "SLIDE")); - - vco_fine_detune_knob = new knob( knobBright_26, this, - tr("Fine detuning of the VCO. Ranged between -100 and 100 centes."), - _channel_track ); - vco_fine_detune_knob->setRange(-100.0f, 100.0f, 1.0f); - vco_fine_detune_knob->setInitValue(0.0f); - vco_fine_detune_knob->move(165,75); - vco_fine_detune_knob->setHintText( tr( "VCO Fine Detuning:") + " ", "cents"); - vco_fine_detune_knob->setLabel( tr( "DETUNE")); - - - dist_knob = new knob( knobBright_26, this, tr( "Distortion" ), - _channel_track ); - dist_knob->setRange( 0.0f, 1.0f, 0.01f ); // Originally [0,1.0] - dist_knob->setInitValue( 0.0f ); - dist_knob->move( 210, 190 ); - dist_knob->setHintText( tr( "DIST:" ) + " ", "" ); - dist_knob->setLabel( tr( "DIST")); - - - wave_knob = new knob( knobBright_26, this, tr( "Waveform" ), - _channel_track ); - wave_knob->setRange( 0.0f, 5.0f, 1.0f ); // Originally [0,1.0] - wave_knob->setInitValue( 0.0f ); - wave_knob->move( 120, 75 ); - wave_knob->setHintText( tr( "WAVE:" ) + " ", "" ); - wave_knob->setLabel( tr( "WAVE")); - - - connect( vcf_cut_knob, SIGNAL( valueChanged( float ) ), +/* + connect( &vcf_cut_knob, SIGNAL( valueChanged( float ) ), this, SLOT ( filterChanged( float ) ) ); - connect( vcf_res_knob, SIGNAL( valueChanged( float ) ), + connect( &vcf_res_knob, SIGNAL( valueChanged( float ) ), this, SLOT ( filterChanged( float ) ) ); - connect( vcf_mod_knob, SIGNAL( valueChanged( float ) ), + connect( &vcf_mod_knob, SIGNAL( valueChanged( float ) ), this, SLOT ( filterChanged( float ) ) ); - connect( vcf_dec_knob, SIGNAL( valueChanged( float ) ), + connect( &vcf_dec_knob, SIGNAL( valueChanged( float ) ), this, SLOT ( filterChanged( float ) ) ); - connect( vco_fine_detune_knob, SIGNAL( valueChanged( float ) ), + connect( &vco_fine_detune_knob, SIGNAL( valueChanged( float ) ), this, SLOT ( detuneChanged( float) ) ); - connect( db24Toggle, SIGNAL( toggled( bool ) ), + connect( &db24Toggle, SIGNAL( toggled( bool ) ), this, SLOT ( db24Toggled( bool) ) ); - connect( dist_knob, SIGNAL( valueChanged(float) ), + connect( &dist_knob, SIGNAL( valueChanged(float) ), this, SLOT ( filterChanged( float ))); - connect( wave_knob, SIGNAL( valueChanged(float) ), + connect( &wave_knob, SIGNAL( valueChanged(float) ), this, SLOT ( waveChanged( float ))); +*/ - setAutoFillBackground( TRUE ); - QPalette pal; - pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( - "artwork" ) ); - setPalette( pal ); + vcf_cut_knob.setTrack( _instrumentTrack ); + vcf_res_knob.setTrack( _instrumentTrack ); + vcf_mod_knob.setTrack( _instrumentTrack ); + vcf_dec_knob.setTrack( _instrumentTrack ); + + vco_fine_detune_knob.setTrack( _instrumentTrack ); + + dist_knob.setTrack( _instrumentTrack ); + wave_knob.setTrack( _instrumentTrack ); + slide_dec_knob.setTrack( _instrumentTrack ); + + slideToggle.setTrack( _instrumentTrack ); + accentToggle.setTrack( _instrumentTrack ); + deadToggle.setTrack( _instrumentTrack ); + db24Toggle.setTrack( _instrumentTrack ); // SYNTH @@ -496,19 +430,19 @@ lb302Synth::~lb302Synth() void lb302Synth::saveSettings( QDomDocument & _doc, QDomElement & _this ) { - vcf_cut_knob->saveSettings( _doc, _this, "vcf_cut" ); - vcf_res_knob->saveSettings( _doc, _this, "vcf_res" ); - vcf_mod_knob->saveSettings( _doc, _this, "vcf_mod" ); - vcf_dec_knob->saveSettings( _doc, _this, "vcf_dec" ); + vcf_cut_knob.saveSettings( _doc, _this, "vcf_cut" ); + vcf_res_knob.saveSettings( _doc, _this, "vcf_res" ); + vcf_mod_knob.saveSettings( _doc, _this, "vcf_mod" ); + vcf_dec_knob.saveSettings( _doc, _this, "vcf_dec" ); - vco_fine_detune_knob->saveSettings( _doc, _this, "vco_detune" ); - wave_knob->saveSettings( _doc, _this, "shape"); - dist_knob->saveSettings( _doc, _this, "dist"); - slide_dec_knob->saveSettings( _doc, _this, "slide_dec"); + vco_fine_detune_knob.saveSettings( _doc, _this, "vco_detune" ); + wave_knob.saveSettings( _doc, _this, "shape"); + dist_knob.saveSettings( _doc, _this, "dist"); + slide_dec_knob.saveSettings( _doc, _this, "slide_dec"); - slideToggle->saveSettings( _doc, _this, "slide"); - deadToggle->saveSettings( _doc, _this, "dead"); - db24Toggle->saveSettings( _doc, _this, "db24"); + slideToggle.saveSettings( _doc, _this, "slide"); + deadToggle.saveSettings( _doc, _this, "dead"); + db24Toggle.saveSettings( _doc, _this, "db24"); } @@ -516,19 +450,19 @@ void lb302Synth::saveSettings( QDomDocument & _doc, void lb302Synth::loadSettings( const QDomElement & _this ) { - vcf_cut_knob->loadSettings( _this, "vcf_cut" ); - vcf_res_knob->loadSettings( _this, "vcf_res" ); - vcf_mod_knob->loadSettings( _this, "vcf_mod" ); - vcf_dec_knob->loadSettings( _this, "vcf_dec" ); + vcf_cut_knob.loadSettings( _this, "vcf_cut" ); + vcf_res_knob.loadSettings( _this, "vcf_res" ); + vcf_mod_knob.loadSettings( _this, "vcf_mod" ); + vcf_dec_knob.loadSettings( _this, "vcf_dec" ); - vco_fine_detune_knob->loadSettings( _this, "vco_detune" ); - dist_knob->loadSettings( _this, "dist"); - wave_knob->loadSettings( _this, "shape"); - slide_dec_knob->loadSettings( _this, "slide_dec"); + vco_fine_detune_knob.loadSettings( _this, "vco_detune" ); + dist_knob.loadSettings( _this, "dist"); + wave_knob.loadSettings( _this, "shape"); + slide_dec_knob.loadSettings( _this, "slide_dec"); - slideToggle->loadSettings( _this, "slide"); - deadToggle->loadSettings( _this, "dead"); - db24Toggle->loadSettings( _this, "db24"); + slideToggle.loadSettings( _this, "slide"); + deadToggle.loadSettings( _this, "dead"); + db24Toggle.loadSettings( _this, "db24"); filterChanged(0.0); detuneChanged(0.0); @@ -538,12 +472,12 @@ void lb302Synth::loadSettings( const QDomElement & _this ) // recalcFilter. void lb302Synth::filterChanged( float ) { - fs.cutoff = vcf_cut_knob->value(); - fs.reso = vcf_res_knob->value(); - fs.envmod = vcf_mod_knob->value(); - fs.dist = LB_DIST_RATIO*dist_knob->value(); + fs.cutoff = vcf_cut_knob.value(); + fs.reso = vcf_res_knob.value(); + fs.envmod = vcf_mod_knob.value(); + fs.dist = LB_DIST_RATIO*dist_knob.value(); - float d = 0.2 + (2.3*vcf_dec_knob->value()); + float d = 0.2 + (2.3*vcf_dec_knob.value()); d*=LB_HZ; // d *= smpl rate fs.envdecay = pow(0.1, 1.0/d * ENVINC); // decay is 0.1 to the 1/d * ENVINC // vcf_envdecay is now adjusted for both @@ -554,7 +488,7 @@ void lb302Synth::filterChanged( float ) void lb302Synth::db24Toggled( bool ) { delete vcf; - if(db24Toggle->isChecked()) { + if(db24Toggle.value()) { vcf = new lb302Filter3Pole(&fs); } else { @@ -573,7 +507,7 @@ void lb302Synth::detuneChanged( float ) slidebase_freq = vco_slidebase*LB_HZ/vco_detune; } - vco_detune = powf(2.0f, (float)vco_fine_detune_knob->value()/1200.0f); + vco_detune = powf(2.0f, (float)vco_fine_detune_knob.value()/1200.0f); vco_inc = freq*vco_detune/LB_HZ; // If a slide note is pending, @@ -589,14 +523,16 @@ void lb302Synth::detuneChanged( float ) // TODO: Set vco_shape in here. void lb302Synth::waveChanged( float ) { - switch(int(rint(wave_knob->value()))) { - case 0: wave_knob->setHintText(tr("Sawtooth "),""); break; - case 1: wave_knob->setHintText(tr("Inverted Sawtooth "),""); break; - case 2: wave_knob->setHintText(tr("Triangle "),""); break; - case 3: wave_knob->setHintText(tr("Square "),""); break; - case 4: wave_knob->setHintText(tr("Rounded Square "),""); break; - case 5: wave_knob->setHintText(tr("Moog "),""); break; +/* + switch(int(rint(wave_knob.value()))) { + case 0: wave_knob.setHintText(tr("Sawtooth "),""); break; + case 1: wave_knob.setHintText(tr("Inverted Sawtooth "),""); break; + case 2: wave_knob.setHintText(tr("Triangle "),""); break; + case 3: wave_knob.setHintText(tr("Square "),""); break; + case 4: wave_knob.setHintText(tr("Rounded Square "),""); break; + case 5: wave_knob.setHintText(tr("Moog "),""); break; } +*/ } QString lb302Synth::nodeName( void ) const @@ -654,7 +590,7 @@ int lb302Synth::process(sampleFrame *outbuf, const Uint32 size) if (vco_slide) { vco_inc=vco_slidebase-vco_slide; // Calculate coeff from dec_knob on knob change. - vco_slide*= 0.9+(slide_dec_knob->value()*0.0999); // TODO: Adjust for Hz and ENVINC + vco_slide*= 0.9+(slide_dec_knob.value()*0.0999); // TODO: Adjust for Hz and ENVINC } } @@ -683,7 +619,7 @@ int lb302Synth::process(sampleFrame *outbuf, const Uint32 size) } - switch(int(rint(wave_knob->value()))) { + switch(int(rint(wave_knob.value()))) { case 0: vco_shape = SAWTOOTH; break; case 1: vco_shape = INVERTED_SAWTOOTH; break; case 2: vco_shape = TRIANGLE; break; @@ -704,7 +640,6 @@ int lb302Synth::process(sampleFrame *outbuf, const Uint32 size) vco_k = -vco_c; // Is this sawtooth backwards? break; - // TODO: I think TRIANGLE is broken. case TRIANGLE: // p0: duty rev.saw<->triangle<->saw p1: curviness vco_k = (vco_c*2.0)+0.5; if (vco_k>0.5) vco_k = 1.0-vco_k; @@ -808,7 +743,7 @@ void lb302Synth::initNote( lb302Note *n) // End break-out // Slide note, save inc for next note - if (slideToggle->value()) { + if (slideToggle.value()) { vco_slideinc = vco_inc; // May need to equal vco_slidebase+vco_slide if last note slid } @@ -832,7 +767,7 @@ void lb302Synth::playNote( notePlayHandle * _n, bool ) { fpp_t framesPerPeriod = engine::getMixer()->framesPerPeriod(); - ///=== WEIRD CODE FOR MONOPHONIC BEHAVIOUR - BEGIN === /// + // if( _n->arpBaseNote() ) { @@ -913,7 +848,7 @@ void lb302Synth::playNote( notePlayHandle * _n, bool ) #endif - ///=== WEIRD CODE FOR MONOPHONIC BEHAVIOUR - END === /// + // /// Malloc our period history buffer if (period_states == NULL) { @@ -952,7 +887,7 @@ void lb302Synth::playNote( notePlayHandle * _n, bool ) /// This code is obsolete, hence the "if false" // Existing note. Allow it to decay. - if(deadToggle->value()==0 && decay_note) { + if(deadToggle.value() == 0 && decay_note) { #ifdef LB_DECAY if (catch_decay < 1) { // BEGIN NOT SURE OF... @@ -972,7 +907,7 @@ void lb302Synth::playNote( notePlayHandle * _n, bool ) #else lb302Note note; note.vco_inc = _n->frequency()*vco_detune/LB_HZ; // TODO: Use actual sampling rate. - note.dead = deadToggle->value(); + note.dead = deadToggle.value(); initNote(¬e); vca_mode=0; vca_a = state->vca_a; @@ -983,7 +918,7 @@ void lb302Synth::playNote( notePlayHandle * _n, bool ) else { lb302Note note; note.vco_inc = _n->frequency()*vco_detune/LB_HZ; // TODO: Use actual sampling rate. - note.dead = deadToggle->value(); + note.dead = deadToggle.value(); initNote(¬e); use_hold_note = false; } @@ -993,6 +928,7 @@ void lb302Synth::playNote( notePlayHandle * _n, bool ) sampleFrame *buf = new sampleFrame[frames]; process(buf, frames); + printf("track %Lx\n", getInstrumentTrack()); getInstrumentTrack()->processAudioBuffer( buf, frames, _n ); delete[] buf; @@ -1008,6 +944,106 @@ void lb302Synth::deleteNotePluginData( notePlayHandle * _n ) } +pluginView * lb302Synth::instantiateView( QWidget * _parent ) +{ + return( new lb302SynthView( this, _parent ) ); +} + + +lb302SynthView::lb302SynthView( instrument * _instrument, QWidget * _parent ) : + instrumentView( _instrument, _parent ) +{ + // GUI + m_vcfCutKnob = new knob( knobBright_26, this, tr( "VCF Cutoff Frequency" ) ); + m_vcfCutKnob->move( 75, 130 ); + m_vcfCutKnob->setHintText( tr( "Cutoff Freq:" ) + " ", "" ); + m_vcfCutKnob->setLabel( tr("CUT") ); + + m_vcfResKnob = new knob( knobBright_26, this, tr( "VCF Resonance" ) ); + m_vcfResKnob->move( 120, 130 ); + m_vcfResKnob->setHintText( tr( "Resonance:" ) + " ", "" ); + m_vcfResKnob->setLabel( tr("RES") ); + + m_vcfModKnob = new knob( knobBright_26, this, tr( "VCF Envelope Mod" ) ); + m_vcfModKnob->move( 165, 130 ); + m_vcfModKnob->setHintText( tr( "Env Mod:" ) + " ", "" ); + m_vcfModKnob->setLabel( tr("ENV MOD") ); + + m_vcfDecKnob = new knob( knobBright_26, this, tr( "VCF Envelope Decay" ) ); + m_vcfDecKnob->move( 210, 130 ); + m_vcfDecKnob->setHintText( tr( "Decay:" ) + " ", "" ); + m_vcfDecKnob->setLabel( tr("DEC") ); + + m_slideToggle = new ledCheckBox( "Slide", this, tr( "Slide" ) ); + m_slideToggle->move( 10, 180 ); + + m_accentToggle = new ledCheckBox( "Accent", this, tr( "Accent" ) ); + m_accentToggle->move( 10, 200 ); + m_accentToggle->setDisabled(true); + + m_deadToggle = new ledCheckBox( "Dead", this, tr( "Dead" ) ); + m_deadToggle->move( 10, 220 ); + + m_db24Toggle = new ledCheckBox( "24dB/oct", this, + tr( "303-es-que, 24dB/octave, 3 pole filter" ) ); + m_db24Toggle->move( 10, 150); + + + m_slideDecKnob = new knob( knobBright_26, this, tr( "Slide Decay" ) ); + m_slideDecKnob->move( 210, 75 ); + m_slideDecKnob->setHintText( tr( "Slide Decay:" ) + " ", "" ); + m_slideDecKnob->setLabel( tr( "SLIDE")); + + m_vcoFineDetuneKnob = new knob( knobBright_26, this, + tr("Fine detuning of the VCO. Ranged between -100 and 100 centes.") ); + m_vcoFineDetuneKnob->move(165, 75); + m_vcoFineDetuneKnob->setHintText( tr( "VCO Fine Detuning:") + " ", "cents"); + m_vcoFineDetuneKnob->setLabel( tr( "DETUNE")); + + m_distKnob = new knob( knobBright_26, this, tr( "Distortion" ) ); + m_distKnob->move( 210, 190 ); + m_distKnob->setHintText( tr( "DIST:" ) + " ", "" ); + m_distKnob->setLabel( tr( "DIST")); + + + m_waveKnob = new knob( knobBright_26, this, tr( "Waveform" ) ); + m_waveKnob->move( 120, 75 ); + m_waveKnob->setHintText( tr( "WAVE:" ) + " ", "" ); + m_waveKnob->setLabel( tr( "WAVE")); + + + setAutoFillBackground( TRUE ); + QPalette pal; + pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( + "artwork" ) ); + setPalette( pal ); +} + +lb302SynthView::~lb302SynthView() +{ +} + +void lb302SynthView::modelChanged( void ) +{ + lb302Synth * syn = castModel(); + + m_vcfCutKnob->setModel( &syn->vcf_cut_knob ); + m_vcfResKnob->setModel( &syn->vcf_res_knob ); + m_vcfDecKnob->setModel( &syn->vcf_dec_knob ); + m_vcfModKnob->setModel( &syn->vcf_mod_knob ); + + m_vcoFineDetuneKnob->setModel( &syn->vco_fine_detune_knob ); + + m_distKnob->setModel( &syn->dist_knob ); + m_waveKnob->setModel( &syn->wave_knob ); + + m_slideToggle->setModel( &syn->slideToggle ); + m_accentToggle->setModel( &syn->accentToggle ); + m_deadToggle->setModel( &syn->deadToggle ); + m_db24Toggle->setModel( &syn->db24Toggle ); +} + + extern "C" { @@ -1015,6 +1051,7 @@ extern "C" // neccessary for getting instance out of shared lib plugin * lmms_plugin_main( void * _data ) { + return( new lb302Synth( static_cast( _data ) ) ); } diff --git a/plugins/lb302/lb302.h b/plugins/lb302/lb302.h index 0311394e7..1b31ed8bb 100644 --- a/plugins/lb302/lb302.h +++ b/plugins/lb302/lb302.h @@ -34,11 +34,12 @@ #include "effect_lib.h" #include "instrument.h" +#include "instrument_view.h" #include "led_checkbox.h" +#include "knob.h" #include "mixer.h" - -class knob; +class lb302SynthView; class notePlayHandle; class lb302FilterKnobState @@ -210,28 +211,30 @@ public: return 4048; } + virtual pluginView * instantiateView( QWidget * _parent ); + private: void initNote(lb302Note *note); private: - knob * vcf_cut_knob; - knob * vcf_res_knob; - knob * vcf_dec_knob; - knob * vcf_mod_knob; + knobModel vcf_cut_knob; + knobModel vcf_res_knob; + knobModel vcf_mod_knob; + knobModel vcf_dec_knob; - knob * vco_fine_detune_knob; + knobModel vco_fine_detune_knob; - knob * dist_knob; - knob * wave_knob; + knobModel dist_knob; + knobModel wave_knob; + knobModel slide_dec_knob; - ledCheckBox * slideToggle; - ledCheckBox * accentToggle; - ledCheckBox * deadToggle; - ledCheckBox * db24Toggle; + boolModel slideToggle; + boolModel accentToggle; + boolModel deadToggle; + boolModel db24Toggle; - knob * slide_dec_knob; public slots: void filterChanged(float); @@ -239,10 +242,6 @@ public slots: void waveChanged(float); void db24Toggled( bool ); -private: - - - private: // Oscillator float vco_inc, // Sample increment for the frequency. Creates Sawtooth. @@ -294,7 +293,37 @@ private: int process(sampleFrame *outbuf, const Uint32 size); + friend class lb302SynthView; + } ; +class lb302SynthView : public instrumentView +{ +public: + lb302SynthView( instrument * _instrument, + QWidget * _parent ); + virtual ~lb302SynthView(); + +private: + virtual void modelChanged( void ); + + knob * m_vcfCutKnob; + knob * m_vcfResKnob; + knob * m_vcfDecKnob; + knob * m_vcfModKnob; + + knob * m_vcoFineDetuneKnob; + + knob * m_distKnob; + knob * m_waveKnob; + knob * m_slideDecKnob; + + ledCheckBox * m_slideToggle; + ledCheckBox * m_accentToggle; + ledCheckBox * m_deadToggle; + ledCheckBox * m_db24Toggle; + +} ; + #endif diff --git a/src/core/arp_and_chords_tab_widget.cpp b/src/core/arp_and_chords_tab_widget.cpp index 086c7cbeb..859451fad 100644 --- a/src/core/arp_and_chords_tab_widget.cpp +++ b/src/core/arp_and_chords_tab_widget.cpp @@ -181,11 +181,11 @@ const int ARP_GROUPBOX_HEIGHT = 240 - ARP_GROUPBOX_Y; arpAndChordsTabWidget::arpAndChordsTabWidget( instrumentTrack * _instrument_track ) : QWidget( _instrument_track->tabWidgetParent() ), - m_chordsEnabledModel( new boolModel( FALSE, FALSE, TRUE, 1 /* this */ ) ), + m_chordsEnabledModel( new boolModel( FALSE ) ), m_chordsModel( new comboBoxModel( /* this */ ) ), m_chordRangeModel( new floatModel( 1.0f, 1.0f, 9.0f, 1.0f /* this */ ) ), - m_arpEnabledModel( new boolModel( FALSE, FALSE, TRUE, 1/* this */ ) ), + m_arpEnabledModel( new boolModel( FALSE ) ), m_arpModel( new comboBoxModel( /* this */ ) ), m_arpRangeModel( new floatModel( 1.0f, 1.0f, 9.0f, 1.0f /* this */ ) ), diff --git a/src/core/effect.cpp b/src/core/effect.cpp index 3a0a9849d..90063c52d 100644 --- a/src/core/effect.cpp +++ b/src/core/effect.cpp @@ -42,7 +42,7 @@ effect::effect( const plugin::descriptor * _desc, m_noRun( FALSE ), m_running( FALSE ), m_bufferCount( 0 ), - m_enabledModel( TRUE, FALSE, TRUE, boolModel::defaultRelStep(), this ), + m_enabledModel( TRUE, this ), m_wetDryModel( 1.0f, 0.0f, 1.0f, 0.01f, this ), m_gateModel( 0.0f, 0.0f, 1.0f, 0.01f, this ), m_autoQuitModel( 1.0f, 1.0f, 8000.0f, 100.0f, this ) diff --git a/src/core/envelope_tab_widget.cpp b/src/core/envelope_tab_widget.cpp index 2ec337dd8..00c7df3bf 100644 --- a/src/core/envelope_tab_widget.cpp +++ b/src/core/envelope_tab_widget.cpp @@ -74,7 +74,7 @@ static const QString targetNames[envelopeTabWidget::TARGET_COUNT][2] = envelopeTabWidget::envelopeTabWidget( instrumentTrack * _instrument_track ) : QWidget( _instrument_track->tabWidgetParent() ), m_instrumentTrack( _instrument_track ), - m_filterEnabledModel( new boolModel( FALSE, FALSE, TRUE, 1 /* this */ ) ), + m_filterEnabledModel( new boolModel( FALSE /* this */ ) ), m_filterModel( new comboBoxModel( /* this */ ) ), m_filterCutModel( new floatModel( /* this */ ) ), m_filterResModel( new floatModel( /* this */ ) ) diff --git a/src/core/ladspa_control.cpp b/src/core/ladspa_control.cpp index db76bdab3..c93ad4d12 100644 --- a/src/core/ladspa_control.cpp +++ b/src/core/ladspa_control.cpp @@ -33,10 +33,8 @@ ladspaControl::ladspaControl( model * _parent, port_desc_t * _port, model( _parent ), m_link( _link ), m_port( _port ), - m_linkEnabledModel( _link, FALSE, TRUE, boolModel::defaultRelStep(), - this ), - m_toggledModel( FALSE, FALSE, TRUE, boolModel::defaultRelStep(), - this ), + m_linkEnabledModel( _link, this ), + m_toggledModel( FALSE, this ), m_knobModel( 0, 0, 0, 1, this ) { if( m_link ) diff --git a/src/widgets/knob.cpp b/src/widgets/knob.cpp index 6b1fc3e3b..c8e947c51 100644 --- a/src/widgets/knob.cpp +++ b/src/widgets/knob.cpp @@ -65,7 +65,7 @@ textFloat * knob::s_textFloat = NULL; knob::knob( int _knob_num, QWidget * _parent, const QString & _name ) : QWidget( _parent ), - autoModelView( new autoModel( 0, 0, 0, 1, NULL, TRUE ) ), + autoModelView( new knobModel( 0, 0, 0, 1, NULL, TRUE ) ), m_mouseOffset( 0.0f ), m_buttonPressed( FALSE ), m_hintTextBeforeValue( "" ),