summaryrefslogtreecommitdiff
path: root/libs/ardour/track.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/track.cc')
-rw-r--r--libs/ardour/track.cc46
1 files changed, 25 insertions, 21 deletions
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index 5c9bcc747d..b21a02b490 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -43,6 +43,7 @@ Track::Track (Session& sess, string name, Route::Flag flag, TrackMode mode, Data
: Route (sess, name, flag, default_type)
, _saved_meter_point (_meter_point)
, _mode (mode)
+ , _monitoring (MonitorAuto)
, _rec_enable_control (new RecEnableControllable(*this))
{
_freeze_record.state = NoFreeze;
@@ -640,36 +641,31 @@ Track::adjust_capture_buffering ()
bool
Track::send_silence () const
{
- /*
- ADATs work in a strange way..
- they monitor input always when stopped.and auto-input is engaged.
-
- Other machines switch to input on stop if the track is record enabled,
- regardless of the auto input setting (auto input only changes the
- monitoring state when the transport is rolling)
- */
-
bool send_silence;
- if (!Config->get_tape_machine_mode()) {
- /*
- ADATs work in a strange way..
- they monitor input always when stopped.and auto-input is engaged.
+ if (Config->get_tape_machine_mode()) {
+
+ /* ADATs work in a strange way..
+ they monitor input always when stopped.and auto-input is engaged.
*/
+
if ((Config->get_monitoring_model() == SoftwareMonitoring)
- && (_session.config.get_auto_input () || _diskstream->record_enabled())) {
- send_silence = false;
+ && ((_monitoring & MonitorInput) || (_diskstream->record_enabled()))) {
+ send_silence = false;
} else {
send_silence = true;
}
+
+
} else {
- /*
- Other machines switch to input on stop if the track is record enabled,
- regardless of the auto input setting (auto input only changes the
- monitoring state when the transport is rolling)
+
+ /* Other machines switch to input on stop if the track is record enabled,
+ regardless of the auto input setting (auto input only changes the
+ monitoring state when the transport is rolling)
*/
+
if ((Config->get_monitoring_model() == SoftwareMonitoring)
- && _diskstream->record_enabled()) {
+ && (!(_monitoring & MonitorDisk) && (_session.config.get_auto_input () || _diskstream->record_enabled()))) {
send_silence = false;
} else {
send_silence = true;
@@ -732,6 +728,14 @@ Track::check_initial_delay (framecnt_t nframes, framecnt_t& transport_frame)
}
- return nframes;
+ return nframes;
}
+void
+Track::set_monitoring (MonitorChoice mc)
+{
+ if (mc != _monitoring) {
+ _monitoring = mc;
+ MonitoringChanged (); /* EMIT SIGNAL */
+ }
+}