X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fpanner_shell.cc;h=afc34c358a29410d5d30ede10c1a3b86841ff0af;hb=a232673454fa3583da22fdd55eea16200f90c438;hp=0297cba6ef3e36ef5f4e91f25f72bb6d7a1483a1;hpb=813ead6d8bc68bbacbb51aac4af7a7ec4583eaf3;p=ardour.git diff --git a/libs/ardour/panner_shell.cc b/libs/ardour/panner_shell.cc index 0297cba6ef..afc34c358a 100644 --- a/libs/ardour/panner_shell.cc +++ b/libs/ardour/panner_shell.cc @@ -21,7 +21,6 @@ #include #include -#include #include #include #include @@ -33,7 +32,6 @@ #include #include "pbd/cartesian.h" -#include "pbd/boost_debug.h" #include "pbd/convert.h" #include "pbd/error.h" #include "pbd/failed_constructor.h" @@ -44,12 +42,14 @@ #include "ardour/audio_buffer.h" #include "ardour/audioengine.h" +#include "ardour/boost_debug.h" #include "ardour/buffer_set.h" #include "ardour/debug.h" #include "ardour/pannable.h" #include "ardour/panner.h" #include "ardour/panner_manager.h" #include "ardour/panner_shell.h" +#include "ardour/profile.h" #include "ardour/session.h" #include "ardour/speakers.h" @@ -74,7 +74,7 @@ PannerShell::PannerShell (string name, Session& s, boost::shared_ptr p { if (is_send) { _pannable_internal.reset(new Pannable (s)); - if (Config->get_link_send_and_route_panner()) { + if (Config->get_link_send_and_route_panner() && !ARDOUR::Profile->get_mixbus()) { _panlinked = true; } else { _panlinked = false; @@ -119,8 +119,8 @@ PannerShell::configure_io (ChanCount in, ChanCount out) PannerInfo* pi = PannerManager::instance().select_panner (in, out, _user_selected_panner_uri); if (!pi) { - cerr << "No panner found: check that panners are being discovered correctly during startup.\n"; - assert (pi); + fatal << _("No panner found: check that panners are being discovered correctly during startup.") << endmsg; + abort(); /*NOTREACHED*/ } DEBUG_TRACE (DEBUG::Panning, string_compose (_("select panner: %1\n"), pi->descriptor.name.c_str())); @@ -171,15 +171,17 @@ PannerShell::set_state (const XMLNode& node, int version) { XMLNodeList nlist = node.children (); XMLNodeConstIterator niter; - const XMLProperty *prop; - LocaleGuard lg (X_("POSIX")); + XMLProperty const * prop; + LocaleGuard lg; if ((prop = node.property (X_("bypassed"))) != 0) { set_bypassed (string_is_affirmative (prop->value ())); } if ((prop = node.property (X_("linked-to-route"))) != 0) { - _panlinked = string_is_affirmative (prop->value ()); + if (!ARDOUR::Profile->get_mixbus()) { + _panlinked = string_is_affirmative (prop->value ()); + } } if ((prop = node.property (X_("user-panner"))) != 0) { @@ -187,7 +189,7 @@ PannerShell::set_state (const XMLNode& node, int version) } _panner.reset (); - + for (niter = nlist.begin(); niter != nlist.end(); ++niter) { if ((*niter)->name() == X_("Panner")) { @@ -233,6 +235,16 @@ PannerShell::set_state (const XMLNode& node, int version) _current_panner_uri = (*p)->descriptor.panner_uri; _panner_gui_uri = (*p)->descriptor.gui_uri; + if (_is_send) { + if (!_panlinked) { + _pannable_internal->set_panner(_panner); + } else { + _force_reselect = true; + } + } else { + _pannable_route->set_panner(_panner); + } + if (_panner->set_state (**niter, version) == 0) { return -1; } @@ -274,13 +286,13 @@ PannerShell::distribute_no_automation (BufferSet& inbufs, BufferSet& outbufs, pf AudioBuffer& dst = outbufs.get_audio(0); - if (gain_coeff == 0.0f) { + if (gain_coeff == GAIN_COEFF_ZERO) { /* gain was zero, so make it silent */ dst.silence (nframes); - } else if (gain_coeff == 1.0f){ + } else if (gain_coeff == GAIN_COEFF_UNITY){ /* mix all input buffers into the output */ @@ -375,14 +387,7 @@ PannerShell::run (BufferSet& inbufs, BufferSet& outbufs, framepos_t start_frame, if (!(as & Play || ((as & Touch) && !_panner->touching()))) { - // Speed quietning - gain_t gain_coeff = 1.0; - - if (fabsf(_session.transport_speed()) > 1.5f && Config->get_quieten_at_speed ()) { - gain_coeff = speed_quietning; - } - - distribute_no_automation (inbufs, outbufs, nframes, gain_coeff); + distribute_no_automation (inbufs, outbufs, nframes, 1.0); } else { @@ -403,8 +408,9 @@ PannerShell::set_bypassed (bool yn) if (yn == _bypassed) { return; } - + _bypassed = yn; + _session.set_dirty (); Changed (); /* EMIT SIGNAL */ }