Index page
Basics
(draft)

    This page describes the basic principles and has suggestions about how to make instruments that sound like they must have been made with professional equipment. This applies to ZynAddSubFX or to any synthesizer (even if you wrote it yourself  with a few lines of code). All the ideas from ZynAddSubFX come from the principles outlined below.
 

1) The Bandwidth of each harmonic

    I am not referring to samplerate, I am talking about the frequency "spread" of each harmonic. This is the most important principle of making instruments that sound good. Unfortunately there is very little documentation about it (I have seen it very briefly described in an old book, I searched on the net about this, but I didn't find anymore - maybe you'll help me?).

    Often it is believed that the pitched sounds(like piano,organ,choir,etc.) for a single note have a frequency, it's actually harmonics and nothing more. Many people try to synthesize a sound using an exact frequency+harmonics and observe that the result sounds too "artificial". They might try to modify the harmonic content, add a vibratto, tremollo, but even that doesn't sounds "warm" enough. The reason is that the natural sounds don't produce an exact periodic; their sounds are quasi-periodic. Please notice that not all quasi-periodic sounds are "warm" or pleasant.

The difference between a periodic wave and a quasi-periodic wave

    This is a graphical representation of a note with exact frequency (bandwidth of each harmonic is too narrow; the sound is periodic). Below this is the spectrum.


 
 

This is a graph of a quasiperiodic sound, below is the spectrum (the bandwidths are exaggerated).

Click here to listen to a sample of periodic wave folowed by a quasi-periodic one.
    A very important thing about the bandwidth is that it has to be increased if you'll increase the harmonic's frequency.
If the fundamental frequency is 440 Hz and the bandwidth is 10 Hz (that means that the frequencies are spread from 435 to 445 Hz), the bandwith of the second harmonics (880Hz) must be 20 Hz. A simple formula to compute the bandwidth of each harmonic if you know the bandwidth of the fundamental frequency is BWn=n*bw1  ;  n is the order of the harmonic, bw1 is the bandwidth of fundamental frequency and BWn is the bandwidth of the n'th harmonic. If you do not increase the bandwith according the frequency,  the resulting instrument will (usually) sound too 'artificial' or 'ugly'.
    There are at least three methods of making good sounds with the above considerations:
        a) by adding slightly detuned sounds (in ZynAddSubFX  it is called ADsynth). The idea is not new: it has been used for thousands of years in choirs and ensembles. That's why the choirs sounds so beautiful.
        b) by generating white noise, substrating all harmonics with band-pass filters and adding the results (in ZynAddSubFX it is called SUBsynth)
        c) by "drawing" the above graph that represents the frequency amplitudes on a large array, put random phases and do a single IFFT for the whole sample

2) The randomness of the sound
    The main reason why the digital synthesis sound too "cold" is because the same recorded sample is played over and over on each keypress. There is no difference between a note played the first time and second time. Exceptions may be the filtering and some effects, but these are not enough. In natural or analogue instruments this doesn't happen because it is impossible to reproduce exactely the same condidtions for each note. To make a warm instrument you have to make sure that it sounds slightly different each time. In ZynAddSubFX you can do this:
    a) In ADsynth, set the "Randomness" function from Oscillator Editor to a value different than 0 or change the LFO's start phase to the leftmost value
    b) In SUBsynth, all notes already has randomness because the starting sound is white noise

    c) In PADSynth, I start the sample from random positions on each keystroke


3) Decrease the amplitude of higher harmonics on low velocity notes

    All natural notes have this property, because on low velocity notes there is not enough energy to spread to higher harmonics. On artificial synthesis you can do this by using a lowpass filter that lowers the cutoff frequency on notes with low velocities or, if you use FM, by lowering the modulator index.

4) The spectrum should be almost the same according to the frequencies and not to harmonics
    This means that, for example, the higher the pitch is, the smaller the number of harmonics it will contain. This happens in a natural instrument because of the resonance.
In this case there are many instruments that don't obey this, but sound quite good (example: synth organ).
If you record the C-2 note from a piano and you play it at a very high speed (8 times), the result will not sound like the C-5 key from the piano. The pitch is C-5, but the timbre is very different. This is because the harmonic content is preserved (I mean the n-th harmonic will have the same amplitude in both cases) and not the  spectrum (eg. the amplitudes of the harmonics around 1000 Hz are too different from one case to another).
    In artificial synthesis you can use filters to add resonance or FM synthesis that varies the index according to the frequency.
In ZynAddSubFX you can add the resonance:
    a) In ADsynth, use the Resonance, a high harmonics sound content and filters or FM.
    b) In SUBsynth,  you can add some harmonics and use the Global Filter