;ORC strings.orc==========================================================================; ; Schottstaedt FM String Instrument from Dodge ; ; ; ;p4 = amp p5 = pch p6 = rise p7 = dec p8 = vibdel p9 = vibwth p10 = vibrte ; ;==========================================================================; sr = 22000 kr = 1100 ksmps = 20 nchnls = 1 instr 1 icps cpsmidi iamp ampmidi 512, 1 ifm1 = icps ifm2 = icps*3 ifm3 = icps*4 indx1 = 7.5/log(icps) ;range from ca 2 to 1 indx2 = 15/sqrt(icps) ;range from ca 2.6 to .5 indx3 = 1.25/sqrt(icps) ;range from ca .2 to .038 kvib init 0 timout 0,.75,transient ;delays vibrato for p8 seconds kvbctl linen 1,.5,p3-.75,.1 ;vibrato control envelope krnd randi .0075,15 ;random deviation in vib width kvib oscili kvbctl*.03+krnd,5.5*kvbctl,1 ;vibrato generator transient: timout .2,p3,continue ;execute for .2 secs only ktrans linseg 1,.2,0,1,0 ;transient envelope anoise randi ktrans,.2*icps ;noise... attack oscil anoise,2000,1 ;...centered around 2kHz continue: amod1 oscili ifm1*(indx1+ktrans),ifm1,1 amod2 oscili ifm2*(indx2+ktrans),ifm2,1 amod3 oscili ifm3*(indx3+ktrans),ifm3,1 asig oscili iamp,(icps+amod1+amod2+amod3)*(1+kvib),1 asig linen asig+attack,.2,p3,.2 out asig endin instr 2 knote cpsmidib iveloc ampmidi 1 kgate linenr iveloc/2, 0, .2, .01 kva line 0, 3, .02 kv oscil knote*kva, 4, 3 kf linseg 2200, 1.5, 1200, .5, 880, 5, 440 k1 linseg 8000, .5, 8000, 5, 2000 k2 line 700, .5, 700 a5 oscil k2, knote, 3 a6 oscil k2, knote*1.499, 3 a1 oscil k1, knote*2.001 + a5 + kv, 3 a2 oscil k1, knote*1.502 + a6 + kv, 3 a2 butterlp a2 + a1, kf out a2 * kgate endin instr 99 ;allows complex ADSR envelope with MIDI events inum notnum icps cpsmidi iamp ampmidi 4000 ; ;------- complex envelope block ------ xtratim 1 ;extra-time, i.e. release dur krel init 0 krel release ;outputs release-stage flag (0 or 1 values) if (krel = .5) kgoto rel ;if in release-stage goto release section ; ;************ attack and sustain section *********** kmp1 linseg 0, .03, 1, .05, 1, .07, 0, .08, .5, 4, 1, 50, 1 kmp = kmp1*iamp kgoto done ; ;--------- release section -------- rel: kmp2 linseg 1, .3, .2, .7, 0 kmp = kmp1*kmp2*iamp done: ;------ a1 oscili kmp, icps, 1 out a1 endin