## Expression evaluator formulae?

Official support for: meldaproduction.com
werzel
KVRist
330 posts since 25 Jan, 2016
My math skills have always been rudimentary at best, words have clicked more than numbers.
Could those of you who understand/ enjoy math post some formulae for the rest of us to experiment with? I, for one, would not only appreciate the effort, but be very interested to see what syntax is actually applicable.

vectorwarrior
KVRian
880 posts since 23 Sep, 2006
Yeah, I'd love 5 or 10 examples, ideally added to the help, as inspiration

jmg8
KVRAF
2319 posts since 9 Jul, 2015 from UK
+1
i7/16gb/win10,64bit/Live10/MTotal. + Surface Pro 4 (i5)

ANAFREE
KVRer
21 posts since 4 Jan, 2018
+1

] Peter:H [
KVRian
933 posts since 22 Sep, 2016
Just trying to wrap my head around this cool feature:
I always start by simple examples and later get to more complex stuff

For the easy start: How to build a single sine cycle
x is our variable, it's range is [0, 1]. A whole sine cycle needs [0, 2*pi]
Therefore "sin(x*2*pi)" will give you one single cycle, "sin(x*4*pi)" will give you two cycles

How to build a linear "ramp down"
Values from the function should start with max value (left) and decrease linearily to 0 (right side)
Let's call the value y. So y has a range of [1,0 ] wheras x [0,1]
Therefore (1-x) will provide you with the correct value

How to build a combination of both
We want to have a sine wave which starts a full up/down range ans slowly "fades out".
We have all the components already above. We combine the "two full sine cycles" with the "ramp down" factor, which is (1-x) * sin(x*4*pi)

What...phase modulation?
In our first two examples we directly use x inside the sine function.
We call the parameter inside of the sine function the phase ...
What if we put a sine inside a sine? That way we have a inner function that somehow modulates the phase of the outer sine, like sin(inner_function(x))... if our inner_function itself has a value range [0,1] then for a complete cycle we again have to add the 2*pi factor, i.e. f(2*pi*inner_function(x))
Let's again build stuff from ground up:
For our example we use sin(2*pi*x) from above. This gives use values in the range [0,1]. This is our inner_function
Let's place it into the outer function...remember, we need 2*pi to get a full cycle...
Now give sin(2*pi*sin(2*pi*x)) a try ... The result is what you see in the attached screen shot.

Edit Tipp: Whenever your function looks not smooth, adjust the number of points, then go into the expression edit field, just type a extra blank at the end of your current formula. This will update the function evaluation with the adjusted number of points

Tipp: Please use more then 16 points to get smoother and more recognizable curves

Now let's go crazy???
What if we combine everything?
Try: sin(2*pi*(1-x)*sin(2*pi*x))
You do not have the required permissions to view the files attached to this post.

] Peter:H [
KVRian
933 posts since 22 Sep, 2016
Actually ... probabaly I went to fast to crazy with "inner_function" ...

Let's build an organ like sound
You might now a Draw Bar Organ. What this does is, that each draw bar can be used to add/remove a certain upper harmonic...i.e. actually this is a sine frequency which is a multiple of the base frequency. Let's see
we have already seen our base full cycle sine: sin(2*pi*x)
What is the sine with the double frequency? We've had this already sin(4*pi*x)
What is double frequency of that? sin(8*pi*x)
And so on and so on... forever...
Now that we are able to combine it by "adding" the harmonics together we have to take care that our value range of [-1,1] is not exceeded, therefore we need to make the values a little smaller by writting 0.5 * sin(2*pi*x) and as we go up the frequency we go down with the factor...

I have for instance applied this "Adding sines" using a "double the frequency and half the factor" for each next harmonics approach... giving:
0.5*sin(2*pi*x)+0.4*sin(4*pi*x)+0.3*sin(8*pi*x)+0.2*sin(16*pi*x) +0.1*sin(32*pi*x) +0.05*sin(64*pi*x) +0.025*sin(128*pi*x)

What happens if you use the following formula which look quite similar? Does this almost look like it could be a sawtooth if it's grown up?
0.5*sin(2*pi*x)+0.4*sin(4*pi*x)+0.3*sin(6*pi*x)+0.2*sin(8*pi*x) +0.1*sin(10*pi*x) +0.05*sin(12*pi*x) +0.025*sin(14*pi*x)

] Peter:H [
KVRian
933 posts since 22 Sep, 2016
Here's another one... I tried to bring the graph of arcus sinus into the signal shape window. Check out the function here: https://en.wikipedia.org/wiki/Inverse_t ... _functions

Because our variable x goes from [0,1] and the values are [-1,1] in the shape window, we have a problem, because arcsin is defined this way: arcsin [-1,1] -> [-pi/2, pi/2] which does not match [0,1] -> [-1, +1]

But it is possible to get the graph with this: 2*asin(-1+2*x)/pi
Let's break down the parts: -1+2*x goes from -1 to 1. Simple put the min x value into the formula it will give you -1+2*0 = -1, Then put the max x value into the formula: -1+2*1 = 1
asin then has values -pi/2 up to pi/2 - just multiply those values with pi. It will give you -1/2 to 1/2.
Then it's easy to multiply this by two to get [-1,1]

werzel
KVRist
330 posts since 25 Jan, 2016
LOL!
I was curiously typing things like: '-x' or '1-x' or 'x+1' and happy to see ramps when Peter steps in and goes from basic maths to complex trigonometry in 2 steps!
My personal interest in the shape creations here is for interesting modulation shapes, not sound creation, but he definitely shows some of the possibilities!
Thank you Peter.

] Peter:H [
KVRian
933 posts since 22 Sep, 2016
werzel wrote:
Fri Jan 17, 2020 1:58 pm
LOL!
I was curiously typing things like: '-x' or '1-x' or 'x+1' and happy to see ramps when Peter steps in and goes from basic maths to complex trigonometry in 2 steps!
My personal interest in the shape creations here is for interesting modulation shapes, not sound creation, but he definitely shows some of the possibilities!
Thank you Peter.
I think you can use all this stuff for LFOs as well. I haven't tried it out, but I think the example I've called "Phase Modulation" would be fun sounding if it controlls a filter cutoff.

If your here for the wob-wob stuff... Try
1.) 2 or 4 ramp ups in a single cycle ( (x / 0.125 ) % 2 ) / 2, or ( (x / 0.125 ) % 4 ) / 4
2.) Kind of a stair case with 4 steps: floor(x / 0.25) / 4
3.) Wobbles with increasing rate of 1,2,3,4 cycles: sin((floor(x / 0.25)+1)*8*pi*x) (s. screen and example patch)
For these formulae please use large number of points

