2
1
-b128 -A -s -m7 -B0 -Lstdin -R
; this is an example of singing formant simulation of the male voice
; based on dodge pages 204-205
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1
instr 1
; amplitude is just a trapezoidal envelope
; not right for real simulation
kamp linseg 0, p3*.1, p5*900, p3*.8, p5*900, p3*.1, 0
; frequency from MIDI notes
ifrq = cpsoct((p4/12) + 2)
; some stupid vibrato
avib oscil .2, 5, 11
; a pulse wave with harmonics up to 8000Hz
apulse gbuzz kamp, ifrq, (2000/ifrq) - 1, 1, 1, 11
; turn it into more of a glottal waveform for formant filtering
; two low pass filters in series for a -12dB/octave drop
alpa tone apulse, ifrq*2
alpb tone alpa, ifrq*2
;alpb oscil kamp, kfrq/220, 11
;
; the formant resonator bank
; 0 - a, 1 - e, 2 - iy, 3 - o, 4 - oo, 5 - u, 6 - er, 7 - uh
; i am guessing that the bandwidth should be 1/10 the frequency
;
; first formant - table 1 freq - table 6 amp
kvowel line 0,p3,7.99999
kf1frq table kvowel,1
kf1db table kvowel,6
kf1amp = ampdb(kf1db+96)
areson1a reson alpb, kf1frq, kf1frq * p6, 1
areson1 reson areson1a, kf1frq, kf1frq * p6, 1
aform1 = areson1 * kf1amp
;
; second formant - tablei 2 freq - tablei 7 amp
kf2frq table kvowel,2
kf2db table kvowel,7
kf2amp = ampdb(kf2db+96)
areson2a reson alpb, kf2frq, kf2frq * p6, 1
areson2 reson areson2a, kf2frq, kf2frq * p6, 1
aform2 = areson2 * kf2amp
;
; third formant - tablei 3 freq - tablei 8 amp
kf3frq table kvowel,3
kf3amp table kvowel,8
areson3a reson alpb, kf3frq, kf3frq * p6, 1
areson3 reson areson3a, kf3frq, kf3frq * p6, 1
aform3 = areson3 * ampdb(kf3amp+96)
;
; forth formant - tablei 4 freq - tablei 9 amp
kf4frq table kvowel,4
kf4amp table kvowel,9
areson4a reson alpb, kf4frq, kf4frq * p6, 1
areson4 reson areson4a, kf4frq, kf4frq * p6, 1
aform4 = areson4 * ampdb(kf4amp+96)
;
; fifth formant - tablei 5 freq - tablei 10 amp
kf5frq table kvowel,5
kf5amp table kvowel,10
areson5a reson alpb, kf5frq, kf5frq * p6, 1
areson5 reson areson5a, kf5frq, kf5frq * p6, 1
aform5 = areson5 * ampdb(kf5amp+96)
;
; mix them all together and spit it out
;
amix = aform1 + aform2 + aform3 + aform4 + aform5
aout balance amix, alpb
out aout
endin
;; tables for male voice formants
; a e iy o oo u er uh
; table 1 - first formant frequency
f1 0 8 -2 609 400 238 325 360 415 300 400
; table 2 - second formant frequency
f2 0 8 -2 1000 1700 1741 700 750 1400 1600 1050
; table 3 - thrid formant frequency
f3 0 8 -2 2450 2300 2450 2550 2400 2200 2150 2200
; table 4 - forth formant frequency
f4 0 8 -2 2700 2900 2900 2850 2675 2800 2700 2650
; table 5 - fifth formant frequency
f5 0 8 -2 3240 3400 4000 3100 2950 3300 3100 3100
; table 6 - first formant amplitude
f6 0 8 -2 0 0 0 0 0 0 0 0
; table 7 - second formant amplitude
f7 0 8 -2 -6 -9 -20 -12 -12 -12 -14 -12
; table 8 - third formant amplitude
f8 0 8 -2 -12 -8 -16 -26 -29 -16 -12 -19
; table 9 - forth formant amplitude
f9 0 8 -2 -11 -11 -20 -22 -26 -18 -15 -20
; table 10 - fifth formant amplitude
f10 0 8 -2 -24 -19 -32 -28 -35 -27 -23 -29
; cosine for gbuzz
f11 0 32768 9 1 1 90
; MIDI file data
i1 0 16 50 127 .1
;i1 0 16 57 127 .1
zer>