From e927781ee069afedd95e873a795a85b9e28434df Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Sun, 1 Sep 2013 21:35:16 -0700 Subject: [PATCH] Mixer: Add mute control to Gain module and Mute button to each mixer strip. --- mixer/src/Controller_Module.C | 13 ++++++++++-- mixer/src/Gain_Module.C | 38 +++++++++++++++++++++++++---------- mixer/src/Mixer_Strip.C | 15 ++++++++++++++ mixer/src/Mixer_Strip.H | 2 ++ 4 files changed, 55 insertions(+), 13 deletions(-) diff --git a/mixer/src/Controller_Module.C b/mixer/src/Controller_Module.C index 69eb3c2..a55afb2 100644 --- a/mixer/src/Controller_Module.C +++ b/mixer/src/Controller_Module.C @@ -395,9 +395,11 @@ Controller_Module::connect_to ( Port *p ) if ( p->hints.type == Module::Port::Hints::BOOLEAN ) { - Fl_Light_Button *o = new Fl_Light_Button( 0, 0, 40, 40, p->name() ); + Fl_Button *o = new Fl_Button( 0, 0, 40, 40, p->name() ); w = o; + o->type( FL_TOGGLE_BUTTON ); o->value( p->control_value() ); + o->selection_color( fl_color_average( FL_GRAY, FL_CYAN, 0.5 ) ); _type = TOGGLE; @@ -487,7 +489,14 @@ Controller_Module::connect_to ( Port *p ) else { /* HACK: hide label */ - w->labeltype( FL_NO_LABEL ); + if ( _type == TOGGLE ) + { + w->align( FL_ALIGN_INSIDE ); + } + else + { + w->labeltype( FL_NO_LABEL ); + } w->resize( x(), y(), this->w(), h() ); add( w ); resizable( w ); diff --git a/mixer/src/Gain_Module.C b/mixer/src/Gain_Module.C index 18a7d91..def7712 100644 --- a/mixer/src/Gain_Module.C +++ b/mixer/src/Gain_Module.C @@ -30,17 +30,33 @@ Gain_Module::Gain_Module ( ) add_port( Port( this, Port::INPUT, Port::AUDIO ) ); add_port( Port( this, Port::OUTPUT, Port::AUDIO ) ); - Port p( this, Port::INPUT, Port::CONTROL, "Gain (dB)" ); - p.hints.type = Port::Hints::LOGARITHMIC; - p.hints.ranged = true; - p.hints.minimum = -70.0f; - p.hints.maximum = 6.0f; - p.hints.default_value = 0.0f; + { + Port p( this, Port::INPUT, Port::CONTROL, "Gain (dB)" ); + p.hints.type = Port::Hints::LOGARITHMIC; + p.hints.ranged = true; + p.hints.minimum = -70.0f; + p.hints.maximum = 6.0f; + p.hints.default_value = 0.0f; - p.connect_to( new float ); - p.control_value( p.hints.default_value ); + p.connect_to( new float ); + p.control_value( p.hints.default_value ); - add_port( p ); + add_port( p ); + } + + { + Port p( this, Port::INPUT, Port::CONTROL, "Mute" ); + p.hints.type = Port::Hints::BOOLEAN; + p.hints.ranged = true; + p.hints.minimum = 0.0f; + p.hints.maximum = 1.0f; + p.hints.default_value = 0.0f; + + p.connect_to( new float ); + p.control_value( p.hints.default_value ); + + add_port( p ); + } end(); @@ -52,6 +68,7 @@ Gain_Module::Gain_Module ( ) Gain_Module::~Gain_Module ( ) { delete (float*)control_input[0].buffer(); + delete (float*)control_input[1].buffer(); log_destroy(); } @@ -88,7 +105,7 @@ Gain_Module::handle_sample_rate_change ( nframes_t n ) void Gain_Module::process ( nframes_t nframes ) { - const float gt = DB_CO( control_input[0].control_value() ); + const float gt = DB_CO( control_input[1].control_value() ? -90.f : control_input[0].control_value() ); sample_t gainbuf[nframes]; @@ -96,7 +113,6 @@ Gain_Module::process ( nframes_t nframes ) if ( use_gainbuf ) { - for ( int i = audio_input.size(); i--; ) { if ( audio_input[i].connected() && audio_output[i].connected() ) diff --git a/mixer/src/Mixer_Strip.C b/mixer/src/Mixer_Strip.C index 2b225d0..3068d1f 100644 --- a/mixer/src/Mixer_Strip.C +++ b/mixer/src/Mixer_Strip.C @@ -126,6 +126,7 @@ Mixer_Strip::get ( Log_Entry &e ) const /* since the default controllers aren't logged, we have to store * this setting as part of the mixer strip */ e.add( ":gain_mode", gain_controller->mode() ); + e.add( ":mute_mode", mute_controller->mode() ); if ( ! _group->single() ) e.add( ":group", _group ); else @@ -164,6 +165,10 @@ Mixer_Strip::set ( Log_Entry &e ) { _gain_controller_mode = atoi( v ); } + else if ( ! strcmp( s, ":mute_mode" ) ) + { + _mute_controller_mode = atoi( v ); + } else if ( ! strcmp( s, ":group" ) ) { int i; @@ -236,6 +241,7 @@ Mixer_Strip::chain ( Chain *c ) /* FIXME: don't hardcode this list of modules */ spatialization_controller->chain( c ); gain_controller->chain( c ); + mute_controller->chain( c ); jack_input_controller->chain( c ); meter_indicator->chain( c ); } @@ -422,6 +428,8 @@ Mixer_Strip::handle_module_added ( Module *m ) { gain_controller->connect_to( &m->control_input[0] ); gain_controller->mode( (Controller_Module::Mode)_gain_controller_mode ); + mute_controller->connect_to( &m->control_input[1] ); + mute_controller->mode( (Controller_Module::Mode)_mute_controller_mode ); } else if ( 0 == strcmp( m->name(), "Meter" ) ) { @@ -459,6 +467,8 @@ Mixer_Strip::update ( void ) meter_indicator->update(); gain_controller->update(); + mute_controller->update(); + if ( _chain ) { _chain->update(); @@ -490,6 +500,7 @@ Mixer_Strip::init ( ) { selection_color( FL_RED ); + _mute_controller_mode = 0; _gain_controller_mode = 0; _chain = 0; _group = 0; @@ -576,6 +587,10 @@ Mixer_Strip::init ( ) o->callback( ((Fl_Callback*)cb_handle), this ); o->when(FL_WHEN_RELEASE); } + { Controller_Module *o = mute_controller = new Controller_Module( true ); + o->pad( false ); + o->size( 45, 22 ); + } o->end(); } diff --git a/mixer/src/Mixer_Strip.H b/mixer/src/Mixer_Strip.H index 62668ff..fae6b22 100644 --- a/mixer/src/Mixer_Strip.H +++ b/mixer/src/Mixer_Strip.H @@ -91,6 +91,7 @@ private: chain has been added and the controller connected to a default module */ int _gain_controller_mode; + int _mute_controller_mode; Fl_Flip_Button *width_button; Fl_Flip_Button *tab_button; @@ -109,6 +110,7 @@ private: Fl_Box *spatialization_label; Controller_Module *gain_controller; + Controller_Module *mute_controller; Controller_Module *jack_input_controller; Controller_Module *spatialization_controller; Meter_Indicator_Module *meter_indicator;