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