Announcing: Major Voxglitch Groovebox Update!

And this is how I FF’d it up … just press the space-bar. (Used your drum lay out)

GroovPan - 28112022_XTD_rsmus7-2.vcv (79.1 KB)

1 Like

this is great, I really like it. :+1:

maybe we should stop hijacking this thread and move to pm.

1 Like

Your new GUIs are dope !

1 Like



Hi Bret,

Please, is it possible to reduce the trigger voltage to +5V (instead of +10V, actually), for clock input, in future plugin release? (+10V is too high, in my opinion, +5V seems a good compromise).

Many thanks in advance.

Holy Shizzle, how have I slept on this for so long?

I’ll look into it! I’m taking a bit of a break from module work at the moment, but when I return, I’ll consider it. :man_bowing:

Also, here’s a good place to post future requests: I love feedback and ideas, so keep it coming!

1 Like

In fact, lastest version 2.25.0 the Groovebox works at +5V. I don’t understand :slight_smile: I precise I have my clock module (KlokSpid), default voltage is 5V bipolar… of course I’ve set one output @ 32X BPM, as explained in doc. Thanks Bret! EDIT: I understand (but lately), here is announcement… Sorry!

Oh, that was a happy mistake! I converted the trigger code for Groovebox from dsp::SchmittTrigger to dsp::BooleanTrigger, and somehow that fixed it. I’ll make that change to all of my modules within a month or so. :slightly_smiling_face:


I think you might want to investigate more before changing stuff. The SchmittTrigger turns on at +1V, and turns off at 0V. The BooleanTrigger doesn’t even process floating point values… it takes boolean inputs. So something sounds off about this whole deal…

1 Like

Thanks for the heads up! Here’s the code that processes the BooleanTrigger:

    if (step_trigger.process(rescale(inputs[STEP_INPUT].getVoltage(), 0.0f, 10.0f, 0.f, 1.f)))

I’m not sure if this is good code or bad code. Do you have any recommendations?

I agree, a Schmitt Trigger is generally the way to go for trigger or gate detection. The API Schmitt Trigger does indeed default to a high threshold of 1V and low threshold of 0V, but it can be configured for any thresholds that you choose. Many of the Fundamental modules default to a high threshold of 2V and low of 0.1V

1 Like

Interesting. When would one want to use a BooleanTrigger?

I don’t know when a boolean trigger should be used, but I suspect the definition in the API can shed some light:

BooleanTrigger - “Detects when a boolean changes from false to true.”

That implies to me that the input is known to be boolean - either true or false. I don’t think that works well with an analog (or virtual analog) input.

Makes sense. :slight_smile:

My understanding of the two, is that you would want to use a Schmitt when you want a trigger input to be voltage level sensitive, and a Boolean when you want it to ignore voltage level.

Given the APIs:

Schmitt bool process (float in, float offThreshold=0.f, float onThreshold=1.f)

Boolean bool process (bool state)

For the Schmitt, you might just directly pass in the value of inputs[SOME_TRIGGER].getNormalVoltage()

Although, if you pass in a boolean it will still work since it will be cast to a float.

So if I wanted a trigger with a button and an input that ignores voltage level, then I might use code something like this:

bool triggered = myBooleanTrigger.process(params[BUTTON_TRIGGER_PARAM].getValue() > 0.0f || inputs[TRIGGER_INPUT].getNormalVoltage() > 0.0f);

Edit: of course you could still have a trigger activate at something other than > 0.0f using the Boolean, just replace that with what ever threshold you want, maybe

const float triggerThreshold{0.1f};
bool triggered = myBooleanTrigger.process(
    params[BUTTON_TRIGGER_PARAM].getValue() >= triggerThreshold || 
    inputs[TRIGGER_INPUT].getNormalVoltage() >= triggerThreshold);

Yes, based on the VCV Rack voltage standards, I chose to use +0.1V as my low threshold and +1.0V as my high threshold. The idea is that something shouldn’t need to go all the way to zero to turn off, shouldn’t need to go very high to turn on, and should definitely have a gray zone in the middle to avoid unwanted triggering for bandlimited inputs that exhibit Gibbs ripple.

In real electronics, there are devices like the 555 timer that are often used in a bistable configuration to debounce signals. And even simple transistor-based switches generally turn on at a lower voltage, like 0.6V to 0.7V.

1 Like

This makes sense, I imagine that some analogue gear could be temperamental with it’s voltage levels, or perhaps noise could cause unwanted triggering?

I would think that the majority of modules that don’t specifically try to emulate hardware would not worry about this type of issue, the output of a module will be the exact voltage that is set and normally would not be subject to any sort of noise or unwanted voltage change.

But perhaps there are some modules that do add this type of noise to their outputs, just to be extra extra authentic?

I guess if you want to be certain that your modules do not have unwanted triggering, then using a Schmitt trigger would cover all bases.

And if you wanted to have a combined button and CV input, you could still use the Schmitt, and just alter the code slightly:

bool triggered = mySchmittTrigger.process(
    params[BUTTON_TRIGGER_PARAM].getValue() +
1 Like

Yeah, the “authentic analog” behavior is not just a theory, it’s actually quite common, and we module developers can’t ignore it:


FYI: I’ve added the request for better handling of triggers to my new(ish) feedback site here: Improve trigger voltage range of all modules | Voters | voxglitch

1 Like