Use the following code like this: Click "Select All". Use Ctrl-C (copy). Go to MSF, open the toolbar to the right, then click on the Paste icon.

If you want - please go an use sin(2*pi*sin(2*pi*x)) in LFO1 instead of the provided expression and set the LFO1 sync rate from 1 to 1/2

Code: Select all

``````\$eNrtXE1zGzmSvetXMOhrU8JHApkZQXKi7ZZmOtZqaU33xxxpqWwxmmJpyKLH3l+-gSKryC7AqHTsHuZQDB8sMl8VPhMvH4Cc-u3L83r0udjuVuVmNtaXajwqNg-l42rzaTbeVx8nNP7b-GJ6uyj3m8eb5UNVbr-uiqpabT7tRq9mYz0evfrxp5+Kl+ppNlaXwPWHDJEfj17drNZVsb0p1+vy37flpgwmSh1s2Fs0djx69ff16rF4v3ouwq9a1R+NSK7+rfywXO-eLz8cXrV4Lsvq6fW2WB7eFz3sYHD95WVb7A51+qbRzbb4177YPHzN2NwuVxvd97vqM+h9gukzsH0G0Gfg+gx8j0FfGfuK2FfCvgL2lQ97fqee3zn3e-n4+1NRrDMm96vq4el1sXnM2YRBud8WGZPFflctV7lh+371-CH7iN+Kdfmwqr7effyYsrp+XFXldrH6n2I21hrcD2j5-Nvr5e7rbMyof0Dlx6N--PevL7vl88u69ghqPHr7bvGyXlVVUVvr2ViToe7Xpp6ut8svb2-uXq-Lhz8P77NmPPqtcTasyaAZz6eL-Yf79f7TanP0L-Pp4c-FX-1M8mmLYl08VMXjATEbqx-8eD6921cv+8qMrjfLD+sidMn4qnnqrvnP6PVy8+ebcr+p6seHv359eVxWxe39bDwe3ezX61+WwSvd7R5W6-WyKrejuhi7P3-e1E3R-Xk8+qP+-p+zcahXeKK6+kZtXv26We3KzaGE8TdvyvV6+bILZf9G1efTxdPypRgt3l-f37+7Xly-r9-9ebneh+fZUOOrv766-eK7m+DtzV2n7uG-d-tqNoamHd7e3NUNYIQNsF1WxWw80Zfo2AEZQ+y-VdVdXdXrzediXb4Ux+VGjzuVn08bi-n0vlxtqtHNevlp93o21nAYAdGXoy+HOWLZaOfJGwQ3Hh2WBCZQyiAZZJ9HI4HVFo0DPoI1OwIHHpXCLFZr9IDKERk4Yg1rS4zgiTiPbUqsmI5YS6CVQ2CNJo9l3xTbHrGAVrF1zpPN19dYZxgOJT9inUMgBssWbB57KG5ocHPEeusBwVivId9WTRuHwh+xqNiQtgq9ypf5rMi6waIzyjJ6rXUeGw8OstYrY8kZk8e2A0M11SWyrBi1Mhry0MOwqEt+xLJx3qJ3jJTv3qaNtfPNkGRHlrTRrqeVjw1cj44GSpqMcd6Qyxe5La-WzYhkdmhBozfsslh-NjRaLDNpZdBCfib40wdbLDijiZ31lMWetXIzMhgZFKNHr-K9eyqx9m0zA7K2Bojy7Rw7DTaKlXMaGfJNRacZ2A5IJEXaACnKdxGdtXODNb7uIiCTn0SngaGbEYkerTeeNPR0UTP7Qmu3k1c5sMqi47zTaMcy+WZIeuPZWFKOOFtfHRfZARrNDnxwQVloNDDAG6MskXU9L41mn0WDSjOHf1lo7OMMsiPj2DjGPDRaSjRZBHYaSeehJwfXVFWR19awZWCfL7E5eYwaOwnLi7GavWNnXb6NW6+sfAPWWnkXhhRxHmtPnwZrFLLWnhVpymPbVtYN1iqrnfEIWmeHo+6O5IBlB04b5QnzjdV1GBN1CWRZazDQg+y45Ym6dB49Amqv8w5Ddxe-ibr04NiQ8gbyfioiGRN1iTq0MhurfH4e+JOXa7Fk2KDXCnp617frX1tfAmUBFGpv870bF5mIvQKlDdp8M7fjQrVYtsoYtop6ls7T-LNtddlrMs6D1ZgfVF0XF7AEiry1aFUP9q8rSYCyR3bWBCKYh3YW7BrLoY+cApdv5S4tqrFWO-Lea5t-b5d+Bix6ArIaMbsKmdbeaeW8033MwpwRuBarvQoUThvKQ9vx21aR0Ggd3s35ldac+eMWqxlBARnOhwVddxzmjWNQwNp7l6-tWdO2c521ZwrsXGcXadPlFQGrMcRARpseaIe9BfdkPflAVj3kW6rDkYNPdNoAKIcq79miUCT4Yq8N6DAG857NnIZFW1vjEa1Vyto8NzAQl1mj9sZ5DH2Ux54oZ7tgYoglnEHAPI8yJ2bfMN3gSR0z6BAL5bGnNaThFmA5VERp1QNtHUVDzsFwWPAUYd6zmZhwOkYM3JlNT0vFtB4DkQMyDjDfuXHwRI6RmVzA56FRiMpgtQOwAPnl3SRIPTGTMtoaykPPSH0bwhB465Vln6-ridO3gaIng2HBY51v4TNK30CVcuRRGZsPfk7MzTV1RSal0RjsGYdnfL6h8x4cKI2E+XFoE3ReOWucpsBU89CIzlvjnSXUJu-JbUzntQ2LjwGEfK9GkkWY6147r1h5bW2+xF1CHxyUcwQGMSwHWWxiCQFQwW2AojwHsglG7xU6Swy+r8wJQo9OW6uJ2LnsOLYJQk-eK+NAWezpowShZ0CNaJ13eZpqE4SeWXsAz87lxSGbIPQc3JvTYS70vDem9OzDyqcoHzbZBKEndtrbIB7mCYJNEXoOkwi0yXpym6Dz3jlDlpxSugcb03lg8GE423wrxcW1GsizI+oJ-m2CzGtjiAIB8z7fTF0y-x2LtI31CimxsNECIqVCNtbehNwtoW9K2aaNZWQpP26XKiGNhy6Nl0cb0KXx8gAJuixeHtJBpKlIg1Docnh52AyxNCiN9CEWYGXSRKxxS6UUiHcSztSfnpfG7F2sWUGCvktlNkjQd6EuCF3yPpELmdAl7xO5+Apd9j6RC8bQpe8TucYNXf4+kevy0e7HRL6XAF0GPxFvfwDGYop0xwa6FH4i32SCLoefyDfGoEviJ-LNPOiy+Il8AxK6PH7yHbumLmbyOhQ6KBUqv+i4hDAvDEYT+2JhDnFw5z7fyi5W5qURpYuVeQ5Rh1ZW9wRoLlbmpWGh69L4oGQSE1kfQpA8tMPixbGd63J4dekonOYyzpj80uW6FF4coLl4b0mFTtXAocY6j40JvDTIcilN3niwRntDeYHCJSi8NFByCQrPWitjPLCB-IBKkHhpsOMSJJ7JG6UQMHyXxcaavDBicQkaj6GZbQhme+ZPQpOXxR0uocgbzSEEdj3BqItIvDh0SOygS-VMF9N4YQDgEixeqFT772TxPsXiZfsNPsHihVTcxyxeupfkI-8r5dM+ZvHSbUIfs3jprqhPCPHSbWCfEOJlzNYndHjp9r5PMHkpO-UJIi89veETRF7KMH2CyUsP5-gUkxfSRJ9g8tKzVz7B5KVU7y8HbHJ2sewufkUsu4trFsvu4gZNyO7SfkzI7tLhk5DdpaM2lt3FkyXW3aVzFGO2LvQMieNVUneEXbL+HYdDMCG8S70vJnR3qdPHhO4uXWowobtLVzhM6O7ShRUTurt0PceE7i7lDpjQ3YWMBROsXcqTMMHaxfwM43OkUgeH8XFdaYSPXdIuFyWwy9nlXgqj8kqFH+wydrlWhbHuLvU0seouFgQTqo9Uw8TEERqxt0gcoZGKxJg6QiNUtel7pzklztBI9wgocYhGuqlBiUM04rlKEXWXbhxRTN2lG12ps7nCOJdSJ6BlW4kUSfDSzU+KJXipDEFd4i7fYqZ4z0C8LU4J3i4UiiglwAuPHlCCtkvPSlCCtktlPEoJ8MLzKJQQ4KUnaCghwEtlVkoI8OJjShSzeWtJuzA9KK-2UMzmpfIuJdi8coQWjIH8+UtKsHlmhQpI654BGbN5qUZLCTZvgQDYo8rXNXGOH3RYTyz0rewc0-lzqdXksTGft8BovNNhWGWxCT7v6xFBLmjkeWzM56VyKSf4PDM741Az5pcCTvF5Cx5DmGfzF4c4dY5GqHlygs+DChPBQ7gqlcfGfF4Z8BYBONyayIJjHV5Kyjm+SSM9tcqJC0uy470ck3lpzMQxmZceE+eYzEsP1HNM5qVBLUflFV-S4IT+Lr3Pwgn9XSo6cOpMvPCOFKfOxMtuk3HqTLxQE+IEoZfeUeQEoZfd56x74Op0+fWqvi-7-3j-95DIIVwBPv-77L6z773u+9N29fmQ4iH0yKubY4AZkjwsV5v6KjFeBt77arGs9ttldcze4P03L0Df3v306mZ0Kn+bhsIyjefTd+rst932QTX3mENj1dhcC12118Vjm+jG+sXZJfY--m-318M15uOrr-Lv-mN+Mf2xqpYPf+rTzefR9S+-NTei6xFz1Zg0xqbf2LTGtt-YtsbQbwytses3dq2x7zf2rTH2G2NrTP3GNL8INno+fb8tnst1mbp4f5yA+mBrJLbmYGsltvZgCxJbONg6ia072HqJrT-YosQWD7YksQ3te0j0cr353As4WV5M397c6VOSBz1OZAh4V2cZCDyzPpnijWYcfytpgh5SCAwpBO6HFAKzIYXAbEghcD+kEBhSCAwpBO6HFAJDCoEhhcCQQmBIITCkEBhSCAwpBIYUAkMKgSGFwJBCYEghMKQQGFIIDCkEhhQCQwqBIYXAkEJgSCEwpBAYUggMKQSGFAJDCoEhhcCQQmBIITCkEBhSCAwpBIYUAkMKgSGFwJBCYEghMBtSCAwpBIYUAkMKgSGFwJBCYEghMKQQGFIIDCkEhhQCQwqBIYXAf1wKgXC39nDF1ozeFptP4T6tGUcXcmsL22sBvRau18L3WmCvBeUt3i03j+VzfdN7udl9LLfPdR6C85vh9ZS+agwbiJFCTAuxUohtISCFhCvg-1V83T0s14WgNifTE8zIYaFOvxXr8mFViV-Zse88wHznA85L0DW9OD3qflvsdvttkTNZVQ9Pr4vNY8bmtnz8-ako1hmT96vnD9sCIWPyelssqydlMibXX15CiVflRuuM2WK-q5arTcbil7Iq7j5+jC3+vl49Foer9tFvb8pNtS3X62K7Gy1Wm0-r4s3TcrMp1s1s+fGhWn0uQqMW1ehNuV4vX3bF+21R1Jfqrx9XdeqN+fTNsio+lduvP1fF88+bj+Xofrnb-bvcPs7GoSvf7LfbYpN4wiHXyNkDFtWyKubTmyJkCCl29SvC5f-GfXXsro5Pnk9-vD+Usk7qcFbqUIntyzFJQPCOF9Pboiq2OzOf-r56rJ5u59NFud8+FKP7bfGxznqy2nxqchE0JlcN6GJ6dbso95vHY2KQ3SFvx25+8b+BzS0K
``````
You do not have the required permissions to view the files attached to this post.

