diff options
Diffstat (limited to 'BUG7/instruments.udo')
-rw-r--r-- | BUG7/instruments.udo | 163 |
1 files changed, 155 insertions, 8 deletions
diff --git a/BUG7/instruments.udo b/BUG7/instruments.udo index 6c3bb31..4b1b46a 100644 --- a/BUG7/instruments.udo +++ b/BUG7/instruments.udo @@ -10,6 +10,7 @@ #include "wavetables.udo" #include "bussing.udo" +#include "oprepare.udo" #include "bid.udo" @@ -33,20 +34,16 @@ instr play_3031 kffrq port 0, 60/150, ifrq1 ; filter frequency a1 phasor kcps ; oscillator a1 = 1 - 2 * a1 - a1x butterbp a1, kffrq, kcps * 1.0 ; filters a1x = a1x * (2 + kffrq / kcps) ; correct amplitude a1 = a1x + a1 * 0.25 ; 0.5 a1 butterlp a1, kffrq - a1 = taninv(a1 * 2.5 * iamp) ; distortion ; 2.5 - keqf limit kffrq * 4, 10, sr * 0.48 ; EQ frequency a1 pareq a1 * 0.6, keqf, 4.0, 1.0, 2 a1 pareq a1, 50, 1.3, 0.6 a1 pareq a1, 130, 0.6, 0.6 - a1 = a1 * kamp * 0.8 - ;a1 *= line(0, p3, 1) + a1 = a1 * kamp * 1.2 aL, aR pan2 a1, random(0.3, 0.7) bus_mix("delay1", aL*0.3, aR*0.3) bus_mix("master", aL, aR) @@ -85,13 +82,65 @@ instr play_3032 a1 pareq a1 * 0.6, keqf, 4.0, 1.0, 2 a1 pareq a1, 50, 1.3, 0.6 a1 pareq a1, 130, 0.6, 0.6 - a1 = a1 * kamp * 0.8 - ;a1 *= line(0, p3, 1) + a1 = a1 * kamp * 1.2 aL, aR pan2 a1, random(0.3, 0.7) bus_mix("delay1", aL*0.3, aR*0.3) bus_mix("master", aL, aR) endin +instr play_vox + iamp = bid_getparameter(p4, p5, 2) * 2.4 * random(0.5, 1) + ifn = giopreparedfns[0] ;oprepare_getfn("vox") + apos phasor (1/(ftlen(ifn)/sr)) + ioffset1 random 0, 1 + ioffset2 random 0, 1 + ioffset3 random 0, 1 + ioffset4 random 0, 1 + aL1 table3 apos+ioffset1, ifn, 1 + aR1 table3 apos+ioffset2, ifn, 1 + aL2 table3 apos+ioffset3, ifn, 1 + aR2 table3 apos+ioffset4, ifn, 1 + kamp = linseg(0, p3*0.2, 1, p3*0.7, 1, p3*0.1, 0) + aL = aL1 + aL2 + aR = aR1 + aR2 + aL butterhp aL, 240 + aR butterhp aR, 240 + aL *= iamp * kamp + aR *= iamp * kamp + bus_mix("delay1", aL*random(0, 1), aR*random(0, 1)) + if (random(0, 1) > 0.99) then + bus_mix("delay2", aL*random(0, 1), aR*random(0, 1)) + endif + bus_mix("master", aL, aR) +endin + +instr play_vox2 + iamp = bid_getparameter(p4, p5, 2) * 4.4 * random(0.5, 1) + ispecial = bid_getparameter(p4, p5, 4) + ifn = giopreparedfns[0] ;oprepare_getfn("vox") + apos phasor -(1/(ftlen(ifn)/sr)) + a1 table3 apos, ifn, 1 + ir = 256 + f1 pvsanal a1, ir, ir/4, ir, 1 + if (ispecial = 1) then + kshift = -abs:k(oscil:k(500, 1)) + else + kshift init -random(100, 400) + endif + f2 pvshift f1, kshift, 300 + aL pvsynth f2 + aL butterhp aL, 700 + aL *= iamp * 4 + aR = aL + if (ispecial == 1) then + bus_mix("delay2", aL*0.8, aR*0.8) + else + bus_mix("delay1", aL, aR) + endif + ;bus_mix("master", aL, aR) +endin + + instr play_clap iamp = bid_getparameter(p4, p5, 2) * random(0.4, 1) * 0.8 aL noise 1, 0.3 @@ -243,7 +292,7 @@ instr play_kick ; 808 style kick aenv linseg 0, 0.07, 1 acps expsega 400, 0.07, 0.001, 1, 0.001 amix = (asig*0.7)*1*iamp - gkpump = min(rms(amix) * 7, 1) + ;gkpump = min(rms(amix) * 7, 1) aout1 pareq amix, 100, 0.01, 0.7 aout1 distort aout1, idist, gifnSquare aout1 pareq aout1, 50, 2, 0.4 @@ -253,6 +302,39 @@ instr play_kick ; 808 style kick bus_mix("kick", aout1, aout1) endin + + +instr play_kick2 ; 808 style kick + iamp = bid_getparameter(p4, p5, 2) + + idist = 0.2 ;= (i(gksection) == 1) ? 0.55 : 0.35 + xtratim 0.1 + krelease release + ktune init 1 + kmul transeg 0.2, p3*0.5, -15, 0.01, p3*0.5, 0, 0 + kbend transeg 0.5, 1.2, -4, 0, 1, 0, 0 + asig gbuzz 0.5, 50*octave(ktune)*semitone(kbend), 20, 1, kmul, gifnCosine + aenv transeg 1, p3-0.004, -6, 0 + aatt linseg 0, 0.004, 1 + asig = asig*aenv*aatt + aenv linseg 1, 0.07, 0 + acps expsega 400, 0.07, 0.001, 1, 0.001 + aimp oscili aenv, acps*octave(ktune*0.25) + amix = ((asig*0.7)+(aimp*0.35))*2*iamp + gkpump = min(rms(amix) * 7, 1) + aout1 pareq amix, 150, 0.2, 0.7 + aout1 distort aout1, idist, gifnSaw + aout1 pareq aout1, 350, 0.1, 0.7 + aout1 pareq aout1, 90, 1.4, 0.7 + ;aout1 pareq aout1, 190, 0.7, 0.6 + aout1 pareq aout1, 4900, 2, 0.7 + aout1 pareq aout1, 8900, 2, 0.7 + aout1 *= 1.3 + bus_mix("delay2", aout1, aout1) + bus_mix("master", aout1, aout1) +endin + + instr play_koffer iamp = bid_getparameter(p4, p5, 2) ifreq = cpsmidinn(tab_i(ftlen(gibid_chordfn) - 2, gibid_chordfn)+12) @@ -268,5 +350,70 @@ instr play_koffer endin +instr stringin + ifqc = cpsmidinn(p4) + iamp = 1 + idur = p3 + ifm1 = ifqc + ifm2 = ifqc*3 + ifm3 = ifqc*4 + indx1 = 7.5/log(ifqc) ;range from ca 2 to 1 + indx2 = 15/sqrt(ifqc) ;range from ca 2.6 to .5 + indx3 = 1.25/sqrt(ifqc) ;range from ca .2 to .038 + + irise = 0.1 + idec = 0.4 + inoisdur = .1 + ivibdel = 0.25 + ivibwth = 0.01 + ivibrte = 5.5 + + kvib init 0 + kvbctl linen 1,.5,p3-ivibdel,.1 ; vibrato control envelope + krnd randi .0075,2 ; random deviation vib width + kvib oscili kvbctl*ivibwth+krnd,ivibrte*kvbctl ; generator + + ktrans linseg 1,inoisdur,0,1,0 ; transient envelope + anoise randi ktrans*iamp/4,.2*ifqc ; attack noise... + attack oscili anoise,2000 ; ...centered around 2kHz + + amod1 oscili ifm1*(indx1+ktrans),ifm1 + amod2 oscili ifm2*(indx2+ktrans),ifm2 + amod3 oscili ifm3*(indx3+ktrans),ifm3 + asig oscili iamp,(ifqc+amod1+amod2+amod3)*(1+kvib) + asig linen (asig+attack),irise,idur,idec + asig butterhp asig, 800 + asig butterhp asig, 200 + kenv linseg 0, p3*0.5, 0.1, p3*0.3, 0.3, p3*0.1, 0.6, p3*0.1, 1 + asig *= kenv * (abs:k(oscil:k(0.9, random(0.01, 1), -1, random(0, 1)))) + asig *= 0.1 + aL, aR pan2 asig, abs:k(oscil:k(1, random(0.1, 3), -1, random(0, 1))) + bus_mix("master", aL, aR) +endin + +/* + Convenience opcode for playing current chord on given instrument, passing p4 as note and p5 as amp + + chordinstrument Sinstrument + + Sinstrument the instrument name + ipos position in pattern + idataindex section specific data index; pointer to ftable +*/ +opcode chordinstrument, 0, Sii + Sinstrument, ipos, idataindex xin + iamp = bid_getparameter(ipos, idataindex, 2) + index = 1 ; index 0 is chordgroup length + while (index < ftlen(gibid_chordfn)) do + event_i "i", Sinstrument, 0, p3, tab_i(index, gibid_chordfn), iamp + index += 1 + od + +endop + +instr play_stringchord + chordinstrument "stringin", p4, p5 + turnoff +endin #end |