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>