diff options
author | David Robillard <d@drobilla.net> | 2010-02-03 04:46:56 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-02-03 04:46:56 +0000 |
commit | 87597f85c5a69a9accd3ce2ed88f2a006173e885 (patch) | |
tree | a3ffa393e9aecbc55dae64bad3bd45ee317e6d26 /src/engine/ControlBindings.hpp | |
parent | a645d2b8be4d7d31f6eef1649156b166a01e0c31 (diff) | |
download | ingen-87597f85c5a69a9accd3ce2ed88f2a006173e885.tar.gz ingen-87597f85c5a69a9accd3ce2ed88f2a006173e885.tar.bz2 ingen-87597f85c5a69a9accd3ce2ed88f2a006173e885.zip |
Comprehensive use of cached URIs and more advanced Value (Atom) system.
Atoms (e.g. property values or port values) can now be an Atom::DICT, which
maps directly to/from an RDF resource. This is now used to store control
bindings as a port property, eliminating the special API.
Full interned URIs used everywhere, instead of CURIEs pretending to be URIs.
Avoid converting string literals to URIs all over the place.
Support for binding MIDI pitch bender and MIDI channel pressure.
Saving/restoring of MIDI bindings as a free side-effect of the above.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2409 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/ControlBindings.hpp')
-rw-r--r-- | src/engine/ControlBindings.hpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/engine/ControlBindings.hpp b/src/engine/ControlBindings.hpp index e9ab290f..bae3cc73 100644 --- a/src/engine/ControlBindings.hpp +++ b/src/engine/ControlBindings.hpp @@ -33,7 +33,24 @@ class PortImpl; class ControlBindings { public: - typedef std::map<int8_t, PortImpl*> Bindings; + enum Type { + MIDI_BENDER, + MIDI_CC, + MIDI_RPN, + MIDI_NRPN, + MIDI_CHANNEL_PRESSURE + }; + + struct Key { + Key(Type t, int16_t n=0) : type(t), num(n) {} + inline bool operator<(const Key& other) const { + return (type == other.type) ? (num < other.num) : (type < other.type); + } + Type type; + int16_t num; + }; + + typedef std::map<Key, PortImpl*> Bindings; ControlBindings(Engine& engine, SharedPtr<Shared::LV2URIMap> map) : _engine(engine) @@ -43,6 +60,7 @@ public: {} void learn(PortImpl* port); + void update_port(ProcessContext& context, PortImpl* port); void process(ProcessContext& context, EventBuffer* buffer); /** Remove all bindings for @a path or children of @a path. @@ -56,8 +74,8 @@ private: SharedPtr<Shared::LV2URIMap> _map; PortImpl* _learn_port; - void set_port_value(ProcessContext& context, PortImpl* port, int8_t cc_value); - void bind(ProcessContext& context, int8_t cc_num); + void set_port_value(ProcessContext& context, PortImpl* port, Type type, int16_t value); + void bind(ProcessContext& context, Type type, int16_t num=0); SharedPtr<Bindings> _bindings; }; |