XOR Userforum

Full Version: MAPPING: morph internal ENV like pizza in vca mode
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hey guys, I been trying to morph internal Env by an external CV source.
My goal is to realize this purpose by an macro control ( kind like control knob in the VCA Mode of Pizza).

TASK:
1. Attack's crossing point is at 1536 (3/8 of 4095), and Decay's crossing point is at 2560(5/8 of 4095).
2. When input cv is in the range of [0, 1536), attack drops from 2048(in decimal expression & 128 for ENV expression) to 0
    When input cv is in the range of [1536, 4095], attack ramp from 0 to 4096 (in decimal expression & 256 for ENV expression).
3. When input cv is in the range of [0,2560), decay drops from 4096 to 0(in decimal),
    When input cv is in the range of [2560, 4095], decay value ramp forom 0 to 2048(in decimal).

In function expression it look like this:
        Attack:
                x in [0, 1536): y = -4/3 x + 2048 
                x in [1536, 4095]: y = 8/5 x - 2457
        Decay:
                x in [0, 2560): y = -8/5 x + 4096 
                x in [1536, 4095]: y = 4/3 x - 3413

My approach is firstly shrimp everything by 8(the max numerator or denominator), and calculate the value 4/3, and put the 8 back.
Numerator and denominato
so the problem here is,
1. it is very easy to get overflow when large value execute a MUL, so I have to shrimp all the value before the calculation and multiply it back after evrything calculated. For example, the biggest mul/div value above is 8, so I have to DIV everything by 8 before the calculation, and MUL 8 after the calculation. So I wonder instead of calculate the output directly, is there any possibility to express 4/3 or 8/5... these kind of value in Nerdseq?
2. It is super weird value like 2457 or 3413, and there is no negative value in nerdseq, So I have to calculate it by Substract it by full range (which is FFF, 4095). So, can I invert the value or do some negative value calculation on nerdseq?
3. Is it possible to have internal ENV to be exponential instead of linear?
4. When I trying to multi-segment function, normally it's a IF.. IFNOT... Expression, right? But I find that I cannot assign or pass any value after IF expression. Such as: CAL IF>= VAVB > ENV #1 ATK. (I didn't acctually figure out how IF calculation works, so I just set the value directly to ENV's Attack in two lines. I find it interesting is that, the value is set to the greater one by default. AMAZING). So my question is how to set this kind of IF calculation on Nerdseq?
5.the expression for ENV & MAP are in different resolution (such as 256 in ENV expression = 4096 in Mapping), which is kinda odd, I think, I guess, I assume...?

BTW, the manual says the 4 cv input are capable for 0~10 volts, but it reach FFF or 4096 when I input cv around 2 or 3 Volts. SO I have to us a vca to shrimp that value. is that because I didnt set it up right? or It just because Nerdseq cannot handle value above that range in map?

THANKS! I HAD ALOT FUN OF IT <3
Just a fast answer to a few topics, I need some more time for the others:

Quote:1. Attack's crossing point is at 1536 (3/8 of 4095), and Decay's crossing point is at 2560(5/8 of 4095).
2. When input cv is in the range of [0, 1536), attack drops from 2048(in decimal expression & 128 for ENV expression) to 0
    When input cv is in the range of [1536, 4095], attack ramp from 0 to 4096 (in decimal expression & 256 for ENV expression).
3. When input cv is in the range of [0,2560), decay drops from 4096 to 0(in decimal),
    When input cv is in the range of [2560, 4095], decay value ramp forom 0 to 2048(in decimal).

In function expression it look like this:
        Attack:
                x in [0, 1536): y = -4/3 x + 2048
                x in [1536, 4095]: y = 8/5 x - 2457
        Decay:
                x in [0, 2560): y = -8/5 x + 4096
                x in [1536, 4095]: y = 4/3 x - 3413

