mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 15:25:01 +01:00
add dynamics support to mackie control
This commit is contained in:
parent
e3d0de3bf6
commit
a6da818bc4
4 changed files with 155 additions and 14 deletions
|
|
@ -1728,6 +1728,7 @@ MackieControlProtocol::pot_mode_globals ()
|
||||||
{
|
{
|
||||||
update_global_button (Button::Eq, off);
|
update_global_button (Button::Eq, off);
|
||||||
update_global_button (Button::Dyn, off);
|
update_global_button (Button::Dyn, off);
|
||||||
|
update_global_button (Button::AudioInstruments, off);
|
||||||
|
|
||||||
switch (_pot_mode) {
|
switch (_pot_mode) {
|
||||||
case Trim:
|
case Trim:
|
||||||
|
|
|
||||||
|
|
@ -924,14 +924,16 @@ MackieControlProtocol::audiotracks_release (Mackie::Button&)
|
||||||
return none;
|
return none;
|
||||||
}
|
}
|
||||||
Mackie::LedState
|
Mackie::LedState
|
||||||
MackieControlProtocol::audioinstruments_press (Mackie::Button&)
|
MackieControlProtocol::audioinstruments_press (Mackie::Button& b)
|
||||||
{
|
{
|
||||||
return none;
|
return dyn_press (b);
|
||||||
}
|
}
|
||||||
|
|
||||||
Mackie::LedState
|
Mackie::LedState
|
||||||
MackieControlProtocol::audioinstruments_release (Mackie::Button&)
|
MackieControlProtocol::audioinstruments_release (Mackie::Button& b)
|
||||||
{
|
{
|
||||||
return none;
|
return dyn_release (b);
|
||||||
|
|
||||||
}
|
}
|
||||||
Mackie::LedState
|
Mackie::LedState
|
||||||
MackieControlProtocol::aux_press (Mackie::Button&)
|
MackieControlProtocol::aux_press (Mackie::Button&)
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "strip.h"
|
|
||||||
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
|
@ -51,6 +52,7 @@
|
||||||
#include "mackie_control_protocol.h"
|
#include "mackie_control_protocol.h"
|
||||||
#include "surface_port.h"
|
#include "surface_port.h"
|
||||||
#include "surface.h"
|
#include "surface.h"
|
||||||
|
#include "strip.h"
|
||||||
#include "button.h"
|
#include "button.h"
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
#include "pot.h"
|
#include "pot.h"
|
||||||
|
|
@ -545,7 +547,7 @@ Strip::notify_eq_change (AutomationType type, uint32_t band, bool force_update)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_surface->mcp().subview_mode() == MackieControlProtocol::None) {
|
if (_surface->mcp().subview_mode() != MackieControlProtocol::EQ) {
|
||||||
/* no longer in EQ subview mode */
|
/* no longer in EQ subview mode */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -583,6 +585,54 @@ Strip::notify_eq_change (AutomationType type, uint32_t band, bool force_update)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Strip::notify_dyn_change (AutomationType type, bool force_update)
|
||||||
|
{
|
||||||
|
boost::shared_ptr<Route> r = _surface->mcp().subview_route();
|
||||||
|
|
||||||
|
if (!r) {
|
||||||
|
/* not in subview mode */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_surface->mcp().subview_mode() != MackieControlProtocol::Dynamics) {
|
||||||
|
/* no longer in EQ subview mode */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::shared_ptr<AutomationControl> control;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case CompThreshold:
|
||||||
|
control = r->comp_threshold_controllable ();
|
||||||
|
break;
|
||||||
|
case CompSpeed:
|
||||||
|
control = r->comp_speed_controllable ();
|
||||||
|
break;
|
||||||
|
case CompMode:
|
||||||
|
control = r->comp_mode_controllable ();
|
||||||
|
break;
|
||||||
|
case CompMakeup:
|
||||||
|
control = r->comp_makeup_controllable ();
|
||||||
|
break;
|
||||||
|
case CompRedux:
|
||||||
|
control = r->comp_redux_controllable ();
|
||||||
|
break;
|
||||||
|
case CompEnable:
|
||||||
|
control = r->comp_enable_controllable ();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (control) {
|
||||||
|
float val = control->get_value();
|
||||||
|
queue_parameter_display (type, val);
|
||||||
|
/* update pot/encoder */
|
||||||
|
_surface->write (_vpot->set (control->internal_to_interface (val), true, Pot::wrap));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Strip::notify_panner_azi_changed (bool force_update)
|
Strip::notify_panner_azi_changed (bool force_update)
|
||||||
{
|
{
|
||||||
|
|
@ -926,17 +976,27 @@ Strip::do_parameter_display (AutomationType type, float val)
|
||||||
case EQQ:
|
case EQQ:
|
||||||
case EQShape:
|
case EQShape:
|
||||||
case EQHPF:
|
case EQHPF:
|
||||||
|
case CompThreshold:
|
||||||
|
case CompSpeed:
|
||||||
|
case CompMakeup:
|
||||||
|
case CompRedux:
|
||||||
snprintf (buf, sizeof (buf), "%6.1f", val);
|
snprintf (buf, sizeof (buf), "%6.1f", val);
|
||||||
_surface->write (display (1, buf));
|
_surface->write (display (1, buf));
|
||||||
screen_hold = true;
|
screen_hold = true;
|
||||||
break;
|
break;
|
||||||
case EQEnable:
|
case EQEnable:
|
||||||
|
case CompEnable:
|
||||||
if (val >= 0.5) {
|
if (val >= 0.5) {
|
||||||
_surface->write (display (1, "on"));
|
_surface->write (display (1, "on"));
|
||||||
} else {
|
} else {
|
||||||
_surface->write (display (1, "off"));
|
_surface->write (display (1, "off"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case CompMode:
|
||||||
|
if (_surface->mcp().subview_route()) {
|
||||||
|
_surface->write (display (1, _surface->mcp().subview_route()->comp_mode_name (val)));
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -1407,16 +1467,96 @@ Strip::subview_mode_changed ()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MackieControlProtocol::EQ:
|
case MackieControlProtocol::EQ:
|
||||||
setup_eq_vpots (r);
|
setup_eq_vpot (r);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MackieControlProtocol::Dynamics:
|
case MackieControlProtocol::Dynamics:
|
||||||
|
setup_dyn_vpot (r);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Strip::setup_eq_vpots (boost::shared_ptr<Route> r)
|
Strip::setup_dyn_vpot (boost::shared_ptr<Route> r)
|
||||||
|
{
|
||||||
|
if (!r) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::shared_ptr<AutomationControl> tc = r->comp_threshold_controllable ();
|
||||||
|
boost::shared_ptr<AutomationControl> sc = r->comp_speed_controllable ();
|
||||||
|
boost::shared_ptr<AutomationControl> mc = r->comp_mode_controllable ();
|
||||||
|
boost::shared_ptr<AutomationControl> kc = r->comp_makeup_controllable ();
|
||||||
|
boost::shared_ptr<AutomationControl> rc = r->comp_redux_controllable ();
|
||||||
|
boost::shared_ptr<AutomationControl> ec = r->comp_enable_controllable ();
|
||||||
|
|
||||||
|
uint32_t pos = _surface->mcp().global_index (*this);
|
||||||
|
|
||||||
|
/* we will control the pos-th available parameter, from the list in the
|
||||||
|
* order shown above.
|
||||||
|
*/
|
||||||
|
|
||||||
|
vector<boost::shared_ptr<AutomationControl> > available;
|
||||||
|
vector<AutomationType> params;
|
||||||
|
|
||||||
|
if (tc) { available.push_back (tc); params.push_back (CompThreshold); }
|
||||||
|
if (sc) { available.push_back (sc); params.push_back (CompSpeed); }
|
||||||
|
if (mc) { available.push_back (mc); params.push_back (CompMode); }
|
||||||
|
if (kc) { available.push_back (kc); params.push_back (CompMakeup); }
|
||||||
|
if (rc) { available.push_back (rc); params.push_back (CompRedux); }
|
||||||
|
if (ec) { available.push_back (ec); params.push_back (CompEnable); }
|
||||||
|
|
||||||
|
if (pos >= available.size()) {
|
||||||
|
/* this knob is not needed to control the available parameters */
|
||||||
|
_vpot->set_control (boost::shared_ptr<AutomationControl>());
|
||||||
|
_surface->write (display (0, string()));
|
||||||
|
_surface->write (display (1, string()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::shared_ptr<AutomationControl> pc;
|
||||||
|
AutomationType param;
|
||||||
|
|
||||||
|
pc = available[pos];
|
||||||
|
param = params[pos];
|
||||||
|
|
||||||
|
pc->Changed.connect (subview_connections, MISSING_INVALIDATOR, boost::bind (&Strip::notify_dyn_change, this, param, false), ui_context());
|
||||||
|
_vpot->set_control (pc);
|
||||||
|
|
||||||
|
string pot_id;
|
||||||
|
|
||||||
|
switch (param) {
|
||||||
|
case CompThreshold:
|
||||||
|
pot_id = "Thresh";
|
||||||
|
break;
|
||||||
|
case CompSpeed:
|
||||||
|
pot_id = "Speed";
|
||||||
|
break;
|
||||||
|
case CompMode:
|
||||||
|
pot_id = "Mode";
|
||||||
|
break;
|
||||||
|
case CompMakeup:
|
||||||
|
pot_id = "Makeup";
|
||||||
|
break;
|
||||||
|
case CompRedux:
|
||||||
|
pot_id = "Redux";
|
||||||
|
break;
|
||||||
|
case CompEnable:
|
||||||
|
pot_id = "on/off";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pot_id.empty()) {
|
||||||
|
_surface->write (display (0, pot_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
notify_dyn_change (param, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Strip::setup_eq_vpot (boost::shared_ptr<Route> r)
|
||||||
{
|
{
|
||||||
uint32_t bands = r->eq_band_cnt ();
|
uint32_t bands = r->eq_band_cnt ();
|
||||||
|
|
||||||
|
|
@ -1800,7 +1940,3 @@ Strip::notify_metering_state_changed()
|
||||||
_metering_active = metering_active;
|
_metering_active = metering_active;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Strip::hookup_eq (AutomationType param, uint32_t band)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -171,9 +171,11 @@ private:
|
||||||
typedef std::map<ARDOUR::AutomationType,Control*> ControlParameterMap;
|
typedef std::map<ARDOUR::AutomationType,Control*> ControlParameterMap;
|
||||||
ControlParameterMap control_by_parameter;
|
ControlParameterMap control_by_parameter;
|
||||||
|
|
||||||
void hookup_eq (ARDOUR::AutomationType, uint32_t);
|
|
||||||
void notify_eq_change (ARDOUR::AutomationType, uint32_t band, bool force);
|
void notify_eq_change (ARDOUR::AutomationType, uint32_t band, bool force);
|
||||||
void setup_eq_vpots (boost::shared_ptr<ARDOUR::Route>);
|
void setup_eq_vpot (boost::shared_ptr<ARDOUR::Route>);
|
||||||
|
|
||||||
|
void notify_dyn_change (ARDOUR::AutomationType, bool force);
|
||||||
|
void setup_dyn_vpot (boost::shared_ptr<ARDOUR::Route>);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue