Notify custom UIs when designated LV2 BPM port changes
This commit is contained in:
parent
f08e2b7eb1
commit
48b960fdef
@ -192,6 +192,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
|
|||||||
double _current_bpm;
|
double _current_bpm;
|
||||||
PBD::ID _insert_id;
|
PBD::ID _insert_id;
|
||||||
std::string _plugin_state_dir;
|
std::string _plugin_state_dir;
|
||||||
|
uint32_t _bpm_control_port_index;
|
||||||
uint32_t _patch_port_in_index;
|
uint32_t _patch_port_in_index;
|
||||||
uint32_t _patch_port_out_index;
|
uint32_t _patch_port_out_index;
|
||||||
URIMap& _uri_map;
|
URIMap& _uri_map;
|
||||||
|
@ -356,6 +356,7 @@ LV2Plugin::LV2Plugin (AudioEngine& engine,
|
|||||||
, _worker(NULL)
|
, _worker(NULL)
|
||||||
, _state_worker(NULL)
|
, _state_worker(NULL)
|
||||||
, _insert_id("0")
|
, _insert_id("0")
|
||||||
|
, _bpm_control_port_index((uint32_t)-1)
|
||||||
, _patch_port_in_index((uint32_t)-1)
|
, _patch_port_in_index((uint32_t)-1)
|
||||||
, _patch_port_out_index((uint32_t)-1)
|
, _patch_port_out_index((uint32_t)-1)
|
||||||
, _uri_map(URIMap::instance())
|
, _uri_map(URIMap::instance())
|
||||||
@ -373,6 +374,7 @@ LV2Plugin::LV2Plugin (const LV2Plugin& other)
|
|||||||
, _worker(NULL)
|
, _worker(NULL)
|
||||||
, _state_worker(NULL)
|
, _state_worker(NULL)
|
||||||
, _insert_id(other._insert_id)
|
, _insert_id(other._insert_id)
|
||||||
|
, _bpm_control_port_index((uint32_t)-1)
|
||||||
, _patch_port_in_index((uint32_t)-1)
|
, _patch_port_in_index((uint32_t)-1)
|
||||||
, _patch_port_out_index((uint32_t)-1)
|
, _patch_port_out_index((uint32_t)-1)
|
||||||
, _uri_map(URIMap::instance())
|
, _uri_map(URIMap::instance())
|
||||||
@ -759,6 +761,11 @@ LV2Plugin::init(const void* c_plugin, samplecnt_t rate)
|
|||||||
_impl->designated_input (LV2_TIME__beatsPerMinute, params, (void**)&_bpm_control_port);
|
_impl->designated_input (LV2_TIME__beatsPerMinute, params, (void**)&_bpm_control_port);
|
||||||
_impl->designated_input (LV2_CORE__freeWheeling, params, (void**)&_freewheel_control_port);
|
_impl->designated_input (LV2_CORE__freeWheeling, params, (void**)&_freewheel_control_port);
|
||||||
|
|
||||||
|
const LilvPort* bpmport = lilv_plugin_get_port_by_designation(plugin, _world.lv2_InputPort, _world.time_beatsPerMin);
|
||||||
|
if (bpmport) {
|
||||||
|
_bpm_control_port_index = lilv_port_get_index (plugin, bpmport);
|
||||||
|
}
|
||||||
|
|
||||||
for (uint32_t i = 0; i < num_ports; ++i) {
|
for (uint32_t i = 0; i < num_ports; ++i) {
|
||||||
const LilvPort* port = lilv_plugin_get_port_by_index(plugin, i);
|
const LilvPort* port = lilv_plugin_get_port_by_index(plugin, i);
|
||||||
const LilvNode* sym = lilv_port_get_symbol(plugin, port);
|
const LilvNode* sym = lilv_port_get_symbol(plugin, port);
|
||||||
@ -2397,6 +2404,9 @@ LV2Plugin::set_automation_control (uint32_t i, boost::shared_ptr<AutomationContr
|
|||||||
DEBUG_TRACE(DEBUG::LV2Automate, string_compose ("Ctrl Port %1\n", i));
|
DEBUG_TRACE(DEBUG::LV2Automate, string_compose ("Ctrl Port %1\n", i));
|
||||||
_ctrl_map [i] = AutomationCtrlPtr (new AutomationCtrl(c));
|
_ctrl_map [i] = AutomationCtrlPtr (new AutomationCtrl(c));
|
||||||
}
|
}
|
||||||
|
else if (i == _bpm_control_port_index) {
|
||||||
|
_ctrl_map [i] = AutomationCtrlPtr (new AutomationCtrl(c));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LV2Plugin::AutomationCtrlPtr
|
LV2Plugin::AutomationCtrlPtr
|
||||||
@ -2577,7 +2587,15 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_bpm_control_port) {
|
if (_bpm_control_port) {
|
||||||
*_bpm_control_port = tmap.tempo_at_sample (start).note_types_per_minute();
|
float bpm = tmap.tempo_at_sample (start).note_types_per_minute();
|
||||||
|
if (*_bpm_control_port != bpm) {
|
||||||
|
AutomationCtrlPtr c = get_automation_control (_bpm_control_port_index);
|
||||||
|
if (c && c->ac) {
|
||||||
|
/* may be NULL for replicated instances - only one custom UI/ctrl */
|
||||||
|
c->ac->Changed (false, Controllable::NoGroup); /* EMIT SIGNAL */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*_bpm_control_port = bpm;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LV2_EXTENDED
|
#ifdef LV2_EXTENDED
|
||||||
|
Loading…
Reference in New Issue
Block a user