Compare commits

...

1 Commits

Author SHA1 Message Date
Robin Gareus e46fe661c2 Send-delays - quick test 2018-10-25 19:26:54 +02:00
5 changed files with 37 additions and 2 deletions

View File

@ -48,6 +48,7 @@ public:
boost::shared_ptr<Amp> amp() const { return _amp; }
boost::shared_ptr<PeakMeter> meter() const { return _meter; }
boost::shared_ptr<GainControl> gain_control() const { return _gain_control; }
boost::shared_ptr<AutomationControl> delay_control() const { return _delay_control; }
bool metering() const { return _metering; }
void set_metering (bool yn) { _metering = yn; }
@ -72,6 +73,10 @@ public:
samplecnt_t get_delay_out () const { return _delay_out; }
samplecnt_t signal_latency () const;
/* custom user-set delay */
samplecnt_t get_delay_extra () const { return _delay_extra; }
void set_delay_extra (samplecnt_t);
static PBD::Signal0<void> ChangedLatency;
void activate ();
@ -87,6 +92,7 @@ protected:
bool _metering;
boost::shared_ptr<GainControl> _gain_control;
boost::shared_ptr<AutomationControl> _delay_control;
boost::shared_ptr<Amp> _amp;
boost::shared_ptr<PeakMeter> _meter;
boost::shared_ptr<DelayLine> _send_delay;
@ -107,6 +113,7 @@ private:
samplecnt_t _delay_in;
samplecnt_t _delay_out;
samplecnt_t _delay_extra;
bool _remove_on_disconnect;
};

View File

@ -250,6 +250,8 @@ InternalSend::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sa
_amp->setup_gain_automation (start_sample, end_sample, nframes);
_amp->run (mixbufs, start_sample, end_sample, speed, nframes, true);
set_delay_extra (_delay_control->get_value ());
_send_delay->run (mixbufs, start_sample, end_sample, speed, nframes, true);
/* consider metering */

View File

@ -1398,6 +1398,8 @@ LuaBindings::common (lua_State* L)
.deriveWSPtrClass <Send, Delivery> ("Send")
.addFunction ("get_delay_in", &Send::get_delay_in)
.addFunction ("get_delay_out", &Send::get_delay_out)
.addFunction ("get_delay_extra", &Send::get_delay_extra)
.addFunction ("set_delay_extra", &Send::set_delay_extra)
.endClass ()
.deriveWSPtrClass <InternalSend, Send> ("InternalSend")

View File

@ -82,6 +82,7 @@ Send::Send (Session& s, boost::shared_ptr<Pannable> p, boost::shared_ptr<MuteMas
, _metering (false)
, _delay_in (0)
, _delay_out (0)
, _delay_extra (0)
, _remove_on_disconnect (false)
{
if (_role == Listen) {
@ -97,6 +98,15 @@ Send::Send (Session& s, boost::shared_ptr<Pannable> p, boost::shared_ptr<MuteMas
_gain_control = boost::shared_ptr<GainControl> (new GainControl (_session, Evoral::Parameter(GainAutomation), gl));
add_control (_gain_control);
ParameterDescriptor dd;
dd.normal = 0;
dd.lower = 0;
dd.upper = _session.nominal_sample_rate () / 10; // max: 100ms
boost::shared_ptr<AutomationList> dl (new AutomationList (Evoral::Parameter (PluginAutomation)));
_delay_control = boost::shared_ptr<AutomationControl> (new AutomationControl (_session, Evoral::Parameter(PluginAutomation), dd, dl, "Delay"));
add_control (_delay_control);
_amp.reset (new Amp (_session, _("Fader"), _gain_control, true));
_meter.reset (new PeakMeter (_session, name()));
@ -168,10 +178,10 @@ Send::update_delaylines ()
bool changed;
if (_delay_out > _delay_in) {
changed = _thru_delay->set_delay(_delay_out - _delay_in);
_send_delay->set_delay(0);
_send_delay->set_delay(_delay_extra);
} else {
changed = _thru_delay->set_delay(0);
_send_delay->set_delay(_delay_in - _delay_out);
_send_delay->set_delay(_delay_extra + _delay_in - _delay_out);
}
if (changed) {
@ -211,6 +221,17 @@ Send::set_delay_out (samplecnt_t delay)
update_delaylines ();
}
void
Send::set_delay_extra (samplecnt_t delay)
{
if (_delay_extra == delay) {
return;
}
_delay_extra = delay;
printf ("SET EXTRA DELAT %d\n", _delay_extra);
update_delaylines ();
}
void
Send::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sample, double speed, pframes_t nframes, bool)
{
@ -240,6 +261,8 @@ Send::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sample, do
_amp->setup_gain_automation (start_sample, end_sample, nframes);
_amp->run (sendbufs, start_sample, end_sample, speed, nframes, true);
set_delay_extra (_delay_control->get_value ());
_send_delay->run (sendbufs, start_sample, end_sample, speed, nframes, true);
/* deliver to outputs */

View File

@ -5639,6 +5639,7 @@ Session::graph_reordered ()
/* force all diskstreams to update their capture offset values to
* reflect any changes in latencies within the graph.
*/
Glib::Threads::Mutex::Lock lm (_engine.process_lock());
update_route_latency (false, true);
}