X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmute_master.cc;h=8f81a5e672058f98fb4e92470c1deb86175f0c87;hb=489753e866eba93e1263f61b716c31ca80a32181;hp=9f2ed08dab5ce5f7fd4af3000d34dec150d7708b;hpb=d6051c9953ea8778399ad72fc91c334c242d25e0;p=ardour.git diff --git a/libs/ardour/mute_master.cc b/libs/ardour/mute_master.cc index 9f2ed08dab..8f81a5e672 100644 --- a/libs/ardour/mute_master.cc +++ b/libs/ardour/mute_master.cc @@ -31,11 +31,15 @@ using namespace ARDOUR; using namespace std; +const MuteMaster::MutePoint MuteMaster::AllPoints = MuteMaster::MutePoint( + PreFader|PostFader|Listen|Main); + MuteMaster::MuteMaster (Session& s, const std::string&) : SessionHandleRef (s) , _mute_point (MutePoint (0)) , _muted_by_self (false) - , _soloed (false) + , _soloed_by_self (false) + , _soloed_by_others (false) , _solo_ignore (false) { @@ -74,39 +78,33 @@ MuteMaster::unmute_at (MutePoint mp) } } -void -MuteMaster::set_soloed (bool yn) -{ - _soloed = yn; -} - gain_t MuteMaster::mute_gain_at (MutePoint mp) const { gain_t gain; if (Config->get_solo_mute_override()) { - if (_soloed) { - gain = 1.0; + if (_soloed_by_self) { + gain = GAIN_COEFF_UNITY; } else if (muted_by_self_at (mp)) { - gain = 0.0; + gain = GAIN_COEFF_ZERO; } else { - if (muted_by_others_at (mp)) { + if (muted_by_others_at (mp) && !_soloed_by_others) { gain = Config->get_solo_mute_gain (); } else { - gain = 1.0; + gain = GAIN_COEFF_UNITY; } } } else { if (muted_by_self_at (mp)) { - gain = 0.0; - } else if (_soloed) { - gain = 1.0; + gain = GAIN_COEFF_ZERO; + } else if (_soloed_by_self || _soloed_by_others) { + gain = GAIN_COEFF_UNITY; } else { if (muted_by_others_at (mp)) { gain = Config->get_solo_mute_gain (); } else { - gain = 1.0; + gain = GAIN_COEFF_UNITY; } } }