From cf392f73fc1b2fcf771c4d38701eadcc248f43f7 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 10 Oct 2021 17:35:15 -0600 Subject: [PATCH] triggerbox: improve MIDI sidechain port naming --- libs/ardour/ardour/triggerbox.h | 2 +- libs/ardour/session.cc | 2 +- libs/ardour/triggerbox.cc | 21 +++++++++++++++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/libs/ardour/ardour/triggerbox.h b/libs/ardour/ardour/triggerbox.h index 7a2170960d..23a73ccf25 100644 --- a/libs/ardour/ardour/triggerbox.h +++ b/libs/ardour/ardour/triggerbox.h @@ -291,7 +291,7 @@ class LIBARDOUR_API TriggerBox : public Processor Trigger* peek_next_trigger (); void prepare_next (uint64_t current); - void add_midi_sidechain (); + void add_midi_sidechain (std::string const & name); enum TriggerMidiMapMode { AbletonPush, diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 4c4a25af99..63c7ac1772 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -2731,7 +2731,7 @@ Session::new_audio_track (int input_channels, int output_channels, RouteGroup* r * data type is AUDIO, the triggerbox will need * a sidehcain MIDI input to be able to be MIDI controlled */ - tb->add_midi_sidechain (); + tb->add_midi_sidechain (track->name()); } new_routes.push_back (track); diff --git a/libs/ardour/triggerbox.cc b/libs/ardour/triggerbox.cc index 432573e51b..022ae7427e 100644 --- a/libs/ardour/triggerbox.cc +++ b/libs/ardour/triggerbox.cc @@ -739,6 +739,8 @@ AudioTrigger::compute_and_set_length () mbpm.setBPMRange (metric.tempo().quarter_notes_per_minute () * 0.75, metric.tempo().quarter_notes_per_minute() * 1.5); double bpm = mbpm.estimateTempoOfSamples (data[0], data_length); + cerr << name() << " Estimated bpm " << bpm << " from " << (double) data_length / _box.session().sample_rate() << " seconds\n"; + const double seconds = (double) data_length / _box.session().sample_rate(); const double quarters = (seconds / 60.) * bpm; _barcnt = quarters / metric.meter().divisions_per_bar(); @@ -1123,13 +1125,19 @@ TriggerBox::trigger (Triggers::size_type n) } void -TriggerBox::add_midi_sidechain () +TriggerBox::add_midi_sidechain (std::string const & name) { if (!_sidechain) { - _sidechain.reset (new SideChain (_session, "trigger-side")); + _sidechain.reset (new SideChain (_session, name + "-trig")); _sidechain->activate (); _sidechain->input()->add_port ("", owner(), DataType::MIDI); // add a port, don't connect. - _sidechain->input()->nth (0)->connect (Config->get_default_trigger_input_port()); + boost::shared_ptr p = _sidechain->input()->nth (0); + + if (p) { + p->connect (Config->get_default_trigger_input_port()); + } else { + error << _("Could not create port for trigger side-chain") << endmsg; + } } } @@ -1631,6 +1639,9 @@ TriggerBox::get_state (void) if (_sidechain) { XMLNode* scnode = new XMLNode (X_("Sidechain")); + std::string port_name = _sidechain->input()->nth (0)->name(); + port_name = port_name.substr (0, port_name.find ('-')); + scnode->set_property (X_("name"), port_name); scnode->add_child_nocopy (_sidechain->get_state()); node.add_child_nocopy (*scnode); } @@ -1669,7 +1680,9 @@ TriggerBox::set_state (const XMLNode& node, int version) XMLNode* scnode = node.child (X_("Sidechain")); if (scnode) { - add_midi_sidechain (); + std::string name; + scnode->get_property (X_("name"), name); + add_midi_sidechain (name); assert (_sidechain); _sidechain->set_state (*scnode->children().front(), version); }