diff options
Diffstat (limited to 'libs/ardour/delivery.cc')
-rw-r--r-- | libs/ardour/delivery.cc | 100 |
1 files changed, 53 insertions, 47 deletions
diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc index 5f857d7941..86a2f99c58 100644 --- a/libs/ardour/delivery.cc +++ b/libs/ardour/delivery.cc @@ -55,9 +55,6 @@ Delivery::Delivery (Session& s, boost::shared_ptr<IO> io, boost::shared_ptr<Mute , _current_gain (1.0) , _output_offset (0) , _no_outs_cuz_we_no_monitor (false) - , _solo_level (0) - , _solo_isolated (false) - , _solo_ignored (false) , _mute_master (mm) , no_panner_reset (false) { @@ -80,9 +77,6 @@ Delivery::Delivery (Session& s, boost::shared_ptr<MuteMaster> mm, const string& , _current_gain (1.0) , _output_offset (0) , _no_outs_cuz_we_no_monitor (false) - , _solo_level (0) - , _solo_isolated (false) - , _solo_ignored (false) , _mute_master (mm) , no_panner_reset (false) { @@ -257,7 +251,6 @@ Delivery::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nfra tgain = target_gain (); if (tgain != _current_gain) { - /* target gain has changed */ Amp::apply_gain (bufs, nframes, _current_gain, tgain); @@ -297,11 +290,37 @@ Delivery::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nfra if (bufs.count().n_audio() > 0 && ports.count().n_audio () > 0) { _output->copy_to_outputs (bufs, DataType::AUDIO, nframes, _output_offset); - } + + bool silent; + + for (uint32_t b = 0; b < bufs.count().n_audio(); ++b) { + + AudioBuffer& ab (bufs.get_audio (b)); + Sample* s = ab.data(); + nframes_t n; + + silent = false; + + for (n = 0; nframes < nframes; ++n) { + if (s[n] != 0) { + break; + } + } + if (n == nframes) { + silent = true; + } + + if (silent) { + cerr << _name << ": Buffer " << b << " is silent\n"; + } + } + } if (bufs.count().n_midi() > 0 && ports.count().n_midi () > 0) { _output->copy_to_outputs (bufs, DataType::MIDI, nframes, _output_offset); } + + } out: @@ -488,48 +507,35 @@ Delivery::target_gain () 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; + 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; + } - } else { + desired_gain = _mute_master->mute_gain_at (mp); + + if (_role == Listen && _session.monitor_out() && !_session.listening()) { - MuteMaster::MutePoint mp; + /* 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. + */ - 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); - } - } - } + desired_gain = 0.0; + + } return desired_gain; } |