Overtune! It is so uberawesome.

Thanks so much. To answer your questions:

1. -base note- sets the amount of samples/T in the final sample

Correct; it basically sets the resolution of the rendering, because it will also set the basenote property of the sample layer in the Keyzones tab. So apart from determining what resolution OT renders, everything should sound about the same. It's on A-0 by default because I like to visualize what sounds I program.

2. (X) goes from 0 to 2*pi (T) times

Yep. And to answer another question from your post, the only difference between X and XX is, X always stays in the range of 0 and 2pi, and XX keeps on counting, so if you have Time# = 2 then XX goes from 0 to 4pi instead of 0 to 2pi, 0 to 2pi again. I do think that X could be replaced by XX, but that's for a future version perhaps. You always need XX if you want to do some frequency modulation/pitch bending.

3. (T) goes from zero to 1, thus if I set Time to 10, (T) will be (0-0.099) in the first chunk (0.1-0.199) in the second and so on

Yes, that's exactly correct again. You get 10 points

. So T is not really the same as the Time# variable in the GUI, T is a variable to easily make transitions possible like you have done a lot in the experiment .xrns that you uploaded. Time# determines actually the duration of the sample - especially if you set the sample to non-looping. It's awesome to see someone experiment with it btw! There are a great many functions already built into Overtune that are made for this. I will pull some from the source code now and explain them;

- ru/rd - my most used.. short for ramp up/down, return a exponential ramp. argument 1 ('t') can be T, argument 2 ('p' for power) stands for the slope.
- aru/ard - same as above, with the difference that they return "anti ramp up/downs", just render ard(T,2) and aru(T,2) and you see what I mean.
- cosu/cosd - cosine from 0..pi based ramps, also with 2nd argument to raise it to a power p
- there's also a env function which kind of works but is too difficult to explain and is pretty annoying to program

You can also use the min and max functions (very common in programming, returning the lowest resp. the highest of two values) to mix these envelopes together. Another great helper can be the 3 functions

- upft(t,l,h) - returns 1 when t is between l and h, 0 otherwise "unary pulse from till"
- upf(t,l) - returns 1 when t is above/after l, 0 otherwise "unary pulse from"
- upt(t,h) - returns 1 when t is under/before h, 0 otherwise "unary pulse till"

For signals, as they are in the -1..1 range, we have supermin and supermax functions. They take the min/max from two signals respectively, but measured from the 0 line.

The distortion functions clip, fold, shape, crush, noise that I've talked about before are easiest understood by trying them. Just give different parameters on a sinewave.

- clip(x,l) - limits signal x (so it's actually a y value but so what) to stay between l and -l.
- fold(x,d) - 'drives' signal x up to the horizontal lines 1-d and d-1, and where it crosses these, inverts signal in the line in question.
- shape(x,p) - takes x to the power p (and makes sure it stays on the same side of 0) - can be used with fractions too.
- crush(x,n) - "bitcrushes" signal x to have only n amount of steps.. just try it.
- noise(x,a,p) - adds noise to signal x, where a is the dry/wet amount (between 0 and 1) of the noise signal, and how much noise is modulated by taking x to the power p.

The functions semiclip, semifold, semishape, semicrush are the same except for they take an extra argument a which is the "dry/wet" amount.

Modulation functions:

- am(c,m,a) - amplitude modulation (carrier, modulator, amount)
- rm(c,m,a) - ring modulation (carrier, modulator, amount)

Logic functions:

- ite(i,t,e) - if i, returns t, else returns e.
- btoi/itob - converts true/false to 1/0 and vice versa ( actually itob returns false if integer <=0 )

Other conversions:

- un(x) - converts signal x in -1..1 range to 0..1 range (signal range to modulation range)
- bi(x) - vice versa
- tt(x) - converts cycle x in 0..2pi range to 0..1 range
- tx(t) - vice versa

Misc:

- nf(transpose) - gives (approximation of) pitch factor for an amount of transposition
- pls(x) - returns a "pulsified" version of signal x; i.e. only -1 or 1. ( pls(sin(X)) == pls(saw(X)) == squ(X) )

but what is N? and what is the order of processing? lets say I enter "sin(X)", sin(N*X), steps=4, time= whatever

will the tool first calculate the sinewave over time, then start the overtone process or is the overtonestep calculated for each Timechunk?

and N? is it just the Step number?

and what does XX mean?

A good question. So the process for rendering is like this: the formula from "Step 1" is taken, and the formula from "Step N" is then added to it as a string, "Step #" number of times, everytime replacing the N var with the step number. So the formula is first expanded with the amount of overtones, then after that the full formula is rendered. Using the Step # formula field you can build a "Virtual Analog" Square wave out of sinewaves by using these arguments:

- Step 1: sin(X)
- Step N: sin(X*(N*2-1))/(N*2-1)
- Step #: variable
- Time #: 1
- Power: yes, Stereo: no
- BaseNt: keep default

This is where the name Overtune comes from. I myself at this point in time hardly ever use the Steps no more, but it is fun sometimes. See if you can figure the same kinds of formulas for approximations of square wave and sawtooth wave

A cool thing to try out as well, which I'm toying with a lot right now, is frequency modulating synth sounds. You can make awesome electric piano style sounds with sines modulating other sinewaves' frequency.. Just try this one:

- Step 1: sin(X+.8*sin(X)+.1*shape(sin(X*3)))
- Step N: keep default (0)
- Step #: 01
- Time #: 1
- Power: yes, Stereo: no
- BaseNt: keep default (A-0)

Try making it something else by using stereo:

- Step 1: sin(X+.8*sin(X)+bi©*.1*shape(sin(X*3)))
- Step N: keep default (0)
- Step #: 01
- Time #: 1
- Power: yes, Stereo: yes
- BaseNt: keep default (A-0)

The stereo stuff is only usable in the latest version though, you can download it straight from github (linked below)

If I didn't say this before, the 'Power' switch is used to automatically use the full signal range from -1..1, i.e. Normalize. I only turn it off sometimes if I need to determine exactly at what level to do a clip or fold.

I hope you understand a bit better now how everything works behind the curtains. Also, just know that you can always browse the source code (or ask me!) if you want to be sure about how something works in Overtune on the inside - check the

github page. As of now, lines #45-154 are the functions you can use inside the OT formulas.

**Edited by Cas, 10 February 2013 - 20:11.**