summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-07-16 19:37:36 +0200
committerRobin Gareus <robin@gareus.org>2013-07-16 19:37:36 +0200
commit2231db91cdeea8111961b3eeb94e2d87df6f9e8a (patch)
tree9eeb63065f1d070889ea33347498bc1e5c55cf9a
parentc456166dd163e12053c7cfd4554f695ab0d30b68 (diff)
fix metering states 34, 38, 49, 50, 53 and 54
for state descriptions see http://www.oofus.co.uk/ardour/Ardour3MonitorModesV3.pdf
-rw-r--r--libs/ardour/io.cc4
-rw-r--r--libs/ardour/track.cc19
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<Processor> 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<Processor>(), start_frame, end_frame, nframes);
+ }
+ else if (!software_monitor && !tape_machine_mode && !track_rec && !auto_input) {
+ _meter->reset();
+ _input->process_input (boost::shared_ptr<Processor>(), start_frame, end_frame, nframes);
+ } else {
+ _input->process_input (_meter, start_frame, end_frame, nframes);
+ }
}
passthru_silence (start_frame, end_frame, nframes, 0);