I’ve programmed about 4 bladestyles now, so I have some semi advanced topics to ask about. I’m exclusively programmed them in Proffie OS 6.7 and haven’t tried any other versions.
Here are some operations that I feel would be useful if we had them, but can be worked around:
Subtraction -
Reasoning - We nave Sum<> but not Subtract<> or Difference<>. Suppose you are making an effect for the last 4 seconds of a sound. It would be great to be able to use Difference<WavLen<EFFECT_FORCE>,Int<4000>>
Workaround - The function Invert allows for “1.0-X” or in fixed point that is “32768-X”, so if you add the quantity you want to subtract to 32786, that allows you to strictly subtract that value as “32768-(32768+X)” = “32768-32768-X” = “-X”. So lets saw I want to subtract 4 seconds I would use
Sum<WavLen<EFFECT_FORCE>,InvertF<Int<32768+4000>>>
or
Sum<WavLen<EFFECT_FORCE>,InvertF<Int<36768>>>
Division -
Reasoning - We have Mult<> but not Divide<>
Workaround - @NoSloppy taught me about the Percentage<> function and this is the easies way to use division. Percentage is just X*(Y) where Y=1/Z *100. So if you want to divide by 4 you would use:
Percentage<WavLen<EFFECT_FORCE>,Int<1/4 * 100>>
or
Percentage<WavLen<EFFECT_FORCE>,Int<25>>
The other option is to use Scale<>. In this case you’re dividing by 4 and then cnahging the range at the same time. So if you want to divide by 4 you have to reduce the typical range from 0-32768 to a range of 0-32786/4 = 0-8192. Something like:
Scale<WavLen<EFFECT_FORCE>,Int<0>,Int<8192>>
That places the fraction at the bottom of the range. If you need to invert the function, like 32768-(X/4), you can do that in a single Scale like:
Scale<WavLen<EFFECT_FORCE>,Int<32768-8192>,Int<32768>>
or
Scale<WavLen<EFFECT_FORCE>,Int<24576>,Int<32768>>
Triggers with Invert (Rising Edges and Falling Edges)
Reasoning - We have Trigger<> and it allows you to rise to 32768, then stay there for a while, then drop down again. What if you want a different transition shape.
Workaround - Regular transitions are of the form:
Trigger<EFFECT_FORCE,[Rise time],[Wait time],[Drop time]>
If you just want the opposite, use InvertF like this:
InvertF<Trigger<EFFECT_FORCE,[Drop time],[Wait time],[Rise time]>>
If you want to wait at zero for some time and then rise to high forever use:
InvertF<Trigger<EFFECT_FORCE,0,[Wait time],[Rise time]>>
If you want to wait at high for some time and then drop to zero forever use:
Trigger<EFFECT_FORCE,0,[Wait time],[Drop time]>
Here are some operations that I just don’t know how to do, maybe you have a workaround that can be shared?
Clamping
Reasoning - Sometimes your doing math on a function and the result is below 0 or over 32768. We should be able to say Clamp<X,[Low value],[High value]> or Saturate< X > which does 0 and 32768 without specifying. We need this for some of the results of Mult<> or Sum<> commands. In practice, when numbers go out of range, all sort of funky stuff happens to the colors.
Quote Effects
Reasoning - We have something like WavLen<EFFECT_FORCE> but we don’t have WavLen<EFFECT_QUOTE>. I would really like to create effects for the quotes in quote mode…
Please respond if you have any other workarounds and please encourage Fredrik to add these functions if possible.