ParameterQuality change in 2.3.0

I think I have found an unfortunate side effect of the change. I just updated my Rack to 2.3.0, and now I am getting inconsistent behavior from my patches that use Mind Meld Patch Master to remotely control other module parameters. For example, in my Benjolin patch I have a knob that is supposed to control the rate of change to the Benjolin patterns. At fully counterclockwise it should be -5 V, meaning always preserve the shift register values, resulting in a rock steady 8 step pattern. And fully clockwise equates to 5 V, meaning always invert the value, resulting in a rock steady 16 step pattern. Values in between introduce variability. But now the extremes are giving me values of ± 4.9xxxx, and the patterns are no longer locked. The exact values are never quite the same. Before the 2.3.0 update, the Patch Master was very reliable.

I have submitted an issue to the Mind Meld plugin github.

1 Like

ahh right because PatchMaster will call setValue which used to be direct and is now smoothed.

I think you should flag this to support also.

2 Likes

Thanks Paul and Dave, I’ll take a look.

3 Likes

I’m instead calling setScaledValue(), and since there is no setImmediateScaledValue(), to fix the issue I’ve changed line 423 in PatchMaster.cpp from this:

paramQuantity->setScaledValue(pmValueScaledAndRanged);

to this:

paramQuantity->setImmediateValue(paramQuantity->fromScaled(pmValueScaledAndRanged));

effectively implementing my own version of what should be in setImmediateScaledValue() if it existed.

I think for consistency given the last changes in 2.3.0, @Vortico could perhaps consider adding methods called getImmediateScaledValue() and setImmediateScaledValue().

For example, setImmediateScaledValue() could be this:

void Quantity::setImmediateScaledValue(float scaledValue) {
	setImmediateValue(fromScaled(scaledValue));
}

@DaveVenom can you please pull the latest MindMeldModular and see if this has fixed the issue?

2 Likes

Yay! I was surprised to see the version in the module info hasn’t changed, but it works!

Cool, thanks! We’ll increment the version and request a library update in the next few days. :vulcan_salute:

4 Likes

Just curious as a fellow module developer… what happens if someone with an older version of VCV Rack downloads the newer plugin that tries to call setImmediateValue, which didn’t exist in that older version of VCV Rack? Sounds scary, and possibly breaks compatibility?

2 Likes

Interesting question, I’m not well versed in these kinds of things, so I hope someone else can chime in, it would be good to know the answer. Of course, I’m sure Andrew has thought of that when making the changes, and so it’s surely ok, but as for the mechanics of things, I’m definitely curious also…

Actually… let me just try it… please stand by.

1 Like

haha, nice! :slight_smile:

Hmm… can you post your binary for me… if I build it using the older SDK, it’s not going to compile.

Here it is: MindMeldModular-2.2.1-win-x64.vcvplugin.txt (1022.3 KB)

[remove the .txt]

Sorry… I forgot to say I need the Linux x64 version.

Ah, can’t do this now, I’m not at my home computer. If it’s still relevant, I’ll try and get it to you later today.

No worries. I think I can just download SDK 2.3.0 in a different directory and build your stuff from source. Let me take a whack at it. I really want to know what happens!

1 Like

My wager is that it will work, and the trick is likely to keep all the binary interface the same (ABI), so that if what’s already there has the same “foorprint”, so to speak, but we just change method names and add extra methods at the end, then it will work. And so perhaps setImmediateValue() is now in the same memory place as the original setValue() and the new setValue() is in the same place as the former setSmoothValue(). Going out on a limb here, but I think that’s the thing here, and Andrew would not have made a massive change that breaks things in a minor version change. If he added completely new code to Rack, then it wouldn’t work, but this is more like renaming things I believe.

It is as I feared… not backward compatible:

[0.106 info src/plugin.cpp:137 loadPlugin] Loading plugin from /home/don/.Rack2/plugins/MindMeldModular
[0.109 warn src/plugin.cpp:203 loadPlugin] Could not load plugin /home/don/.Rack2/plugins/MindMeldModular: Failed to load library /home/don/.Rack2/plugins/MindMeldModular/plugin.so: /home/don/.Rack2/plugins/MindMeldModular/plugin.so: undefined symbol: _ZN4rack6engine13ParamQuantity17setImmediateValueEf

I built using SDK 2.3.0 and installed it to my VCV Rack 2.2.3.

1 Like

Wow, got me there. This means that as soon as we push this update to the library, users must be on version >= 2.3.0. to use MindMeldModular. Interesting…

Yeah, I think this change is going to cause a lot of chaos and confusion.

2 Likes

Well the person we need to communicate this too reads support@vcvrack.com

I already updated them to this thread but perhaps a few more voices could help? Marc wanna mail andrew?

1 Like