Skip to content

Instantly share code, notes, and snippets.

@CharStiles
Created March 24, 2026 16:41
Show Gist options
  • Select an option

  • Save CharStiles/7de836b0e138de250c5468bd496ba523 to your computer and use it in GitHub Desktop.

Select an option

Save CharStiles/7de836b0e138de250c5468bd496ba523 to your computer and use it in GitHub Desktop.
/*
@title realtionships are our mirrors
@by char stiles
@license CC BY-NC-SA (code)
*/
setcpm(50)
$: s("saw").note("<F1 Eb1 G0 G1>")
.fm(slider(2.064, 0, 3)).fmh("0.99, 1.01")//.sometimes(x=>x.euclidrot("<11 [9 8]>/4",16,"<2 3 4>")).ribbon(1,16)
.lpf(slider(330.3, 100, 5000))
.diode(1.3)
.compressor(-20)
let drums = stack(
sound("bd*4").bank("Rolandmc303").gain(1.).duckorbit(1).duckattack(0.2).duckdepth(.2),
sound(`
<- sd>*4
`).bank("RolandTR909").gain(.7),
//add a hihat on the off beat (8th note)
sound("<- hh>*8").bank("LinnDrum").gain(.2),
sound("~ hh ~ [hh hh] ~ hh ~ hh").sound("slapstick").sometimes(x=>x.jux(rev)).ribbon(2,6).gain(slider(4.5675,0.,7.5)),
// s("cp * <2 2 2 2 4 4 8 [ 8 16]>".slow(2)).gain(0.4),
);
// you can concatenate cycles to change up the notes on each measure
let bass = cat(
"<c2>*4",
"<g1>*4",
// use flats with b and sharps with #
"<eb1>*4",
// !n will repeat the note n times
// this is equivalent to "<eb1 eb1 f1 f1>*4"
"<eb1!2 f1!2>*4",
"<c2>*4",
"<g1!2 bb1!2>*4",
"<eb1>*4",
"<f1>*4"
).note()
.n(3).sound("agogo")
// use effects to modify a sound
// low pass filter allows low frequencies to pass through
.lpf(200).lpenv(5).lpa(.5).lps(.8).lpd(.1).gain(7.);
$: bass
//$: drums
let intro_vocals = s("nn").room(.3).rsize(2).gain(4.).sometimes(x=>x.euclidrot("<11 [9 8]>/4",16,"<2 3 4>")).ribbon(1,16);
// modify when the sample begins and ends
// this sample has 4 lines and we want the first one
// so start at 0 and cut it just after 1/4
let vocals01 = s("nn").begin(0).end(.25 + (.25 * .25 * .5))
.attack(.25).delay(".25:.45:.4").room(.2).rsize(2).gain(4.)//.sometimes(x=>x.slice("[0.2 0.51 0]","<2. 1. .75>").euclidrot("<11 [9 8]>/4",16,"<2 3 4>")).ribbon(1,16);;
// start the second one at 1/4 and cut it just after 2/4
let vocals02 = s("nn").begin(.5).end(.95 + (.25 * .25 * .5))
.attack(.25).delay(".25:.45:.4").room(.2).rsize(2).fast(2).gain(9.);
// $: vocals01.mask("<1 2 4 0 1 1 1 0>").duck(1)
//$: vocals02.mask("<1 1 1 1 1 1 1 >").duck(1)
$: intro_vocals.mask("<0 0 0 0 0 0 0 0>")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment