Manual
van Ties

# Ad

### an eratosthenean additive oscillator

Ad is a sound source based on the concept of additive synthesis, so I figured Ad is a good name.

Fourier analysis is the study of wave signals, by decomposing (‘ανάλυσις’ in the true sense of the word) them into sine waves (partials). [Wikipedia article]

For example, it turns out that a saw wave (with frequency f) can be written as

∞
∑
i = 1
i-1 sin (2πift) .

Additive synthesis turns this idea around: one creates a sound by adding many sine waves (partials) together. (‘σύνθεσις’ in the true sense of the word.)

In the case of Ad: it works by generalizing the above expression for the saw wave as follows:

1
C
n+N-1
∑
i = n
σiaiiα sin (2π (1 + ((i - 1) s)) ft) .

Instead of taking an infinite amount of partials (which is impossible to begin with), we select a certain set of partials, by choosing a lowest partial n, a number of partials N, and σi ∈ {0, 1} which ‘sieve’ certain partials. Furthermore, there is an exponent α, a ‘stretch’ parameter s, and for each partial there is a factor ai ∈ [-1, 1] that scales that partial’s amplitude. C is just a normalization constant.

We’ll get into all of this and more in detail.

## The Front Panel

Let’s have look at the front panel, and first at the knobs and jacks with yellow labels. There are five of these parameter knobs: pitch, number of partials, tilt, stretch and sieve, with corresponding CV inputs (for the pitch both a V/octave as well as an FM input), and bipolar attenuverters / a unipolar attenuator for FM.

On the bottom right there’s a corner where the background yellow and the labels are dark blue: here are the three output jacks: one for the root wave (the fundamental, or octave transition thereof) and two for the summed (‘Σ’), labelled Left and Right. On the bottom left there’s a reset button with a corresponding input jack. On the top, the spectrogram is shown. The knob and jacks with red labels belong to the ‘partial amplitudes / CV buffer’ section: there’s a delay time knob with corresponding CV input (without attenuator), a clock and a amp input.

### Parameters

Before we continue: all of Ad’s parameters act continuously on its output signals, including those parameters that actually only make sense as integers (e.g. the number of partials). In that case there is some fading going on. Exceptions are the quantization modes. These can be set in the context menu (right click on the panel to get there).

#### Pitch

The pitch knob can be quantized in octaves or semitones. This only affects the knob, not the V/octave input. The FM jack provides linear through-0 FM. It only affects the main Σ outputs, not the root output.

#### Partials

The ‘number of partials’ parameter has more or less the effect of a low-pass filter.

#### Tilt

The tilt knob controls both the lowest partial as well as the exponent α in above expression. It has two zones:

- On the left-hand side it changes the exponent. The lower it is, the more the lower partials are emphasized. In this case the lowest partial is always the fundamental. In the limit α → –∞, only the fundamental is present and the other partials are completely suppressed.
- On the right-hand side it changes which partial is the lowest. The exponent is fixed to 0, i.e. the partials all have the same amplitude. It has the effect of a high-pass or band filter.

#### Stretch

The stretch parameter is the distance between partials in units of the fundamental frequency, so if it is set to 1, we have a harmonic spectrum. If it is greater than 1, the spectrum gets stretched out, if it is between 0 and 1 the spectrum gets squeezed, and if it is 0 the spectrum collapses into a single frequency. If it is negative, you get partials sounding lower than the fundamental, and the spectrum ‘folds’ around 0. It’s easier to understand through experiment: play with the number of partials and the stretch parameter and see what happens on the spectrogram.

Like the pitch, the stretch parameter can be quantized via the context menu in two modes. In the ‘consonant’ mode, this is done in such a way that the second partial is quantized to a consonant with respect to the fundamental. With consonant I mean here a perfect prime, a minor or major third, a perfect fourth or fifth or a minor or major sixth, plus or minus octaves, all in just intonation. See the appendix for a detailed list of quantization steps. (Being nitpicky: note that a stretch value of -1 means a second partial with 0 frequency, which implies that the quantization steps are infinitely dense around there. That’s why between -¹⁄₃ and -⁵⁄₃ the number of quantization steps is reduced.) These steps are also represented as knob markers on the front panel. Unlike the pitch quantization, the stretch parameter is quantized after adding the knob and values together.

In the ‘harmonics’ mode, the stretch parameter is quantized to an integer, i.e. the second partial is a harmonic with respect to the fundamental.

#### Sieve

The term ‘erastosthenean’ refers to the sieve of Eratosthenes in mathematics, an algorithm for finding prime numbers. [Wikipedia article] Ad’s ‘sieve’ parameter is based on this. If it’s set to ‘×’, it does nothing. If it’s set to 2 at the right-hand side, all partials that are proper multiples of 2 (i.e. not 2 itself, but 4, 6, 8 etc.) have their amplitudes set to zero. If it’s set to 3, all proper multiples of 3 (9, 15, 21 etc.) are sieved out. (Note that 6, 12 etc. are already sieved out in the first step.) If it’s set to 5, all proper multiples of 5 are sieved out. (Note that we don’t need 4, since those multiples are sieved out in the first step as well.) If it’s set fully clockwise, the prime numbers and the fundamental are left over.

A similar thing is going on on the left-hand zone of the knob, except that here it goes in reverse order and the primes themselves are sieved out as well: If you go counter-clockwise from ×, first 127 (the largest prime below 128) is sieved out, then 113, etcetera. At some point we get to the prime 61: then also 2 · 61 = 122 gets sieved out, then 59 and 2 · 59 = 118 etcetera. If it’s set fully counter-clockwise, only the powers of 2, i.e. the octaves, are left.

#### The ‘Partial Amplitudes / CV buffer’ Section

As said the knob and input jacks with red labels all belong to the ‘partial amplitudes / CV buffer’ section. This only becomes active when the ‘amp’ jack is connected. The CV coming in there is then recorded into a 4 second buffer.

There are three modes in the context menu. Let’s look at the ‘low → high’ mode first. Assume the delay time is set to a finite value. Then the lowest partial is attenuated. (This is the factor ai in the wave formula.) by the current CV value (where 10 V corresponds to unity), 1 × the delay time later the next partial is attenuated by this value, 2 × the delay time later the next partial and so on. In other words: the incoming CV travels from the lowest partial upwards. If the delay is set to 0, all the partials are affected simultaneously, in other words: it works then as an overall VCA. If you turn the knob all the way right to ❄, the buffer freezes and no CV is recorded.

Maybe it’s easier to understand it by trying it yourself: send an LFO into the buffer input and set the number of partials to maximum. Experiment then with the rate of your LFO and the delay time and look what happens on the spectrogram. If the LFO is a sine, you can get comb filter-like effects. Or when you send in an envelope, the individual partials each get a delayed envelope.

One can send in an external clock. The delay knob then becomes a clock divider. (The knob ranges from a division by 8 next to 0 to a division by 1 next to ❄. Unless it would exceed the buffer length, then the clock gets divided by a power of 2.)

The ‘high → low’ mode works analogously. In unclocked random mode, the delay for each partial is determined by a uniform random distribution. In clocked random mode, the delay times lay on a grid in time, given by the incoming clock and the division set by the delay knob. The random values are generated again on a reset (via the button or input) or if all amplitudes are 0. If the ‘empty buffer on reset’ option is selected in the menu, a reset trigger, indeed, empties the buffer.

To summarize: roughly speaking, the pitch and stretch control the the frequencies of the partials. The other four parameters control the amplitudes of the partials. They can set certain amplitudes to zero, which has the effect of removing frequencies / pitches from the spectrum.

## Other Features

#### Polyphony

Ad can work with polyphonically. The number of channels is determined be the number of channels coming in at the V/oct jack. (It can get CPU-heavy, though.)

#### Stereo

If the stereo mode in the menu is set to mono, or if the right Σ output is connected, both the left and the right Σ outputs are the same. If it is set to hard-panned, the partials are distributed over the two channels, except for the fundamental, which goes to both channels. This is done in such a way that for any value of the sieve parameter, those two channels are pretty much in balance. See the appendix for details. On a reset trigger or when all amplitude are 0, the channels are flipped. Initially, the channels are also flipped for the odd-numbered polyphony channels. The soft-panned mode is similar, except that the left partials also appear more quietly in the right channel and vice versa, in such a way that the lower partials are more panned less than the higher ones.

#### Spectrogram

The x-axis of the spectrogram on the panel represents the frequencies on a linear scale, ranging from 0 on the very left to the Nyquist frequency (half the sample rate) on the very right. The y-axis represents the amplitudes on a logarithmic scale. The left channel is represented with yellow lines and the right channel with red ones.

#### Reset

The phasors inside Ad can drift apart, especially when one plays with the stretch parameter. Usually this doesn’t cause any audible difference. The effect of wave shapers like wave folding can be audibly different, though. Audible drifting can also occur, when the module runs for a while. The reason for that is, in order to save CPU, the 128 sines are not all computed brute force, but recursively from each other. Some artefacts can occur then. The phasors are reset either of these cases: on a reset trigger, if the amplitudes of all the partials are 0 or if the three outputs are disconnected. This means that the reset input can also be used for oscillator sync.

#### Sample rate / control rate

I might be good to know that (in order to save CPU) not all computations are done at sample rate. The amplitudes of the partials are computed at ¹⁄₆₄th of the sample rate, with a minimum rate of 750 Hz. This implies that the parameters partials, tilt and sieve, as well as the CV buffer section can’t really be modulated at audio rate. The parameters concerning the frequencies of the partials (V/oct, FM and stretch) can be modulated at audio rate. Also the reset input takes audio rate, in order to facilitate oscillator sync.

#### Parameter ranges

Some of the parameters can be pushed beyond the knob ranges with CV. The player can experiment with it to find out. Ad has a huge pitch compass, 9 octaves with the knob only, especially towards the lower side. The idea behind that is, to make it also possible to generate chords, rather than timbres. You can do this by selecting only a few partials by using the tilt (on the right side), number of partials and sieve parameters. It could also be interesting to play with this transition zone of harmony and timbre.

#### Root

There is an output for the root / fundamental wave. If the lowest partial ≥ 1 (i.e. the tilt parameter is past noon), the produced wave is shifted up by a corresponding number of octaves.

It is not affected by FM, so you can use it for patching it into the FM input.

#### Comb

If the ‘amp’ input is not connected, the delay knob (and the corresponding CV input) control a comb filter.