A canonical template for making data / message objects with Avendish: a single C++ object that processes strings (and other non-audio data) and is compiled, without rewrite, to the host formats that have a real object model.
It is the message-processing counterpart of the audio, video and geometry templates.
The avnd_make_object(...) macro in CMakeLists.txt instantiates the object back-ends —
deliberately not the audio plug-in formats (VST3 / CLAP / …):
| Back-end | Object kind | SDK required |
|---|---|---|
| Max/MSP | a Max external | Max SDK |
| Pure Data | a Pd external | PureData headers (m_pd.h) |
| TouchDesigner | a CHOP (message) | TouchDesigner Custom Operator SDK |
| Godot | a GDExtension node |
none — godot-cpp is fetched automatically |
| Python | an importable extension module | pybind11 + Python dev headers |
| ossia score | a process | libossia |
Back-ends whose SDK is not provided are silently skipped.
src/Model.hpp implements MyDataProcessor: it takes a string input, applies a
case/reverse Operation, and emits the transformed string on its output. It also exposes
a set_prefix message (a halp_mem_fun) that prepends a prefix to every output —
showing string ports (halp::val_port<…, std::string>), an enum control
(halp::enum_t), input-driven recompute (update()), and message handlers.
Start from there: change the ports/messages and rewrite operator(). See
examples/Complete/CompleteMessageExample.hpp
in Avendish for the full set of string / message / callback features.
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build buildWith no extra options this builds the Godot back-end (it fetches godot-cpp
automatically). Pass the relevant SDK paths to enable the others — see the
Github actions workflow, which builds the project on
clean VMs via the shared ossia/actions/avendish-template
action:
- Max/MSP:
-DAVND_MAXSDK_PATH=path/to/max-sdk-base - Pure Data: make
m_pd.hfindable, e.g.-DCMAKE_INCLUDE_PATH=path/to/pure-data/src - TouchDesigner:
-DTOUCHDESIGNER_SDK_PATH=path/to/CustomOperatorSamples - Python:
-Dpybind11_DIR="$(python -m pybind11 --cmakedir)" - ossia score: install libossia