MSF Generator Modulation Question

Official support for: meldaproduction.com
RELATED
PRODUCTS

Post

I'm trying to do something which I thought would be straightforward, but nothing is working. For a generator modulation setup, we have a screen like that shown below. The slots in the rows default to multiplication, but other options exist. The final value of a row is added to other populated rows.

Assume the screen below has only the first row populated. The way I think this works is:

Take the current value of Env1 and multiply it by the number in slot A1. If Env1 had a current value of 0.5, then the result would be 0.25. The thing being modulated would be multiplied by 1.25 for it's current value. Have I got that right so far?

So now assume the second row is present as pictured. I would think that would calculate as follows (0.4 * 1.0) * (0.6 * 1.0). That would come to 0.24. Added to the result of row 1, the sum would be 0.49, and the thing being modulated would be multiplied by 1.49. But that's not what's going on and I cannot figure out what really is going on.

How do we get a modulation grid slot that behaves: just use the value in the middle box, period. I would have thought that's what Constant would get you, but it doesn't look like that's the case.

Any enlightenment will be much appreciated.
You do not have the required permissions to view the files attached to this post.

Post

Not quite, my understanding is:

With Row A only:
Env1 current value = 0.5
Output from A1 = 0.5 x 50% = 25%
Output from row A = 25%

Depth = 100%
Target (PS it would be good have the target name appear in the Modulation window somewhere) = 100% x 25% = 25%

With Rows A and B:
Env1 current value = 0.5
Output from A1 = 0.5 x 50% = 25%
Output from row A = 25%

Output from B1 = 40%
Output from B2 = 60%
Output from row B = 40% x 60x = 24%

Depth = 100%
Target = 100% x (25% + 24%) = 49%

The thing to do is watch the coloured bars which show how each modulator, row and overall changes
DarkStar, ... Interesting, if true
Inspired by ...

Post

Well it looks to me as though you have both done the exact same maths, haha.
0.24 IS 24%
I also agree with both of you, so now 3 of us have the same figures, I guess the next question is:
"But that's not what's going on and I cannot figure out what really is going on."
Why do you feel that is not what is going on?

Maybe some settings, with a description of the behaviour you expect VS the behaviour you actually get.
Jason @ Melda Production

Post

OK, I am very much suspecting that there's a bug here. But it's much easier to demonstrate with a minimal preset than just describe the behavior:

Code: Select all

$eNqVlt9z2jgQx9-5KzTKa65YNj-cGdudBpw20zhwmKa9R2EvQVNZYiQ5A-fX38iOgQAB35Ot9ee7u1rJ0gZfNgVHr6A0kyLE5JODEYhM5ky8hLg0y798-CXqBEkqS5Hf08xItdVgDBMvGt2EmGA0KpUCYaYKNJiHcYgTmaOpkgsOBRpDITGKc2akStm-EGIyIMNb3+kfWmOqtyEmxPl867s9jL7--XOtabHmVRoORo+zdM2ZMVDhJMTE6Z+Y3RC7vc8YJXTzeD+54zL7U4f0XIySkhs2pYoWYEDpkeScrjXklfvnpgB+3x16AxwFabmY8vKFibc5R0E9TN-P-WyoFDhkBvJaEWLn1sONXjcv6L7k-IkWEOKJzhjn1EiFKpf6z4Oo0jr+jNHvyv5PiPcejzK6+SmYliIWdMHhYJYfJBsFyWR8k0LBjBSg0UiWwoTYxWgMa7OyuiiYOY2dYKRV5oQ4Fq822Y0TYucTcfu4GwUzciCvsZEU2lBhqjE5HFdKjDbEPrpR0H2XRxSkK7oGlM7j6XQWp-G8wd5PemfYvehzzMlqdg4W+PcHlTxXrjNr6+zX9mx+h4E6QSxeCRoDp1tbuL7n+D0ywOi75Hll6PnDvj-0+t4Ao7TUhlZBcBTMFRSSy4-KYv3W7t02rFuzXhvWq9leG7ZXs-02bL9mB23YQc0O27DDmvXbsH7UCb5xuaDcbuhdwcn1gu9UUSd4vJ8Q9Ajixf4wdpMc0RXhXiW8q0TvKtG-SgyuEsOrhH+ZmFGRy4LYGlKhl1IV1DApUPz03IB+VcQGbCRuW4m7k3htJd5O0msrsbv5B2x1Rjm0mM0e3cvc9jI7p2fgMmOmdcgj-siB+z8dHGZwjHb2ruxNr0sFlxBmstUdiPwCk8j81wqAX0DmrFgoGPYuIHcKqFk57gUk3qxtxkwKQi5gT9LAZLk8Jb5xlkN9Dpx8+5oZ9gp174MOB-VFIdX7K7gZzRVAdf-ZHqg+b0bUwItU2wcDxYNYym4UvHVWp6q6MbAL+HVah7NreRjepqbWaEYN2J-UpppUjY8bBZPSJGjM9JrTbUI3rCiLt1PtF8vNKomCVJYqAzRVsGTcgHprw2yQBuk27jpB91x3qKPOfymaQBw=
What we've got is a single sine osc with semitones modulated with that shown below. In row A is Env 1. Row B I'll describe in a minute. Env 1 has a half second delay, fast attack, half second hold, fast decay to zero sustain. When we set the A1 depth to 12.5% and press middle C, we hear C3 for half a second, C4 for half a second and then C3 for the remainder of the key press. This is exactly what is expected. If we change the depth of A1 to -12.5%, we hear C3, C2 and C3 - again just what would be expected.