My approach is firstly shrimp everything by 8(the max numerator or denominator), and calculate the value 4/3, and put the 8 back.
Numerator and denominato
so the problem here is,
1. it is very easy to get overflow when large value execute a MUL, so I have to shrimp all the value before the calculation and multiply it back after evrything calculated. For example, the biggest mul/div value above is 8, so I have to DIV everything by 8 before the calculation, and MUL 8 after the calculation. So I wonder instead of calculate the output directly, is there any possibility to express 4/3 or 8/5... these kind of value in Nerdseq?
2. It is super weird value like 2457 or 3413, and there is no negative value in nerdseq, So I have to calculate it by Substract it by full range (which is FFF, 4095). So, can I invert the value or do some negative value calculation on nerdseq?
3. Is it possible to have internal ENV to be exponential instead of linear?
4. When I trying to multi-segment function, normally it's a IF.. IFNOT... Expression, right? But I find that I cannot assign or pass any value after IF expression. Such as: CAL IF>= VAVB > ENV #1 ATK. (I didn't acctually figure out how IF calculation works, so I just set the value directly to ENV's Attack in two lines. I find it interesting is that, the value is set to the greater one by default. AMAZING). So my question is how to set this kind of IF calculation on Nerdseq?
5.the expression for ENV & MAP are in different resolution (such as 256 in ENV expression = 4096 in Mapping), which is kinda odd, I think, I guess, I assume...?

BTW, the manual says the 4 cv input are capable for 0~10 volts, but it reach FFF or 4096 when I input cv around 2 or 3 Volts. SO I have to us a vca to shrimp that value. is that because I didnt set it up right? or It just because Nerdseq cannot handle value above that range in map?

THANKS! I HAD ALOT FUN OF IT <3

- You could probably use the calc-range command to range your 0-FFF input to the exaxt range you want to which should be the same thing as 3/4 or something like that. It can even turn the value around so that a 0 to FFF input could create a A00 to 123 output.

- Envelopes are linear (discussed in other threads)

- There is a mappping command that can invert your value.

- CV inputs are most probably not properly calibrated

- The IF and SKIP commands do generate a true/false result. Depending of the result you can again do something else in another line. Surely I could add 'use the greater one' but they are then many more of this situations I could add which means an overflow of browsing through IF commands and the only benefit would be that you use one less line. They are more disadvantages involved here.

- check in the preliminary manual about the different resolutions. Most values are mapped to 0-FFF (incoming and outgoing) to keep the same calculation system. For example, you don't want to have a fader input already be full range when its value reached 255. And if you need it different then many calc options are there to manipulate your number flow

Nice to hear that you enjoy it!! Smile
hey sorry to bother you again. 
"calc-range command to range your 0-FFF input to the exaxt range you want to which should be the same thing as 3/4 or something like that..." I wonder how to realize it by mapping! Thanks
 
(12-22-2023, 09:07 AM)XORadmin Wrote: [ -> ]Just a fast answer to a few topics, I need some more time for the others:

Quote:1. Attack's crossing point is at 1536 (3/8 of 4095), and Decay's crossing point is at 2560(5/8 of 4095).
2. When input cv is in the range of [0, 1536), attack drops from 2048(in decimal expression & 128 for ENV expression) to 0
    When input cv is in the range of [1536, 4095], attack ramp from 0 to 4096 (in decimal expression & 256 for ENV expression).
3. When input cv is in the range of [0,2560), decay drops from 4096 to 0(in decimal),
    When input cv is in the range of [2560, 4095], decay value ramp forom 0 to 2048(in decimal).

In function expression it look like this:
        Attack:
                x in [0, 1536): y = -4/3 x + 2048
                x in [1536, 4095]: y = 8/5 x - 2457
        Decay:
                x in [0, 2560): y = -8/5 x + 4096
                x in [1536, 4095]: y = 4/3 x - 3413

