add Input Trim (just after disk i/o) to Audio Tracks

This commit is contained in:
Robin Gareus
2015-04-24 21:45:53 +02:00
parent b07373fba2
commit 3cdd8fa221
2 changed files with 22 additions and 1 deletions

View File

@@ -188,6 +188,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
/* Processors */
boost::shared_ptr<Amp> amp() const { return _amp; }
boost::shared_ptr<Amp> trim() const { return _trim; }
PeakMeter& peak_meter() { return *_meter.get(); }
const PeakMeter& peak_meter() const { return *_meter.get(); }
boost::shared_ptr<PeakMeter> shared_peak_meter() const { return _meter; }
@@ -567,6 +568,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
virtual void maybe_declick (BufferSet&, framecnt_t, int);
boost::shared_ptr<Amp> _amp;
boost::shared_ptr<Amp> _trim;
boost::shared_ptr<PeakMeter> _meter;
boost::shared_ptr<DelayLine> _delayline;

View File

@@ -37,6 +37,7 @@
#include "ardour/amp.h"
#include "ardour/audio_buffer.h"
#include "ardour/audio_track.h"
#include "ardour/audio_port.h"
#include "ardour/audioengine.h"
#include "ardour/buffer.h"
@@ -157,6 +158,17 @@ Route::init ()
_amp.reset (new Amp (_session));
add_processor (_amp, PostFader);
/* and input trim */
_trim.reset (new Amp (_session, "trim"));
_trim->set_display_to_user (false);
if (dynamic_cast<AudioTrack*>(this)) {
/* we can't do this in the AudioTrack's constructor
* because _trim does not exit then
*/
_trim->activate();
}
/* create standard processors: meter, main outs, monitor out;
they will be added to _processors by setup_invisible_processors ()
*/
@@ -1664,7 +1676,7 @@ Route::remove_processors (const ProcessorList& to_be_deleted, ProcessorStreams*
/* these can never be removed */
if (processor == _amp || processor == _meter || processor == _main_outs || processor == _delayline) {
if (processor == _amp || processor == _meter || processor == _main_outs || processor == _delayline || processor == _trim) {
++i;
continue;
}
@@ -2634,6 +2646,9 @@ Route::set_processor_state (const XMLNode& node)
if (prop->value() == "amp") {
_amp->set_state (**niter, Stateful::current_state_version);
new_order.push_back (_amp);
} else if (prop->value() == "trim") {
_trim->set_state (**niter, Stateful::current_state_version);
new_order.push_back (_trim);
} else if (prop->value() == "meter") {
_meter->set_state (**niter, Stateful::current_state_version);
new_order.push_back (_meter);
@@ -4233,6 +4248,10 @@ Route::setup_invisible_processors ()
new_processors.push_front (_intreturn);
}
if (_trim && _trim->active()) {
assert (!_trim->display_to_user ());
new_processors.push_front (_trim);
}
/* EXPORT PROCESSOR */
if (_capturing_processor) {