commit ad6d5bcaa92f5bba184abf26c9215c5d0d9c9729
parent 5e86412ea4b3a3cff60b1823a20e301e3ff9ce3f
Author: Adam M <aemalone@gmail.com>
Date: Wed, 13 Jan 2021 21:18:23 -0600
Re fix shuffle seed param
Diffstat:
4 files changed, 52 insertions(+), 45 deletions(-)
diff --git a/src/ComputerscareBlank.cpp b/src/ComputerscareBlank.cpp
@@ -57,6 +57,7 @@ struct ComputerscareBlank : ComputerscareMenuParamModule {
float zeroOffset = 0.f;
bool tick = false;
+ float lastShuffle = 2.f;
/*
uninitialized: 0
@@ -92,6 +93,7 @@ struct ComputerscareBlank : ComputerscareMenuParamModule {
CONSTANT_FRAME_DELAY,
ANIMATION_MODE,
END_BEHAVIOR,
+ SHUFFLE_SEED,
NUM_PARAMS
};
enum InputIds {
@@ -106,12 +108,6 @@ struct ComputerscareBlank : ComputerscareMenuParamModule {
ComputerscareBlank() {
- config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
- configMenuParam(ANIMATION_SPEED, 0.05f, 20.f, 1.0, "Animation Speed", 2, "x");
- configParam(ANIMATION_ENABLED, 0.f, 1.f, 1.f, "Animation Enabled");
- configParam(CONSTANT_FRAME_DELAY, 0.f, 1.f, 0.f, "Constant Frame Delay");
- configMenuParam(END_BEHAVIOR, 0.f, 5.f, 0.f, "Animation End Behavior", 2);
-
animationModeDescriptions.push_back("Forward");
animationModeDescriptions.push_back("Reverse");
animationModeDescriptions.push_back("Ping Pong");
@@ -124,7 +120,14 @@ struct ComputerscareBlank : ComputerscareMenuParamModule {
endBehaviorDescriptions.push_back("Load Next");
endBehaviorDescriptions.push_back("Load Previous");
+ config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
+
+ configMenuParam(ANIMATION_SPEED, 0.05f, 20.f, 1.f, "Animation Speed", 2, "x");
+ configParam(ANIMATION_ENABLED, 0.f, 1.f, 1.f, "Animation Enabled");
+ configParam(CONSTANT_FRAME_DELAY, 0.f, 1.f, 0.f, "Constant Frame Delay");
configMenuParam(ANIMATION_MODE, 0.f, "Animation Mode", animationModeDescriptions);
+ configMenuParam(END_BEHAVIOR, 0.f, "Animation End Behavior", endBehaviorDescriptions);
+ configMenuParam(SHUFFLE_SEED, 0.f, 1.f, 0.5f, "Shuffle Seed", 2);
paths.push_back("empty");
@@ -191,7 +194,7 @@ struct ComputerscareBlank : ComputerscareMenuParamModule {
goToFrame(0);
}
}
- if(resetButtonTrigger.process(messageFromExpander[9])) {
+ if (resetButtonTrigger.process(messageFromExpander[9])) {
goToFrame(0);
}
@@ -200,7 +203,7 @@ struct ComputerscareBlank : ComputerscareMenuParamModule {
messageToSendToExpander[2] = float (mappedFrame);
messageToSendToExpander[3] = float (scrubFrame);
messageToSendToExpander[4] = float (tick);
-
+
// Flip messages at the end of the timestep
leftExpander.module->rightExpander.messageFlipRequested = true;
}
@@ -350,11 +353,12 @@ struct ComputerscareBlank : ComputerscareMenuParamModule {
}
void setFrameShuffle() {
shuffledFrames.resize(0);
- for(int i=0; i < numFrames; i++) {
+ for (int i = 0; i < numFrames; i++) {
shuffledFrames.push_back(i);
}
- auto rng = std::default_random_engine {};
- std::shuffle(std::begin(shuffledFrames), std::end(shuffledFrames), rng);
+ unsigned seed = (unsigned) (floor(params[SHUFFLE_SEED].getValue() * 999101));
+
+ std::shuffle(std::begin(shuffledFrames), std::end(shuffledFrames), std::default_random_engine(seed));
}
void setTotalGifDuration(float totalDuration) {
@@ -375,7 +379,6 @@ struct ComputerscareBlank : ComputerscareMenuParamModule {
}
else if (animationMode == 2) {
if (pingPongDirection == 1) {
-
nextFrame();
} else {
prevFrame();
@@ -411,8 +414,16 @@ struct ComputerscareBlank : ComputerscareMenuParamModule {
loadRandomGif();
}
}
+
+ float shuf = params[SHUFFLE_SEED].getValue();
+ if (shuf != lastShuffle) {
+ DEBUG("reshuffle!!!");
+ setFrameShuffle();
+ }
+ lastShuffle = shuf;
+ //DEBUG("current:%i, samplesDelay:%i", currentFrame, samplesDelay);
}
- //DEBUG("current:%i, samplesDelay:%i", currentFrame, samplesDelay);
+
}
void setCurrentFrameDelayFromTable() {
if (ready) {
@@ -427,21 +438,18 @@ struct ComputerscareBlank : ComputerscareMenuParamModule {
goToFrame(currentFrame - 1);
}
void goToFrame(int frameNum) {
- if (numFrames && ready) {
+ if (numFrames && ready && frameNum != currentFrame) {
sampleCounter = 0;
currentFrame = frameNum;
mappedFrame = (currentFrame + mapBlankFrameOffset(zeroOffset, numFrames)) % numFrames;
- if(params[ANIMATION_MODE].getValue() == 3) {
+ if (params[ANIMATION_MODE].getValue() == 3) {
mappedFrame = shuffledFrames[mappedFrame];
}
-
+
currentFrame += numFrames;
currentFrame %= numFrames;
setCurrentFrameDelayFromTable();
- DEBUG("currentFrame:%i, mappedFrame:%i, scrubFrame:%i",currentFrame,mappedFrame,scrubFrame);
- }
- else {
- DEBUG("no frames lol");
+ DEBUG("currentFrame:%i, mappedFrame:%i, scrubFrame:%i", currentFrame, mappedFrame, scrubFrame);
}
}
void goToRandomFrame() {
@@ -737,7 +745,7 @@ struct GiantFrameDisplay : TransparentWidget {
SmallLetterDisplay *description;
SmallLetterDisplay *frameDisplay;
GiantFrameDisplay() {
- box.size = Vec(200,380);
+ box.size = Vec(200, 380);
description = new SmallLetterDisplay();
description->value = "Frame Zero, for EOC output and reset input";
@@ -755,7 +763,7 @@ struct GiantFrameDisplay : TransparentWidget {
frameDisplay->baseColor = nvgRGBAf(0.8, 0.8, 0.8, 0.7);
-
+
addChild(frameDisplay);
addChild(description);
//TransparentWidget();
@@ -836,7 +844,7 @@ struct ComputerscareBlankWidget : MenuParamModuleWidget {
endMenu->rightText = RIGHT_ARROW;
endMenu->param = blankModule->paramQuantities[ComputerscareBlank::END_BEHAVIOR];
endMenu->options = blankModule->endBehaviorDescriptions;
-
+
menu->addChild(new MenuEntry);
@@ -881,18 +889,17 @@ struct ComputerscareBlankWidget : MenuParamModuleWidget {
//menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Animation Speed"));
menu->addChild(LabeledKnob);*/
- MenuParam* animEnabled = new MenuParam(blankModule->paramQuantities[ComputerscareBlank::ANIMATION_ENABLED], 0);
+ MenuParam* animEnabled = new MenuParam(blank->paramQuantities[ComputerscareBlank::ANIMATION_ENABLED], 0);
menu->addChild(animEnabled);
- MenuParam* speedParam = new MenuParam(blankModule->paramQuantities[ComputerscareBlank::ANIMATION_SPEED], 2);
+ MenuParam* speedParam = new MenuParam(blank->paramQuantities[ComputerscareBlank::ANIMATION_SPEED], 2);
menu->addChild(speedParam);
- MenuParam* mp = new MenuParam(blankModule->paramQuantities[ComputerscareBlank::CONSTANT_FRAME_DELAY], 0);
+ MenuParam* mp = new MenuParam(blank->paramQuantities[ComputerscareBlank::CONSTANT_FRAME_DELAY], 0);
menu->addChild(mp);
-
-
-
+ MenuParam* shuffleParam = new MenuParam(blank->paramQuantities[ComputerscareBlank::SHUFFLE_SEED], 2);
+ menu->addChild(shuffleParam);
}
@@ -1017,7 +1024,7 @@ struct ComputerscareBlankWidget : MenuParamModuleWidget {
TransparentWidget *display;
ComputerscareResizeHandle *leftHandle;
ComputerscareResizeHandle *rightHandle;
- GiantFrameDisplay* frameDisplay;
+ GiantFrameDisplay *frameDisplay;
ParamSelectMenu *modeMenu;
ParamSelectMenu *endMenu;
};
diff --git a/src/ComputerscareBlankExpander.cpp b/src/ComputerscareBlankExpander.cpp
@@ -11,7 +11,7 @@ struct FrameOffsetParam : ParamQuantity {
std::string getDisplayValueString() override {
//return &module->params[paramId];
float val = getValue();
- return string::f("%i", 1 + mapBlankFrameOffset(val,numFrames));
+ return string::f("%i", 1 + mapBlankFrameOffset(val, numFrames));
}
};
@@ -91,7 +91,7 @@ struct ComputerscareBlankExpander : Module {
int mappedFrame = messageFromMother[2];
int scrubFrame = messageFromMother[3];
int tick = messageFromMother[4];
-
+
if (newNumFrames != numFrames) {
numFrames = newNumFrames;
@@ -123,7 +123,7 @@ struct ComputerscareBlankExpander : Module {
messageToSendToMother[8] = scrubbing;
- messageToSendToMother[9] = params[MANUAL_RESET_BUTTON].getValue()*10;
+ messageToSendToMother[9] = params[MANUAL_RESET_BUTTON].getValue() * 10;
outputs[EOC_OUTPUT].setVoltage(eocPulse.process(args.sampleTime) ? 10.f : 0.f);
diff --git a/src/CustomBlankFunctions.hpp b/src/CustomBlankFunctions.hpp
@@ -1,5 +1,5 @@
#pragma once
-inline int mapBlankFrameOffset(float uniformVal,int numFrames) {
- return numFrames > 0 ? ((int) floor(uniformVal * numFrames )) % numFrames : 0;
- }
-\ No newline at end of file
+inline int mapBlankFrameOffset(float uniformVal, int numFrames) {
+ return numFrames > 0 ? ((int) floor(uniformVal * numFrames )) % numFrames : 0;
+}
+\ No newline at end of file
diff --git a/src/MenuParams.hpp b/src/MenuParams.hpp
@@ -51,7 +51,7 @@ KeyboardControlChildMenu *kbMenu = new KeyboardControlChildMenu();
kbMenu->blank = blank;
menu->addChild(kbMenu);*/
struct MenuParam : MenuEntry {
- ParamWidget* speedParam;
+ ParamWidget* pWidget;
MenuLabel* johnLabel;
MenuLabel* displayString;
SubMenuAndKnob *submenu;
@@ -59,22 +59,22 @@ struct MenuParam : MenuEntry {
MenuParam(ParamQuantity* param, int type) {
if (type == 0) {
- speedParam = new SmallIsoButton();
+ pWidget = new SmallIsoButton();
}
else if (type == 1) {
- speedParam = new MediumDotSnapKnob();
+ pWidget = new MediumDotSnapKnob();
}
else if (type == 2) {
- speedParam = new SmoothKnob();
+ pWidget = new SmoothKnob();
}
- speedParam->paramQuantity = param;
- speedParam->box.pos = Vec(controlRightMargin, 0);
+ pWidget->paramQuantity = param;
+ pWidget->box.pos = Vec(controlRightMargin, 0);
box.size.y = 32;
johnLabel = construct<MenuLabel>(&MenuLabel::text, param->getLabel());
- johnLabel->box.pos = Vec(speedParam->box.size.x + controlRightMargin * 2, 0);
+ johnLabel->box.pos = Vec(pWidget->box.size.x + controlRightMargin * 2, 0);
- addChild(speedParam);
+ addChild(pWidget);
addChild(johnLabel);
//if(type==1) {addChild(submenu);}
}