commit 745275b559555e7fa7eeb6b872d11304ac8c5887
parent 2fbb905c153133b78674001793f6f2a05721d7cf
Author: Adam M <aemalone@gmail.com>
Date: Thu, 31 Jan 2019 18:35:59 -0600
Add numDivisions knob to select 1-24 equal-temperment scales in Peas
Diffstat:
2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/src/Computerscare.hpp b/src/Computerscare.hpp
@@ -138,6 +138,12 @@ struct LrgKnob : RoundBlackSnapKnob {
}
void randomize() override { return; }
};
+
+struct MediumSnapKnob : RoundBlackSnapKnob {
+ MediumSnapKnob() {
+ setSVG(SVG::load(assetPlugin(plugin, "res/computerscare-medium-knob-effed.svg")));
+ }
+};
struct SmoothKnob : RoundKnob {
SmoothKnob() {
setSVG(SVG::load(assetPlugin(plugin, "res/computerscare-medium-knob-effed.svg")));
diff --git a/src/ComputerscareOhPeas.cpp b/src/ComputerscareOhPeas.cpp
@@ -106,6 +106,7 @@ struct ComputerscareOhPeas : Module {
PeasTextField* textField;
int lineCounter = 0;
+ int numDivisions = 12;
SchmittTrigger clockTrigger;
SchmittTrigger clearTrigger;
@@ -148,11 +149,10 @@ struct ComputerscareOhPeas : Module {
}
- void setQuant(Quantizer q) {
+ void setQuant() {
std::string value = this->textField->text;
int offset = (int)floor(params[GLOBAL_TRANSPOSE].value);
-
- this->quant = Quantizer(value,12,offset);
+ this->quant = Quantizer(value,this->numDivisions,offset);
printf("numSteps:%i\n",this->quant.numSteps);
}
// For more advanced Module features, read Rack's engine.hpp header file
@@ -165,6 +165,12 @@ struct ComputerscareOhPeas : Module {
void ComputerscareOhPeas::step() {
float A,B,C,D,Q,a,b,c,d,octavePart;
int t;
+ int numDivisionsKnobValue = (int) clamp(roundf(params[NUM_DIVISIONS].value), 1.0f, 24.0f);
+
+ if(numDivisionsKnobValue != numDivisions) {
+ numDivisions = numDivisionsKnobValue;
+ setQuant();
+ }
for(int i = 0; i < numChannels; i++) {
a = params[SCALE_VAL+i].value;
@@ -233,7 +239,7 @@ void PeasTextField::onTextChange() {
if(true) {
printf("no parse error\n");
- module->setQuant(q);
+ module->setQuant();
//module->textFields[this->rowIndex]->inError=false;
//module->setNextAbsoluteSequence(this->rowIndex);
@@ -275,7 +281,10 @@ struct ComputerscareOhPeasWidget : ModuleWidget {
ParamWidget* rootKnob = ParamWidget::create<SmoothKnob>(mm2px(Vec(30,yy)), module, ComputerscareOhPeas::GLOBAL_TRANSPOSE , -7.f, 7.f, 0.0f);
addParam(rootKnob);
-
+
+ ParamWidget* numDivisionKnob = ParamWidget::create<MediumSnapKnob>(mm2px(Vec(10,yy)), module, ComputerscareOhPeas::NUM_DIVISIONS , 1.f, 24.f, 12.0f);
+ addParam(numDivisionKnob);
+
textFieldTemp = Widget::create<PeasTextField>(mm2px(Vec(x,y+20)));
textFieldTemp->setModule(module);
textFieldTemp->box.size = mm2px(Vec(38, 7));