; mc.orc Rahn July 1992 sr=22050 kr=2205 ksmps=10 nchnls=2 ; --------------------------------------------------------- instr 1 ; mix ;inputs stereo soundfile and outputs only to "outs" with amp ;p1 insno p2 st p3 dur ;p4 soundin.# p5 skptime p6 amp a1, a2 soundin p4, p5 outs (a1 * p6), (a2 * p6) endin ; endin 1 --------------------------------------------------- ; ------------------------------------------------------------ instr 2 ; mixlx ; input is stereo soundfile, outputs enveloped massaged stereo ; p1 insno p2 st p3 dur p4 soundin p5 skptime ; p6 init in left [0 1] p7 kstcps ; p8 nfenv nb curve over entire note using oscil1 ; p9 overall amp ; p10 pct of signal reverbed [0 1] ; p11 rvb time a1, a2 soundin p4, p5 kenv oscil1i 0,1,p3,p8 asig1 = a1 * kenv * p9 ; p9 is amp asig2 = a2 * kenv * p9 ; stereo ist1 = p6 ; [0 1] initial portion in left ch istcps = p7/2 istfn = 1 ; sine or linear sine ; sets phs so number ist1 means fraction in left channel istphs = ist1*.25 ; so 0 -> 1, .25 more -> 0 istphs1 = (istphs < .5 ? istphs:(istphs-.5)) ; amod(istphs,.5) istphs2 = istphs1 + .25 ; right channel ; stereo kst1 oscili 1, istcps, istfn, istphs1 kst2 oscili 1, istcps, istfn, istphs2 ; rotate channels (works great!) aleft = asig1*kst1 + asig2*kst2 aright = asig1*kst2 + asig2*kst1 if p10 == 0 goto noreverb ; save cpu cycles if p11 == 0 goto noreverb ; save cpu cycles idry = (1 - p10) arev1 = aleft*p10 arev2 = aright*p10 a1 reverb arev1,p11 a2 reverb arev2,p11 asig1 balance (a1 + (aleft*idry)) , aleft asig2 balance (a2 + (aright*idry)), aright outs asig2, asig1 if p11 > 0 goto reverbend noreverb: outs aright, aleft reverbend: endin ; endin 2 ------------------------------------------------------------ ; fmlx insno 3 ---------------------------------------------------------- ; modified fmlx.orc for mc.orc rahn ; fmlx assumed functions: ; f1=sine f2=exp up f3=line up f4=exp down f5=line down f99=triangle wave ; fmlx instrument pfields: ; p1 insno p2 start p3 dur p4 amp p5 8ve.pc ; p6 ratio m/c p7 fmi1 p8 fmi2 p9 devfunc [1] ; p10=rise p11=decay p12=nf for env [2] p13=iatss p14=iatdec p15=ixmod ; p16 ratio2 p17 ratiofn [5] p18 ratiocps ; p19 dur for index sweep [dur] ; p20 gliss interval in semitones (ets) ; p21 cps for gliss [1/dur] p22 glissfn [1] ; p23 cresc factor p24 cresc dur [dur] p25 crescfn [3] ; p26 stereo initial portion in left channel [0] p27 stereo cps [0] ; p28 rvt p29 pctrvb p30 fmstcps [0] ; p31 herz for pitch of carrier = hz from pitch of p5 ; p32 ets [12] instr 3 idur = p3 idurcps = 1./idur iamp = p4 ;; icpscar = cpspch (p5) icpscar = p31 ; herz equivalent of p5 calculated in lisp ; if no herz from Lisp, take from p5 8ve.pc iets = p32 iets = (iets == 0 ? 12:iets) icpscar = (icpscar = 0 ? cpspch(p5):icpscar) iratio = p6 ; ratio is M/C ifmi1 = p7 ifmi2 = p8 idevfunc= p9 ; positive curve to follow from fmi1 to fmi2 idevfunc= (idevfunc == 0 ? 1:idevfunc) ; default 1 ifmi2 = (ifmi2 == 0 ? ifmi1:ifmi2) ;sets default fmi2 to fmi1 idif = ifmi2 - ifmi1 ; fmi1 < fmi2 -- curve determines up or down icpsmod = icpscar*iratio ; ratio is M/C irange = abs(idif * icpsmod) idev = abs(ifmi1 * icpsmod) infenv = (p12 == 0 ? 2:p12) ; ratio sweep iratio2 = p16 ; ratio at end iratio2 = (iratio2 == 0 ? iratio:iratio2) ; defaults to ratio1 iratdif = abs(iratio - iratio2) ; ratio1 > ratio2 iratfn = p17 ; positive curve for ratio sweep iratfn = (iratfn == 0 ? 5:iratfn) ; defaults to 5=line down iratcps = p18 ; dur for ratio sweep iratcps = (iratcps == 0 ? idurcps:iratcps) ; defaults to 1/idur ; index extras inddur = p19 ; dur for index sweep inddur = (inddur == 0 ? idur:inddur) ; defaults to idur ; glissando iglint = p20/iets ; iglint is in ets semitones iglcps = p21 ; cps for glissando iglcps = (iglcps == 0 ? 1/idur:iglcps) ; default idur iglcps = (iglint == 0 ? 0:iglcps) ; iglcps 0 if iglint 0 iglfn = p22 ; fn for glissando iglfn = (iglfn == 0 ? 1:iglfn) ; default 1=sine ; crescendo/diminuendo icrint = p23 ; interval is multiplier icrdur = p24 icrdur = (icrdur == 0 ? idur:icrdur) ; default idur icrcps = 1./icrdur icrcps = (icrint == 0 ? 0:icrcps) ; zero if zero interval icrfn = p25 icrfn = (icrfn == 0 ? 3:icrfn) ; stereo ist1 = p26 ; initial portion in left ch kstcps = (p27 + p30)/2 istfn = 1 ; sine or linear sine ; sets phs so number ist1 means fraction in left channel istphs = ist1*.25 ; so 0 -> 1, .25 more -> 0 istphs1 = (istphs < .5 ? istphs:(istphs-.5)) ; amod(istphs,.5) istphs2 = istphs1 + .25 ; right channel ; execution ; envelope kamp envlpx iamp, p10, idur, p11, infenv, p13, p14, p15 ; glissando aglexp oscil iglint, iglcps, iglfn aglexp = log(2) * aglexp aglfac = exp(aglexp) ; = 2^oscil in this brain-damaged language ; fm portion ; ratio sweep if iratdif == 0 goto noratiomod kratio oscil iratdif, iratcps, iratfn kratio = kratio + iratio2 kcpsmod = icpscar*kratio ; ratio is M/C krange = abs(idif * kcpsmod) kdev = abs(ifmi1 * kcpsmod) ; fm kampmod oscil1 0, krange + kdev, idur, idevfunc amodout oscil kampmod, kcpsmod * aglfac, 1 goto aftermod ; if no modulation of ratio noratiomod: kampmod oscil1 0, irange, inddur, idevfunc ; used to be idur amodout oscil kampmod+idev, icpsmod * aglfac, 1 ; add gliss-modulated carrier to (gliss-modulated) fm aftermod: acps = amodout + (icpscar * aglfac) ; fm signal with gliss asig oscil kamp, acps, 1 ; crescendo if icrint == 0 goto nocresc asig oscil asig*icrint, icrcps, icrfn nocresc: ; stereo kst1 oscil 1, kstcps, istfn, istphs1 kst2 oscil 1, kstcps, istfn, istphs2 asig1 = asig*kst1 asig2 = asig*kst2 ; reverb p28 is percentage of signal reverbed, p29 is reverb time if p28 == 0 goto noreverb ; save cpu cycles if p29 == 0 goto noreverb ; save cpu cycles idry = (1 - p28) arev1 = asig1*p28 arev2 = asig2*p28 a1 reverb arev1,p29 a2 reverb arev2,p29 aleft balance (a1 + (asig1*idry)), asig1 aright balance (a2 + (asig2*idry)), asig2 outs aright, aleft goto reverbend noreverb: outs asig2, asig1 reverbend: endin ; end fm, insno 3------------------------------------------------ ; addin insno 4 ---------------------------------------------------------- ; luxury oscil for additive synthesis ; addin assumed functions: ; f1=sine f2=exp up f3=line up f4=exp down f5=line down f99=triangle wave ; instrument pfields: ; p1 insno p2 start p3 dur p4 amp p5 Hz ; p6=rise p7=decay p8=nf for env [2] p9=iatss p10=iatdec p11=ixmod ; p12 gliss interval in semitones p13 cps for gliss [1/dur] p14 glissfn [1] ; p15 cresc factor p16 cresc dur [dur] p17 crescfn [3] ; p18 stereo initial portion in right channel [0] p19 stereo cps [0] ; p20 rvt p21 pctrvb ; p22 ets (number of equal-tempered steps in octave) ; p23 and p24 ; left and right stereo limits (to compress range of panning) [0 1] ; p25 magnitude of random jitter ; p26 seed for random ; p27 ets instr 4 idur = p3 idurcps = 1./idur iamp = p4 icps = p5 ; herz from lisp irise = p6 idecay = p7 infenv = p8 infenv = (p8 == 0 ? 2:p8) iatss = p9 iatdec = p10 ixmod = p11 irvb = p20 ipctrvb = p21 idry = (1 - ipctrvb) iets = p22 ; ets from mods in Lisp iets = (iets == 0 ? 12:iets) ; glissando iglint = p12/iets ; iglint is in semitones iglcps = p13 ; cps for glissando iglcps = (iglcps == 0 ? 1/idur:1/iglcps) ; default idur iglcps = (iglint == 0 ? 0:iglcps) ; iglcps 0 if iglint 0 iglfn = p14 ; fn for glissando iglfn = (iglfn == 0 ? 1:iglfn) ; default 1=sine ; crescendo/diminuendo icrint = p15 ; interval is multiplier icrdur = p16 icrdur = (icrdur == 0 ? idur:icrdur) ; default idur icrcps = 1./icrdur icrcps = (icrint == 0 ? 0:icrcps) ; zero if zero interval icrfn = p17 icrfn = (icrfn == 0 ? 3:icrfn) ; stereo ist1 = p18 ; initial portion in right ch kstcps = p19/2 ; compensate for istfn period istfn = 99 ; sine or linear sine ; sets phs so number ist1 means fraction in left channel istphs = ist1*.25 ; so 0 -> 1, .25 more -> 0 istphs1 = (istphs < .5 ? istphs:(istphs-.5)); quasi mod(istphs,.5) istphs2 = istphs1 + .25 ; right channel ; limits between 0 and 1 to compress panning space if p23 > p24 goto reverselim ; enforce istrightlim >= istleftlim istleftlim = p23 istrightlim = p24 goto contlim reverselim: istleftlim = p24 istrightlim = p23 ; should be >= istleftlim contlim: ; set defaults [0 1] if istrightlim=0 istrightlim = (istrightlim == 0 ? 1:istrightlim) istleftlim = (istrightlim == 0 ? 0:istleftlim) istdiff = istrightlim - istleftlim ; jitter krandlim = p25 iseed = p26 ; execution ; envelope kamp envlpx iamp, irise, idur, idecay, infenv, iatss, iatdec, ixmod ; glissando aglexp oscil iglint, iglcps, iglfn aglexp = log(2) * aglexp aglfac = exp(aglexp) ; = 2^oscil in this brain-damaged language ; gliss-modulated cps acps = icps * aglfac ;; add frequency jitter between +-krandlim% of signal to signal ;; nb krandlim should be small -- < .01 acpsr rand krandlim, iseed acps = acps + (acpsr*acps) ; sine signal with gliss asig oscil kamp, acps, 1 ; crescendo if icrint == 0 goto nocresc asig oscil asig*icrint, icrcps, icrfn ;; add amplitude jitter between +-krandlim% of signal to signal ;; nb krandlim should be small -- < .01 ;;asigr rand krandlim, iseed ;;asig = asig + (asigr*asig) nocresc: ; stereo kst1 oscil istdiff, kstcps, istfn, istphs2 ;kst2 oscil istdiff, kstcps, istfn, istphs1 kst1 = kst1+istleftlim kst2 = 1-kst1 asig1 = asig*kst1 asig2 = asig*kst2 ; reverb if irvb == 0 goto noreverb ; save cpu cycles if ipctrvb == 0 goto noreverb ; save cpu cycles arev1 = asig1*ipctrvb arev2 = asig2*ipctrvb a1 reverb arev1,irvb a2 reverb arev2,irvb aleft balance (a1 + (asig1*idry)), asig1 aright balance (a2 + (asig2*idry)), asig2 outs aright, aleft goto reverbend noreverb: outs asig2, asig1 reverbend: endin ; end addin, insno 4------------------------------------------------