X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudio_track.cc;h=3a653a0efe675096b4d9d8e225c84451975f2061;hb=8af589b322408aba38413dc2c85dc77ae1c9f2e4;hp=97f43ebd7cd77ad9838ff61ce31d7cbf9ef706b8;hpb=619727ef73445e8217d78af257e820e46072f10b;p=ardour.git diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc index 97f43ebd7c..3a653a0efe 100644 --- a/libs/ardour/audio_track.cc +++ b/libs/ardour/audio_track.cc @@ -19,7 +19,6 @@ #include -#include "pbd/boost_debug.h" #include "pbd/enumwriter.h" #include "pbd/error.h" @@ -30,9 +29,11 @@ #include "ardour/audio_diskstream.h" #include "ardour/audio_track.h" #include "ardour/audioplaylist.h" +#include "ardour/boost_debug.h" #include "ardour/buffer_set.h" #include "ardour/delivery.h" #include "ardour/meter.h" +#include "ardour/monitor_control.h" #include "ardour/playlist_factory.h" #include "ardour/processor.h" #include "ardour/profile.h" @@ -43,20 +44,20 @@ #include "ardour/source.h" #include "ardour/utils.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; using namespace PBD; -AudioTrack::AudioTrack (Session& sess, string name, Route::Flag flag, TrackMode mode) - : Track (sess, name, flag, mode) +AudioTrack::AudioTrack (Session& sess, string name, TrackMode mode) + : Track (sess, name, PresentationInfo::AudioTrack, mode) { } AudioTrack::~AudioTrack () { - if (_freeze_record.playlist) { + if (_freeze_record.playlist && !_session.deletion_in_progress()) { _freeze_record.playlist->release(); } } @@ -158,7 +159,7 @@ AudioTrack::deprecated_use_diskstream_connections () return 0; } - const XMLProperty* prop; + XMLProperty const * prop; XMLNode& node (*diskstream->deprecated_io_node); /* don't do this more than once. */ @@ -166,7 +167,7 @@ AudioTrack::deprecated_use_diskstream_connections () diskstream->deprecated_io_node = 0; if ((prop = node.property ("gain")) != 0) { - _amp->set_gain (atof (prop->value().c_str()), this); + _amp->gain_control()->set_value (atof (prop->value().c_str()), PBD::Controllable::NoGroup); } if ((prop = node.property ("input-connection")) != 0) { @@ -200,7 +201,7 @@ AudioTrack::deprecated_use_diskstream_connections () int AudioTrack::set_state (const XMLNode& node, int version) { - const XMLProperty *prop; + XMLProperty const * prop; if ((prop = node.property (X_("mode"))) != 0) { _mode = TrackMode (string_2_enum (prop->value(), _mode)); @@ -266,8 +267,8 @@ void AudioTrack::set_state_part_two () { XMLNode* fnode; - XMLProperty* prop; - LocaleGuard lg (X_("C")); + XMLProperty const * prop; + LocaleGuard lg; /* This is called after all session state has been restored but before have been made ports and connections are established. @@ -349,7 +350,7 @@ AudioTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_fram if (!_active) { silence (nframes); - if (_meter_point == MeterInput && (_monitoring & MonitorInput || _diskstream->record_enabled())) { + if (_meter_point == MeterInput && ((_monitoring_control->monitoring_choice() & MonitorInput) || _diskstream->record_enabled())) { _meter->reset(); } return 0; @@ -374,16 +375,6 @@ AudioTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_fram return dret; } - if (_mute_control->list() && _mute_control->automation_playback()) { - bool valid = false; - const float mute = _mute_control->list()->rt_safe_eval(transport_frame, valid); - if (mute >= 0.5 && !muted()) { - _mute_control->set_value_unchecked(1.0); // mute - } else if (mute < 0.5 && muted()) { - _mute_control->set_value_unchecked(0.0); // unmute - } - } - _silent = false; _amp->apply_gain_automation(false); @@ -391,8 +382,8 @@ AudioTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_fram fill_buffers_with_input (bufs, _input, nframes); - if (_meter_point == MeterInput && (_monitoring & MonitorInput || _diskstream->record_enabled())) { - _meter->run (bufs, start_frame, end_frame, nframes, true); + if (_meter_point == MeterInput && ((_monitoring_control->monitoring_choice() & MonitorInput) || _diskstream->record_enabled())) { + _meter->run (bufs, start_frame, end_frame, 1.0 /*speed()*/, nframes, true); } if ((dret = diskstream->process (bufs, transport_frame, nframes, playback_distance, (monitoring_state() == MonitoringDisk))) != 0) { @@ -403,12 +394,7 @@ AudioTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_fram process_output_buffers (bufs, start_frame, end_frame, nframes, declick, (!diskstream->record_enabled() && _session.transport_rolling())); - for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { - boost::shared_ptr d = boost::dynamic_pointer_cast (*i); - if (d) { - d->flush_buffers (nframes); - } - } + flush_processor_buffers_locked (nframes); need_butler = diskstream->commit (playback_distance); @@ -629,8 +615,9 @@ AudioTrack::freeze_me (InterThreadInfo& itt) /* reset stuff that has already been accounted for in the freeze process */ - set_gain (GAIN_COEFF_UNITY, this); - _amp->gain_control()->set_automation_state (Off); + gain_control()->set_value (GAIN_COEFF_UNITY, Controllable::NoGroup); + gain_control()->set_automation_state (Off); + /* XXX need to use _main_outs _panner->set_automation_state (Off); */ _freeze_record.state = Frozen; @@ -641,6 +628,7 @@ void AudioTrack::unfreeze () { if (_freeze_record.playlist) { + _freeze_record.playlist->release(); audio_diskstream()->use_playlist (_freeze_record.playlist); {