We’ve now added a new feature to our online compiler which will generate patch metadata based on the information entered on the patch details page. This metadata will then be used to assign any ‘extra’ output channels on your gen~ patch. This way you can add CV outs, triggers, and gates in any combination, and assign them to any output.
In addition, the metadata includes all the parameter names entered on the patch details page. This means that on e.g. Magus, instead of showing A
, B
and C
, the parameters can be given proper, meaningful names.
So in order to use output parameters (control voltage outputs) and buttons (gates/triggers) in a Max Gen OWL patch, you have to add an output channel for each one in your gen patch. Parameters should come first, then buttons, in the order they are assigned. E.g. first Parameter F and G, then Button 4 and 5.
After that, the parameters and buttons must be correctly defined on the patch details page. And when the patch metadata changes, the patch must be recompiled for the changes to have an effect.
In gen~ all outputs are audio signals, so to convert to CV outputs the values will be averaged each block. For triggers and gates, any value within the block that is over 0.5 will set the output high, otherwise it will be low. The values sent to these outputs from gen~ should be from 0.0 to 1.0.
A simple example can be seen and tried here, it simply maps input parameters A and B to output parameters F and G, and buttons 1 and 2 to output buttons 4 and 5.
If you are using the OWL Watcher within Max, then you will have to follow the link to our patch library to edit the patch details there.
And if you are compiling patches offline then you can add your own metadata.h
file as per this example:
#define OWL_METADATA 1
const char* PatchMetadata::name = "Test Patch";
const int PatchMetadata::channels_in = 2;
const int PatchMetadata::channels_out = 2;
const int PatchMetadata::parameter_count = 4;
const int PatchMetadata::button_count = 4;
const PatchMetadata::Control PatchMetadata::parameters[] = {
{PARAMETER_A, CONTROL_INPUT, "Freq"},
{PARAMETER_B, CONTROL_INPUT, "Cutoff"},
{PARAMETER_F, CONTROL_OUTPUT, "Freq>"},
{PARAMETER_G, CONTROL_OUTPUT, "Gain>"},
};
const PatchMetadata::Control PatchMetadata::buttons[] = {
{BUTTON_1, CONTROL_INPUT, "Trigger"},
{BUTTON_2, CONTROL_INPUT, "Overdrive"},
{BUTTON_5, CONTROL_OUTPUT, "Trigger"},
{BUTTON_6, CONTROL_OUTPUT, "Overdrive"}
};