Skip to content

Commit 19ffcc1

Browse files
committed
wip
1 parent 5cab9ea commit 19ffcc1

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

src/questionableModule.hpp

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ struct QuestionableModule : Module {
1616
bool toggleableDescriptors = true;
1717

1818
float sampleRateOverride = 0;
19-
bool runHalfRate = false;
19+
int rateDivision = 0;
2020
int64_t frame = 0;
2121

2222
std::vector<int> interpolatedOutputs;
@@ -34,18 +34,18 @@ struct QuestionableModule : Module {
3434
json_t* rootJ = json_object();
3535
if (supportsThemes) json_object_set_new(rootJ, "theme", json_string(theme.c_str()));
3636
if (toggleableDescriptors) json_object_set_new(rootJ, "showDescriptors", json_boolean(showDescriptors));
37-
if (supportsSampleRateOverride) json_object_set_new(rootJ, "runHalfRate", json_boolean(runHalfRate));
38-
return rootJ;
39-
}
37+
if (supportsSampleRateOverride) json_object_set_new(rootJ, "rateDivision", json_integer(rateDivision));
38+
return rootJ;
39+
}
4040

4141
void dataFromJson(json_t* rootJ) override {
4242
if (supportsThemes) if (json_t* s = json_object_get(rootJ, "theme")) theme = json_string_value(s);
4343
if (toggleableDescriptors) if (json_t* d = json_object_get(rootJ, "showDescriptors")) showDescriptors = json_boolean_value(d);
44-
if (supportsSampleRateOverride) if (json_t* hr = json_object_get(rootJ, "runHalfRate")) runHalfRate = json_boolean_value(hr);
45-
}
44+
if (supportsSampleRateOverride) if (json_t* hr = json_object_get(rootJ, "rateDivision")) rateDivision = json_integer_value(hr);
45+
}
4646

4747
void onSampleRateChange(const SampleRateChangeEvent& e) override {
48-
if (supportsSampleRateOverride && runHalfRate) sampleRateOverride = e.sampleRate / 2;
48+
if (supportsSampleRateOverride && rateDivision) sampleRateOverride = e.sampleRate / rateDivision;
4949
}
5050

5151
void process(const ProcessArgs& args) override {
@@ -62,15 +62,14 @@ struct QuestionableModule : Module {
6262
processUndersampled(newArgs);
6363

6464
for (size_t i = 0; i < interpolatedOutputs.size(); i++) {
65-
engine::Output out = outputs[interpolatedOutputs[i]];
66-
float curVal = out.getVoltage();
67-
out.setVoltage(outputCache[i]);
65+
float curVal = outputs[interpolatedOutputs[i]].getVoltage();
66+
outputs[interpolatedOutputs[i]].setVoltage(outputCache[i]);
6867
outputCache[i] = curVal;
6968
}
7069
} else {
71-
int ticksBetweenProcess = (int)(args.sampleRate/sampleRateOverride);
70+
float ticksBetweenProcess = (args.sampleRate/sampleRateOverride);
7271
for (size_t i = 0; i < interpolatedOutputs.size(); i++) {
73-
outputs[interpolatedOutputs[i]].setVoltage(lerp<float>(outputs[interpolatedOutputs[i]].getVoltage(), outputCache[i], (args.frame % ticksBetweenProcess) / ticksBetweenProcess));
72+
outputs[interpolatedOutputs[i]].setVoltage(lerp<float>(outputs[interpolatedOutputs[i]].getVoltage(), outputCache[i], 1 / sampleRateOverride));
7473
}
7574
}
7675

@@ -140,13 +139,17 @@ struct QuestionableWidget : ModuleWidget {
140139
QuestionableModule* mod = (QuestionableModule*)module;
141140

142141
if (mod->supportsSampleRateOverride) menu->addChild(rack::createSubmenuItem("Sample Rate", "", [=](ui::Menu* menu) {
143-
menu->addChild(createMenuItem("Full", mod->runHalfRate ? "" : "",[=]() {
142+
menu->addChild(createMenuItem("Full", mod->rateDivision ? "" : "",[=]() {
144143
mod->sampleRateOverride = 0;
145-
mod->runHalfRate = false;
144+
mod->rateDivision = 0;
146145
}));
147-
menu->addChild(createMenuItem("Half", mod->runHalfRate ? "" : "", [=]() {
146+
menu->addChild(createMenuItem("Half", mod->rateDivision == 2 ? "" : "", [=]() {
148147
mod->sampleRateOverride = APP->engine->getSampleRate() / 2;
149-
mod->runHalfRate = true;
148+
mod->rateDivision = 2;
149+
}));
150+
menu->addChild(createMenuItem("Quarter", mod->rateDivision == 4 ? "" : "", [=]() {
151+
mod->sampleRateOverride = APP->engine->getSampleRate() / 4;
152+
mod->rateDivision = 4;
150153
}));
151154
}));
152155

0 commit comments

Comments
 (0)