Polka?


yet another bouncy polka thing

Started from this youtube tutorial. I think trance is a really useful style to apply here, it does a lot of the things I think I need.

There’s loads of scope for playing with the tune, because it has like 5 notes in and goes nowhere. I should try some things and note them down, or leave code how to do them.

// https://www.youtube.com/watch?v=baT1IVh3XHQ "How to make trance"
setcps(138 / 120 / 2);
let key = "F:minor";
// Polka? tought by Tola at Burwell sometime
let tune = n(`
[[0 4 4 [3 4] 6 4 3 2]
[[3 4 3 2]@2 0 -1 [3 4 3 2]@2 0 -1]
[0 4 4 [3 4] 6 4 [2 3] 4]
[2@3 0@5]]!2
[[0 [2 3] 4 0 2 3 4@2]
[[3 4 3 2]@2 0 -1 [3 4 3 2]@2 0 -1]
[0 [2 3] 4 0 2 3 4@2]
[[4 3] 2 [3 2] 0 [2 0 ] -1 [0 -1] -3 ]]!2
`)
.slow(16)
.scale(key)
.s("sawtooth")
.adsr("0.005:0.25:0.5:0.015")
.lpf(perlin.range(1000, 2000))
.lpenv(2)
.attack(rand.range(0.003, 0.001))
.gain(1.5)
.transpose("<0 0 12 12 12 12 12 0>/16");
// "meaty chunky kick"
let kick = s("bd:1*4").bank("tr909").gain(1.5);
let clap = s("[- cp]!7 [- [cp [- cp]]]").n("2").slow(4).bank("tr909");
let hats = stack(
s("[- oh]*4").n("4").gain(0.3).room(0.2).roomsize(2).rfade(0.1),
s("hh*16")
.gain(rand.range(0.4, 0.8))
.pan(rand.range(0.2, 0.8))
.postgain("[0.1 0.2 0.3 0.3]*4"),
s("rd*8")
.gain(rand.range(0.7, 0.8))
.pan(rand.range(0.4, 0.6))
.postgain("[0.1 0.2]*4"),
)
.bank("tr909")
.clip(0.9);
// trance often has chord progressions over 8 bars, where house has 4
let chords = n("[0,2,4]@4 [2,4,6]@4 [4,6,8]@4 [3,5,7]@2 [2,4,6] [1,3,6]")
.slow(8)
.scale(key)
.transpose("-12")
.s("folkharp"); //.gain(.8)
let strings = n("[0,2,4] [2,4,1,-1] [4,3,-1,1] [0,2,3,[5 4]]")
.slow(8)
.scale(key)
.transpose(12)
.s("gm_string_ensemble_1")
.gain(0.5);
let spicyMelody = n("[[- 0 - 0 - 4 3 2] [1@3 <0 2>@3 - - ]]*4")
.scale(key)
.slow(8)
.s("supersaw square")
.attack(0.01)
.decay(0.6)
.sustain(0.8)
.release(0.2)
.distort(2)
.gain(0.2)
.when("[0 1]/2", (x) => x.penv("[12 24 24]").prelease(0.8).release(0.8))
.hpf(250);
let melody = n(
"[[- < - 0> - 0 - 4 3 2] [1@3 <0 2>@3 - -]]*2 [[- - - -1 - 2 1 -3] [-1@3 <0 2>@3 - -] [- -2 - -2 - -2 -2 -3] [-3@3 -4@3 -6@2]] ",
)
.scale(key)
.transpose(12)
.slow(8)
.adsr("0.01:0.6:.8:0.2")
.s("supersaw");
let riff = n("[0 1 3 0 2 3 0 4]*16")
.chord("Fm7 Ab^7 Cm [Bbm7 [Ab^7 Gm7]]")
.mode("root:f3")
.slow(8)
.voicing()
.adsr("0.01:0.6:.8:0.5")
.s("supersaw")
.lpf(145)
.lpattack(0.001)
.lpdecay(0.3)
.lpsustain(0.01)
.lprelease(0.1)
.lpenv(4)
.distort(2)
.gain(0.1);
let subbass = n("[- 0 7 0]*4")
.scale(key)
.transpose("-24")
.s("sine")
.adsr("0.001:0.1:0.8:0.6");
let midbass = n("[- 0 - -] [- - -7 0] [- 0 - - ] [- - -7 -]")
.scale(key)
// .transpose("-12")
.adsr("0:0.5:.3:0.1")
.s("supersaw")
.bpf(rand.range(100, 200))
.bpattack(0)
.bpdecay(0.12)
.bpsustain(0)
.bpenv("2")
.bpq(rand.range(3.5, 4.5))
.dist(2)
.unison(4)
.spread(0.9)
.detune(0.3);
let rollbass = n("[- 0 7 0]*4")
.scale(key)
.transpose("-24")
.adsr("0:0.1:.8:0.1")
.s("supersaw")
.hpf(166)
.unison(3)
.spread(0.4)
.detune(0.1)
.lpf(200)
.lpattack(0.001)
.lpdecay(0.03)
.lpenv(4);
let aah = n("[- 7@2 - -@4] -")
.scale(key)
.s("gm_choir_aahs")
.hpf(200)
.lpf(5000)
.room(0.4)
.roomsize(6)
.rfade(0.1)
.delay("0.65");
let highpedal = stack(
n("[[0 - 0 - - - 0 -] [- - 0@3 - 0 - ] [- - 0 - 0 - 0 - ] [0@3 - -@4 ]] -"), // call
n("- < - [- - [- - 0 - 0 - 0 - ] [0,1@3 - -@4 ]]>").mask(
"<0 1 1 1 1 1 1 1>/8",
), // response
)
.slow(2)
.scale(key)
.s("supersaw")
.adsr("0:1:1:0")
.transpose(12)
.gain(rand.range(0.2, 0.3))
.pan(rand.range(0.1, 0.9))
.room(0.4)
.roomsize(6)
.rfade(0.1)
.delay(".5:.35:.2")
.unison(3)
.spread("[.2 .2 .2 .8]/4");
let highpedalHarmony = highpedal
.transpose(3)
.someCyclesBy(0.25, (x) => x.transpose(chooseCycles("-1", "2")));
let pedals = stack(highpedal, highpedalHarmony).lpf(
"<400 800 1200 1800 2400 3200 4000 6000 10000!8>/8",
);
// ramp this in gradually by opening up the filter
// remember changing octave is a thing you can do
// remember switching out all your chords to just be the root is also a thing
stack(
// things that don't want reverb!
kick.postgain(slider(1, 0, 2, 0.05)),
hats, // go look up top for knobs here
subbass,
// things that want reverb
stack(
clap,
chords.postgain(slider(1, 0, 2, 0.05)).mask("<1 1 1 1 1 [0 1] 1 1>/16"),
riff.postgain(slider(1, 0, 2, 0.05)).mask("<0 [0 1] 0 0 1 [1 0] 1 1>/16"),
spicyMelody
.postgain(slider(1, 0, 2, 0.05))
.mask("<0 0 0 0 0 1 [1 0] 0>/16"), //.transpose(12),
melody.postgain(slider(1, 0, 2, 0.05)).mask("<0 0 0 0 1 0 1 0>/16"),
midbass.postgain(slider(1, 0, 2, 0.05)).mask("<0 1 1 1 1 1 1 0>/16"),
rollbass.mask("<[0 1] 1 1 1 1 1 1 [1 0]>/16"),
strings.postgain(slider(1, 0, 2, 0.05)).mask("<0 0 [1 0] 0 1 0 0 0>/16"),
pedals.postgain(slider(1, 0, 2, 0.05)).mask("<1 1 1 1 0 0 [0 1] 1>/16"),
tune
.postgain(slider(1, 0, 2, 0.05))
.mask("<[1 1?]*8 1 1 1 [1? 1?]*4 0 [0 1?]*8 1>/16"), //.lpf("<4000 2800 1800 1200 800 600 400 200>/8"),
aah.postgain(slider(1, 0, 2)).mask("<1 1 0 0 0 0 0 1>/16"),
)
.room(0.4)
.roomsize(4)
.rfade(0.1),
);