-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdance.rb
184 lines (158 loc) · 4.42 KB
/
dance.rb
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
use_debug false
use_bpm 150
use_synth :tb303
use_transpose 2
eval_file "~/Documents/music/lib.rb"
### BASS
define :bass do |v|
with_fx :compressor do
with_fx :rhpf, cutoff: 40 do
with_fx :ping_pong, mix: 0.1 do |pp|
with_fx :slicer, wave: 0, mix: 0 do |slicer|
if v == 2
control slicer, mix: 1, mix_slide: 8
control pp, mix: 1, mix_slide: 8
elsif v == 1
at rand_i 8 do
control slicer, mix: 1, amp: 2
sleep 1
control slicer, mix: 0, amp: 1
end
end
8.times do |n|
note = v == 1 ? [:D2,:C2,:A1,:A1].tick : :A1
sleep 0.5 if n % 4 > 0
with_fx :band_eq, freq: 110, db: 40, amp: 0.5 do
play note, wave: 2, cutoff: 80 + n * 5, release: 0.5
end if v == 1
sleep 0.5 if n % 4 == 0
play note, wave: n / 4, cutoff: 80, release: 0.5
sleep 0.5
end
end
end
end
end
end
### DRUMS
define :play_click do
play :A2, wave: 1, attack: 0, release: 0.01
end
define :kick do |v|
with_fx :compressor do
with_fx :rlpf, cutoff: 90 do
with_fx :rhpf, cutoff: (v + 1) * 30 do
with_fx :gverb, damp: 1 do
8.times do
play_click
play :A1, wave: 2, cutoff: 20, release: 0.5
sleep 1
end
end
end
end
end
end
define :hats do |v|
with_fx :slicer, amp: 1.5 do
with_fx :gverb, damp: 1 do
with_fx :reverb, room: 0 do
with_fx :distortion do
8.times do
with_fx :rhpf, amp: 0.15 do
sleep 0.5
play_click
sleep 0.25
play_click if tick % 16 == 15
sleep 0.25
end
with_fx :rlpf, cutoff: 120 do
play_click if look % 2 == 0
end if v > 0
end
end
end
end
end
end
### PADS
define :pads do |v|
with_fx :slicer, amp: 0.25 do |slicer|
with_fx :rlpf, cutoff: 0 do |lpf|
with_fx :panslicer, phase: 0.125, mix: 0.25 do
play [:A3,:A4,:A2].take(v + 1), wave: 2, sustain: 7
control lpf, cutoff: 110, cutoff_slide: v * 4
2.times do
control slicer, phase: 0.125
sleep 1
control slicer, phase: 0.25
sleep 3
end
end
end
end
end
### VOICE
define :word do |v|
with_fx :compressor, amp: 0.5 do |level|
with_fx :nrlpf, cutoff: 110 do
with_fx :slicer, mix: 0 do |slicer|
with_fx :reverb, room: 0 do
with_fx :vowel do |vowel|
with_fx :tanh do
play sustain: 8
(spread 1 << v, 4).rotate(1).each do |me|
control note: [:A2,:A1,:A2,:A2].tick
if me
control vowel, vowel_sound: 3
control vowel, amp: 0, amp_slide: 1
control slicer, mix: 1, mix_slide: 1
sleep 2
control vowel, amp: 1, amp_slide: 0
control slicer, mix: 0, mix_slide: 0
else
control note: :C3
control vowel, vowel_sound: 3
sleep 0.25
control note: :D3
control vowel, vowel_sound: 5
sleep 0.75
control note: :C3
control vowel, vowel_sound: 1
sleep 0.25
control note: :A2
sleep 0.75
end
end
control level, amp: 0
end
end
end
end
end
end
end
### SONG
arrange [
{
bass: [_, 0,0,0,1, 1,1,1,_, 1,1,1,0, 1,1,1,2],
kick: [_, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,_],
hats: [_, _,_,0,0, 1,1,1,_, 1,1,1,1, 1,1,0,_],
pads: [_, _,_,_,_, _,_,_,2, 0,1,0,1, 0,1,0,_],
word: [1, _,_,_,_, _,_,_,0, 1,0,1,0, 1,0,1,0],
},
{
bass: [1,1,1,0, 1,1,1,_, 1,1,1,0, 1,1,1,2],
kick: [0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,_],
hats: [1,1,1,0, 1,1,1,_, 1,1,1,1, 1,1,0,_],
pads: [_,_,_,_, _,_,_,2, 0,1,0,1, 0,1,0,_],
word: [_,_,_,_, _,_,_,0, 1,0,1,0, 1,0,1,0],
},
{
bass: [0,0,0,1, 0,0,0,2, 1,1,1,1, 1,1,1,2, 0,2],
kick: [0,0,0,0, 0,0,0,_, 0,0,0,0, 0,0,0,1, _,_],
hats: [1,1,1,1, 1,1,0,_, 1,1,1,0, 1,1,1,_, 0,_],
pads: [0,1,0,1, 0,1,0,_, _,_,_,_, _,_,_,_, _,_],
word: [2,2,2,0, 2,2,2,0, _,_,_,_, _,_,_,_, _,_],
},
]