From 5c6e8954ed4e186771760b19d72b5d3c795ef4e2 Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Sat, 8 Aug 2020 18:41:03 -0700 Subject: [PATCH 1/5] Add pre/post fader to foldback send creation add position param to send creation default all to prefader as first step --- gtk2_ardour/foldback_strip.cc | 7 ++++--- gtk2_ardour/processor_box.cc | 2 +- libs/ardour/ardour/route.h | 2 +- libs/ardour/route.cc | 10 ++++++++-- libs/surfaces/osc/osc.cc | 4 ++-- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/gtk2_ardour/foldback_strip.cc b/gtk2_ardour/foldback_strip.cc index 56c1cae126..c946ff768c 100644 --- a/gtk2_ardour/foldback_strip.cc +++ b/gtk2_ardour/foldback_strip.cc @@ -416,7 +416,7 @@ FoldbackStrip::init () global_vpacker.set_border_width (1); global_vpacker.set_spacing (2); - // Packing is from top down to the send box. Thje send box + // Packing is from top down to the send box. The send box // needs the most room and takes all left over space // Everything below the send box is packed from the bottom up // the panner is the last thing to pack as it doesn't always show @@ -1599,7 +1599,7 @@ FoldbackStrip::create_selected_sends (bool include_buses) if ((*i)->is_selected() && !(*i)->is_master() && !(*i)->is_monitor()) { boost::shared_ptr rt = boost::dynamic_pointer_cast(*i); if (rt) { - rt->add_foldback_send (_route); + rt->add_foldback_send (_route, false); } } } @@ -1664,7 +1664,8 @@ FoldbackStrip::duplicate_current_fb () if (i->sends_only) { boost::shared_ptr rt (i->r.lock()); boost::shared_ptr old_snd = rt->internal_send_for (old_fb); - rt->add_foldback_send (new_fb); + // XXXX needs false to be replaced with value from duplicated send + rt->add_foldback_send (new_fb, false); if (old_snd) { float old_gain = old_snd->gain_control()->get_value (); boost::shared_ptr new_snd = rt->internal_send_for (new_fb); diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 25b58b7f25..ff0885654b 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -2821,7 +2821,7 @@ ProcessorBox::choose_aux (boost::weak_ptr wr) } if (target->is_foldbackbus ()) { - _route->add_foldback_send (target); + _route->add_foldback_send (target, false); } else { _session->add_internal_send (target, _placement, _route); } diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index e027990452..7429203587 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -417,7 +417,7 @@ public: PBD::Signal1 SelectedChanged; int add_aux_send (boost::shared_ptr, boost::shared_ptr); - int add_foldback_send (boost::shared_ptr); + int add_foldback_send (boost::shared_ptr, bool post_fader); void remove_aux_or_listen (boost::shared_ptr); /** diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index dd07ddc0b9..fe24a5a120 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -3384,10 +3384,15 @@ Route::add_aux_send (boost::shared_ptr route, boost::shared_ptr route) +Route::add_foldback_send (boost::shared_ptr route, bool post_fader) { assert (route != _session.monitor_out ()); - boost::shared_ptr before = before_processor_for_placement (PreFader); + boost::shared_ptr before; + if (post_fader) { + before = before_processor_for_placement (PostFader); + } else { + before = before_processor_for_placement (PreFader); + } { Glib::Threads::RWLock::ReaderLock rm (_processor_lock); @@ -3413,6 +3418,7 @@ Route::add_foldback_send (boost::shared_ptr route) } listener->panner_shell()->set_linked_to_route (false); + listener->set_pre_fader (!post_fader); add_processor (listener, before); } catch (failed_constructor& err) { diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 8212a25121..7f1606079a 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -4323,7 +4323,7 @@ OSC::sel_new_personal_send (char *foldback, lo_message msg) bool s_only = true; if (!rt->feeds (lsn_rt, &s_only)) { // create send - rt->add_foldback_send (lsn_rt); + rt->add_foldback_send (lsn_rt, false); //boost::shared_ptr snd = rt->internal_send_for (aux); session->dirty (); return 0; @@ -6608,7 +6608,7 @@ OSC::cue_new_send (string rt_name, lo_message msg) bool s_only = true; if (!rt_send->feeds (aux, &s_only)) { // create send - rt_send->add_foldback_send (aux); + rt_send->add_foldback_send (aux, false); boost::shared_ptr snd = rt_send->internal_send_for (aux); session->dirty (); return 0; From 9d1ff57b5846341dc7b0f32e3c4f30711626a994 Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Sat, 8 Aug 2020 18:43:06 -0700 Subject: [PATCH 2/5] Change FB GUI to show pre/post foldback with right color --- gtk2_ardour/foldback_strip.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gtk2_ardour/foldback_strip.cc b/gtk2_ardour/foldback_strip.cc index c946ff768c..7ad8cc8d0d 100644 --- a/gtk2_ardour/foldback_strip.cc +++ b/gtk2_ardour/foldback_strip.cc @@ -84,7 +84,11 @@ FoldbackSend::FoldbackSend (boost::shared_ptr snd, \ _button.set_fallthrough_to_parent(true); _button.set_led_left (true); _button.signal_led_clicked.connect (sigc::mem_fun (*this, &FoldbackSend::led_clicked)); - _button.set_name ("processor prefader"); + if (_send_proc->get_pre_fader ()) { + _button.set_name ("processor prefader"); + } else { + _button.set_name ("processor postfader"); + } _button.set_layout_ellipsize_width (PX_SCALE(_width) * PANGO_SCALE); _button.set_text_ellipsize (Pango::ELLIPSIZE_END); name_changed (); From 855b5c5522bdae17559d89ff2f6a0f9cc02c0f7c Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Sat, 8 Aug 2020 21:16:33 -0700 Subject: [PATCH 3/5] Add foldback to selected tracks now pre or post fader --- gtk2_ardour/foldback_strip.cc | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/gtk2_ardour/foldback_strip.cc b/gtk2_ardour/foldback_strip.cc index 7ad8cc8d0d..30e3d41ad5 100644 --- a/gtk2_ardour/foldback_strip.cc +++ b/gtk2_ardour/foldback_strip.cc @@ -1590,20 +1590,17 @@ FoldbackStrip::ab_plugins () } void -FoldbackStrip::create_selected_sends (bool include_buses) +FoldbackStrip::create_selected_sends (bool post_fader) { boost::shared_ptr slist (new StripableList); - PresentationInfo::Flag fl = PresentationInfo::AudioTrack; - if (include_buses) { - fl = PresentationInfo::MixerRoutes; - } + PresentationInfo::Flag fl = PresentationInfo::MixerRoutes; _session->get_stripables (*slist, fl); for (StripableList::iterator i = (*slist).begin(); i != (*slist).end(); ++i) { if ((*i)->is_selected() && !(*i)->is_master() && !(*i)->is_monitor()) { boost::shared_ptr rt = boost::dynamic_pointer_cast(*i); if (rt) { - rt->add_foldback_send (_route, false); + rt->add_foldback_send (_route, post_fader); } } } @@ -1631,11 +1628,11 @@ FoldbackStrip::build_sends_menu () menu->set_name ("ArdourContextMenu"); items.push_back ( - MenuElem(_("Assign selected tracks (prefader)"), sigc::bind (sigc::mem_fun (*this, &FoldbackStrip::create_selected_sends), false)) + MenuElem(_("Assign selected tracks and buses (prefader)"), sigc::bind (sigc::mem_fun (*this, &FoldbackStrip::create_selected_sends), false)) ); items.push_back ( - MenuElem(_("Assign selected tracks and buses (prefader)"), sigc::bind (sigc::mem_fun (*this, &FoldbackStrip::create_selected_sends), true))); + MenuElem(_("Assign selected tracks and buses (postfader)"), sigc::bind (sigc::mem_fun (*this, &FoldbackStrip::create_selected_sends), true))); items.push_back (MenuElem(_("Copy track/bus gains to sends"), sigc::mem_fun (*this, &RouteUI::set_sends_gain_from_track))); items.push_back (MenuElem(_("Set sends gain to -inf"), sigc::mem_fun (*this, &RouteUI::set_sends_gain_to_zero))); From 0a4dddc0720c121f631119ce5b8582f8ac3b0b1e Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Sat, 8 Aug 2020 21:29:09 -0700 Subject: [PATCH 4/5] Make duplicate foldback bus copy pre/postfader positon --- gtk2_ardour/foldback_strip.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/foldback_strip.cc b/gtk2_ardour/foldback_strip.cc index 30e3d41ad5..dcf3903db6 100644 --- a/gtk2_ardour/foldback_strip.cc +++ b/gtk2_ardour/foldback_strip.cc @@ -1665,8 +1665,9 @@ FoldbackStrip::duplicate_current_fb () if (i->sends_only) { boost::shared_ptr rt (i->r.lock()); boost::shared_ptr old_snd = rt->internal_send_for (old_fb); - // XXXX needs false to be replaced with value from duplicated send - rt->add_foldback_send (new_fb, false); + boost::shared_ptr old_proc = old_snd; + bool old_pre = old_proc->get_pre_fader (); + rt->add_foldback_send (new_fb, !old_pre); if (old_snd) { float old_gain = old_snd->gain_control()->get_value (); boost::shared_ptr new_snd = rt->internal_send_for (new_fb); From dde2ebdcb3ad7cf0764d34707eb9a109ed09b9b6 Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Sun, 9 Aug 2020 09:10:24 -0700 Subject: [PATCH 5/5] Add menu item per send to change pre/post fader --- gtk2_ardour/foldback_strip.cc | 44 +++++++++++++++++++++++++++++++++++ gtk2_ardour/foldback_strip.h | 1 + 2 files changed, 45 insertions(+) diff --git a/gtk2_ardour/foldback_strip.cc b/gtk2_ardour/foldback_strip.cc index dcf3903db6..de3834d13c 100644 --- a/gtk2_ardour/foldback_strip.cc +++ b/gtk2_ardour/foldback_strip.cc @@ -263,6 +263,15 @@ FoldbackSend::build_send_menu () items.push_back ( MenuElem(_("Set send gain to 0dB"), sigc::bind (sigc::mem_fun (*this, &FoldbackSend::set_gain), 1.0)) ); + if (_send_proc->get_pre_fader ()) { + items.push_back ( + MenuElem(_("Set send post fader"), sigc::bind (sigc::mem_fun (*this, &FoldbackSend::set_send_position), true)) + ); + } else { + items.push_back ( + MenuElem(_("Set send pre fader"), sigc::bind (sigc::mem_fun (*this, &FoldbackSend::set_send_position), false)) + ); + } items.push_back (MenuElem(_("Remove This Send"), sigc::mem_fun (*this, &FoldbackSend::remove_me))); return menu; @@ -285,6 +294,41 @@ FoldbackSend::set_gain (float new_gain) } +void +FoldbackSend::set_send_position (bool post) +{ + boost::shared_ptr new_snd_rt = _send_route; + boost::shared_ptr new_fb_rt = _foldback_route; + float new_level = _send->gain_control()->get_value(); + bool new_enable = _send_proc->enabled (); + bool is_pan = false; + float new_pan = 0.0; + if (_foldback_route->input()->n_ports().n_audio() == 2) { + is_pan = true; + boost::shared_ptr pannable = _send_del->panner()->pannable(); + boost::shared_ptr ac; + ac = pannable->pan_azimuth_control; + new_pan = ac->get_value(); + } + + remove_me (); + new_snd_rt->add_foldback_send (new_fb_rt, post); + + boost::shared_ptr snd = new_snd_rt->internal_send_for (new_fb_rt); + if (snd) { + snd->gain_control()->set_value(new_level, Controllable::NoGroup); + boost::shared_ptr snd_proc = boost::dynamic_pointer_cast (snd); + snd_proc->enable (new_enable); + if (is_pan) { + boost::shared_ptr new_del = boost::dynamic_pointer_cast (snd); + boost::shared_ptr pannable = new_del->panner()->pannable(); + boost::shared_ptr ac; + ac = pannable->pan_azimuth_control; + ac->set_value(new_pan, Controllable::NoGroup); + } + } +} + void FoldbackSend::remove_me () { diff --git a/gtk2_ardour/foldback_strip.h b/gtk2_ardour/foldback_strip.h index a4902cb8c7..5de7338542 100644 --- a/gtk2_ardour/foldback_strip.h +++ b/gtk2_ardour/foldback_strip.h @@ -94,6 +94,7 @@ private: gboolean button_press (GdkEventButton*); Gtk::Menu* build_send_menu (); void set_gain (float new_gain); + void set_send_position (bool post); void remove_me (); void route_property_changed (const PBD::PropertyChange&);