#ifndef INC_HYBRID_INSTR #define INC_HYBRID_INSTR ## #include "include/instruments_water.inc" #include "include/instruments_musicbox.inc" ; reson instr play_hybrid1 inote = p4 ifreq = cpsmidinn(inote) ifileid = arr_random(gisnd_waterdrop) ifn = gisounddb[ifileid][0] idur = gisounddb[ifileid][2] ipitch = random(0.8, 1.6) itdur = (idur / ipitch) + random(0.3, 1) p3 = itdur ;aL, aR loscil 1, ipitch, ifn, 1 atime line 0, p3, idur*0.9 aL, aR mincer atime, 1, ipitch, ifn, 0, 128 ; 1024 aLr resony aL, ifreq, 2, random(8, 16), 10 aRr resony aL, ifreq, 2, random(8, 16), 10 aL balance aLr, aL aR balance aRr, aR aL dcblock aL aR dcblock aR kamp linseg 1, itdur*0.9, 1, itdur*0.1, 0 iamp = random(0.7, 1) ipan = random(0, 1) aL *= kamp * iamp * ipan aR *= kamp * iamp * (1-ipan) bus_mix("pvsamp1", aL*random(0, 0.3), aR*random(0, 0.3)) bus_mix("reverb1", aL*0.1, aR*0.1) bus_mix("delay2", aL*random(0, 0.01), aR*random(0, 0.01)) bus_mix("master", aL, aR) endin opcode portchord_drop, aa, po ifreqmult, index xin ifileid = arr_random(gisnd_waterdrop) ifftsize = 16 ifn = gisounddb[ifileid][0] ichannels = gisounddb[ifileid][1] idur = gisounddb[ifileid][2] irmsnorm = gisounddb[ifileid][3] kampb table index, gimel_amps kfreq table index, gimel_freqs kamp portk kampb, (i(gkseq_beattime) * gimel_portamento_beatratio) ; fade out when change kpitch = line(random(0.8, 1.2), p3, random(0.8, 1.2)) istart = random(0.05, 0.2) iend = random(istart+0.1, 0.8) atime = abs(oscil(iend - istart, random(0.001, 0.1), gifnSine, random(0, 1))) + istart klfo = oscil:k(random(0.0001, 0.009), random(1, 5)) + 1 kfreq *= klfo aL init 0 aR init 0 if (kamp != 0) then if (random(0, 1) > 0.4) then aLm, aRm mincer atime, kamp, kpitch, ifn, 0, ifftsize else aLm, aRm sndwarpst kamp, atime*idur, kpitch, ifn, 0, 4410, 441, 8, gifnHalfSine, 1 endif aL resony aLm, kfreq*ifreqmult, random(1, 4), random(8, 16), 10 aR resony aRm, kfreq*ifreqmult, random(1, 4), random(8, 16), 10 aL balance aL, aLm aR balance aR, aRm aL butterhp aL, 210 aR butterhp aR, 210 endif ipan = random(0, 1) aL *= (1 - irmsnorm) * 0.5 * ipan aR *= (1 - irmsnorm) * 0.5 * (1-ipan) ; recursion for all chord parts if (index + 1 < ftlen(gimel_amps)) then aLx, aRx portchord_drop ifreqmult, index + 1 aL += aLx aR += aRx endif xout aL, aR endop instr play_hybridstretch1 kamp linsegr 1, p3, 1, 1, 0 kampx3 init 0.2 kreverb1 init 0 kreverb2 init 0 kreverb3 init 0 aL1, aR1 portchord_drop 0.5 aL2, aR2 portchord_drop 1 aL3, aR3 portchord_drop 4 k3amp = abs:k(oscil:k(1, 0.1)) aL = (aL1 + aL2 + (aL3 * port(k3amp, 1))) * kamp aR = (aR1 + aR2 + (aR3 * port(k3amp, 1))) * kamp kchangemetro = metro(0.2) if (kchangemetro == 1) then if (random:k(0, 1) > 0.2) then kampx3 = random:k(0.2, 1) endif if (random:k(0, 1) > 0.5) then kreverb1 = random:k(0, 0.4) endif if (random:k(0, 1) > 0.5) then kreverb2 = random:k(0, 0.4) endif if (random:k(0, 1) > 0.5) then kreverb3 = random:k(0, 0.4) endif endif aL pareq aL, 1000, 0.4, 0.7 aR pareq aR, 1000, 0.4, 0.7 bus_mix("reverb1", aL1*kreverb1, aR1*kreverb1) bus_mix("reverb1", aL2*kreverb2, aR2*kreverb2) bus_mix("reverb1", aL2*kreverb3, aR3*kreverb3) bus_mix("master", aL, aR) endin ; pvsmorph instr play_hybrid1x inote = p4 ifileidBox, ipitchBox sounddb_mel_nearestnote gicol_musicbox, inote ifileidWater = arr_random(gisnd_waterdrop) ifnBox = gisounddb[ifileidBox][0] idurBox = gisounddb[ifileidBox][2] ifnWater = gisounddb[ifileidWater][0] idurWater = gisounddb[ifileidWater][2] ipitchWater = random(0.8, 1) p3 = min((idurWater / ipitchWater), (idurBox / ipitchBox)) aboxL, aboxR loscil 1, ipitchBox, ifnBox, 1 awaterL, awaterR loscil 1, ipitchWater, ifnWater, 1 ir = 1024 fboxL pvsanal aboxL, ir, ir/4, ir, 1 fboxR pvsanal aboxR, ir, ir/4, ir, 1 fwaterL pvsanal awaterL, ir, ir/4, ir, 1 fwaterR pvsanal awaterR, ir, ir/4, ir, 1 fL pvsmorph fboxL, fwaterL, 1, 0 fR pvsmorph fboxR, fwaterR, 1, 0 aL pvsynth fL aR pvsynth fR kamp linseg 1, p3*0.9, 1, p3*0.1, 0 iamp = 5 aL *= kamp * iamp aR *= kamp * iamp bus_mix("pvsamp1", aL*random(0, 0.1), aR*random(0, 0.1)) bus_mix("reverb1", aL*random(0, 0.1), aR*random(0, 0.1)) bus_mix("master", aL, aR) endin #end