Music 171 homework 6
prototypical vocal synth
Still drawing ideas from the material of chapter 5, this
assignment is to make a simple vocal synthesizer using FM. This
technique was developed by John Chowning and incorporated in a
seminal computer music work, Phon�, finished in 1981.
The idea is to simulate formants (resonant peaks in spectrum)
using FM with moderately low indices of modulation, and with center
frequencies placed at harmonics of the sound where the formants
should be located. In this case we'll try the simplest possible
vowel, a 'schwa', roughly modeled as having formants at 500, 1500,
2500, ... Hz. (like a 1/2-open, 1/2-closed, one-foot tube. That's
apparently a decent physical description of how humans produce a
schwa vowel.) Then choosing a suitable sub-multiple of 500 as a
compatible fundamental frequency, we frequency-modulate at the
submultiple to produce a pitched sound with those harmonics (500,
..) as spectral peaks.
Without modulation, you should just see the three carrier
frequencies whose combined spectrum is as shown (actually, the
fundamental is 493.8, the B above middle C):

Then, choosing the modulating frequency to be a submultiple of the
lowest formant (493.8 (same modulating frequency for all three
carriers), and raising the index of modulation to 0.3, you get
spectra like this (for 493.8/3 and 493.81/5 respectively:


To do this assignment, make a patch that moves continuously from
the carrier spectrum at top to the foist modulated one, then back
to carrier-only, then to the second modulated one, then back to
carrier, making a nice auditory illusion (or at least a
double-take). As Chowning noticed, you have to add some vibrato to
make the voice sound believable.
To make the patch (as usual, 2 points for each step below):
- Make the three carriers. They should be implemented as separate
phasor~ and cos~ objects (not just an osc~) because you'll want to
add a modulating term to the phase (that's the next step). Make the
oscillators' (actually the phasors') frequencies be computed from a
single 'fundamental frequency, using *~ objects to multiply it by 3
and 5 for the second and third oscillator, so that, for example, if
you specify a frequency of 500 they get 1500 and 2500. (you'll need
*~ objects for the next step).
- Make an oscillator (osc~ is fine fr this one) and scale it
using *~ and +~ objects to make a vibrato signal. The vibrato
should be 5 or 6 Hz, centered at MIDi pitch 73 (493.8 Hz.) with
0.5% or 1% deviation. (Ideally, it would be good to have a number
box on this so you can try different values). Note: Some of
you are finding this confusing - what I mean by that is to add an
oscillator to a constant signal - the constant signal provides the
"center" pitch and the oscillator adds a signal of amplitude about
1% of that (5 or so), oscillating about 5-6 Hz. The sum of these
two can then be the input of an "audio" oscillator that will have
vibrato. An example is in the "frequency modulation" patch in
02.12b.spectra.pd.
- Add the three carrier oscillators together, with relative
amplitudes 1, 0.5, and 0.2 (or use your ears to find better
values), and sum them and provide an amplitude control for output.
At this point you should hear the unmodulated sound.
- Make a single modulating oscillator that you can use
simultaneously to add a modulating signal to the phases of all
three 'carrier' oscillators you made. Its amplitude should be
controlled using a line~ object and its frequency should be
calculated as a submultiple of the first formant frequency (as a
signal, since the formant frequency is changing as an audio signal
because of the vibrato). The submultiple can be controlled with a
number box.
- Using delays and messages (perhaps sending the messages to
receive ('r') objects to avoid polluting your whole window with
lines going everywhere), make the whole patch, in sequence, (a)
turn on with no modulation; (b) ramp the modulation up to 0.3 with
the modulator at 1/3 the frequency of the first formant; (c) ramp
back down to zero; (d) ramp back up with the modulator at 1/5 the
carrier; (e) ramp back down.
Your successful patch should sound something like this.
back to music 171 main page