My approach is firstly shrimp everything by 8(the max numerator or denominator), and calculate the value 4/3, and put the 8 back.
Numerator and denominato
so the problem here is,
1. it is very easy to get overflow when large value execute a MUL, so I have to shrimp all the value before the calculation and multiply it back after evrything calculated. For example, the biggest mul/div value above is 8, so I have to DIV everything by 8 before the calculation, and MUL 8 after the calculation. So I wonder instead of calculate the output directly, is there any possibility to express 4/3 or 8/5... these kind of value in Nerdseq?
2. It is super weird value like 2457 or 3413, and there is no negative value in nerdseq, So I have to calculate it by Substract it by full range (which is FFF, 4095). So, can I invert the value or do some negative value calculation on nerdseq?
3. Is it possible to have internal ENV to be exponential instead of linear?
4. When I trying to multi-segment function, normally it's a IF.. IFNOT... Expression, right? But I find that I cannot assign or pass any value after IF expression. Such as: CAL IF>= VAVB > ENV #1 ATK. (I didn't acctually figure out how IF calculation works, so I just set the value directly to ENV's Attack in two lines. I find it interesting is that, the value is set to the greater one by default. AMAZING). So my question is how to set this kind of IF calculation on Nerdseq?
5.the expression for ENV & MAP are in different resolution (such as 256 in ENV expression = 4096 in Mapping), which is kinda odd, I think, I guess, I assume...?

BTW, the manual says the 4 cv input are capable for 0~10 volts, but it reach FFF or 4096 when I input cv around 2 or 3 Volts. SO I have to us a vca to shrimp that value. is that because I didnt set it up right? or It just because Nerdseq cannot handle value above that range in map?

THANKS! I HAD ALOT FUN OF IT <3

- You could probably use the calc-range command to range your 0-FFF input to the exaxt range you want to which should be the same thing as 3/4 or something like that. It can even turn the value around so that a 0 to FFF input could create a A00 to 123 output.

- Envelopes are linear (discussed in other threads)

- There is a mappping command that can invert your value.

- CV inputs are most probably not properly calibrated

- The IF and SKIP commands do generate a true/false result. Depending of the result you can again do something else in another line. Surely I could add 'use the greater one' but they are then many more of this situations I could add which means an overflow of browsing through IF commands and the only benefit would be that you use one less line. They are more disadvantages involved here.

- check in the preliminary manual about the different resolutions. Most values are mapped to 0-FFF (incoming and outgoing) to keep the same calculation system. For example, you don't want to have a fader input already be full range when its value reached 255. And if you need it different then many calc options are there to manipulate your number flow

Nice to hear that you enjoy it!! Smile
Quote:hey sorry to bother you again.
"calc-range command to range your 0-FFF input to the exaxt range you want to which should be the same thing as 3/4 or something like that..." I wonder how to realize it by mapping! Thanks

00 CV IN 1
01 CALC RNGE VAVB  > xxxxx

As far as I remember range does work with the former row. In Var A is the minimum and in var B the maximum value (can also be the other way around, it will range both ways). Of course you could use also use a constant or another row instead of a variable VA or VB
And the result can be used then for what you want.
No NerdSEQ in front of me right now but I think it was like this.
Oh thanks! I will try it when i got home! Thanks~ Merry Christmas! Greeting from China!
(12-25-2023, 09:25 AM)XORadmin Wrote: [ -> ]
Quote:hey sorry to bother you again.
"calc-range command to range your 0-FFF input to the exaxt range you want to which should be the same thing as 3/4 or something like that..." I wonder how to realize it by mapping! Thanks

00 CV IN 1
01 CALC RNGE VAVB  > xxxxx

As far as I remember range does work with the former row. In Var A is the minimum and in var B the maximum value (can also be the other way around, it will range both ways). Of course you could use also use a constant or another row instead of a variable VA or VB
And the result can be used then for what you want.
No NerdSEQ in front of me right now but I think it was like this.