;===========================================; ; Dodge/Risset Endless Glissando Instrument ; ; Coded by Russell Pinkston ; ;================================================; sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 instr 1 iampfn = 2 ;bell-shaped amplitude function iglissfn = 3 ;10-octave gliss control function ifreq = p5 ;p5 can either by pch or cps if (ifreq >= 20) igoto continue ;assume ifreq in cps if > 20 ifreq = cpspch(p5) ;p5 must be in oct.pch continue: kphase phasor 1/p6 ;p6 is duration of complete 10-octave cycle kenvlp linen p4,1,p3,1 ;Ten octaves of sine waves; each oscili gets amp and cps args from tables kamp1 table kphase,iampfn,1,0,1 ;kphase used for both tables kcps1 tablei kphase,iglissfn,1,0,1 asig1 oscili kamp1,kcps1*ifreq,1 kamp2 table kphase+.1,iampfn,1,0,1 ;kphase is offset by 10% kcps2 tablei kphase+.1,iglissfn,1,0,1 asig2 oscili kamp2,kcps2*ifreq,1 kamp3 table kphase+.2,iampfn,1,0,1 ;kphase offset by 20% kcps3 tablei kphase+.2,iglissfn,1,0,1 asig3 oscili kamp3,kcps3*ifreq,1 kamp4 table kphase+.3,iampfn,1,0,1 ;kphase offset by 30% kcps4 tablei kphase+.3,iglissfn,1,0,1 asig4 oscili kamp4,kcps4*ifreq,1 kamp5 table kphase+.4,iampfn,1,0,1 ;kphase offset by 40% kcps5 tablei kphase+.4,iglissfn,1,0,1 asig5 oscili kamp5,kcps5*ifreq,1 kamp6 table kphase+.5,iampfn,1,0,1 ;kphase offset by 50% kcps6 tablei kphase+.5,iglissfn,1,0,1 asig6 oscili kamp6,kcps6*ifreq,1 kamp7 table kphase+.6,iampfn,1,0,1 ;kphase offset by 60% kcps7 tablei kphase+.6,iglissfn,1,0,1 asig7 oscili kamp7,kcps7*ifreq,1 kamp8 table kphase+.7,iampfn,1,0,1 ;kphase offset by 70% kcps8 tablei kphase+.7,iglissfn,1,0,1 asig8 oscili kamp8,kcps8*ifreq,1 kamp9 table kphase+.8,iampfn,1,0,1 ;kphase offset by 80% kcps9 tablei kphase+.8,iglissfn,1,0,1 asig9 oscili kamp9,kcps9*ifreq,1 kamp10 table kphase+.9,iampfn,1,0,1 ;kphase offset by 90% kcps10 tablei kphase+.9,iglissfn,1,0,1 asig10 oscili kamp10,kcps10*ifreq,1 asum = asig1+asig2+asig3+asig4+asig5+asig6+asig7+asig8+asig9+asig10 out asum*kenvlp ;envelope & output the sum of all 10 sine waves endin
; Endless Glissando Score f01 0 512 10 1 ; Use a Gaussian window function to approximate Risset's amplitude (bell) function f02 0 2048 20 6 1 0 ; Generate the 10-octave gliss function given in Dodge f03 0 513 5 1 512 .0009766 ; Generate 60 seconds of endless glissando with a 120 second cycle time i01 0 60 15000 6000 120 e