- gain_t desired_gain = -1.0f;
-
- if (_solo_level || _solo_ignored) {
-
- desired_gain = 1.0;
-
- } else {
-
- if (_role == Listen && _session.monitor_out() && !_session.soloing()) {
-
- /* nobody is soloed, so control/monitor/listen bus gets its
- signal from master out, we should be silent
- */
- desired_gain = 0.0;
-
- } else {
-
- MuteMaster::MutePoint mp;
-
- switch (_role) {
- case Main:
- mp = MuteMaster::Main;
- break;
- case Listen:
- mp = MuteMaster::Listen;
- break;
- case Send:
- case Insert:
- case Aux:
- /* XXX FIX ME this is wrong, we need per-delivery muting */
- mp = MuteMaster::PreFader;
- break;
- }
-
- if (!_solo_isolated && _session.soloing()) {
- desired_gain = min (Config->get_solo_mute_gain(), _mute_master->mute_gain_at (mp));
-
- } else {
-
- desired_gain = _mute_master->mute_gain_at (mp);
- }
- }
+ MuteMaster::MutePoint mp = MuteMaster::Main; // stupid gcc uninit warning
+
+ switch (_role) {
+ case Main:
+ mp = MuteMaster::Main;
+ break;
+ case Listen:
+ mp = MuteMaster::Listen;
+ break;
+ case Send:
+ case Insert:
+ case Aux:
+ if (_pre_fader) {
+ mp = MuteMaster::PreFader;
+ } else {
+ mp = MuteMaster::PostFader;
+ }
+ break;
+ }
+
+ gain_t desired_gain = _mute_master->mute_gain_at (mp);
+
+ if (_role == Listen && _session.monitor_out() && !_session.listening()) {
+
+ /* nobody is soloed, and this delivery is a listen-send to the
+ control/monitor/listen bus, we should be silent since
+ it gets its signal from the master out.
+ */
+
+ desired_gain = 0.0;
+