#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