diff options
Diffstat (limited to 'site/udo/fnml/instrument_tikbank.udo')
-rwxr-xr-x | site/udo/fnml/instrument_tikbank.udo | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/site/udo/fnml/instrument_tikbank.udo b/site/udo/fnml/instrument_tikbank.udo new file mode 100755 index 0000000..895c8b0 --- /dev/null +++ b/site/udo/fnml/instrument_tikbank.udo @@ -0,0 +1,78 @@ +#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
|