aboutsummaryrefslogtreecommitdiff
path: root/BUG7/instruments.udo
diff options
context:
space:
mode:
Diffstat (limited to 'BUG7/instruments.udo')
-rw-r--r--BUG7/instruments.udo163
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