X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmute_master.cc;h=32f50bd573ffed4e33f8e117e130c0c00f575cad;hb=27d06075a7cdbfbedae95035977fc2622aeadbe6;hp=89691fc058da14e34d6eb98704634c4503b08bec;hpb=8ee660356181f4eb66e4abcb30d52f55ae267b80;p=ardour.git diff --git a/libs/ardour/mute_master.cc b/libs/ardour/mute_master.cc index 89691fc058..32f50bd573 100644 --- a/libs/ardour/mute_master.cc +++ b/libs/ardour/mute_master.cc @@ -43,7 +43,7 @@ MuteMaster::MuteMaster (Session& s, const std::string&) , _soloed_by_self (false) , _soloed_by_others (false) , _solo_ignore (false) - , _muted_by_others (0) + , _muted_by_masters (0) { if (Config->get_mute_affects_pre_fader ()) { @@ -89,22 +89,22 @@ MuteMaster::mute_gain_at (MutePoint mp) const if (Config->get_solo_mute_override()) { if (_soloed_by_self) { gain = GAIN_COEFF_UNITY; - } else if (muted_by_self_at (mp)) { + } else if (muted_by_self_at (mp) || muted_by_masters_at (mp)) { gain = GAIN_COEFF_ZERO; } else { - if (muted_by_others_at (mp) && !_soloed_by_others) { + if (!_soloed_by_others && muted_by_others_soloing_at (mp)) { gain = Config->get_solo_mute_gain (); } else { gain = GAIN_COEFF_UNITY; } } } else { - if (muted_by_self_at (mp)) { + if (muted_by_self_at (mp) || muted_by_masters_at (mp)) { gain = GAIN_COEFF_ZERO; } else if (_soloed_by_self || _soloed_by_others) { gain = GAIN_COEFF_UNITY; } else { - if (muted_by_others_at (mp)) { + if (muted_by_others_soloing_at (mp)) { gain = Config->get_solo_mute_gain (); } else { gain = GAIN_COEFF_UNITY; @@ -164,14 +164,16 @@ MuteMaster::get_state() } bool -MuteMaster::muted_by_others_at (MutePoint mp) const +MuteMaster::muted_by_others_soloing_at (MutePoint mp) const { - return (!_solo_ignore && (_muted_by_others || _session.soloing()) && (_mute_point & mp)); + /* note: this is currently called with the assumption that the owner is + not soloed. it does not test for this condition. + */ + return (!_solo_ignore && _session.soloing()) && (_mute_point & mp); } void -MuteMaster::set_muted_by_others (bool yn) +MuteMaster::set_muted_by_masters (bool yn) { - _muted_by_others = yn; - std::cerr << this << " set muted by others to " << yn << std::endl; + _muted_by_masters = yn; }