@@ -1,5 +1,9 @@ | |||||
# Change Log | # Change Log | ||||
## v2.4.1 | |||||
* Rampage | |||||
* Fix SIMD bug | |||||
## v2.4.0 | ## v2.4.0 | ||||
* MotionMTR | * MotionMTR | ||||
* Initial release | * Initial release | ||||
@@ -1,6 +1,6 @@ | |||||
{ | { | ||||
"slug": "Befaco", | "slug": "Befaco", | ||||
"version": "2.4.0", | |||||
"version": "2.4.1", | |||||
"license": "GPL-3.0-or-later", | "license": "GPL-3.0-or-later", | ||||
"name": "Befaco", | "name": "Befaco", | ||||
"brand": "Befaco", | "brand": "Befaco", | ||||
@@ -81,7 +81,7 @@ struct Kickall : Module { | |||||
void process(const ProcessArgs& args) override { | void process(const ProcessArgs& args) override { | ||||
// TODO: check values | // TODO: check values | ||||
const bool risingEdgeGate = gateTrigger.process(inputs[TRIGG_INPUT].getVoltage() / 2.0f); | |||||
const bool risingEdgeGate = gateTrigger.process(inputs[TRIGG_INPUT].getVoltage() / 2.0f, 0.1, 2.0); | |||||
const bool buttonTriggered = buttonTrigger.process(params[TRIGG_BUTTON_PARAM].getValue()); | const bool buttonTriggered = buttonTrigger.process(params[TRIGG_BUTTON_PARAM].getValue()); | ||||
// can be triggered by either rising edge on trigger in, or a button press | // can be triggered by either rising edge on trigger in, or a button press | ||||
if (risingEdgeGate || buttonTriggered) { | if (risingEdgeGate || buttonTriggered) { | ||||
@@ -156,4 +156,4 @@ struct KickallWidget : ModuleWidget { | |||||
}; | }; | ||||
Model* modelKickall = createModel<Kickall, KickallWidget>("Kickall"); | |||||
Model* modelKickall = createModel<Kickall, KickallWidget>("Kickall"); |
@@ -1120,7 +1120,7 @@ struct Mex : Module { | |||||
// gate in will convert non-gate signals to gates (via schmitt trigger) | // gate in will convert non-gate signals to gates (via schmitt trigger) | ||||
// if input is present | // if input is present | ||||
if (inputs[GATE_IN_INPUT].isConnected()) { | if (inputs[GATE_IN_INPUT].isConnected()) { | ||||
gateInTrigger.process(inputs[GATE_IN_INPUT].getVoltage()); | |||||
gateInTrigger.process(inputs[GATE_IN_INPUT].getVoltage(), 0.1, 2.0); | |||||
gate = gateInTrigger.isHigh(); | gate = gateInTrigger.isHigh(); | ||||
} | } | ||||
// otherwise the main Muxlicer output clock (including divisions/multiplications) | // otherwise the main Muxlicer output clock (including divisions/multiplications) | ||||
@@ -220,7 +220,7 @@ struct Rampage : Module { | |||||
for (int c = 0; c < channels[part]; c += 4) { | for (int c = 0; c < channels[part]; c += 4) { | ||||
// process SchmittTriggers | // process SchmittTriggers | ||||
float_4 trig_mask = trigger_4[part][c / 4].process(in_trig[c / 4] / 2.0); | |||||
float_4 trig_mask = trigger_4[part][c / 4].process(in_trig[c / 4] / 2.0, 0.1, 2.0); | |||||
gate[part][c / 4] = ifelse(trig_mask, float_4::mask(), gate[part][c / 4]); | gate[part][c / 4] = ifelse(trig_mask, float_4::mask(), gate[part][c / 4]); | ||||
in[c / 4] = ifelse(gate[part][c / 4], 10.0f, in[c / 4]); | in[c / 4] = ifelse(gate[part][c / 4], 10.0f, in[c / 4]); | ||||
@@ -240,8 +240,9 @@ struct Rampage : Module { | |||||
float shape = params[SHAPE_A_PARAM + part].getValue(); | float shape = params[SHAPE_A_PARAM + part].getValue(); | ||||
out[part][c / 4] += shapeDelta(delta, rate, shape) * args.sampleTime; | out[part][c / 4] += shapeDelta(delta, rate, shape) * args.sampleTime; | ||||
float_4 rising = (in[c / 4] - out[part][c / 4]) > 1e-3f; | |||||
float_4 falling = (in[c / 4] - out[part][c / 4]) < -1e-3f; | |||||
float_4 rising = simd::ifelse(delta_gt_0, (in[c / 4] - out[part][c / 4]) > 1e-3f, float_4::zero()); | |||||
float_4 falling = simd::ifelse(delta_lt_0, (in[c / 4] - out[part][c / 4]) < -1e-3f, float_4::zero()); | |||||
float_4 end_of_cycle = simd::andnot(falling, delta_lt_0); | float_4 end_of_cycle = simd::andnot(falling, delta_lt_0); | ||||
endOfCyclePulse[part][c / 4].trigger(end_of_cycle, 1e-3); | endOfCyclePulse[part][c / 4].trigger(end_of_cycle, 1e-3); | ||||