Vapor: add AutomationControl to en/disable surround send
This is in preparation to allow grouping send-enable.
This commit is contained in:
parent
11e508cbe6
commit
2e00638761
@ -67,6 +67,7 @@ public:
|
||||
BufferSet const& bufs () const { return _mixbufs; }
|
||||
|
||||
std::shared_ptr<SurroundPannable> const& pan_param (size_t chn, timepos_t& s, timepos_t& e) const;
|
||||
std::shared_ptr<AutomationControl> send_enable_control () const { return _send_enable_control; }
|
||||
|
||||
protected:
|
||||
int set_state (const XMLNode&, int version);
|
||||
@ -78,20 +79,25 @@ private:
|
||||
void cycle_start (pframes_t);
|
||||
void add_pannable ();
|
||||
|
||||
void send_enable_changed ();
|
||||
void proc_active_changed ();
|
||||
|
||||
BufferSet _mixbufs;
|
||||
int32_t _surround_id;
|
||||
timepos_t _cycle_start;
|
||||
timepos_t _cycle_end;
|
||||
gain_t _current_gain;
|
||||
bool _has_state;
|
||||
bool _ignore_enable_change;
|
||||
|
||||
std::vector<std::shared_ptr<SurroundPannable>> _pannable;
|
||||
|
||||
std::shared_ptr<GainControl> _gain_control;
|
||||
std::shared_ptr<Amp> _amp;
|
||||
std::shared_ptr<MuteMaster> _mute_master;
|
||||
std::shared_ptr<DelayLine> _send_delay;
|
||||
std::shared_ptr<DelayLine> _thru_delay;
|
||||
std::shared_ptr<AutomationControl> _send_enable_control;
|
||||
std::shared_ptr<GainControl> _gain_control;
|
||||
std::shared_ptr<Amp> _amp;
|
||||
std::shared_ptr<MuteMaster> _mute_master;
|
||||
std::shared_ptr<DelayLine> _send_delay;
|
||||
std::shared_ptr<DelayLine> _thru_delay;
|
||||
|
||||
PBD::ScopedConnectionList _change_connections;
|
||||
};
|
||||
|
@ -17,6 +17,8 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "pbd/unwind.h"
|
||||
|
||||
#include "ardour/surround_send.h"
|
||||
#include "ardour/amp.h"
|
||||
#include "ardour/audioengine.h"
|
||||
@ -37,6 +39,7 @@ SurroundSend::SurroundSend (Session& s, std::shared_ptr<MuteMaster> mm)
|
||||
, _surround_id (s.next_surround_send_id ())
|
||||
, _current_gain (GAIN_COEFF_ZERO)
|
||||
, _has_state (false)
|
||||
, _ignore_enable_change (false)
|
||||
, _mute_master (mm)
|
||||
|
||||
{
|
||||
@ -53,11 +56,18 @@ SurroundSend::SurroundSend (Session& s, std::shared_ptr<MuteMaster> mm)
|
||||
|
||||
add_control (_gain_control);
|
||||
|
||||
_send_enable_control = std::shared_ptr<AutomationControl> (new AutomationControl (_session, BusSendEnable, ParameterDescriptor(BusSendEnable)));
|
||||
_send_enable_control->Changed.connect_same_thread (*this, boost::bind (&SurroundSend::send_enable_changed, this));
|
||||
_send_enable_control->clear_flag (PBD::Controllable::RealTime);
|
||||
|
||||
ActiveChanged.connect_same_thread (*this, boost::bind (&SurroundSend::proc_active_changed, this));
|
||||
|
||||
InternalSend::CycleStart.connect_same_thread (*this, boost::bind (&SurroundSend::cycle_start, this, _1));
|
||||
}
|
||||
|
||||
SurroundSend::~SurroundSend ()
|
||||
{
|
||||
_send_enable_control->drop_references ();
|
||||
}
|
||||
|
||||
std::shared_ptr<SurroundPannable>
|
||||
@ -396,6 +406,30 @@ SurroundSend::describe_parameter (Evoral::Parameter param)
|
||||
return Automatable::describe_parameter (param);
|
||||
}
|
||||
|
||||
void
|
||||
SurroundSend::send_enable_changed ()
|
||||
{
|
||||
if (_ignore_enable_change) {
|
||||
return;
|
||||
}
|
||||
PBD::Unwinder<bool> uw (_ignore_enable_change, true);
|
||||
if (_send_enable_control->get_value () > 0) {
|
||||
activate ();
|
||||
} else {
|
||||
deactivate ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SurroundSend::proc_active_changed ()
|
||||
{
|
||||
if (_ignore_enable_change) {
|
||||
return;
|
||||
}
|
||||
PBD::Unwinder<bool> uw (_ignore_enable_change, true);
|
||||
_send_enable_control->set_value (_pending_active ? 1 : 0, PBD::Controllable::UseGroup);
|
||||
}
|
||||
|
||||
int
|
||||
SurroundSend::set_state (const XMLNode& node, int version)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user