@@ -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 ); | |||
@@ -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() ) | |||
@@ -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(); | |||
} | |||
@@ -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; | |||