The wavetable oscillator in SynthR supports creating custom wave tables
from expressions.

They can be really short and simple but can be extended to longer
expressions.

These expressions are build from normal math operators, numbers,
variables and functions.

Operators | |
---|---|

+ | Plus |

- | Minus |

* | Multiplication |

/ | Division |

^ | Power of |

% | Modulo |

Magic Variables | |
---|---|

x | Current time position in wave table from -1 to 1 |

w | Like x but from 0 to 1 |

y | Current table position from -1 to 1 |

z | Current table position from 0 to 1 |

pi | Pi, 3.141592... |

e | E, 2.718281... |

window1 | Raised cosine (Hann) windowing function |

window2 | half sine window |

window3 | A wider version of window1 |

Functions | |
---|---|

sin | sinus |

cos | cosinus |

tan | tangens |

atan | arc tangens |

abs | absolute value |

sign | Give sign of value, 1 for positive values, -1 for negative |

sqrt | Square root |

rint | Round to nearest int |

tfold | triangle fold. Whenever a value goes above 1 it mirrors back, same with below -1 |

tri | Full triangle wave from 0 to 1. Same as tfold(4*input) |

wrap | Wraps values to stay inside -1 and 1 |

saw | Full saw wave from 0 to 1. Same as wrap(2*input) |

square | Full square wave from 0 to 1. Same as sign(wrap(inputx*2)) |

Lets make a nice squealy wavetable, step by step.

Lets start with a simple triangle wave.

`tri(w)`

That's all for making a simple triangle wave! So far it is same for all
wave table positions, let's fix that by making use of the z variable.

`tri(w*(1+5*z))`

Lets break this down. z goes from 0 to 1, but we rather want to start
with 1. that's why we add the `1+`

part.

`5*z`

is added to make the effect a bit more dramatic.

Now we go from one triangle cycle to a total of 6 cycles when moving the
"pos" knob.

This is already quite useful hard sync like sound but can be improved
more.

When not having an integer number of triangle cycles it will end on
something not 0 thus having a sharp edge. This can indeed sound good but
it is not quite what we want here so lets add a window. Just multiply
the whole expression window3.

`window3*tri(w*(1+5*z))`

Let's take things one step further and add triangle folding in to the
shape. This is done by wrapping the expression in tfold.

To have anything folded back we need to increase the volume within so
lets use the same trick with z as before by multiplying with
`*(1+2*z)`

`tfold(window3*tri(w*(1+5*z))*(1+2*z))`

Now we have a nie wavetable!

We can make simple changes that will have dramatic effects like changing
tri to square or saw, or replacing tfold with wrap.

A tip if you if you think your wavetables sound too ringy or squealy try
adding some phase modulation (Rightmost knob in wavetable). Set to "asym
plus", a little bit goes a long way.

Happy tweaking!