Set number of host parameters to 512
- 512 should be enough for anybody - Added banks to Host Params module
This commit is contained in:
parent
e4abb1cd78
commit
85b4b857c8
2 changed files with 42 additions and 23 deletions
|
@ -68,7 +68,7 @@ using CardinalDGL::IdleCallback;
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------------
|
||||||
// Cardinal specific context
|
// Cardinal specific context
|
||||||
|
|
||||||
static constexpr const uint32_t kModuleParameterCount = 24;
|
static constexpr const uint32_t kModuleParameterCount = 512;
|
||||||
|
|
||||||
enum CardinalVariant {
|
enum CardinalVariant {
|
||||||
kCardinalVariantMain,
|
kCardinalVariantMain,
|
||||||
|
|
|
@ -30,17 +30,18 @@ struct HostParameters : TerminalModule {
|
||||||
NUM_INPUTS
|
NUM_INPUTS
|
||||||
};
|
};
|
||||||
enum OutputIds {
|
enum OutputIds {
|
||||||
NUM_OUTPUTS = kModuleParameterCount
|
NUM_OUTPUTS = 32
|
||||||
};
|
};
|
||||||
enum LightIds {
|
enum LightIds {
|
||||||
NUM_LIGHTS
|
NUM_LIGHTS
|
||||||
};
|
};
|
||||||
|
|
||||||
CardinalPluginContext* const pcontext;
|
CardinalPluginContext* const pcontext;
|
||||||
rack::dsp::SlewLimiter parameters[kModuleParameterCount];
|
rack::dsp::SlewLimiter parameters[32];
|
||||||
bool parametersConnected[kModuleParameterCount] = {};
|
bool parametersConnected[32] = {};
|
||||||
bool bypassed = false;
|
bool bypassed = false;
|
||||||
bool smooth = true;
|
bool smooth = true;
|
||||||
|
uint8_t bank = 0;
|
||||||
uint32_t lastProcessCounter = 0;
|
uint32_t lastProcessCounter = 0;
|
||||||
|
|
||||||
HostParameters()
|
HostParameters()
|
||||||
|
@ -61,7 +62,7 @@ struct HostParameters : TerminalModule {
|
||||||
bypassed = isBypassed();
|
bypassed = isBypassed();
|
||||||
lastProcessCounter = processCounter;
|
lastProcessCounter = processCounter;
|
||||||
|
|
||||||
for (uint32_t i=0; i<kModuleParameterCount; ++i)
|
for (uint32_t i=0; i<32; ++i)
|
||||||
{
|
{
|
||||||
const bool connected = outputs[i].isConnected();
|
const bool connected = outputs[i].isConnected();
|
||||||
|
|
||||||
|
@ -76,11 +77,11 @@ struct HostParameters : TerminalModule {
|
||||||
if (bypassed)
|
if (bypassed)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (uint32_t i=0; i<kModuleParameterCount; ++i)
|
for (uint32_t i=0; i<32; ++i)
|
||||||
{
|
{
|
||||||
if (parametersConnected[i])
|
if (parametersConnected[i])
|
||||||
outputs[i].setVoltage(smooth ? parameters[i].process(args.sampleTime, pcontext->parameters[i])
|
outputs[i].setVoltage(smooth ? parameters[i].process(args.sampleTime, pcontext->parameters[i+32*bank])
|
||||||
: pcontext->parameters[i]);
|
: pcontext->parameters[i+32*bank]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +92,7 @@ struct HostParameters : TerminalModule {
|
||||||
{
|
{
|
||||||
const double fall = 1.0 / (double(pcontext->bufferSize) / e.sampleRate);
|
const double fall = 1.0 / (double(pcontext->bufferSize) / e.sampleRate);
|
||||||
|
|
||||||
for (uint32_t i=0; i<kModuleParameterCount; ++i)
|
for (uint32_t i=0; i<32; ++i)
|
||||||
{
|
{
|
||||||
parameters[i].reset();
|
parameters[i].reset();
|
||||||
parameters[i].setRiseFall(fall, fall);
|
parameters[i].setRiseFall(fall, fall);
|
||||||
|
@ -107,6 +108,7 @@ struct HostParameters : TerminalModule {
|
||||||
DISTRHO_SAFE_ASSERT_RETURN(rootJ != nullptr, nullptr);
|
DISTRHO_SAFE_ASSERT_RETURN(rootJ != nullptr, nullptr);
|
||||||
|
|
||||||
json_object_set_new(rootJ, "smooth", json_boolean(smooth));
|
json_object_set_new(rootJ, "smooth", json_boolean(smooth));
|
||||||
|
json_object_set_new(rootJ, "bank", json_integer(bank));
|
||||||
|
|
||||||
return rootJ;
|
return rootJ;
|
||||||
}
|
}
|
||||||
|
@ -115,6 +117,8 @@ struct HostParameters : TerminalModule {
|
||||||
{
|
{
|
||||||
if (json_t* const smoothJ = json_object_get(rootJ, "smooth"))
|
if (json_t* const smoothJ = json_object_get(rootJ, "smooth"))
|
||||||
smooth = json_boolean_value(smoothJ);
|
smooth = json_boolean_value(smoothJ);
|
||||||
|
if (json_t* const bankJ = json_object_get(rootJ, "bank"))
|
||||||
|
bank = json_integer_value(bankJ);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -124,12 +128,12 @@ struct HostParameters : TerminalModule {
|
||||||
struct CardinalParameterPJ301MPort : PJ301MPort {
|
struct CardinalParameterPJ301MPort : PJ301MPort {
|
||||||
void onDragStart(const DragStartEvent& e) override {
|
void onDragStart(const DragStartEvent& e) override {
|
||||||
if (const CardinalPluginContext* const pcontext = static_cast<CardinalPluginContext*>(APP))
|
if (const CardinalPluginContext* const pcontext = static_cast<CardinalPluginContext*>(APP))
|
||||||
handleHostParameterDrag(pcontext, portId, true);
|
handleHostParameterDrag(pcontext, ((HostParameters*)module)->bank*portId, true);
|
||||||
PJ301MPort::onDragStart(e);
|
PJ301MPort::onDragStart(e);
|
||||||
}
|
}
|
||||||
void onDragEnd(const DragEndEvent& e) override {
|
void onDragEnd(const DragEndEvent& e) override {
|
||||||
if (const CardinalPluginContext* const pcontext = static_cast<CardinalPluginContext*>(APP))
|
if (const CardinalPluginContext* const pcontext = static_cast<CardinalPluginContext*>(APP))
|
||||||
handleHostParameterDrag(pcontext, portId, false);
|
handleHostParameterDrag(pcontext, ((HostParameters*)module)->bank*portId, false);
|
||||||
PJ301MPort::onDragEnd(e);
|
PJ301MPort::onDragEnd(e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -138,7 +142,7 @@ struct HostParametersWidget : ModuleWidgetWith9HP {
|
||||||
static constexpr const float startX = 10.0f;
|
static constexpr const float startX = 10.0f;
|
||||||
static constexpr const float startY = 90.0f;
|
static constexpr const float startY = 90.0f;
|
||||||
static constexpr const float paddingH = 30.0f;
|
static constexpr const float paddingH = 30.0f;
|
||||||
static constexpr const float paddingV = 49.0f;
|
static constexpr const float paddingV = 36.0f;
|
||||||
|
|
||||||
HostParameters* const module;
|
HostParameters* const module;
|
||||||
|
|
||||||
|
@ -149,10 +153,10 @@ struct HostParametersWidget : ModuleWidgetWith9HP {
|
||||||
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostParameters.svg")));
|
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostParameters.svg")));
|
||||||
createAndAddScrews();
|
createAndAddScrews();
|
||||||
|
|
||||||
for (int i=0; i<24; ++i)
|
for (int i=0; i<32; ++i)
|
||||||
{
|
{
|
||||||
const float x = startX + int(i / 6) * paddingH;
|
const float x = startX + int(i % 4) * paddingH;
|
||||||
const float y = startY + int(i % 6) * paddingV;
|
const float y = startY + int(i / 4) * paddingV;
|
||||||
addOutput(createOutput<CardinalParameterPJ301MPort>(Vec(x, y), m, i));
|
addOutput(createOutput<CardinalParameterPJ301MPort>(Vec(x, y), m, i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,22 +166,28 @@ struct HostParametersWidget : ModuleWidgetWith9HP {
|
||||||
drawBackground(args.vg);
|
drawBackground(args.vg);
|
||||||
|
|
||||||
nvgFontFaceId(args.vg, 0);
|
nvgFontFaceId(args.vg, 0);
|
||||||
nvgFontSize(args.vg, 14);
|
nvgFontSize(args.vg, 10);
|
||||||
|
|
||||||
char text[] = { '0', '0', '\0' };
|
char text[] = { '0', '0', '0', '\0'};
|
||||||
for (int i=0; i<24; ++i)
|
snprintf(text, 4, "%03d", 32*(module == nullptr ? 0 : module->bank));
|
||||||
|
for (int i=0; i<32; ++i)
|
||||||
{
|
{
|
||||||
const float x = startX + int(i / 6) * paddingH;
|
const float x = startX + int(i % 4) * paddingH;
|
||||||
const float y = startY + int(i % 6) * paddingV;
|
const float y = startY + int(i / 4) * paddingV;
|
||||||
nvgBeginPath(args.vg);
|
nvgBeginPath(args.vg);
|
||||||
nvgRoundedRect(args.vg, x - 1.0f, y - 19.0f, paddingH - 4.0f, paddingV - 4.0f, 4);
|
nvgRoundedRect(args.vg, x - 1.0f, y - 19.0f, paddingH - 4.0f, paddingV - 4.0f, 4);
|
||||||
nvgFillColor(args.vg, nvgRGB(0xd0, 0xd0, 0xd0));
|
nvgFillColor(args.vg, nvgRGB(0xd0, 0xd0, 0xd0));
|
||||||
nvgFill(args.vg);
|
nvgFill(args.vg);
|
||||||
|
|
||||||
if (text[1]++ == '9')
|
|
||||||
|
if (text[2]++ == '9')
|
||||||
{
|
{
|
||||||
text[1] = '0';
|
text[2] = '0';
|
||||||
++text[0];
|
if (text[1]++ == '9')
|
||||||
|
{
|
||||||
|
text[1] = '0';
|
||||||
|
++text[0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
nvgBeginPath(args.vg);
|
nvgBeginPath(args.vg);
|
||||||
nvgFillColor(args.vg, color::BLACK);
|
nvgFillColor(args.vg, color::BLACK);
|
||||||
|
@ -191,6 +201,15 @@ struct HostParametersWidget : ModuleWidgetWith9HP {
|
||||||
{
|
{
|
||||||
menu->addChild(new MenuSeparator);
|
menu->addChild(new MenuSeparator);
|
||||||
menu->addChild(createBoolPtrMenuItem("Smooth", "", &module->smooth));
|
menu->addChild(createBoolPtrMenuItem("Smooth", "", &module->smooth));
|
||||||
|
menu->addChild(createSubmenuItem("Bank", string::f("%d", module->bank), [=](Menu* menu) {
|
||||||
|
for (int c = 0; c < 16; c++) {
|
||||||
|
menu->addChild(createCheckMenuItem(string::f("%d", c+1), "",
|
||||||
|
[=]() {return module->bank == c;},
|
||||||
|
[=]() {module->bank = c;}
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue