From 2231db91cdeea8111961b3eeb94e2d87df6f9e8a Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 16 Jul 2013 19:37:36 +0200 Subject: [PATCH] fix metering states 34, 38, 49, 50, 53 and 54 for state descriptions see http://www.oofus.co.uk/ardour/Ardour3MonitorModesV3.pdf --- libs/ardour/io.cc | 4 +++- libs/ardour/track.cc | 19 +++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index cdb8a4693c..21fdca6e96 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -1639,7 +1639,9 @@ IO::process_input (boost::shared_ptr proc, framepos_t start_frame, fr } _buffers.get_jack_port_addresses (_ports, nframes); - proc->run (_buffers, start_frame, end_frame, nframes, true); + if (proc) { + proc->run (_buffers, start_frame, end_frame, nframes, true); + } } void diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index d2c9b1deb5..d4c095d738 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -408,8 +408,23 @@ Track::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, if (be_silent) { if (_meter_point == MeterInput) { - /* still need input monitoring */ - _input->process_input (_meter, start_frame, end_frame, nframes); + /* still need input monitoring and metering */ + + bool const track_rec = _diskstream->record_enabled (); + bool const auto_input = _session.config.get_auto_input (); + bool const software_monitor = Config->get_monitoring_model() == SoftwareMonitoring; + bool const tape_machine_mode = Config->get_tape_machine_mode (); + + if (!software_monitor && tape_machine_mode && !track_rec) { + _meter->reset(); + _input->process_input (boost::shared_ptr(), start_frame, end_frame, nframes); + } + else if (!software_monitor && !tape_machine_mode && !track_rec && !auto_input) { + _meter->reset(); + _input->process_input (boost::shared_ptr(), start_frame, end_frame, nframes); + } else { + _input->process_input (_meter, start_frame, end_frame, nframes); + } } passthru_silence (start_frame, end_frame, nframes, 0);