sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 instr 1 ; sine wave with linear envelope - fast attack and release, hold at .8 a2 linseg 0,.05,1,.1,.8,p3-.2,.7,.05,0 a1 oscil p4*a2, p5, 1 out a1 endin instr 3 ; complex wave with cpspch and linear envelope - fast att and rel, hold at .8 a2 linseg 0,.1,1,.1,.6,p3-.25,.7,.05,0 a1 oscil p4*a2, cpspch(p5), 2 out a1 endin instr 4 ; fp attack with cpspch and hold at .6-.7, softened sawtooth a2 linseg 0, .1, 1, .1, .6, p3-.4, .7, .2, 0 a1 oscil p4*a2, cpspch(p5), 3 out a1 endin instr 2 ; pitch slide instrument with vib at different rates in both pitch and dynamics, holds between .8 and .10, envelope dependent upon length of note a6 oscil .1, p7, 1 ; oscillator controlling dynamics vib, p7=rate of vibrato per second a7 oscil p8, p9, 1 ; oscillator controlling pitch vib, p8=amount of vibrato in hertz, p9=rate of vibrato per second a3 linseg 0,.3*p3, .9, .8*p3, .7, .1*p3, 0 ; envelope dependent on note length a4 linseg cpspch(p5), .2*p3, cpspch(p5), .6*p3, cpspch(p6), .2*p3, cpspch(p6) ; causes note to hold 2/10 on orig sound, move linearly from p5 to p6, hold 2/10 on final sound a5 poscil p4*a3*(a6+1), a4+a7, p10 ; oscillator out a5 endin instr 5 ; slow rise instrument dependent on duration, based on 2 a6 oscil .1, p7, 1 a7 oscil p8, p9, 1 a3 linseg 0,.6*p3, .9, .2*p3, .7, .2*p3, 0 a4 linseg cpspch(p5), .1*p3, cpspch(p5), .6*p3, cpspch(p6), .3*p3, cpspch(p6) a5 poscil p4*a3*(a6+1), a4+a7, p10 out a5 endin instr 101 a1 linseg 0, .05*p3, 1, .05*p3, .7, .9*p3, 0 a2 poscil p4*a1, cpspch(p5), 4 out a2 endin opcode SerialOscil, a, iii ipno, iamp, ifreq xin ;input partial number, amplitude, pitch iamp = (ifreq*ipno > 22050 ? 0:iamp) ;if partial exceeds nyquist, cut islope table ipno, 101 ;get m from table 101 iconst table ipno, 102 ;get b from table 102 ipstr = islope*ifreq+iconst ;partial strength = m(freq)+b ipstr = (ipstr < 0 ? 0:ipstr) ;if negative, set to zero ipstr = (ipstr*iamp > 16000 ? 16000/iamp:ipstr) ;if over 16000 amp, scale back to 16000 print ipno print ipstr kenv linen 1, .033*p3, p3, .033*p3 ;envelope a1 oscil kenv*iamp*ipstr, ifreq*ipno, 1 ;oscillator xout a1 endop instr 1001 a1 SerialOscil 1, p4, cpspch(p5) a2 SerialOscil 2, p4, cpspch(p5) a3 SerialOscil 3, p4, cpspch(p5) a4 SerialOscil 4, p4, cpspch(p5) a5 SerialOscil 5, p4, cpspch(p5) a6 SerialOscil 6, p4, cpspch(p5) a7 SerialOscil 7, p4, cpspch(p5) a8 SerialOscil 8, p4, cpspch(p5) a9 SerialOscil 9, p4, cpspch(p5) a10 SerialOscil 10, p4, cpspch(p5) a11 SerialOscil 11, p4, cpspch(p5) a12 SerialOscil 12, p4, cpspch(p5) a13 SerialOscil 13, p4, cpspch(p5) a14 SerialOscil 14, p4, cpspch(p5) a15 SerialOscil 15, p4, cpspch(p5) a16 SerialOscil 16, p4, cpspch(p5) a17 SerialOscil 17, p4, cpspch(p5) a18 SerialOscil 18, p4, cpspch(p5) a19 SerialOscil 19, p4, cpspch(p5) a20 SerialOscil 20, p4, cpspch(p5) a21 SerialOscil 21, p4, cpspch(p5) a22 SerialOscil 22, p4, cpspch(p5) a23 SerialOscil 23, p4, cpspch(p5) a24 SerialOscil 24, p4, cpspch(p5) asum sum a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24 out asum endin instr 1002 ;bell idur = p3 iamp = p4 ifreq = cpspch(p5) irise = .05;(idur>1 ? .02:idur*.02) idec1 = (idur>1 ? .1:idur*.1) idec2 = (idur>1 ? .1:idur*.1) isteady = idur-(irise+idec1+idec2) istdec = (idur>6 ? .01:-.165*idur+1) ibw = .001*800/ifreq kenv expseg .001, irise, 1, idec1, .8, isteady, istdec, idec2, .001 ;kenv envlpx 1, .1, idur, .05, 1, .7, .01 asig rand kenv*iamp ares1 reson asig*.44, ifreq, ibw, 2 ares2 reson asig*.22, ifreq*3, ibw, 2 ares3 reson asig*.14, ifreq*7, ibw, 2 ares4 reson asig*.11, ifreq*11, ibw, 2 ares5 reson asig*.09, ifreq*15, ibw, 2 aout = ares1+ares2+ares3+ares4+ares5 abal balance aout, asig out abal endin