commit 05cc6f471faf715b378ab3e996bcd7320c25fc50
parent 784f868e2b5835164be0f2f8cf3e8353dc2a011d
Author: Adam M <aemalone@gmail.com>
Date: Mon, 11 May 2020 23:49:02 -0500
Penerator displai boi
Diffstat:
5 files changed, 114 insertions(+), 47 deletions(-)
diff --git a/src/ComputerscareDrolyPaw.cpp b/src/ComputerscareDrolyPaw.cpp
@@ -51,7 +51,7 @@ struct DrolyPaw : Module {
int cnt = 0;
int interiorCounter = 9000;
bool clearArmed = false;
- bool drawArmed=false;
+ bool drawArmed = false;
float lastScramble = 0;
rack::dsp::SchmittTrigger globalManualClockTrigger;
@@ -131,9 +131,9 @@ struct DrolyPaw : Module {
int frameCount = (int) std::ceil(deltaTime * args.sampleRate);
bool clearGateHigh = inputs[CLEAR_GATE].isConnected() && inputs[CLEAR_GATE].getVoltage() >= 1.f;
- bool drawGateHigh = inputs[DRAW_GATE].isConnected() && inputs[DRAW_GATE].getVoltage()>=1.f;
+ bool drawGateHigh = inputs[DRAW_GATE].isConnected() && inputs[DRAW_GATE].getVoltage() >= 1.f;
- if(inputs[CLEAR_GATE].isConnected()) {
+ if (inputs[CLEAR_GATE].isConnected()) {
if (inputs[CLEAR_GATE].getVoltage() >= 1.f || globalManualResetTrigger.process(params[CLEAR_BUTTON].getValue()) ) {
armClear();
}
@@ -143,17 +143,17 @@ struct DrolyPaw : Module {
armClear();
}
}
- if(inputs[DRAW_GATE].isConnected()) {
- if(inputs[DRAW_GATE].getVoltage() >= 1.f) {
- drawArmed=true;
+ if (inputs[DRAW_GATE].isConnected()) {
+ if (inputs[DRAW_GATE].getVoltage() >= 1.f) {
+ drawArmed = true;
}
}
else {
- if(params[DRAW_EVERY_FRAME].getValue() || drawTrigger.process(inputs[DRAW_TRIGGER].getVoltage())) {
- drawArmed=true;
+ if (params[DRAW_EVERY_FRAME].getValue() || drawTrigger.process(inputs[DRAW_TRIGGER].getVoltage())) {
+ drawArmed = true;
}
}
-
+
// Set channels
@@ -195,7 +195,7 @@ struct DrolyPaw : Module {
}
else {
for (int c = 0; c < 16; c++) {
- bufferX[c][bufferIndex] = trimVal*5*sin((float)interiorCounter / 100000 * (c + 1)) + offsetVal; // t is an integer type
+ bufferX[c][bufferIndex] = trimVal * 5 * sin((float)interiorCounter / 100000 * (c + 1)) + offsetVal; // t is an integer type
//bufferX[c][bufferIndex] = offsetVal + 99 + (1071 * cmap[c]) % 19;
@@ -294,25 +294,25 @@ struct NoClearWidget : FramebufferWidget {
struct DrolyPawDisplay : FramebufferWidget {
DrolyPaw *module;
- float containerWidth=195;
+ float containerWidth = 195;
void step() override {
dirty = true;
-
- if(module) {
+
+ if (module) {
containerWidth = module->params[DrolyPaw::MODULE_WIDTH].getValue();
}
box.size.x = containerWidth;
FramebufferWidget::step();
-
+
}
/*DrolyPawDisplay() {
FramebufferWidget();
}*/
- void drawThingie(const DrawArgs &args, float buffer[16][BUFFER_SIZE], float paramsBuffer[16][BUFFER_SIZE], int mode, float width,float height=380) {
+ void drawThingie(const DrawArgs &args, float buffer[16][BUFFER_SIZE], float paramsBuffer[16][BUFFER_SIZE], int mode, float width, float height = 380) {
DrawHelper draw = DrawHelper(args.vg);
Points pts = Points();
- nvgTranslate(args.vg, width/2, 190);
+ nvgTranslate(args.vg, width / 2, 190);
if (mode == 0) {
for (int i = 0; i < 4; i++) {
@@ -322,11 +322,10 @@ struct DrolyPawDisplay : FramebufferWidget {
}
}
else if (mode == 1) {
- float scale=width/2/(1+expf(-paramsBuffer[0][0]));
+ float scale = width * expf(paramsBuffer[0][0] / 3) / 20;
pts.spray(100);
pts.scale(Vec(scale, scale));
- draw.drawField(pts.get(), draw.sincolor(buffer[3][0] + buffer[4][0]*random::uniform()), paramsBuffer[1][0]);
- //draw.drawDots(pts.get(), draw.sincolor(random::uniform()), 2.f);
+ draw.drawField(pts.get(), draw.sincolor(paramsBuffer[2][0] + paramsBuffer[3][0]*random::uniform(), {paramsBuffer[4][0], paramsBuffer[5][0], paramsBuffer[6][0]}, {paramsBuffer[7][0], paramsBuffer[8][0], paramsBuffer[9][0]}), expf(paramsBuffer[1][0] / 2));
}
else if (mode == 2) {
//16 horizontal lines
@@ -339,7 +338,7 @@ struct DrolyPawDisplay : FramebufferWidget {
std::vector<Vec> thicknesses;
for (int i = 0; i < 16; i++) {
- polyVals.push_back(Vec(buffer[i][0] * width/4, 0.f));
+ polyVals.push_back(Vec(buffer[i][0] * width / 4, 0.f));
colors.push_back(draw.sincolor(paramsBuffer[0][0] + 2 + paramsBuffer[2][0]*i));
thicknesses.push_back(Vec(expf(paramsBuffer[1][0] * 2 + 2) + 0.5, 0));
@@ -351,7 +350,7 @@ struct DrolyPawDisplay : FramebufferWidget {
//number,-dTHickness,dAngle,dColor (passed to sincolor)
draw.drawLines(fmin(65, std::floor(exp(40 * buffer[0][1]) + 2)), buffer[1][0], buffer[2][0] / 4, buffer[3][0] * 2);
}
- else if(mode==4) {
+ else if (mode == 4) {
int nx = (mode * 17) % 10;
int ny = (mode * 11 + 3) % 10;
pts.grid(nx, ny, Vec(buffer[2][0] * 10, buffer[1][0] * 10));
@@ -366,15 +365,15 @@ struct DrolyPawDisplay : FramebufferWidget {
void drawThingie(const DrawArgs &args) {
float bx[16][BUFFER_SIZE];
float by[16][BUFFER_SIZE];
- for(int i = 0; i<BUFFER_SIZE; i++) {
- for(int j = 0; j < 16; j++) {
- bx[j][i]=random::uniform()*10;
- by[j][i]=random::uniform()*10;
+ for (int i = 0; i < BUFFER_SIZE; i++) {
+ for (int j = 0; j < 16; j++) {
+ bx[j][i] = random::normal() * 2;
+ by[j][i] = random::uniform() * 1;
}
}
int mode = 2;
- int width=195;
- drawThingie(args,bx,by,mode,width);
+ int width = 195;
+ drawThingie(args, bx, by, mode, width);
}
void drawFramebuffer() override {
@@ -400,8 +399,8 @@ struct DrolyPawDisplay : FramebufferWidget {
if (module->drawArmed) {
float myWidth = module->params[DrolyPaw::MODULE_WIDTH].getValue();
int mode = module->params[DrolyPaw::DRAW_MODE].getValue();
- drawThingie(args, module->bufferX, module->bufferY,mode,myWidth);
- module->drawArmed=false;
+ drawThingie(args, module->bufferX, module->bufferY, mode, myWidth);
+ module->drawArmed = false;
}
}
@@ -486,8 +485,8 @@ struct DrolyPawWidget : ModuleWidget {
ComputerscareResizeHandle *rightHandle = new ComputerscareResizeHandle();
rightHandle->right = true;
- leftHandle->box.size.y=RACK_GRID_HEIGHT*0.9;
-
+ leftHandle->box.size.y = RACK_GRID_HEIGHT * 0.9;
+
this->rightHandle = rightHandle;
addChild(leftHandle);
addChild(rightHandle);
@@ -496,13 +495,13 @@ struct DrolyPawWidget : ModuleWidget {
}
void draw(const DrawArgs &args) override {
- if(!module) {
+ ModuleWidget::draw(args);
+ if (!module) {
display->drawThingie(args);
}
else {
}
- ModuleWidget::draw(args);
}
void step() override {
@@ -516,21 +515,21 @@ struct DrolyPawWidget : ModuleWidget {
drolyPawModule->manualSetWidth=false;
}*/
//else {
- DEBUG("%f",width);
- bgPanel->box.size.x=box.size.x;
- module->params[DrolyPaw::MODULE_WIDTH].setValue(box.size.x);
+ DEBUG("%f", width);
+ bgPanel->box.size.x = box.size.x;
+ module->params[DrolyPaw::MODULE_WIDTH].setValue(box.size.x);
//}
}
rightHandle->box.pos.x = box.size.x - rightHandle->box.size.x;
-
+
ModuleWidget::step();
}
};
void resizeEverything() {
float width = drolyPawModule->params[DrolyPaw::MODULE_WIDTH].getValue();
- box.size.x=width;
- bgPanel->box.size.x=width;
+ box.size.x = width;
+ bgPanel->box.size.x = width;
}
void fromJson(json_t* rootJ) override {
diff --git a/src/ComputerscareGolyPenerator.cpp b/src/ComputerscareGolyPenerator.cpp
@@ -82,7 +82,44 @@ struct ComputerscareGolyPenerator : ComputerscarePolyModule {
}
};
+struct PeneratorDisplay : TransparentWidget {
+ ComputerscareGolyPenerator *module;
+ PeneratorDisplay() {
+
+ }
+ void draw(const DrawArgs &args) override {
+ float valsToDraw[16] = {1.f};
+ int ch = 16;
+ if (module) {
+ ch = module->polyChannels;
+ for (int i = 0; i < ch; i++) {
+ valsToDraw[i] = module->goly.currentValues[i];
+ }
+ }
+ else {
+ for (int i = 0; i < ch; i++) {
+ valsToDraw[i] = random::uniform() * 10;
+ }
+ }
+ DrawHelper draw = DrawHelper(args.vg);
+ Points pts = Points();
+
+ nvgTranslate(args.vg, box.size.x / 2, box.size.y/2);
+ pts.linear(16, Vec(0, 0), Vec(0, 40));
+ std::vector<Vec> polyVals;
+ std::vector<NVGcolor> colors;
+ std::vector<Vec> thicknesses;
+
+ for (int i = 0; i < 16; i++) {
+ polyVals.push_back(Vec(valsToDraw[i] * 2,0.f));
+ colors.push_back(draw.sincolor(valsToDraw[i]));
+
+ thicknesses.push_back(Vec(3.f, 0));
+ }
+ draw.drawLines(pts.get(), polyVals, colors, thicknesses);
+ }
+};
struct ComputerscareGolyPeneratorWidget : ModuleWidget {
ComputerscareGolyPeneratorWidget(ComputerscareGolyPenerator *module) {
@@ -99,6 +136,14 @@ struct ComputerscareGolyPeneratorWidget : ModuleWidget {
addChild(panel);
}
+
+ PeneratorDisplay *display = new PeneratorDisplay();
+ display->module = module;
+ display->box.pos = Vec(0, 30);
+ display->box.size = Vec(box.size.x, 120);
+ //display->sizex
+ addChild(display);
+
float xx;
float yy;
// ParamWidget* stepsKnob = createParam<LrgKnob>(Vec(108, 30), module, ComputerscarePatchSequencer::STEPS_PARAM);
diff --git a/src/ComputerscareHorseADoodleDoo.cpp b/src/ComputerscareHorseADoodleDoo.cpp
@@ -92,8 +92,8 @@ struct HorseSequencer {
pendingDensity = density;
}
void change(float patt, int steps, float dens) {
- numSteps = steps;
- density = dens;
+ numSteps = std::max(1,steps);
+ density = std::fmax(0,dens);
pattern = patt;
currentStep = 0;
makeAbsolute();
@@ -140,6 +140,9 @@ struct ComputerscareHorseADoodleDoo : ComputerscarePolyModule {
POLY_KNOB,
MODE_KNOB,
MANUAL_RESET_BUTTON,
+ PATTERN_SPREAD,
+ STEPS_SPREAD,
+ DENSITY_SPREAD,
NUM_PARAMS
};
@@ -197,6 +200,11 @@ struct ComputerscareHorseADoodleDoo : ComputerscarePolyModule {
configParam(STEPS_TRIM, -1.f, 1.f, 0.f, "Steps CV Trim");
configParam(DENSITY_TRIM, -1.f, 1.f, 0.f, "Density CV Trim");
+
+ configParam(PATTERN_SPREAD, 0.f, 1.f, 0.f, "Pattern Spread","%",0,100);
+ configParam(STEPS_SPREAD, -1.f, 1.f, 0.f, "Steps Spread","%",0,100);
+ configParam(DENSITY_SPREAD, -1.f, 1.f, 0.f, "Density Spread","%",0,100);
+
configParam<AutoParamQuantity>(POLY_KNOB, 0.f, 16.f, 0.f, "Polyphony");
configParam(MODE_KNOB,1.f,16.f,1.f,"Mode");
@@ -223,6 +231,7 @@ struct ComputerscareHorseADoodleDoo : ComputerscarePolyModule {
int resetNum = inputs[RESET_INPUT].getChannels();
+ int mode = params[MODE_KNOB].getValue();
lastStepsKnob = std::floor(params[STEPS_KNOB].getValue());
lastPolyKnob = std::floor(params[POLY_KNOB].getValue());
@@ -241,6 +250,11 @@ struct ComputerscareHorseADoodleDoo : ComputerscarePolyModule {
float patternVal = params[PATTERN_KNOB].getValue() + params[PATTERN_TRIM].getValue() * inputs[PATTERN_CV].getVoltage(fmin(i, pattNum));
int stepsVal = std::floor(params[STEPS_KNOB].getValue() + params[STEPS_TRIM].getValue() * inputs[STEPS_CV].getVoltage(fmin(i, stepsNum)));
float densityVal = params[DENSITY_KNOB].getValue() + params[DENSITY_TRIM].getValue() * inputs[DENSITY_CV].getVoltage(fmin(i, densityNum)) / 10;
+
+ patternVal+=i*params[PATTERN_SPREAD].getValue();
+ stepsVal+=std::floor(params[STEPS_SPREAD].getValue()*i*i);
+ densityVal+=params[DENSITY_SPREAD].getValue()*i/10;
+
seq[i].checkAndArm(patternVal, stepsVal, densityVal);
}
}
@@ -462,9 +476,9 @@ struct ComputerscareHorseADoodleDooWidget : ModuleWidget {
}
- addInputBlock("Pattern", 0, 100, module, 0, ComputerscareHorseADoodleDoo::PATTERN_CV, 0);
- addInputBlock("Length", 0, 150, module, 2, ComputerscareHorseADoodleDoo::STEPS_CV, 1);
- addInputBlock("Density", 0, 200, module, 4, ComputerscareHorseADoodleDoo::DENSITY_CV, 0);
+ addInputBlock("Pattern", 0, 100, module, 0, ComputerscareHorseADoodleDoo::PATTERN_CV, 0,ComputerscareHorseADoodleDoo::PATTERN_SPREAD);
+ addInputBlock("Length", 0, 150, module, 2, ComputerscareHorseADoodleDoo::STEPS_CV, 1,ComputerscareHorseADoodleDoo::STEPS_SPREAD);
+ addInputBlock("Density", 0, 200, module, 4, ComputerscareHorseADoodleDoo::DENSITY_CV, 0,ComputerscareHorseADoodleDoo::DENSITY_SPREAD);
addParam(createParam<MediumDotSnapKnob>(Vec(30,240), module, ComputerscareHorseADoodleDoo::MODE_KNOB));
@@ -504,7 +518,7 @@ struct ComputerscareHorseADoodleDooWidget : ModuleWidget {
}
- void addInputBlock(std::string label, int x, int y, ComputerscareHorseADoodleDoo *module, int knobIndex, int inputIndex, int knobType) {
+ void addInputBlock(std::string label, int x, int y, ComputerscareHorseADoodleDoo *module, int knobIndex, int inputIndex, int knobType,int scrambleIndex) {
background = new InputBlockBackground();
background->box.pos = Vec(0, y / 2 - 9);
@@ -526,6 +540,8 @@ struct ComputerscareHorseADoodleDooWidget : ModuleWidget {
//trim knob
addParam(createParam<SmallKnob>(Vec(x + 30, y), module, knobIndex + 1));
addInput(createInput<TinyJack>(Vec(x + 40, y), module, inputIndex));
+ addParam(createParam<ScrambleKnob>(Vec(x+30, y+20), module, scrambleIndex));
+
}
else if (knobType == 1 || knobType == 2) {
numStepsKnob = new NumStepsOverKnobDisplay(knobType);
@@ -542,6 +558,8 @@ struct ComputerscareHorseADoodleDooWidget : ModuleWidget {
//trim knob
addParam(createParam<SmallKnob>(Vec(x + 30, y), module, knobIndex + 1));
addInput(createInput<TinyJack>(Vec(x + 40, y), module, inputIndex));
+ addParam(createParam<ScrambleKnob>(Vec(x+30, y+20), module, scrambleIndex));
+
}
}
diff --git a/src/ComputerscareResizableHandle.hpp b/src/ComputerscareResizableHandle.hpp
@@ -45,7 +45,12 @@ struct ComputerscareResizeHandle : OpaqueWidget {
ComputerscareResizeHandle() {
box.size = Vec(RACK_GRID_WIDTH * 1, RACK_GRID_HEIGHT);
}
-
+ void onEnter(const event::Enter& e) override {
+ OpaqueWidget::onEnter(e);
+ }
+ void onLeave(const event::Leave& e) override {
+ OpaqueWidget::onLeave(e);
+ }
void onDragStart(const event::DragStart &e) override {
if (e.button != GLFW_MOUSE_BUTTON_LEFT)
return;
diff --git a/src/drawFunctions.hpp b/src/drawFunctions.hpp
@@ -152,7 +152,7 @@ struct DrawHelper {
nvgStroke(vg);
nvgRestore(vg);
}
- NVGcolor sincolor(float t,std::vector<int> omega={1,2,3},std::vector<float> phi={0.f,5.f,9.f}) {
+ NVGcolor sincolor(float t,std::vector<float> omega={1,2,3},std::vector<float> phi={0.f,5.f,9.f}) {
return nvgRGB(127*(1+sin(t*omega[0]+phi[0])),127*(1+sin(t*omega[1]+phi[1])),127*(1+sin(t*omega[2]+phi[2])));
}