diff options
author | David Robillard <d@drobilla.net> | 2010-02-09 19:21:14 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-02-09 19:21:14 +0000 |
commit | cbed8ff4b83526eec34d07c478952e1738f4c8ed (patch) | |
tree | 9f1986ea9a6ede0bcaddcaabb31dfac22c414d4e | |
parent | ed7ea1eb71d1cc4f68e31cd4815c6cbc04fd7818 (diff) | |
download | ingen-cbed8ff4b83526eec34d07c478952e1738f4c8ed.tar.gz ingen-cbed8ff4b83526eec34d07c478952e1738f4c8ed.tar.bz2 ingen-cbed8ff4b83526eec34d07c478952e1738f4c8ed.zip |
Make control bindings actually (audibly) take effect.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2436 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r-- | src/engine/ControlBindings.cpp | 14 | ||||
-rw-r--r-- | src/engine/events/SetPortValue.cpp | 2 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/engine/ControlBindings.cpp b/src/engine/ControlBindings.cpp index 7f58c057..ac8deca5 100644 --- a/src/engine/ControlBindings.cpp +++ b/src/engine/ControlBindings.cpp @@ -21,6 +21,7 @@ #include "raul/IntrusivePtr.hpp" #include "events/SendPortValue.hpp" #include "events/SendBinding.hpp" +#include "AudioBuffer.hpp" #include "ControlBindings.hpp" #include "Engine.hpp" #include "EventBuffer.hpp" @@ -230,8 +231,17 @@ ControlBindings::port_value_to_control(PortImpl* port, Type type) void ControlBindings::set_port_value(ProcessContext& context, PortImpl* port, Type type, int16_t value) { - const Events::SendPortValue ev(context.engine(), context.start(), port, true, 0, - control_to_port_value(port, type, value)); + const Raul::Atom port_value(control_to_port_value(port, type, value)); + port->set_value(port_value); + + assert(port_value.type() == Atom::FLOAT); + assert(dynamic_cast<AudioBuffer*>(port->buffer(0).get())); + + for (uint32_t v = 0; v < port->poly(); ++v) + reinterpret_cast<AudioBuffer*>(port->buffer(v).get())->set_value( + port_value.get_float(), context.start(), context.start()); + + const Events::SendPortValue ev(context.engine(), context.start(), port, true, 0, port_value); context.event_sink().write(sizeof(ev), &ev); } diff --git a/src/engine/events/SetPortValue.cpp b/src/engine/events/SetPortValue.cpp index 892abb67..8f8f331e 100644 --- a/src/engine/events/SetPortValue.cpp +++ b/src/engine/events/SetPortValue.cpp @@ -162,7 +162,7 @@ SetPortValue::apply(Context& context) /*} else if (_port->buffer(0)->capacity() < _data_size) { _error = NO_SPACE;*/ } else { - Buffer* const buf = _port->buffer(0).get(); + Buffer* const buf = _port->buffer(0).get(); AudioBuffer* const abuf = dynamic_cast<AudioBuffer*>(buf); if (abuf) { if (_value.type() != Atom::FLOAT) { |