werzel
KVRist
330 posts since 25 Jan, 2016
I don't have specific goals in mind for the shapes, just experimentation!

One odd thing that I noticed is that if you use the same window to input the equations into (one after another) and then use the Undo arrow, the resulting waveshapes are NOT the same. I'm not sure if this would qualify as a bug or perhaps my expectations are incorrect.

Thanks again for your insights Peter!
BTW, you introduced 2 new elements that I don't quite understand, the % and 'floor'.

MeldaProduction
KVRAF
11849 posts since 15 Mar, 2008 from Czech republic
Uuuuu
Vojtech - MeldaProduction

] Peter:H [
KVRian
933 posts since 22 Sep, 2016
werzel wrote:
Sat Jan 18, 2020 5:38 am
I don't have specific goals in mind for the shapes, just experimentation!

One odd thing that I noticed is that if you use the same window to input the equations into (one after another) and then use the Undo arrow, the resulting waveshapes are NOT the same. I'm not sure if this would qualify as a bug or perhaps my expectations are incorrect.

Thanks again for your insights Peter!
BTW, you introduced 2 new elements that I don't quite understand, the % and 'floor'.
No problem, I try to explain
"%" is the modulo operator: if you divide natural numbers, i.e. without fraction part, at times ther will be a reminder (hope it's called this way in englisch)
I think best is to give examples
0 % 4 = 0
1 % 4 = 1
2 % 4 = 2
3 % 4 = 3
4 % 4 = 0
5 % 4 = 1 (4 fits into 5 exactly one time, with 1 as reminder)
6 % 4 = 2
7 % 4 = 3
8 % 4 = 0
The interessting thing is that if you do "m % n" you get only the numbers [0, n-1]
If you count m [0, ...] the cycle [0, n-1] will repeat. That's how you can make steps...

Second thing is floor and this is much easier. If you have a real number it simply will cut the fraction part. floor(3. = 3, floor(3.1) = 3. It's not the way we have learnt rounding in school. It will always "drop" down to the next integer number, therefore "floor". Btw "ceil" works the other way round, it will give you allways the next higher integer number.

Now how can you make the x in the window have 4 steps?
x is [0,1] ... divide it by 0.25 and you'll get all real numbers in [0, 4].
Apply the floor to it and you get the steps: floor(x / 0.25) /4

vectorwarrior
KVRian
880 posts since 23 Sep, 2006
Thanks for this Peter, I haven't had time to sit down and absorb it all yet but I'm looking forward to getting the opportunity! Appreciate the effort it took to write all this up, thanks again!