Notice that both B1 and B2 modulation slots are set to zero, so the B row has no effect. So let's play with that. Leaving B2 set to zero should make any change to B1 irrelevant. Notice the operator selected is "Mul", and zero times anything is zero, and the B row should have no effect. However, leaving B2 set to zero and changing the B1 value causes the pitch to change. This is a bug unless I'm totally not understanding how this thing is supposed to work.

Is there any agreement that this is not working as it should?
You do not have the required permissions to view the files attached to this post.

Post

I follow your explanation and agree. I have not had time to test the settings yet though.
Here is a thought......
If B2 is at 0% maybe the system disables the slot to save processing? Try setting B2 to 0.01%
Now move B1, does it effect the pitch in much the same way or maybe now is it only changing by the tiniest amount?
Jason @ Melda Production

Post

Confirmed - not working as expected here.

If looks like the calculation is going wrong when "Constant" is in the first column. Have a close look at the coloured bands; they represent the setting of each modulation (blue) and each row (red) and overall (green). The row seems to be set to the Constant vlaue in column 1.

Image

Row B happens to be correct as B1 = 0%

It may be related to the fact that modulators in the first column have a range of -100% to +100% and the others have a range of 0% to 100%. This is by design.

I am not sure that it works correctly for "Key" either.
DarkStar, ... Interesting, if true
Inspired by ...

Post

I tried with LFO and it wasnt working as expected either. So I think it is the same for all modulation sources. Maybe this is the intended behaviour, not sure, hopefully Vojtech will tell us what is happening.
But to nutshell this whole conversation:

B1 100% mul B2 0% should have no modulation because any number multiplied by 0 = 0, however there IS modulation happening.
Jason @ Melda Production

Post

jmg8 wrote: Fri Jul 26, 2019 3:14 pm B1 100% mul B2 0% should have no modulation because any number multiplied by 0 = 0, however there IS modulation happening.
That would be REALLY stupid to implement it this way, since it would essentially duplicate the depth of the main controller! So multiplication is actually a dry/wet between B1 and B1*B2. So the depth here technically says "how much the B1 is replaced B1*B2".
Vojtech
MeldaProduction MSoundFactory MDrummer MCompleteBundle The best plugins in the world :D

Post

Ah, that makes sense, thanks.
Jason @ Melda Production

Post

Not to me ;)

Let's say I have "Constants" in A1 and A2, with a "Mul" operator..
A1 = 100%, A2 = anything --> row value = same as A1, overall Depth range is -A1 to +A1
A1 = anything, A2 = 100% --> row value = same as A1, overall Depth range is -A1 to +A1
I cannot see how that is a Dry/Wet between the two.

Now, let's say A1 is a "Constant" and A2 is an "Env"
A1 = anything, A2 is disabled --> row value = A1 at all times,
A1 = anything, A2 is enabled --> row value = A1 when no note is played, and = A1 x A2 x envelope-graph when a note is played
This makes more sense.
DarkStar, ... Interesting, if true
Inspired by ...

