From e33d4553b2b333c30835b00741fc5c1fd0e2b36d Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 3 May 2010 18:58:38 +0000 Subject: more solo model work, including a GUI fix for mute button state when the route is self-soloed git-svn-id: svn://localhost/ardour2/branches/3.0@7048 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/mute_master.h | 2 ++ libs/ardour/delivery.cc | 2 +- libs/ardour/mute_master.cc | 15 ++++++++++++--- libs/ardour/route.cc | 8 ++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) (limited to 'libs') diff --git a/libs/ardour/ardour/mute_master.h b/libs/ardour/ardour/mute_master.h index a0207f9817..ad383d8833 100644 --- a/libs/ardour/ardour/mute_master.h +++ b/libs/ardour/ardour/mute_master.h @@ -72,6 +72,7 @@ class MuteMaster : public SessionHandleRef, public PBD::Stateful MutePoint mute_points() const { return _mute_point; } void set_solo_level (SoloLevel); + void set_solo_ignore (bool yn) { _solo_ignore = yn; } PBD::Signal0 MutePointChanged; @@ -83,6 +84,7 @@ class MuteMaster : public SessionHandleRef, public PBD::Stateful volatile bool _self_muted; volatile uint32_t _muted_by_others; volatile SoloLevel _solo_level; + volatile bool _solo_ignore; }; } // namespace ARDOUR diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc index 5861e5ea2c..a1aa968a04 100644 --- a/libs/ardour/delivery.cc +++ b/libs/ardour/delivery.cc @@ -500,7 +500,7 @@ Delivery::target_gain () break; } - // cerr << name() << ' '; + //cerr << name() << ' '; desired_gain = _mute_master->mute_gain_at (mp); if (_role == Listen && _session.monitor_out() && !_session.listening()) { diff --git a/libs/ardour/mute_master.cc b/libs/ardour/mute_master.cc index df9a66ef7f..5e49a11875 100644 --- a/libs/ardour/mute_master.cc +++ b/libs/ardour/mute_master.cc @@ -40,6 +40,7 @@ MuteMaster::MuteMaster (Session& s, const std::string&) , _mute_point (AllPoints) , _self_muted (false) , _muted_by_others (0) + , _solo_ignore (false) { } @@ -107,7 +108,11 @@ MuteMaster::mute_gain_at (MutePoint mp) const } else if (muted_by_others_at (mp)) { // muted by others gain = Config->get_solo_mute_gain (); } else { - gain = 1.0; + if (!_solo_ignore && _session.soloing()) { + gain = 0.0; + } else { + gain = 1.0; + } } } else { if (self_muted_at (mp)) { // self-muted @@ -119,10 +124,14 @@ MuteMaster::mute_gain_at (MutePoint mp) const } else if (l == UpstreamSoloed) { // soloed by others gain = 1.0; } else { - gain = 1.0; + if (!_solo_ignore && _session.soloing()) { + gain = 0.0; + } else { + gain = 1.0; + } } } - + // cerr << "\tgain = " << gain << endl; return gain; diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index ddb227c6bb..33af0f8abf 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -165,6 +165,10 @@ Route::init () _main_outs->panner()->set_bypassed (true); } + if (is_master() || is_monitor() || is_hidden()) { + _mute_master->set_solo_ignore (true); + } + /* now that we have _meter, its safe to connect to this */ Metering::Meter.connect_same_thread (*this, (boost::bind (&Route::meter, this))); @@ -1795,6 +1799,10 @@ Route::_set_state (const XMLNode& node, int version, bool /*call_base*/) _flags = Flag (0); } + if (is_master() || is_monitor() || is_hidden()) { + _mute_master->set_solo_ignore (true); + } + /* add all processors (except amp, which is always present) */ nlist = node.children(); -- cgit v1.2.3