Ou Sont Donc Ses Amants


polka type thingy

// https://www.youtube.com/watch?v=R9psum6q4Ow
// minimal/deep house
setcps(127 / 120 / 2);
//[0@2 4@2 4 3 4 [3 2] [1@3 2]@2 3 4 2@2 1@2]!4
let tune = n(`
[0@2 4@2 4 3 4 [3 2] [1@3 2]@2 3 4 2@2 1@2
0@2 4@2 4 3 4 [3 2] [1@3 2]@2 3 4 2@2 1@2 ]!2
[0 2 1 [2 1] 0 2 1 2
[3@3 2]@2 1 0 2@2 1@2
0 2 1 [2 1] 0 2 1 2
[3@3 2]@2 1 0 2 1 0@2
]!2
`)
.slow(16)
.scale("D5:minor")
.s("sawtooth")
.adsr("0.005:0.25:0.5:0.015")
.lpf(1000)
.lpenv(2)
.lpa(0.01)
.lpd(0.25)
.lps(0)
.lpr(0)
.attack(rand.range(0.003, 0.001));
let kick = s("bd:1!4").bank("RolandTR909").clip(0.5).gain(0.8);
let clap = s("[- cp]!2").bank("RolandTR909");
let hats = s("[- hh oh@2 - - oh hh] [- - oh@2 - - - oh hh]")
.bank("RolandTR909")
.clip(1)
.gain(rand.range(0.5, 0.9));
let simplehats = s("[- hh hh:1@2 - - hh:1 hh] [- - hh:1@2 - - - hh:1 hh]")
.bank("RolandTR909")
.clip(1)
.gain(perlin.range(0.2, 0.9));
// ------------------ BASS
let bassgroove = n(
`<[- - 0 - - - - 0]
[2 - 0 2 - 0 2 3]
[- - -2 - - - - -3]
<[-1 - -3 -1 - -3 -1 0] [-1 - 5 - 4 2 0 -] >>*2`,
).scale("D1:minor");
let bass = bassgroove
.someCyclesBy(0.1, (x) => x.transpose(12))
.s("sawtooth")
.adsr("0.005:0.25:0:0.015")
.lpf(300)
.lpenv(2)
.lpa(0.01)
.lpd(0.25)
.lps(0)
.lpr(0)
.unison(0);
let subbass = bassgroove.s("sine").gain(2);
// ------------------- CHORDS
let stabs = n(`<[0,1,2,3] [0,1,2,3,4,6]>`)
.scale("D4:minor")
.struct("<[- - x - - - - x] [- x -!6] [-!6 x - ] [-!3 x -!4]>*2")
.degradeBy(0.7)
.s("sine")
.adsr("0.005:0.2:0:0.45")
.lpf(170)
.lpenv(4)
.lpa(0.19)
.lpd(1)
.lps(1)
.lpr(1.5)
.unison(5)
.detune(1)
.room("0.2:1")
.rfade(0.5); //.delay("0.5:0.5:0.3")
let pad = n(`<[<0,2,-2,-4>@7 -] [<-1,2,-2,-4>@7 -]>/4`)
.scale("D4:minor")
.s("supersaw")
.adsr("0.5:1:1:.5")
.detune(0.3)
.lpf(500)
.lpenv(3)
.lpa(0.5)
.lpd(1)
.lps(0.7)
.lpr(0.5)
.room("0.2:.5")
.rfade(0.5)
.delay("0.5:0.5:0.1")
.postgain(0.3);
let moarchord = n(`<[0,2,4,6,8,10] [0,2,4,6]? <0 4 3 2> 0? [0,2,4,6,8]?>*8`)
.scale("D4:minor")
.struct("[- x - x - - - x ] [- x? x -!5]")
.sometimesBy(0.2, (x) => rev(x))
.s("sawtooth")
.pan(rand.range(0.4, 0.6));
// ------------------- GO
$: kick; // don't want to randomly drop the kick because of the groove thingy
$: stack(
clap.mask("<1 1 1 0 1 1 1 1>/16"), // each step in this is a full run through the tune
hats.mask("<0 1 1 0>/16"),
simplehats.mask("<1 0 0 1>/16"),
bass.mask("<1 1 1 [0 1] 1 1 0 1>/16"),
subbass.mask("<1 1 1 0 [0 1] 1 0 1>/16"),
stabs.mask("<0 0 1 1 0 0 0 1 0 1 1 0 0 0 1 0>/8"),
pad.mask("<0 1 1 0 0 1 1 0>/8"),
moarchord.mask("<1 1 0 1 1 1 0 1>/16"),
tune.mask("<1 1 1 [0 1] 1 1 1 1>/16"),
)
.early(rand.range(0.001, 0.0001))
.late(rand.range(0.001, 0.0001)); // quite a "strong groove"
//.hush()