@@ -395,9 +395,11 @@ Controller_Module::connect_to ( Port *p ) | |||||
if ( p->hints.type == Module::Port::Hints::BOOLEAN ) | 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; | w = o; | ||||
o->type( FL_TOGGLE_BUTTON ); | |||||
o->value( p->control_value() ); | o->value( p->control_value() ); | ||||
o->selection_color( fl_color_average( FL_GRAY, FL_CYAN, 0.5 ) ); | |||||
_type = TOGGLE; | _type = TOGGLE; | ||||
@@ -487,7 +489,14 @@ Controller_Module::connect_to ( Port *p ) | |||||
else | else | ||||
{ | { | ||||
/* HACK: hide label */ | /* 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() ); | w->resize( x(), y(), this->w(), h() ); | ||||
add( w ); | add( w ); | ||||
resizable( w ); | resizable( w ); | ||||
@@ -30,17 +30,33 @@ Gain_Module::Gain_Module ( ) | |||||
add_port( Port( this, Port::INPUT, Port::AUDIO ) ); | add_port( Port( this, Port::INPUT, Port::AUDIO ) ); | ||||
add_port( Port( this, Port::OUTPUT, 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(); | end(); | ||||
@@ -52,6 +68,7 @@ Gain_Module::Gain_Module ( ) | |||||
Gain_Module::~Gain_Module ( ) | Gain_Module::~Gain_Module ( ) | ||||
{ | { | ||||
delete (float*)control_input[0].buffer(); | delete (float*)control_input[0].buffer(); | ||||
delete (float*)control_input[1].buffer(); | |||||
log_destroy(); | log_destroy(); | ||||
} | } | ||||
@@ -88,7 +105,7 @@ Gain_Module::handle_sample_rate_change ( nframes_t n ) | |||||
void | void | ||||
Gain_Module::process ( nframes_t nframes ) | 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]; | sample_t gainbuf[nframes]; | ||||
@@ -96,7 +113,6 @@ Gain_Module::process ( nframes_t nframes ) | |||||
if ( use_gainbuf ) | if ( use_gainbuf ) | ||||
{ | { | ||||
for ( int i = audio_input.size(); i--; ) | for ( int i = audio_input.size(); i--; ) | ||||
{ | { | ||||
if ( audio_input[i].connected() && audio_output[i].connected() ) | 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 | /* since the default controllers aren't logged, we have to store | ||||
* this setting as part of the mixer strip */ | * this setting as part of the mixer strip */ | ||||
e.add( ":gain_mode", gain_controller->mode() ); | e.add( ":gain_mode", gain_controller->mode() ); | ||||
e.add( ":mute_mode", mute_controller->mode() ); | |||||
if ( ! _group->single() ) | if ( ! _group->single() ) | ||||
e.add( ":group", _group ); | e.add( ":group", _group ); | ||||
else | else | ||||
@@ -164,6 +165,10 @@ Mixer_Strip::set ( Log_Entry &e ) | |||||
{ | { | ||||
_gain_controller_mode = atoi( v ); | _gain_controller_mode = atoi( v ); | ||||
} | } | ||||
else if ( ! strcmp( s, ":mute_mode" ) ) | |||||
{ | |||||
_mute_controller_mode = atoi( v ); | |||||
} | |||||
else if ( ! strcmp( s, ":group" ) ) | else if ( ! strcmp( s, ":group" ) ) | ||||
{ | { | ||||
int i; | int i; | ||||
@@ -236,6 +241,7 @@ Mixer_Strip::chain ( Chain *c ) | |||||
/* FIXME: don't hardcode this list of modules */ | /* FIXME: don't hardcode this list of modules */ | ||||
spatialization_controller->chain( c ); | spatialization_controller->chain( c ); | ||||
gain_controller->chain( c ); | gain_controller->chain( c ); | ||||
mute_controller->chain( c ); | |||||
jack_input_controller->chain( c ); | jack_input_controller->chain( c ); | ||||
meter_indicator->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->connect_to( &m->control_input[0] ); | ||||
gain_controller->mode( (Controller_Module::Mode)_gain_controller_mode ); | 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" ) ) | else if ( 0 == strcmp( m->name(), "Meter" ) ) | ||||
{ | { | ||||
@@ -459,6 +467,8 @@ Mixer_Strip::update ( void ) | |||||
meter_indicator->update(); | meter_indicator->update(); | ||||
gain_controller->update(); | gain_controller->update(); | ||||
mute_controller->update(); | |||||
if ( _chain ) | if ( _chain ) | ||||
{ | { | ||||
_chain->update(); | _chain->update(); | ||||
@@ -490,6 +500,7 @@ Mixer_Strip::init ( ) | |||||
{ | { | ||||
selection_color( FL_RED ); | selection_color( FL_RED ); | ||||
_mute_controller_mode = 0; | |||||
_gain_controller_mode = 0; | _gain_controller_mode = 0; | ||||
_chain = 0; | _chain = 0; | ||||
_group = 0; | _group = 0; | ||||
@@ -576,6 +587,10 @@ Mixer_Strip::init ( ) | |||||
o->callback( ((Fl_Callback*)cb_handle), this ); | o->callback( ((Fl_Callback*)cb_handle), this ); | ||||
o->when(FL_WHEN_RELEASE); | o->when(FL_WHEN_RELEASE); | ||||
} | } | ||||
{ Controller_Module *o = mute_controller = new Controller_Module( true ); | |||||
o->pad( false ); | |||||
o->size( 45, 22 ); | |||||
} | |||||
o->end(); | o->end(); | ||||
} | } | ||||
@@ -91,6 +91,7 @@ private: | |||||
chain has been added and the controller connected to a default | chain has been added and the controller connected to a default | ||||
module */ | module */ | ||||
int _gain_controller_mode; | int _gain_controller_mode; | ||||
int _mute_controller_mode; | |||||
Fl_Flip_Button *width_button; | Fl_Flip_Button *width_button; | ||||
Fl_Flip_Button *tab_button; | Fl_Flip_Button *tab_button; | ||||
@@ -109,6 +110,7 @@ private: | |||||
Fl_Box *spatialization_label; | Fl_Box *spatialization_label; | ||||
Controller_Module *gain_controller; | Controller_Module *gain_controller; | ||||
Controller_Module *mute_controller; | |||||
Controller_Module *jack_input_controller; | Controller_Module *jack_input_controller; | ||||
Controller_Module *spatialization_controller; | Controller_Module *spatialization_controller; | ||||
Meter_Indicator_Module *meter_indicator; | Meter_Indicator_Module *meter_indicator; | ||||