X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmeter.cc;h=430306c91a00c8cb9b40c497b15f581111f22194;hb=c8c6bca6587450ff64303dbc994a4cd28d6ce7aa;hp=bb6e3eb29ce67356c1e6982f7fb3e50ca8335d42;hpb=e9a8ccc7e2826d8fe91eff34ee8a0683a7f7aac6;p=ardour.git diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc index bb6e3eb29c..430306c91a 100644 --- a/libs/ardour/meter.cc +++ b/libs/ardour/meter.cc @@ -137,11 +137,12 @@ PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fr // Meter audio in to the rest of the peaks for (uint32_t i = 0; i < n_audio; ++i, ++n) { if (bufs.get_audio(i).silent()) { - ; + _peak_buffer[n] = 0; } else { _peak_buffer[n] = compute_peak (bufs.get_audio(i).data(), nframes, _peak_buffer[n]); + _peak_buffer[n] = std::min (_peak_buffer[n], 100.f); // cut off at +40dBFS for falloff. _max_peak_signal[n] = std::max(_peak_buffer[n], _max_peak_signal[n]); // todo sync reset - _combined_peak =std::max(_peak_buffer[n], _combined_peak); + _combined_peak = std::max(_peak_buffer[n], _combined_peak); } if (do_reset_max) { @@ -236,14 +237,23 @@ PeakMeter::can_support_io_configuration (const ChanCount& in, ChanCount& out) bool PeakMeter::configure_io (ChanCount in, ChanCount out) { + bool changed = false; if (out != in) { // always 1:1 return false; } + if (current_meters != in) { + changed = true; + } + current_meters = in; set_max_channels (in); + if (changed) { + reset_max(); + } + return Processor::configure_io (in, out); }