#ifndef UDO_FNMI_TIKBANK #define UDO_FNMI_TIKBANK ## #include "sounddb.udo" #include "bussing.udo" #include "uniqueid.udo" instr _tik_play ifn = p4 ipitch = p5 ipan = p6 instanceid = p7 aL, aR loscil 0.4, ipitch, ifn, 1 bus_mix(sprintf("tikaudio%d", instanceid), aL*ipan, aR*(1-ipan)) endin instr _tik_item ifn = p4 idur = p5 ipitch = p6 instanceid = p7 index = p8 kfreq chnget sprintf("tikitemfreq_%d_%d", instanceid, index) ipan = random(0, 1) if (kfreq != 0) then kmetro metro kfreq*2, random(0, 1) if (kmetro == 1) then schedulek "_tik_play", 0, idur, ifn, ipitch, ipan, instanceid endif endif endin opcode tik_bank, iaa, i[]ipj icollection[], inum, ipitch, instanceid xin if (instanceid == -1) then instanceid = uniqueid() endif iusedinstruments[] uniqueinstrnums "_tik_item", inum index = 0 ifileindex = 0 while (index < lenarray(iusedinstruments)) do idbindex = icollection[ifileindex] ifn = gisounddb[idbindex][0] idur = gisounddb[idbindex][2] / ipitch schedule iusedinstruments[index], 0, p3, ifn, idur, ipitch, instanceid, index if (ifileindex + 1 < lenarray(icollection)) then ifileindex += 1 else ifileindex = 0 endif index += 1 od if (release:k() == 1) then kindex = 0 while (kindex < lenarray(iusedinstruments)) do turnoff2 iusedinstruments[kindex], 4, 1 kindex += 1 od endif aL, aR bus_read sprintf("tikaudio%d", instanceid) xout instanceid, aL, aR endop #end