aboutsummaryrefslogtreecommitdiff
path: root/site/udo/fnml/transition_mburn.udo
blob: f8d35f13e8ea910ea22780f8b9d7d0fc6652d394 (plain)
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