#ifndef UDO_INSTRUMENTS #define UDO_INSTRUMENTS ## /* Debugger - Unfixed Bugs : BUG #8 Sound generators Names should correspond to those used in BID file, prepended with play_ */ #include "wavetables.udo" #include "bussing.udo" #include "bid.udo" instr play_bass iamp = bid_getparameter(p4, p5, 2) imode = bid_getparameter(p4, p5, 4) if (imode == 0) then ifreq = cpsmidinn(table(1, gibid_chordfn, 0, 0, 1) - 48) k1 linseg 2.1, p3*0.2, 2, p3*0.8, 2 k2 line 10, p3, 0 else ifreq = cpsmidinn(table(random(1, 4), gibid_chordfn, 0, 0, 1) - 48) if (ifreq < 20) then ifreq *= 2 endif k1 init round(random(1, 2)) k2 init random(2, 4) endif kamp linseg 1, p3*0.1, 0.6, p3*0.9, 0 aL foscil 1, ifreq, 4, k1, k2, gifnSine aR foscil 1, ifreq, 3.9, k1, k2, gifnSine aL pareq aL*1.3, 200, 0.3, 0.7 aR pareq aR*1.3, 200, 0.3, 0.7 if (imode == 0) then aL butterlp aL, 150 aR butterlp aR, 150 endif bus_mix("master", aL*kamp*iamp, aR*kamp*iamp) endin instr play_mel1 iamp = bid_getparameter(p4, p5, 2) * 1.5 ifreq = cpsmidinn(table(random(1, 4), gibid_chordfn, 0, 0, 1)) kamp init 1 aL wgbowedbar 1, ifreq, 0.5, 0.2, 0.995 aR wgbowedbar 1, ifreq, 0.3, 0.5, 0.995 bus_mix("master", aL*kamp*iamp, aR*kamp*iamp) endin instr play_mel2 iamp = bid_getparameter(p4, p5, 2) ifreq = cpsmidinn(table(random(1, 4), gibid_chordfn, 0, 0, 1) - 24) k1 linseg 1.1, p3*0.2, 2, p3*0.8, 2 k2 line 1, p3, 6 kamp linseg 1, p3*0.1, 0.6, p3*0.9, 0 aL foscil 1, ifreq, 4, k1, k2, gifnSine aR foscil 1, ifreq, 3.9, k1, k2, gifnSine aL pareq aL, 200, 0.3, 0.7 aR pareq aR, 200, 0.3, 0.7 bus_mix("master", aL*kamp*iamp, aR*kamp*iamp) endin instr play_shaker iamp = bid_getparameter(p4, p5, 2) * 0.5 p3 = 0.04 kamp linseg iamp, p3, 0 aL shaker kamp, random(4000, 4500), 4, 0.999, 4 aR shaker kamp, random(4000, 4500), 4, 0.999, 4 bus_mix("master", aL, aR) endin /* tb303 style synth */ instr play_303 iamp = bid_getparameter(p4, p5, 2) inote1 = tab_i(random(1, ftlen(gibid_chordfn) - 3), gibid_chordfn) ifrq1 = random(200, 600) kamp linseg 1, p3*0.9, 1, p3*0.1, 0 ifreq1 = cpsmidinn(inote1) kcps init ifreq1 kffrq init ifrq1 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 * 4 * iamp) ; distortion ; 2.5 keqf limit kffrq * 4, 10, sr * 0.48 ; EQ frequency a1 pareq a1 * 0.4, keqf, 4.0, 1.0, 2 a1 butterhp a1, 70 a1 = a1 * kamp * 0.62 aL, aR pan2 a1, random(0.2, 0.8) bus_mix("master", aL, aR) endin /* clap */ gifnClap ftgen 0, 0, 1024, 7, 1, 128, 0, 1, 0.9, 128, 0, 1, 0.8, 128, 0, 1, 0.7, 128, 0, 1, 0.5, 256, 0.1, 256, 0 instr play_clap iamp = bid_getparameter(p4, p5, 2) * 1.3 p3 = (p3 <= 0.2) ? 0.07 : p3 kbetaL line 0.9, p3, 0.01 kbetaR line 0.8, p3, 0.01 aL noise 1, kbetaL aR noise 1, kbetaR kfreqL line 1100+random(-100, 100), p3, 2500+random(-100, 100) kfreqR line 1100+random(-100, 100), p3, 2500+random(-100, 100) apt oscil 1, line(50, p3, 2000) apt2 oscil 1, line(500, p3, 20) aL *= apt * apt2 aR *= apt * apt2 aL butterbp aL, kfreqL, 1000 aR butterbp aR, kfreqR, 1000 kndx phasor 1/p3 kamp tab kndx, gifnClap, 1 kamp *= linseg(1, p3*0.5, 0.2, p3*0.5, 0) * iamp * 8 aL *= kamp aR *= kamp bus_mix("master", aL, aR) /* p3 = 0.03 kbt linseg 0.5, p3, -0.5 aL noise 1, kbt aR noise 1, kbt+0.1 kbpf linseg 1500, p3, 100 kbnp linseg 800, p3, 100 aL butterbp aL, kbpf, kbnp aR butterbp aR, kbpf, kbnp aL taninv aL*7 aR taninv aR*7 kamp linseg 1, p3*0.1, 0.3, p3*0.1, 0.9, p3*0.1, 0.3, p3*0.1, 0.8, p3*0.1, 0.2, p3*0.1, 0.7, p3*0.4, 0 kamp2 = abs(oscil(0.5, 4)) + 0.5 aL *= kamp * iamp aR *= kamp * iamp bus_mix("delay2", aL, aR) bus_mix("master", aL, aR) */ endin /* Closed lower frequency hi-hat */ instr play_hat1 iamp = bid_getparameter(p4, p5, 2) idel = random(0.001, 0.02) xtratim idel p3 = random(0.01, 0.04) ifreq = 300 aenv expsega .1, .0005, 1, p3 - .0005, .01 asqr1 oscil 1, ifreq, gifnSaw, -1 asqr2 oscil 1, ifreq*1.4471, gifnSquare, -1 asqr3 oscil 1, ifreq*1.6170, gifnSaw, -1 asqr4 oscil 1, ifreq*1.9265, gifnSaw, -1 asqr5 oscil 1, ifreq*2.5028, gifnSaw, -1 asqr6 oscil 1, ifreq*2.6637, gifnSaw, -1 a808L sum asqr1, asqr2, asqr3, asqr4, asqr5, asqr6 a808L butterhp a808L, 4270 ;a808L butterhp a808L, 4270 aoutL = a808L * aenv * iamp aoutL delay aoutL, idel asqr1 oscil 1, ifreq, gifnSaw, -1 asqr2 oscil 1, ifreq*1.3471, gifnSaw, -1 asqr3 oscil 1, ifreq*1.6470, gifnSaw, -1 asqr4 oscil 1, ifreq*1.8765, gifnSaw, -1 asqr5 oscil 1, ifreq*2.4028, gifnSaw, -1 asqr6 oscil 1, ifreq*2.5637, gifnSaw, -1 a808R sum asqr1, asqr2, asqr3, asqr4, asqr5, asqr6 a808R butterhp a808R, 4270 ;a808L butterhp a808L, 4270 aoutR = a808R * aenv * iamp aoutR delay aoutR, idel bus_mix("master", aoutL, aoutR) endin instr play_hat2 iamp = bid_getparameter(p4, p5, 2) imode = bid_getparameter(p4, p5, 4) idel1 = random(0.005, 0.02) idel2 = random(0.005, 0.02) xtratim(max:i(idel1, idel2)) kfreq = abs(oscil(50, 10)) + 800 if (imode == 1) then kfreq linseg 100, p3, 1000 endif aenv expsega .1, .0005, 1, p3 - .0005, .01 asqr1 oscil 1, kfreq, gifnSquare, -1 asqr2 oscil 1, kfreq*1.4471, gifnSquare, -1 asqr3 oscil 1, kfreq*1.6170, gifnSquare, -1 asqr4 oscil 1, kfreq*1.9265, gifnSquare, -1 asqr5 oscil 1, kfreq*2.5028, gifnSquare, -1 asqr6 oscil 1, kfreq*2.6637, gifnSquare, -1 a808 sum asqr1, asqr2, asqr3, asqr4, asqr5, asqr6 a808 butterhp a808, 3270 a808 butterhp a808, 3270 aout = a808 * aenv * iamp * 0.64 aL delay aout, idel1 aR delay aout, idel2 bus_mix("master", aL, aR) endin instr play_chord1_note inote = p4 iplaymode = p5 iamp = 0.4 ivibdepthL = 0.01 ivibdepthR = ivibdepthL if (iplaymode = 1) then klpf linseg 20, p3*0.5, 500, p3*0.5, 6000 ic1 = 8 elseif (iplaymode == 2) then p3 = random(0.7, 2) klpf linseg 20, p3*0.5, 6000, p3*0.5, 12000 ivibdepthL = random(5, 10) ivibdepthR = random(5, 10) iamp *= 0.17 ic1 = random(0.1, 2) else ic1 = random(4, 10) klpf linseg 11000, p3, 200 endif kamp linseg 1, p3*0.9, 1, p3*0.1, 0 aL fmrhode kamp * iamp, cpsmidinn(inote), ic1 + random(-1, 1), 0.4, ivibdepthL, 3, gifnSine, gifnSine, gifnSine, gifnSine, gifnSine aR fmrhode kamp * iamp, cpsmidinn(inote), ic1 + random(-1, 1), 0.4, ivibdepthR, 6, gifnSine, gifnSine, gifnSine, gifnSine, gifnSine aL butterhp aL, 450 aL butterlp aL, klpf aR butterhp aR, 450 aR butterlp aR, klpf bus_mix("master", aL, aR) endin instr play_chord1 iamp = bid_getparameter(p4, p5, 2) ichordgroup = bid_getparameter(p4, p5, 4) ichordnum = bid_getparameter(p4, p5, 5) iplaymode = bid_getparameter(p4, p5, 6) ifn = gibid_chordgroups[ichordgroup][ichordnum] index = 0 while (index < ftlen(ifn)) do schedule("play_chord1_note", 0, p3, tab_i(index, ifn), iplaymode) index += 1 od turnoff endin instr play_chord2_note inote = p4 kamp linseg 1, p3*0.9, 1, p3*0.1, 0 iamp = 0.4 aL fmbell kamp * iamp, cpsmidinn(inote), 1, 1, 0.01, 3, gifnSine, gifnSine, gifnSine, gifnSine, gifnSine aR fmbell kamp * iamp, cpsmidinn(inote), 1.1, 1, 0.01, 6, gifnSine, gifnSine, gifnSine, gifnSine, gifnSine klpf linseg 14000, p3, 200 aL butterhp aL, 450 aL butterlp aL, klpf aR butterhp aR, 450 aR butterlp aR, klpf bus_mix("master", aL, aR) endin instr play_chord2 iamp = bid_getparameter(p4, p5, 2) ichordgroup = bid_getparameter(p4, p5, 4) ichordnum = bid_getparameter(p4, p5, 5) ifn = gibid_chordgroups[ichordgroup][ichordnum] index = 0 while (index < ftlen(ifn)) do schedule("play_chord2_note", 0, p3, tab_i(index, ifn)) index += 1 od turnoff endin instr play_chord3_note inote = p4 iamp = p5 klfo lfo random(5, 10), random(0.1, 0.4) a1 oscil 0.15 * iamp, cpsmidinn(inote) + klfo a1 butterhp a1, 450 kamp linseg 1, p3*0.8, 1, p3*0.1, 0 a1 *= kamp aL, aR pan2 a1, random(0, 1) bus_mix("master", aL, aR) endin instr play_chord3 iamp = bid_getparameter(p4, p5, 2) ifn = gibid_chordfn index = 0 while (index < ftlen(ifn)) do schedule("play_chord3_note", 0, p3, tab_i(index, ifn), iamp) index += 1 od turnoff endin /* Lightly distorted 808 style kick */ instr play_kick iamp = bid_getparameter(p4, p5, 2) aout1 wgbowedbar 1, 60, 0.9, 0.1, 0.1 aout1 distort aout1, 0.45, gifnSquare aout1 pareq aout1, 130, 0.3, 0.6 aout1 pareq aout1, 9000, 5, 0.6 aout1 *= 1.3 bus_mix("master", aout1, aout1) endin #end