1+ // Sea of Souls - The Malfunctioning Collective (https://open.spotify.com/intl-es/album/7tTw8oiSCbyZWc0EPxJyui?si=YJn3dLUiTIaxqu_W8ObAcg)
2+ // Club Cover in Strudel by AlienMind (https://open.spotify.com/intl-es/artist/4Dy8FcAbbTvdMIpOA4jNbh?si=uj-FkR79Tr2_IZ3oW9CMuw)
3+
4+ // How to live perform
5+ // start by section 1, turn some knobs and on the loop turn section 1 onwards
6+
7+
8+ // Tempo 133 bpm at 4/4
9+ setCps(140/60/4)
10+
11+ // Section goes from 0 to 2
12+ const SECTION = 0
13+
14+ // Basic mixer with slider
15+ const RISER_VOL=slider(0,0,1)
16+ // We can control bass energies with low pass filters envelops
17+ const KICK_VOL=slider(0,0,1)
18+ const BASS_VOL=slider(0,0,1)
19+ const BASS_ENERGY=slider(1,1,4)
20+ const SUB_VOL=slider(0,0,1)
21+ const SUB_ENERGY=slider(1,1,4)
22+ const HH_VOL=slider(0,0,1)
23+ const SNARE_VOL=slider(0,0,1)
24+ const HHR_VOL=slider(0.174,0,1)
25+ const VOCALS_VOL=slider(1,0,1)
26+
27+
28+
29+ // This will add some notes to the base note
30+ const CHORD_PROGRESSION = [
31+ "0",
32+ "0",
33+ "<0 7 5 6>"
34+ ]
35+
36+ // Bassline pattern
37+ const BASSLINE_PATTERN = [
38+ // Intro
39+ "0*16",
40+ // Verse
41+ "<[-13 0 -13 1]>*4",
42+ // Drop
43+ "<[-13 0 1 13]>*8"
44+ ]
45+
46+
47+ // Vocals pattern
48+ const VOCALS_PATTERN = [
49+ "<<0 ~ ~ [~ ~] ~ ~ ~ ~ ~ ~> ~>",
50+ "<<0 1 2 [3 4] 5 6 7 8 9 10> ~>",
51+ "<<0 1 2 [3 4] 5 6 7 8 9 10> ~>"
52+ ]
53+
54+ // Riser pattern
55+ const RISER_PATTERN = [
56+ // Intro
57+ "0.2*16",
58+ "<<0 0 0 0 0 0 0 0 0 0> ~>"
59+ ]
60+
61+
62+ /////////////////////////////////////
63+
64+ // KICK - 4 on the floor
65+ $kick: s("[bd]*4").bank("tr909")
66+ //.dist("3:.3")
67+ .gain(KICK_VOL)
68+ .delay(0.3)
69+ ._scope()
70+ // Sidechain kick to orbit 2,3 for pumping other overlapping instruments
71+ .duck("2:3").duckattack(.2).duckdepth(.8)
72+
73+ // Riser - useful for the intro
74+ $riser: s("pulse").orbit(4).seg(16).dec(.1).fm(time).fmh(time).gain(pick(RISER_PATTERN,SECTION))
75+
76+ // Snare
77+ $snare: s("[~ sd ~ sd]*2").slow(2).bank("tr909").gain(SNARE_VOL)._scope()
78+
79+
80+ // Upbeats only
81+ $hh: s("[~ hh]*4").bank("tr909").delay(0.3).gain(HH_VOL)._scope()
82+
83+ $hhr: s("hh!16").bank("yamaharm50").delay(0.1).gain(HHR_VOL)._scope()
84+
85+
86+
87+ // If we wanted to use a physical knob instead of a slider via MIDI
88+ // const cc = await midin('3- UMC404HD 192k MIDI In')
89+ // const BASS_ENERGY=cc(74)
90+
91+ // E-F-F# Bassline
92+ $bass: n(pick(BASSLINE_PATTERN,SECTION).add(pick(CHORD_PROGRESSION, SECTION))).fast(1).scale("f:phrygian")._pianoroll()
93+ // Heavy distortion
94+ //.dist("2:0.3")
95+ // Nice tb303 with adjustable energy
96+ .s("sawtooth").lpf(200).lpenv(BASS_ENERGY).lpq(12).gain(BASS_VOL)
97+ // Make it pump with the duck
98+ .orbit(2)
99+
100+ // // Random 303 bassline - not super random really, occasionally +1 octave
101+ lowendbass: n(irand(2).almostNever(x=>x.add(7)).sub(7).seg(16)).scale("f:phrygian")._pianoroll()
102+ //lowendbass: n(pick(BASSLINE_PATTERN,SECTION).almostNever(x=>x.add(7)).sub(7).seg(16)).scale("f:phrygian")._pianoroll()
103+ // Make it repeatable
104+ .rib(10,4)
105+ // Heavy distortion
106+ .dist("2:0.3")
107+ // Nice tb303 with adjustable energy
108+ .s("sawtooth").lpf(200).lpenv(SUB_ENERGY).lpq(12).gain(SUB_VOL)
109+ // Make it pump with the duck
110+ .orbit(3)
111+
112+
113+
114+ // Vocals
115+ $vocals: n(pick(VOCALS_PATTERN,SECTION)).s("sos-vocals").almostNever(x => x.delay(.5)).gain(VOCALS_VOL)._pianoroll()
116+
117+ //_$vocals2: n(rand).s("sos-vocals").gain(VOCALS_VOL)._pianoroll()
0 commit comments