Post

I'm afraid I don't follow at all. Anyways how often are you using contants?? :D
Vojtech
MeldaProduction MSoundFactory MDrummer MCompleteBundle The best plugins in the world :D

Post

I'm just following up on the OP.

Anyway, if A1 is a Constant set to 100%, the Operator is Multiply and A2 is also a Constant, then the row value is always 100% no matter what value A2 is set to.
DarkStar, ... Interesting, if true
Inspired by ...

Post

DarkStar wrote: Sat Jul 27, 2019 5:26 pm I'm just following up on the OP.

Anyway, if A1 is a Constant set to 100%, the Operator is Multiply and A2 is also a Constant, then the row value is always 100% no matter what value A2 is set to.
Responding to just this one issue, my use of constant was due to my need to be able to plug in one of several MIDI "influencers" (pressure, mod wheel, ...) and the modulation source in the modulation grid is not accessible/changeable at run-time. If it were, we might be having a very different discussion. Instead, I used MIDI association to an MP (the MIDI source can be changed on the fly in this case). Then that MP was used to control the modulation slot amount. The only way I could see that working is to have a mod slot type of Constant.

Post

MeldaProduction wrote: Sat Jul 27, 2019 2:44 pm That would be REALLY stupid to implement it this way, since it would essentially duplicate the depth of the main controller! So multiplication is actually a dry/wet between B1 and B1*B2. So the depth here technically says "how much the B1 is replaced B1*B2".
It would *not* be really stupid. My question has always been "why do we need the master depth control?".

Here's the real-life use case I was trying to implement. We have filter cutoff being modulated. We want to have a cutoff envelope for which the depth can be specified by the user via an MP (and that depth optionally being influenced by velocity). We also want the cutoff to be influenced by a MIDI controller, the controller being one of several chosen by the user (mod wheel, pressure, ...). We want the depth of the MIDI influencer to be specified by the user. The depth controls for the envelope and MIDI influencer are separate and independent, and either can go positive or negative. This is a sophisticated arrangement but extremely performer-friendly.

So, if slot 1 cannot be a depth control for the row, can what I want to accomplish even be done? If there's another way to implement what I'm after, I'd love to know it. Is a -100% to 100% range only allowed for slot 1, by the way? I need one usable slot to go negative, and if slot 1 is the only one that can and if I cannot use slot 1, then game over, I think.

Also, if multiplication is actually dry/wet between slot 1 and slot 2, then that's confusing as can be. At least consider labelling the connector box "Mix" rather than "Mul". But I can't even think of a use case where this sort of arrangement would be useful.
MeldaProduction wrote: Sat Jul 27, 2019 2:44 pm So multiplication is actually a dry/wet between B1 and B1*B2. So the depth here technically says "how much the B1 is replaced B1*B2".
I'm afraid I don't even understand what you're saying here. That is, "how much the B1 is replaced by B1*B2" doesn't make sense to me. I can probably figure it out by playing around and observing the behavior, but I still fail to see how it would do you any good. Maybe if a use case could be cited where it was of benefit would make the whole thing more comprehensible.

Post

I must say I don't really understand the example you mentioned, it seems like a few separate controls, which is why there is A, B, C, D, nothing complex. Or do you mean that each part can negate the output???

As for the multiplication, I don't really know how else to explain that, so an example will be best I think.
A1 = 1, depthA1 = 1, A2 = 0.2, op = mul
output = depthA1 * (A1 * (1 - depthA2) + A1 * A2 * depthA2)
depthA2 = 1 (hence maximum) => output = depthA1 * (A1 * 0 + A1 * A2 * 1) = depthA1 * A1 * A2
depthA2 = 0.5 => output = depthA1 * (A1 * 0.5 + A1 * A2 * 0.5) = blend between A1 and A1 * A2
depthA2 = 0 => output = depthA1 * (A1 * 1 + A1 * A2 * 0) = depthA1 * A1 = no change to the A1

What you assumed is output = depthA1 * A1 * depthA2 * A2
which as you can see means both depths have the exact same meaning and if any of them is 0, the output is always 0, which is imho rarely useful.
Vojtech
MeldaProduction MSoundFactory MDrummer MCompleteBundle The best plugins in the world :D

Post Reply

Return to “MeldaProduction”