[linux-audio-dev] the bandwidth of the each harmonic
paulgfx at yahoo.com
Fri Feb 4 22:45:24 UTC 2005
...a simple, but powerfull paradigm that helps to make
simple algorithms that produces very beautiful sounds.
I want to open a topic about what I call "bandwidth of
each harmonic", to say some ideas that helped me to
make beautifull sounds. I am Paul, the author of
ZynAddSubFX software synthsizer (
http://zynaddsubfx.sourceforge.net ) and I wish to
share some ideas ;)
Referring to musical sounds,usually the harmonics are
considered simple sine function. Of course, the
reality shows different thing, and so, the harmonics
was started to be considered as sine functions
modulated by a lower frequencies (I saw some time ago
a link that describes that the choir sound is
beautifull because of the "micromodulations",etc...).
A very good thing is to "have a look" in a frequency
domains. Let's take for example a choir that sing same
note (like A=440Hz). Because all are human, even they
are very well trained singer, they will not sing
exactely the same note; for example one will sing at
435 Hz or other, at 443 Hz, and so on. Now, the first
harmonic (the fundamental note) is not longer a sine
of 440 Hz, but a narrow band signal that has a certain
bandwith. For example, let's take a very simple case:
if all sing at same loudness, and they sing from 435
Hz and the 445 Hz. In this case, the bandwidth will be
10 Hz. Of course, in real choir the frequency
distribution of the harmonic will be not flat, but
usually will be a curve that looks like a normal
(gaussian) curve(found this after I did some research=
very fine frequency analysis with very long FFTs).
Now, let's go to the second harmonic: if you multiply
435 and 445 with 2, the difference will be 20 Hz. So,
the bandwidth of the second harmonic is 20 Hz. So here
a important rule of real instruments (esp. ensembles):
the bandwith of each harmonic is proportional to the
it's frequency; so in this example the first harmonic
has bandwidth 10Hz, the second 20Hz, the third 30Hz,
and so on.
Here I made a very fine frequency analisys of a
synthsized sound(a real orchestra sound will give
You see, that the harmonic's bandwith increase
according to their frequency. If you don't increase
the bandwidth of higher harmonics, the resulting sound
will be unpleasant especially on higher bandwiths of
the first harmonic. So, not all quasi-periodic sounds
are good, usually only if you increase the bandwidth
of the harmonics.
Now, what's happens if there are a lot of harmonics or
the pitch of the sound is enough low?
The upper harmonics will merge to a single frequency
band that will sound like a hiss, that is pleasent to
the ear(eg. choir).
I found that bandwidth of each harmonics can go even
greater than 50 cents (quater of a tone) and still
sound musical - I can give you some example wavs.
Please note that this a different situation than 2
notes detuned by 50 cents (that sound very dissonand).
Also, the best is that the phases are random. In real
life this is ensured by the reverberation of the hall,
for example if a instrument plays with a vibratto (a
Perhaps you noticed that always if more instruments
plays the same note(as a enseble), the sound is very
pleasant. I consider that this is the cause: the
bandwidth of each harmonic.
Unfortunately, there is very little on the internet
about this stuff, because, I think, that are used more
complicated paradigms (like some statistics on how
sine harmonics modulates, or so).
Now I want to give examples on how you can synthesize
sounds, using this ideea.
You can use zynaddsubfx or another synthesizer in most
cases. Of course: I don't claim that I invented the
bandwidth of each harmonic (or frequency distribution
of each harmonic), because the ensembles, the choirs,
the reverberations, exists since thousands of years
(or more :) ). I just consider this a very important
fact on how sounds are beautifull and it helped me to
synthsize good sounds even since I was on highschool
You can make bandwidth of each harmonics by:
1) make more oscillators and detune them a bit (and a
slight vibratto helps alot). Most synth use this and
allows this, and perhaps it is known by you. This is
one of the simplest method. This is implemented in
ZynAddSubFX as "ADDsynth" module
2) generate white noise and filter each harmonics with
a bandpass filter and mix the results. Be carefull to
make higher harmonics to have higher bandwidth. This
is implememnted in zynaddsubfx as "SUBsynth" module.
3) You see that above graphs. You can represent them
as numbers in the frequency domain that represent the
amplitudes of the frequencies, add random phases and
do a SINGLE IFFT and voila! A very beautifull sound
will "born". This new ideea is implemented in
ZynAddSubFX as "PADsynth"
4) you can do other things, like a vibratto on a
periodic oscillator and do a FFT to all sound, put
random phases, and do a IFFT.
For more information, I made few years ago a page that
describes above things at:
Do you Yahoo!?
The all-new My Yahoo! - What will yours do?
More information about the Linux-audio-dev