summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2013-02-02 19:19:24 +0000
committerDavid Robillard <d@drobilla.net>2013-02-02 19:19:24 +0000
commit949257d4b1451e99f6db5a4a1d3f9aa143d595e9 (patch)
treef8fc73dc7848ac312829fbc8da36d7a3df4a57ac
parent3265e8f01cd4e878661973730349a5ed44329713 (diff)
downloadingen-949257d4b1451e99f6db5a4a1d3f9aa143d595e9.tar.gz
ingen-949257d4b1451e99f6db5a4a1d3f9aa143d595e9.tar.bz2
ingen-949257d4b1451e99f6db5a4a1d3f9aa143d595e9.zip
Fix trigger and controller learn updating.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5027 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r--src/server/PortImpl.cpp5
-rw-r--r--src/server/PortImpl.hpp3
-rw-r--r--src/server/internals/Controller.cpp2
-rw-r--r--src/server/internals/Trigger.cpp2
4 files changed, 7 insertions, 5 deletions
diff --git a/src/server/PortImpl.cpp b/src/server/PortImpl.cpp
index 01280e73..950c8739 100644
--- a/src/server/PortImpl.cpp
+++ b/src/server/PortImpl.cpp
@@ -380,7 +380,7 @@ PortImpl::clear_buffers()
}
void
-PortImpl::monitor(Context& context)
+PortImpl::monitor(Context& context, bool send_now)
{
if (!context.must_notify(this)) {
return;
@@ -430,7 +430,8 @@ PortImpl::monitor(Context& context)
}
const uint32_t period = monitor_period(context.engine());
- if (key && val != _last_monitor_value && _frames_since_monitor >= period) {
+ if (key && val != _last_monitor_value &&
+ (send_now || _frames_since_monitor >= period)) {
// Time to send an update
if (context.notify(key, context.start(), this,
sizeof(float), forge.Float, &val)) {
diff --git a/src/server/PortImpl.hpp b/src/server/PortImpl.hpp
index 2789c4f0..267f9285 100644
--- a/src/server/PortImpl.hpp
+++ b/src/server/PortImpl.hpp
@@ -159,7 +159,8 @@ public:
/** Explicitly turn on monitoring for this port. */
void enable_monitoring(bool monitored) { _monitored = monitored; }
- void monitor(Context& context);
+ /** Monitor port value and broadcast to clients periodically. */
+ void monitor(Context& context, bool send_now=false);
void raise_set_by_user_flag() { _set_by_user = true; }
diff --git a/src/server/internals/Controller.cpp b/src/server/internals/Controller.cpp
index cad0aac4..5c3bf6f6 100644
--- a/src/server/internals/Controller.cpp
+++ b/src/server/internals/Controller.cpp
@@ -118,7 +118,7 @@ ControllerNode::control(ProcessContext& context, uint8_t control_num, uint8_t va
// FIXME: not thread safe
_param_port->set_value(context.engine().world()->forge().make(control_num));
_param_port->set_control_value(context, time, control_num);
- _param_port->monitor(context);
+ _param_port->monitor(context, true);
_learning = false;
}
diff --git a/src/server/internals/Trigger.cpp b/src/server/internals/Trigger.cpp
index c1c00b6b..6563e276 100644
--- a/src/server/internals/Trigger.cpp
+++ b/src/server/internals/Trigger.cpp
@@ -133,7 +133,7 @@ TriggerNode::note_on(ProcessContext& context, uint8_t note_num, uint8_t velocity
// FIXME: not thread safe
_note_port->set_value(context.engine().world()->forge().make((float)note_num));
_note_port->set_control_value(context, time, (float)note_num);
- _note_port->monitor(context);
+ _note_port->monitor(context, true);
_learning = false;
}