FP8: update for Mixbus v9

* add expander/gate
* show/hide mixer-strip controls
* add plugin-presets for channelstrip (if any)
This commit is contained in:
Robin Gareus 2023-03-28 00:31:12 +02:00
parent 9ef6ee21de
commit 886d7b9069
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 122 additions and 28 deletions

View File

@ -1295,37 +1295,64 @@ FaderPort8::assign_plugin_presets (std::shared_ptr<PluginInsert> pi)
} }
void void
FaderPort8::build_well_known_processor_ctrls (std::shared_ptr<Stripable> s, bool eq) FaderPort8::build_well_known_processor_ctrls (std::shared_ptr<Stripable> s, int which)
{ {
#define PUSH_BACK_NON_NULL(N, C) do {if (C) { _proc_params.push_back (ProcessorCtrl (N, C)); }} while (0) #define PUSH_BACK_NON_NULL(N, C) do {if (C) { _proc_params.push_back (ProcessorCtrl (N, C)); }} while (0)
_proc_params.clear (); _proc_params.clear ();
if (eq) { switch (which) {
int cnt = s->eq_band_cnt(); case 1:
{ /* EQ */
int cnt = s->eq_band_cnt();
#ifdef MIXBUS32C #ifdef MIXBUS32C
PUSH_BACK_NON_NULL ("Flt In", s->filter_enable_controllable (true)); // both HP/LP PUSH_BACK_NON_NULL ("Flt In", s->filter_enable_controllable (true)); // both HP/LP
PUSH_BACK_NON_NULL ("HP Freq", s->filter_freq_controllable (true)); PUSH_BACK_NON_NULL ("HP Freq", s->filter_freq_controllable (true));
PUSH_BACK_NON_NULL ("LP Freq", s->filter_freq_controllable (false)); PUSH_BACK_NON_NULL ("LP Freq", s->filter_freq_controllable (false));
PUSH_BACK_NON_NULL ("EQ In", s->eq_enable_controllable ()); PUSH_BACK_NON_NULL ("EQ In", s->eq_enable_controllable ());
#elif defined (MIXBUS) #elif defined (MIXBUS)
PUSH_BACK_NON_NULL ("EQ In", s->eq_enable_controllable ()); PUSH_BACK_NON_NULL ("EQ In", s->eq_enable_controllable ());
PUSH_BACK_NON_NULL ("HP Freq", s->filter_freq_controllable (true)); PUSH_BACK_NON_NULL ("HP Freq", s->filter_freq_controllable (true));
#endif #endif
for (int band = 0; band < cnt; ++band) { for (int band = 0; band < cnt; ++band) {
std::string bn = s->eq_band_name (band); std::string bn = s->eq_band_name (band);
PUSH_BACK_NON_NULL (string_compose ("Gain %1", bn), s->eq_gain_controllable (band)); PUSH_BACK_NON_NULL (string_compose ("Gain %1", bn), s->eq_gain_controllable (band));
PUSH_BACK_NON_NULL (string_compose ("Freq %1", bn), s->eq_freq_controllable (band)); PUSH_BACK_NON_NULL (string_compose ("Freq %1", bn), s->eq_freq_controllable (band));
PUSH_BACK_NON_NULL (string_compose ("Band %1", bn), s->eq_q_controllable (band)); PUSH_BACK_NON_NULL (string_compose ("Band %1", bn), s->eq_q_controllable (band));
PUSH_BACK_NON_NULL (string_compose ("Shape %1", bn), s->eq_shape_controllable (band)); PUSH_BACK_NON_NULL (string_compose ("Shape %1", bn), s->eq_shape_controllable (band));
} }
} else { }
PUSH_BACK_NON_NULL ("Comp In", s->comp_enable_controllable ()); break;
PUSH_BACK_NON_NULL ("Threshold", s->comp_threshold_controllable ()); case 2:
PUSH_BACK_NON_NULL ("Makeup", s->comp_makeup_controllable ()); PUSH_BACK_NON_NULL ("Comp In", s->comp_enable_controllable ());
PUSH_BACK_NON_NULL ("Speed", s->comp_speed_controllable ()); PUSH_BACK_NON_NULL ("Threshold", s->comp_threshold_controllable ());
PUSH_BACK_NON_NULL ("Mode", s->comp_mode_controllable ()); PUSH_BACK_NON_NULL ("Makeup", s->comp_makeup_controllable ());
PUSH_BACK_NON_NULL ("Speed", s->comp_speed_controllable ());
PUSH_BACK_NON_NULL ("Mode", s->comp_mode_controllable ());
PUSH_BACK_NON_NULL ("Makeup", s->comp_makeup_controllable ());
PUSH_BACK_NON_NULL ("Ratio", s->comp_ratio_controllable ());
PUSH_BACK_NON_NULL ("Attack", s->comp_attack_controllable ());
PUSH_BACK_NON_NULL ("Release", s->comp_release_controllable ());
PUSH_BACK_NON_NULL ("Emphasis", s->comp_key_filter_freq_controllable ());
break;
case 3:
PUSH_BACK_NON_NULL ("Gate In", s->gate_enable_controllable ());
PUSH_BACK_NON_NULL ("Exp", s->gate_mode_controllable ());
PUSH_BACK_NON_NULL ("Threshold", s->gate_threshold_controllable ());
PUSH_BACK_NON_NULL ("Depth", s->gate_depth_controllable ());
PUSH_BACK_NON_NULL ("Attack", s->gate_attack_controllable ());
PUSH_BACK_NON_NULL ("Release", s->gate_release_controllable ());
PUSH_BACK_NON_NULL ("Exp Ratio", s->gate_ratio_controllable ());
PUSH_BACK_NON_NULL ("Exp Knee", s->gate_knee_controllable ());
PUSH_BACK_NON_NULL ("Gate Hyst", s->gate_hysteresis_controllable ());
PUSH_BACK_NON_NULL ("Gate Hold", s->gate_hold_controllable ());
PUSH_BACK_NON_NULL ("SC Enable", s->gate_key_filter_enable_controllable ());
PUSH_BACK_NON_NULL ("SC Freq", s->gate_key_filter_freq_controllable ());
break;
default:
assert (0);
break;
} }
} }
@ -1358,11 +1385,58 @@ FaderPort8::select_plugin (int num)
} }
if (num < 0) { if (num < 0) {
build_well_known_processor_ctrls (r, num == -1); processor_connections.drop_connections ();
r->DropReferences.connect (processor_connections, MISSING_INVALIDATOR, boost::bind (&FP8Controls::set_fader_mode, &_ctrls, ModeTrack), this);
build_well_known_processor_ctrls (r, -num);
assign_processor_ctrls (); assign_processor_ctrls ();
_showing_well_known = num; _showing_well_known = num;
#ifdef MIXBUS
/* find proc */
std::shared_ptr<Processor> proc;
std::shared_ptr<PluginInsert> pi;
for (uint32_t i = 0; 0 != (proc = r->nth_plugin (i)); ++i) {
switch (std::dynamic_pointer_cast<PluginInsert> (proc)->channelstrip ()) {
case Processor::MBComp:
if (num == -2) {
pi = std::dynamic_pointer_cast<PluginInsert> (proc);
}
break;
case Processor::MBGate:
if (num == -3) {
pi = std::dynamic_pointer_cast<PluginInsert> (proc);
}
break;
case Processor::MBEq:
if (num == -1) {
pi = std::dynamic_pointer_cast<PluginInsert> (proc);
}
break;
default:
break;
}
}
if (!pi) {
return;
}
_plugin_insert = std::weak_ptr<ARDOUR::PluginInsert> (pi);
std::shared_ptr<ARDOUR::Plugin> plugin = pi->plugin ();
plugin->PresetAdded.connect (processor_connections, MISSING_INVALIDATOR, boost::bind (&FaderPort8::preset_changed, this), this);
plugin->PresetRemoved.connect (processor_connections, MISSING_INVALIDATOR, boost::bind (&FaderPort8::preset_changed, this), this);
plugin->PresetLoaded.connect (processor_connections, MISSING_INVALIDATOR, boost::bind (&FaderPort8::preset_changed, this), this);
plugin->PresetDirty.connect (processor_connections, MISSING_INVALIDATOR, boost::bind (&FaderPort8::preset_changed, this), this);
if (_auto_pluginui) {
pi->ShowUI (); /* EMIT SIGNAL */
}
#endif
return; return;
} }
_showing_well_known = 0; _showing_well_known = 0;
std::shared_ptr<Processor> proc = r->nth_plugin (num); std::shared_ptr<Processor> proc = r->nth_plugin (num);
@ -1496,6 +1570,7 @@ FaderPort8::spill_plugins ()
int spillwidth = N_STRIPS; int spillwidth = N_STRIPS;
bool have_well_known_eq = false; bool have_well_known_eq = false;
bool have_well_known_comp = false; bool have_well_known_comp = false;
bool have_well_known_gate = false;
// reserve last slot(s) for "well-known" // reserve last slot(s) for "well-known"
if (r->eq_band_cnt() > 0) { if (r->eq_band_cnt() > 0) {
@ -1506,8 +1581,12 @@ FaderPort8::spill_plugins ()
--spillwidth; --spillwidth;
have_well_known_comp = true; have_well_known_comp = true;
} }
if (r->gate_enable_controllable ()) {
--spillwidth;
have_well_known_gate = true;
}
if (n_plugins == 0 && !have_well_known_eq && !have_well_known_comp) { if (n_plugins == 0 && !have_well_known_eq && !have_well_known_comp && !have_well_known_gate) {
_ctrls.set_fader_mode (ModeTrack); _ctrls.set_fader_mode (ModeTrack);
return; return;
} }
@ -1550,15 +1629,15 @@ FaderPort8::spill_plugins ()
_ctrls.strip(id).unset_controllables (); _ctrls.strip(id).unset_controllables ();
} }
if (have_well_known_comp) { if (have_well_known_gate) {
assert (id < N_STRIPS); assert (id < N_STRIPS);
boost::function<void ()> cb (boost::bind (&FaderPort8::select_plugin, this, -2)); boost::function<void ()> cb (boost::bind (&FaderPort8::select_plugin, this, -3));
_ctrls.strip(id).unset_controllables (FP8Strip::CTRL_ALL & ~FP8Strip::CTRL_TEXT & ~FP8Strip::CTRL_SELECT); _ctrls.strip(id).unset_controllables (FP8Strip::CTRL_ALL & ~FP8Strip::CTRL_TEXT & ~FP8Strip::CTRL_SELECT);
_ctrls.strip(id).set_select_cb (cb); _ctrls.strip(id).set_select_cb (cb);
_ctrls.strip(id).select_button ().set_color (0xffff00ff); _ctrls.strip(id).select_button ().set_color (0xffff00ff);
_ctrls.strip(id).select_button ().set_active (true); _ctrls.strip(id).select_button ().set_active (true);
_ctrls.strip(id).select_button ().set_blinking (false); _ctrls.strip(id).select_button ().set_blinking (false);
_ctrls.strip(id).set_text_line (0, "Comp"); _ctrls.strip(id).set_text_line (0, "Gate");
_ctrls.strip(id).set_text_line (1, "Built-In"); _ctrls.strip(id).set_text_line (1, "Built-In");
_ctrls.strip(id).set_text_line (2, "--"); _ctrls.strip(id).set_text_line (2, "--");
_ctrls.strip(id).set_text_line (3, ""); _ctrls.strip(id).set_text_line (3, "");
@ -1578,6 +1657,20 @@ FaderPort8::spill_plugins ()
_ctrls.strip(id).set_text_line (3, ""); _ctrls.strip(id).set_text_line (3, "");
++id; ++id;
} }
if (have_well_known_comp) {
assert (id < N_STRIPS);
boost::function<void ()> cb (boost::bind (&FaderPort8::select_plugin, this, -2));
_ctrls.strip(id).unset_controllables (FP8Strip::CTRL_ALL & ~FP8Strip::CTRL_TEXT & ~FP8Strip::CTRL_SELECT);
_ctrls.strip(id).set_select_cb (cb);
_ctrls.strip(id).select_button ().set_color (0xffff00ff);
_ctrls.strip(id).select_button ().set_active (true);
_ctrls.strip(id).select_button ().set_blinking (false);
_ctrls.strip(id).set_text_line (0, "Comp");
_ctrls.strip(id).set_text_line (1, "Built-In");
_ctrls.strip(id).set_text_line (2, "--");
_ctrls.strip(id).set_text_line (3, "");
++id;
}
assert (id == N_STRIPS); assert (id == N_STRIPS);
} }
@ -1638,6 +1731,7 @@ FaderPort8::assign_sends ()
} }
#ifdef MIXBUS // master-assign on last solo #ifdef MIXBUS // master-assign on last solo
_ctrls.strip(N_STRIPS - 1).set_solo_controllable (s->master_send_enable_controllable ()); _ctrls.strip(N_STRIPS - 1).set_solo_controllable (s->master_send_enable_controllable ());
AccessAction ("Mixer", "ShowStripBus");
#endif #endif
/* set select buttons */ /* set select buttons */
assigned_stripable_connections.drop_connections (); assigned_stripable_connections.drop_connections ();

View File

@ -166,7 +166,7 @@ private:
void spill_plugins (); void spill_plugins ();
void assign_processor_ctrls (); void assign_processor_ctrls ();
bool assign_plugin_presets (std::shared_ptr<ARDOUR::PluginInsert>); bool assign_plugin_presets (std::shared_ptr<ARDOUR::PluginInsert>);
void build_well_known_processor_ctrls (std::shared_ptr<ARDOUR::Stripable>, bool); void build_well_known_processor_ctrls (std::shared_ptr<ARDOUR::Stripable>, int);
void preset_changed (); void preset_changed ();
void select_plugin (int num); void select_plugin (int num);
void select_plugin_preset (size_t num); void select_plugin_preset (size_t num);