aboutsummaryrefslogtreecommitdiff
path: root/site/udo/fnml/transition_mburn.udo
diff options
context:
space:
mode:
Diffstat (limited to 'site/udo/fnml/transition_mburn.udo')
-rwxr-xr-xsite/udo/fnml/transition_mburn.udo186
1 files changed, 186 insertions, 0 deletions
diff --git a/site/udo/fnml/transition_mburn.udo b/site/udo/fnml/transition_mburn.udo
new file mode 100755
index 0000000..f8d35f1
--- /dev/null
+++ b/site/udo/fnml/transition_mburn.udo
@@ -0,0 +1,186 @@
+#ifndef UDO_TRANSITION_MBURN
+#define UDO_TRANSITION_MBURN ##
+
+
+/*
+
+ TODO: use database loads for sounds ie
+
+
+ #include "sound_sdb.udo"
+
+ gifnmt_mbstart[][] sdb_getcollection "MBurn1.Start"
+ gifnmt_mbmid[][] sdb_getcollection "MBurn1.Middle"
+ gifnmt_mbend[][] sdb_getcollection "MBurn1.End"
+*/
+
+#include "sound_db.udo" ; for local sound loads
+#include "sequencing_scheduled.udo"
+#include "sequencing_melodic_portamento.udo" ; for tuning
+#include "wavetables.udo" ; for tuning
+#include "bussing.udo"
+#include "host_tools.udo" ; for dir_random
+#include "uniqueid.udo" ; for channels
+
+
+gifnmt_mbstart[] rdb_loaddir dir_random("2021/mBurn-New/Start")
+gifnmt_mbmid[] rdb_loaddir dir_random("2021/mBurn-New/Middle")
+gifnmt_mbend[] rdb_loaddir dir_random("2021/mBurn-New/End")
+
+
+/*
+ Play mBurn transition
+
+ p4 number of beats before next event as specified in iwaitmode
+ p5 wait mode: -1 = start of next bar, -2 = start of next bargroup , any other = number of total beats before event point (0 = immediate)
+ p6 tune mode: 0 = none, 1 = all, 2 = random
+ p7 bus name to send output to (0 = main)
+*/
+instr fnmt_mburnplay
+ istartbeats = p4
+ iwaitmode = p5
+ itunemode = p6
+
+ if (p7 == 0) then
+ Sbus = "main"
+ else
+ Sbus = p7
+ endif
+
+ p3 = 600
+
+ if (iwaitmode == -1) then
+ kwaittrig = bar_lastbeatxof(istartbeats)
+ elseif (iwaitmode == -2) then
+ kwaittrig = bargroup_lastbeatxof(istartbeats)
+ elseif (iwaitmode == 0) then
+ kwaittrig init 1
+ else
+ kwaittrig = lastbeatxof(iwaitmode, istartbeats)
+ endif
+
+ if (kwaittrig == 1) then
+ schedulek "_fnmt_mburnplay", 0, i(gkseq_beattime) * istartbeats, itunemode, Sbus
+ turnoff
+ endif
+
+endin
+
+
+instr _fnmt_mburnitem
+ ifn = p4
+ imode = p5
+ itune = p6
+ ichannel = p7
+ ireverseread = p8
+ iampmode = p9 ; ; 0 = linear amp, 1 = exponential amp, 2 = no envelope
+ isounddur = p10
+
+
+ ; start
+ if (imode == 1) then
+ if (iampmode == 0) then
+ kamp linseg 0, p3, 1
+ elseif (iampmode == 1) then
+ kamp expseg 0.00001, p3, 1
+ else
+ kamp init 1
+ endif
+
+ ; middle
+ elseif (imode == 2) then
+ if (iampmode == 2) then ; mid = no env choice really
+ kamp init 1
+ else
+ kamp linseg 1, p3*0.8, 1, p3*0.2, 0
+ endif
+
+ ; end
+ elseif (imode == 3) then
+ if (iampmode == 0) then
+ kamp linseg 1, p3, 0 ;linseg 0, p3*0.1, 1, p3*0.5, 1, p3*0.4, 0
+ elseif (iampmode == 1) then
+ kamp expseg 1, p3, 0.00001
+ else
+ kamp init 1
+ endif
+ endif
+
+ atime line 0, p3, isounddur
+
+ if (ireverseread == 1) then
+ atime = isounddur - atime
+ endif
+
+ arepitch init 1;linseg 1, p3, 0.5
+
+ iwinsize = round(random(441, 4410))
+ irandwin = iwinsize / 10
+ aL, aR sndwarpst 1, atime, arepitch, ifn, 0, iwinsize, irandwin, 4, gifnHalfSine, 1
+
+ if (itune >= 1) then
+ ;aL, aR mel_tune aL, aR, gifnSaw, 10, 512, 4
+ aL, aR mel_tune_portamento aL, aR, gifnSine, 16, 1024, 4
+ endif
+ aL = aL*kamp
+ aR = aR*kamp
+ chnmix aL, sprintf("mburn%dL", ichannel)
+ chnmix aR, sprintf("mburn%dR", ichannel)
+endin
+
+
+instr _fnmt_mburnplay
+ itunemode = p4
+ Sbus = p5
+
+ ichannelid = uniqueid()
+ idorelease = 1
+
+ ibeattime = i(gkseq_beattime)
+
+ istartdur = p3
+ imiddur = random(ibeattime, ibeattime*2)
+ ienddur = (idorelease == 1) ? random(ibeattime, ibeattime*4) : 0
+
+
+
+ istartfn[] get_sound gifnmt_mbstart[round(random(0, lenarray(gifnmt_mbstart) - 1))]
+ imidfn[] get_sound gifnmt_mbmid[round(random(0, lenarray(gifnmt_mbmid) - 1))]
+
+ if (idorelease == 1) then
+ iendfn[] get_sound gifnmt_mbend[round(random(0, lenarray(gifnmt_mbend) - 1))]
+ endif
+
+ if (itunemode == 0) then
+ itunestart = 0
+ itunemid = 0
+ ituneend = 0
+ elseif (itunemode == 1) then
+ itunestart = 1
+ itunemid = 1
+ ituneend = 1
+ elseif (itunemode == 2) then
+ itunestart = round(random(0, 1))
+ itunemid = round(random(0, 1))
+ ituneend = round(random(0, 1))
+ endif
+
+ iampmodestart = 0 ; 0 = linear amp, 1 = exponential amp
+ iampmodeend = 0 ; 0 = linear amp, 1 = exponential amp
+ ireversereadstart = round(random(0, 1))
+ ireversereadend = round(random(0, 1))
+
+ event_i "i", "_fnmt_mburnitem", 0, istartdur, istartfn[0], 1, itunestart, ichannelid, ireversereadstart, iampmodestart, istartfn[3]
+ event_i "i", "_fnmt_mburnitem", istartdur, imiddur, imidfn[0], 2, itunemid, ichannelid, 0, 1, imidfn[3]
+
+ if (idorelease == 1) then
+ event_i "i", "_fnmt_mburnitem", istartdur, ienddur, iendfn[0], 3, ituneend, ichannelid, ireversereadend, iampmodeend, iendfn[3]
+ xtratim ienddur + 3
+ endif
+
+
+ aL, aR bus_read sprintf("mburn%d", ichannelid)
+ bus_mix(Sbus, aL, aR)
+endin
+
+#end