1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
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
|