For our final instrument, we will employ three unique synthesis methods-Physical Modeling, Formant-Wave Synthesis, and Non-linear Distortion. Three of Csound's most powerful unit generators-pluck, fof, and foscil, make this complex task a fairly simple one. The Reference Manual describes these as follows:
a1 pluck kamp, kcps, icps, ifn, imeth [, iparm1, iparm2]
pluck simulates the sound of naturally decaying plucked strings by filling a cyclic decay buffer with noise and then smoothing it over time according to one of several methods. The unit is based on the Karplus-Strong algorithm.
a2 fof xamp, xfund, xform, koct, kband, kris, kdur kdec, iolaps, ifna, ifnb, itotdur[, iphs][, ifmode]
fof simulates the sound of the male voice by producing a set of harmonically related partials (a formant region) whose spectral envelope can be controlled over time. It is a special form of granular synthesis, based on the CHANT program from IRCAM by Xavier Rodet et al.
a1 foscil xamp, kcps, kcar, kmod, kndx, ifn [, iphs]
foscil is a composite unit which banks two oscillators in a simple FM configuration, wherein the audio-rate output of one (the "modulator") is used to modulate the frequency input of another (the "carrier.")
The plan for our instrument is to have the plucked string attack dissolve into an FM sustain which transforms into a vocal release. The orchestra and score are as follows:
instr 13 ; toot13.orc iamp = ampdb(p4) / 2 ; amplitude, scaled for two sources ipluckamp = p6 ; % of total amp, 1=dB amp as in p4 ipluckdur = p7*p3 ; % of total dur, 1=entire dur of note ipluckoff = p3 - ipluckdur ifmamp = p8 ; % of total amp, 1=dB amp as in p4 ifmrise = p9*p3 ; % of total dur, 1=entire dur of note ifmdec = p10*p3 ; % of total duration ifmoff = p3 - (ifmrise + ifmdec) index = p11 ivibdepth = p12 ivibrate = p13 iformantamp = p14 ; % of total amp, 1=dB amp as in p4 iformantrise = p15*p3 ; % of total dur, 1=entire dur of note iformantdec = p3 - iformantrise kpluck linseg ipluckamp, ipluckdur, 0, ipluckoff, 0 apluck1 pluck iamp, p5, p5, 0, 1 apluck2 pluck iamp, p5*1.003, p5*1.003, 0, 1 apluck = kpluck * (apluck1+apluck2) kfm linseg 0, ifmrise, ifmamp, ifmdec, 0, ifmoff, 0 kndx = kfm * index afm1 foscil iamp, p5, 1, 2, kndx, 1 afm2 foscil iamp, p5*1.003, 1.003, 2.003, kndx, 1 afm = kfm * (afm1+afm2) kfrmnt linseg 0, iformantrise, iformantamp, iformantdec, 0 kvib oscil ivibdepth,ivibrate,1 afrmnt1 fof iamp, p5+kvib, 650, 0, 40, .003, .017, .007, 4, 1, 2, p3 afrmnt2 fof iamp, (p5*1.001)+kvib*.009, 650, 0, 40, .003,.017,.007, 10,1,2,p3 aformnt = kfrmnt * (afrmnt1+afrmnt2) out apluck + afm + aformnt endin f1 0 8192 10 1 ; sine wave f2 0 2048 19 .5 1 270 1 ; sigmoid rise ;ins st dr mp frq plkmp plkdr fmp fmris fmdec indx vbdp vbrt frmp fris i13 0 5 80 200 .8 .3 .7 .2 .35 8 1 5 3 .5 i13 + 8 80 100 . .4 .7 .35 .35 7 1 6 3 .7 i13 . 13 80 50 . .3 .7 .2 .4 6 1 4 3 .6