diff options
author | David Robillard <d@drobilla.net> | 2008-11-27 22:50:32 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-11-27 22:50:32 +0000 |
commit | c58f17efff27f959147dfd231a8b059950d06e69 (patch) | |
tree | f10dd950a9b1b15461a6200f9396a989b3e1ad9d /src/engine/PortImpl.cpp | |
parent | cb1d3b65670febd0bd5c3ac7d128f45ef0a744a4 (diff) | |
download | ingen-c58f17efff27f959147dfd231a8b059950d06e69.tar.gz ingen-c58f17efff27f959147dfd231a8b059950d06e69.tar.bz2 ingen-c58f17efff27f959147dfd231a8b059950d06e69.zip |
MIDI learn for control node.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@1806 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/PortImpl.cpp')
-rw-r--r-- | src/engine/PortImpl.cpp | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/src/engine/PortImpl.cpp b/src/engine/PortImpl.cpp index b8c77f43..4669dba4 100644 --- a/src/engine/PortImpl.cpp +++ b/src/engine/PortImpl.cpp @@ -169,25 +169,31 @@ PortImpl::clear_buffers() void -PortImpl::broadcast(ProcessContext& context) +PortImpl::broadcast_value(ProcessContext& context, bool force) { - if (_broadcast) { - if (_type == DataType::CONTROL || _type == DataType::AUDIO) { - const Sample value = ((AudioBuffer*)buffer(0))->value_at(0); - if (value != _last_broadcasted_value) { - const SendPortValueEvent ev(context.engine(), context.start(), this, false, 0, value); - context.event_sink().write(sizeof(ev), &ev); - _last_broadcasted_value = value; - } - } else if (_type == DataType::EVENT) { - if (((EventBuffer*)buffer(0))->event_count() > 0) { - const SendPortActivityEvent ev(context.engine(), context.start(), this); - context.event_sink().write(sizeof(ev), &ev); - } + if (_type == DataType::CONTROL || _type == DataType::AUDIO) { + const Sample value = ((AudioBuffer*)buffer(0))->value_at(0); + if (force || value != _last_broadcasted_value) { + const SendPortValueEvent ev(context.engine(), context.start(), this, false, 0, value); + context.event_sink().write(sizeof(ev), &ev); + _last_broadcasted_value = value; + } + } else if (_type == DataType::EVENT) { + if (((EventBuffer*)buffer(0))->event_count() > 0) { + const SendPortActivityEvent ev(context.engine(), context.start(), this); + context.event_sink().write(sizeof(ev), &ev); } } } +void +PortImpl::broadcast(ProcessContext& context) +{ + if (_broadcast) + broadcast_value(context); +} + + } // namespace Ingen |