Strudelify

Right Beside You

Sophie B. Hawkins

KeyC majorTempo125 bpm
0:00/0:00
// Right Beside You — Sophie B. Hawkins
// 125 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 104 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@8 A B C D E B C D E B C D E B C D E B C D F G H G H G H G I B C D E B C D E B C D F G H G H G H G H G H G H ~@3 J H
  G H G H G H G H G K L@3 M N O@2 ~@21
>`.pickRestart({
  A: "~@7 a1 g1@2 a1@2 c2@2 a1@2", B: "g1@2 a1@2 ~@11 e1", C: "d1@2 e1@2 g1@2 ~ a1 g1@2 a1@2 c2@2 a1@2",
  D: "g1@2 a1@2 ~@11 e2", E: "d2@2 e2@2 g2@2 ~ a1 g1@2 a1@2 c2@2 a1@2", F: "d2 e2 g2 ~@5", G: "~@14 g1 a1",
  H: "c2 a1 c2 a1 ~@4", I: "c2@2 a1@2 c2@2 a1!2 g1@2 a1@2 c2@2 a1@2", J: "~@28 g1@2 a1 ~",
  K: "c2@2 a1@2 c2@2 a1@2 f2@2 f2!2 f2@2 f2!2", L: "f2@2 f2!2 f2@2 f2!2 f2@2 f2!2 f2@2 f2!2",
  M: "f2@4 f2@2 f2@2 f2@4 f2@2 f2@2 f2@3 ~ f2@2 f2@2 f2@3 ~ f2@2 f2@2",
  N: "~@2 f2@2 f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~ f2@2 f2@2 f2@3 ~ f2@2 f2@2",
  O: "[~@2 f2@2 f2@3 ~ f2@3 ~ f2@3 ~ f1@24 ~@24, ~@16 f#2@3 ~@45]/2",
})).s("gm_synth_bass_2").gain(0.39)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note("<~@2 A@7 ~@95>".pickRestart({
  A: "[~@4 [d4,g4,b4]@3 [c4,f4,a4]@5 [c4,e4,g4]@3 [c4,f4,a4]@5 [d4,g4,b4]@3 [c4,f4,a4]@5 [c4,e4,g4]@3 [c4,f4,a4]@5 [d4,g4,b4]@3 [c4,f4,a4]@5 [c4,e4,g4]@3 [c4,f4,a4]@5 ~@4, ~ [g1,g2]@10 [g1,g2] ~@2]/7", // G F C F G F C F …
})).s("gm_synth_brass_1").gain(0.2)

// chords · synth brass 1 · "SYNBRASS 1" · soft notes
const synth_brass_1_soft = note("<A@8 B ~@95>".pickRestart({
  A: "[d3,g3,a3]/8", B: "[g1,g2] ~",
})).s("gm_synth_brass_1").gain(0.09)

// other · pan flute
const pan_flute = note("<~@8 A B C D E@2 ~@22 A B C D E@2 ~@25 F@8 G@2 H ~@26>".pickRestart({
  A: "~@2 c6 b5", B: "a5 g5 a5 b5", C: "d5@8 e5@6 d5@2 g5@7 ~ f5@8", D: "e5 d5 g5 a5",
  E: "[b5@3 ~ a5@20 ~@8, ~@3 c6 ~@28, ~@7 b5@2 ~@55]/2", F: "[~@4 a5@8 g5@8 e5@8 d5@8 a5@7 b5 c6@7 g5 e5@8 d5@4]/8",
  G: "[~@12 c5@4 a4@2 b4@2 ~@3 a4@2 b4@2 ~@2 a4@2 b4@2 ~@3 a4@2 b4@2 ~@2 a4@2 b4@2 ~@3 a4@2 b4@2 ~@2 a4@2 b4@2 ~@2 a4@2 ~]/2",
  H: "b4@2 ~@2 a4@2 b4@2 ~@3 a4@2 b4@2 ~@2 a4@2 ~ b4@2 ~@10",
})).s("gm_pan_flute").gain(0)

// other · pan flute · soft notes
const pan_flute_soft = note(`<
  ~@77
  [~@12 a4 b4 ~ a4]
  [~ b4@2 ~@2 a4@2 b4@2 ~@2 a4@2 ~ b4@3 ~ a4@2 ~ b4@2 ~@2 a4@2 b4@2 ~@3]
  [a4@2 b4@2 ~@3 a4@2 b4@2 ~@2 a4@2 b4@3 ~ a4@2 ~ b4@2 ~@2 a4@2 b4@2 ~@2]
  [~ a4@2 b4@2 ~@2 a4@2 b4@3 ~@2 a4@2 b4@3 ~@13]
  ~@23
>`).s("gm_pan_flute").gain(0)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note("<~@8 A@16 B@8 C@8 D@8 E@8 F@5 ~@2 G@8 F@5 ~@6 H I J K L M N@8 O P@7>".pickRestart({
  A: "[~@15 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]]/8", // Am G Am G Am G Am G
  B: "[~@15 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 ~@16 [a3,c4,f4]@16 ~@16 [g3,c4,e4]@16 ~@16 [a3,c4,e4]@16 ~@16 [g3,b3,d4]]/8", // Am G Am G F C Am G
  C: "[~@31 [a3,c4,f4]@16 ~@16 [g3,c4,e4]@16 ~@16 [a3,c4,e4]@16 ~@16 [g3,b3,d4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]]/8", // F C Am G Am G Am G
  D: "[~@15 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 [a3,c4,e4]@16 [d4,g4,a4]@33]/8", // Am G Am G Am G Am Dsus4
  E: "[~@15 [a3,c4,f4]@16 [a3,c4,f4]@16 [g3,c4,e4]@16 [g3,c4,e4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 [a3,c4,f4]@16 [a3,c4,f4]@16 [g3,c4,e4]@16 [g3,c4,e4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@14 ~@2 [g3,b3,d4]]/8", // F C Am G F C Am G
  F: "[~@15 [a3,c4,f4]@16 [a3,c4,f4]@16 [g3,c4,e4]@16 [g3,c4,e4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 ~@17]/5", // F C Am G
  G: "[~@15 [a3,c4,f4]@16 [a3,c4,f4]@16 [g3,c4,e4]@16 [g3,c4,e4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]@16 [a3,c4,f4]@16 [a3,c4,f4]@16 [g3,c4,e4]@16 [g3,c4,e4]@16 [a3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [g3,b3,d4]]/8", // F C Am G F C Am G
  H: "~@15 [f4,a4,c5,e5]@17", I: "~@17 [e4,g4,b4,d5]@15", J: "~@9 [c4,e4,g4,b4]@7", K: "~@19 [c4,d4,g4,a4]@13",
  L: "~@21 [f4,a4,c5,e5]@11", M: "~@11 [e4,g4,b4,d5]@5",
  N: "[~@23 [c4,e4,g4,b4]@33 ~ [c4,d4,g4,a4]@33 [d4,f4,a4,c5]@33 [c4,e4,g4,b4]@33 ~ [a3,c4,e4,g4]@33 [g3,a3,c4,d4]@33 [f4,a4,c5,e5]@33]/8", // Cmaj7 Csus2 Dm7 Cmaj7 Am7 Gsus4 Fmaj7
  O: "~ [e4,g4,b4,d5]@31", P: "[~@2 [c4,e4,g4,b4]@33 [c4,d4,g4,a4]@167 ~@22]/7",
})).s("gm_synth_strings_1").gain(0.21).pan(0.6)

// chords · synth strings 1 · "SYN STR 1" · soft notes
const synth_strings_1_soft = note("<~@28 A B C D A B C D ~@68>".pickRestart({
  A: "~@15 [a3,c4,f4]@16 ~", B: "~@15 [g3,c4,e4]@16 ~", C: "~@15 [a3,c4,e4]@16 ~", D: "~@15 [g3,b3,d4]@16 ~",
})).s("gm_synth_strings_1").gain(0.14).pan(0.6)

// other · whistle
const whistle = note("<~@82 A@5 B C D E@6 F G H ~@5>".pickRestart({
  A: "[~@16 e5@33 d5@23 g5@3 b5@2 c6@2 d6@2 ~ g6@2 b6@2 ~@2 c7@3 ~ b6@2 ~ c7@2 ~@2 d7@2 ~@3 b6@4 ~@4 a6@14 g6@10 ~@24]/5",
  B: "~@14 d6@2 ~@3 g6@3 ~ e6@4 ~@2 b5@3", C: "~@3 d6@4 ~@2 c6@4 ~@3 g5@4 ~@2 b5@4 ~@2 a5@4",
  D: "~@2 e5@4 ~@3 d5@3 ~ e5@2 d5 ~ g5@3 ~ e5@11",
  E: "[~@19 d5@2 e5@2 ~@2 e5 f5@11 ~@3 d5 e5 ~@17 b4 c5@15 b4@3 ~ a4@12 g4@2 ~ f4@13 e4@4 f4@2 ~ c5@2 ~@2 a5@2 ~ e6@2 ~@2 c7@2 b6@7 g6@2 ~ e6@2 d6@2 ~ b5@9 c6@2 d6@3 c6@3 b5@4 g5@2 ~ a5@2 c6@2 ~ b5@3 g5@2 d5@3 g5 ~ a5 b5 ~ d6 g6 a6 ~ b6 d7 ~ g7, ~@113 a4@2 ~ e5@2 ~@6 a6@2 ~@66, ~@117 f5@2 ~ c6@2 ~ f6@2 ~@67]/6",
  F: "a7 b7 ~ c8 b7 ~ a7 g7 f7 ~ e7 d7 c7 ~ d7@2 g7@2 ~ b6@2 d7@2 g7@2 d7@2 ~ c7@2 d7@2, ~@18 d7@2 ~@7 g6@2 ~@3",
  G: "c7 e6@2 g6@2 a6@2 g6@2 ~ e6@2 g6 ~ e6@2 a5 b5@2 d6@2 b5@2 ~ g5@2 d5@2 e5@2 c5@2, ~@9 d6@2 ~@12 e5@2 ~@7",
  H: "d5@2 ~ c5@2 g4@2 a4 ~ d4@2 ~ g4@2 a3@2 c4@2 g3@2 a3@2 ~ g3@2 d3@2 ~@5, ~@2 a4@2 ~@7 e4@2 ~@9 e3@2 ~@8",
})).s("gm_whistle").gain(0.23)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<~@8 A@6 ~@22 A@6 ~@33 B@2 ~@27>".pickRestart({
  A: "[~@16 [c4,e4,a4]@32 [b3,d4,g4]@32 [c4,e4,a4]@32 [b3,d4,g4]@31 ~ [e4,a4]@32 ~@16, ~@143 [a3,c4]@32 ~@17]/6", // Am G Am G A5 Am
  B: "[~@4 [d3,a3,d4,g4,b4]@7 ~@5]/2", // G
})).s("gm_electric_guitar_clean").gain(0.16).pan(0.4)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@2 A@7 ~@11 B@8 ~@12 C@8 ~@8 D@7 E@2 F@8 G@3 ~@28>".pickRestart({
  A: "[~@4 [d5,g5,b5]@3 [c5,f5,a5]@5 [c5,e5,g5]@3 [c5,f5,a5]@5 [d5,g5,b5]@3 [c5,f5,a5]@5 [c5,e5,g5]@3 [c5,f5,a5]@5 [d5,g5,b5]@3 [c5,f5,a5]@5 [c5,e5,g5]@3 [c5,f5,a5]@5 ~@4]/7", // G F C F G F C F …
  B: "[~@4 [a3,c4,e4]@8 [g3,b3,d4] ~@3]/2", C: "[~@4 [e4,a4,c5]@8 [d4,g4,b4] ~@3]/2",
  D: "[~@16 f4@32 c4@32 e4@32 d4@32 [c6,d6,g6]@63 ~@17]/7", E: "[~@16 a4@32 g4@15 ~]/2",
  F: "[g4@4 e4@8 d4@8 a5@8 g5@8 e5@8 d5@8 a5@7 b5 c6@4]/8", G: "[~@3 g5 e5@8 d5@8 ~@4]/3",
})).s("gm_string_ensemble_2").gain(0.2).pan(0.3)

// chords · pad warm · "WARM PAD"
const pad_warm = note("<~@28 A@8 ~@12 B@8 C@5 D@4 E@8 F@3 ~@6 G@3 H I J@8 K L M@7>".pickRestart({
  A: "[~@16 f2@31 ~ c2@31 ~ a2@31 ~ g2@31 ~ f2@31 ~ c2@31 ~ a2@31 ~ g2@16]/8",
  B: "[~@16 f2@31 ~ c2@31 ~ a2@31 ~ g2@31 ~ f2@31 ~ c2@31 ~ a2@31 ~ g2@14 ~@2]/8",
  C: "[~ [f2,a3,c4,f4]@2 [c2,g3,e4]@2 [a2,a3,c4,e4]@2 [g2,g3,b3,d4]@2 ~]/5", D: "[~@16 f4@32 e4@32 f2@31 ~ c2@15 ~]/4",
  E: "[~@16 a2@31 ~ g2@31 ~ f2@31 ~ c2@31 ~ a2@31 ~ g2@31 ~ f2@31 ~ c2@16]/8", F: "[~@16 a2@31 ~ g2@31 ~@17]/3",
  G: "[~@16 [e3,f3,a3,c4]@33 [e3,g3,b3,c4]@33 ~ [a2,e3,a3]@13]/3", H: "~@5 [g2,d3,g3]@3", I: "~@21 [f2,c3,f3]@11",
  J: "[~@23 [e2,b2,e3]@33 [a2,e3,a3]@33 [g2,d3,g3]@33 ~ [a#2,f3,a#3]@33 [a2,e3,a3]@33 [f2,c3,f3]@33 ~ [g2,d3,g3]@33]/8", // E5 A5 G5 A#5 A5 F5 G5
  K: "[f2,c3,f3]", L: "~ [c3,g3,c4]@31", M: "[~@3 [a2,e3,a3]@33 [g2,d3,g3]@167 ~@21]/7",
})).s("gm_pad_warm").gain(0.2).pan(0.3)

// chords · pad poly · "POLYSYNTH"
const pad_poly = note(`<
  ~@6 A@3 B C B C B C B C B C B C B C B C B C B D@8 C B C B C B C B C B C B E@8 ~ F@3 ~@3 G@2 H@8 I@8 ~@23
>`.pickRestart({
  A: "[~@3 [a1,a2]@17 [a3,c4,e4]@4]/3", B: "~ [g3,b3,d4]", C: "~ [a3,c4,e4]",
  D: "[~ [a3,c4,f4]@2 [g3,c4,e4]@2 [a3,c4,e4]@2 [g3,b3,d4]@2 [a3,c4,f4]@2 [g3,c4,e4]@2 [a3,c4,e4]@2 [g3,b3,d4]]/8", // F C Am G F C Am G
  E: "[~@8 [a3,c4,f4]@16 [g3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@16 [a3,c4,f4]@16 [g3,c4,e4]@16 [a3,c4,e4]@16 [g3,b3,d4]@7 ~]/8", // F C Am G F C Am G
  F: "[~@4 a6@3 g6@13 ~@4]/3", G: "[~@16 [a3,c4,f4]@32 [g3,c4,e4]@15 ~]/2",
  H: "[~ [a3,c4,e4]@2 [g3,b3,d4]@2 [a3,c4,f4]@2 [g3,c4,e4]@2 [a3,c4,e4]@2 [g3,b3,d4]@2 [a3,c4,f4]@2 [g3,c4,e4]]/8", // Am G F C Am G F C
  I: "[~ [a3,c4,e4]@2 [g3,b3,d4]@2 [d3,a3,d4]@10 ~]/8", // Am G D5
})).s("gm_pad_poly").gain(0.23)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note(`<
  A B C D B C D E F ~@51 G H I ~@12 J K L M K L N ~ O@2 P@2 ~ Q@3 R@2 S T ~ U V@2 ~@5
>`.pickRestart({
  A: "~@4 g4 d5 g5 ~ b5 c6 d6 g6 b6 ~ c7 b6 g6 d6 c6 ~ b5 g5 d5 g4 d5 ~ g5 b5 c6 d6 g6 ~",
  B: "b6 c7 b6 g6 d6 ~ c6 b5 g5 d5 g4 ~ d5 g5 b5 c6 d6 ~ g6 b6 c7 b6 g6 ~ d6 c6 b5 g5 d5 ~ g4 d5",
  C: "g5 b5 c6 ~ d6 g6 b6 c7 b6 ~ g6 d6 c6 b5 g5 ~ d5 g4 d5 g5 b5 ~ c6 d6 g6 b6 c7 ~ b6 g6 d6 c6",
  D: "b5 ~ g5 d5 g4 d5 g5 ~ b5 c6 d6 g6 b6 ~ c7 b6 g6 d6 c6 ~ b5 g5 d5 g4 d5 ~ g5 b5 c6 d6 g6 ~",
  E: "b6 c7 b6 g6 d6 ~ c6 b5 g5 d5 g4 d5 g5 ~ b5 c6 d6 g6 b6 ~ c7 b6 g6 d6 c6 ~ b5 g5 d5 ~ g4 d5",
  F: "g5 b5 c6 ~ d6 g6 b6 c7 b6 ~ g6 d6 c6 b5 g5 ~ d5 ~@15", G: "~@16 g3 a3 b3 ~ c4 d4 e4 f4 g4 ~ a4 b4 c5 d5 e5 ~",
  H: "f5 g5 f5 e5 d5 ~ c5 b4 a4 g4 f4 ~ e4 d4 c4 b3 a3 ~ g3 a3 b3 c4 d4 ~ e4 f4 g4 a4 b4 ~ c5 d5",
  I: "e5 f5 g5 ~ f5 e5 ~@26", J: "~@27 g5 f5 ~ c5 g4",
  K: "f4 g4 c5 ~ f5 g5 c6 g5 f5 ~ c5 g4 f4 g4 c5 ~ f5 g5 c6 g5 f5 ~ c5 g4 f4 g4 c5 ~ f5 g5 c6 g5",
  L: "f5 ~ c5 g4 f4 g4 c5 ~ f5 g5 c6 g5 f5 ~ c5 g4 f4 g4 c5 ~ f5 g5 c6 g5 f5 ~ c5 g4 f4 g4 c5 ~",
  M: "f5 g5 c6 g5 f5 ~ c5 g4 f4 g4 c5 ~ f5 g5 c6 g5 f5 ~ c5 g4 f4 g4 c5 ~ f5 g5 c6 g5 f5 ~ c5 g4", N: "f5 g5 c6 ~@29",
  O: "[~@17 [f7,a7,e8]@32 ~@15]/2", P: "[~@3 [f6,a6,e7]@32 ~@29]/2", Q: "[~@7 [c7,e7,a7]@32 ~@18 [c6,e6,a6]@32 ~@7]/3",
  R: "[~@7 [d7,f7,a#7]@8 ~]/2", // A#
  S: "~@2 d8 ~ a7 f#8 g7 ~ g#8 a7 ~ b6 ~ e8 f#7 f#8 a7 ~ c7 a8 f#8 f#7 ~ b6 g7 a7 ~ c#7 c#8 e8 g8 c#7",
  T: "~ b6 a7 c8 d#8 ~@2 d#7 g#8 a8 ~ a#6 g8 e8 g#8 ~ b7 f7 g#7 ~ a#8 b6 g8!2 ~@2 b6 a8 ~@4", U: "~ [f7,a7,e8]@31",
  V: "[~@19 [f6,a6,e7]@32 ~@13]/2", // Fmaj7
})).s("gm_lead_1_square").gain(0.26)

// other · lead 1 square · "SQUAREWAVE" · soft notes
const lead_1_square_soft = note("<~@62 A B ~@11 C ~@5 D ~@11 E F ~@5 G@2 H@2>".pickRestart({
  A: "~@6 d5 c5 b4 ~ a4 g4 f4 e4 d4 ~ c4 b3 a3 g3 a3 ~ b3 c4 d4 e4 f4 ~ g4 a4 b4 c5",
  B: "d5 ~ e5 f5 g5 f5 e5 ~ d5 c5 b4 a4 g4 ~ f4 e4 ~@16", C: "~@20 f4 g4 c5 ~ f5 g5 c6 ~@5",
  D: "~@3 g5 f5 ~ c5 g4 f4 g4 c5 ~ f5 g5 c6 g5 ~@16", E: "~@3 c8 ~@6 f#7 ~@21", F: "~@6 a7 ~@17 a#7 ~@7",
  G: "[~@23 [c7,e7,a7]@32 ~@9]/2", H: "[~@9 [f6,a6,e7]@32 ~@23]/2",
})).s("gm_lead_1_square").gain(0.13)

// other · piano · "A.PIANO 1"
const piano = note("<~@24 A ~@6 B C ~@11 D E F ~@3 G H ~@2 I ~@49>".pickRestart({
  A: "[b5,b6]@3 [a5,a6]@2 ~ [g5,g6]@2 [a5,a6]@4 ~@4", B: "~@14 [g5,g6] ~", C: "~@2 [a5,a6] ~@3 [d5,d6] ~@9",
  D: "~@6 [b5,b6] ~@4 [a5,a6] ~@4", E: "~@21 [b5,b6]@2 ~@4 [a5,a6]@2 ~@3",
  F: "[b5,b6]@2 ~@3 [a5,a6]@2 ~@4 [b5,b6]@2 ~@19", G: "~@8 [e5,e6] ~@7",
  H: "[g5,g6] ~@2 [a5,a6] ~@2 [d5,d6] ~@2 [c5,c6] ~@6", I: "~@8 [c5,c6] ~@2 [a4,a5] ~@4",
})).s("gm_piano").gain(0.17).pan(0.3)

// chords · synth bass 1 · "SYN BASS 1"
const synth_bass_1 = note(`<
  ~@8 A B C B C B C B C B C B C B C B C B C B D E F B D E F B C B C B C B C G C B C B D E F B D E F B D E F B H ~@2 I E
  F B D J F B D E F B H ~@28
>`.pickRestart({
  A: "~@16 [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~", // C
  B: "[c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~", // C Bm
  C: "[b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~", // Bm C
  D: "[b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~", // Bm F5
  E: "[c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~", // F5 C
  F: "[c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~", // C
  G: "[c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ c4 ~ [c4,e4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~", // C Bm
  H: "[b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~@17", // Bm
  I: "~@16 [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~", // F5
  J: "c4 ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~", // F5 C
})).s("gm_synth_bass_1").gain(0.06)

// drums · rim
const rim = s("rim").struct("<~@28 A ~@19 A ~@3 A ~@3 A ~@3 A ~@2 A ~@3 A ~@3 A ~@3 A ~@3 A ~@24>".pickRestart({
  A: "~ x",
})).gain(0.35)

// drums · kick
const kick = s("bd").struct("<~@8 A B@19 C B@19 C B@3 C B@3 C B@3 C B@2 D B@7 C B@3 C B@3 C B@2 E ~@21>".pickRestart({
  A: "~@2 x!2", B: "x!4", C: "x ~@7 x ~@3 x ~@2 x!2 ~@7 x ~@7", D: "x ~@3 x ~@3 x ~@3 x ~@2 x!2 ~@7 x ~@7",
  E: "x ~@3 x ~@3 x ~@3 x ~@2 x ~@16",
})).gain(0.39)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@28 A ~@19 A ~@3 A ~@3 A ~@3 A ~@2 A ~@7 A ~@3 A ~@3 A ~@2 A ~@21>".pickRestart({
  A: "~@13 x!2 ~@17",
})).gain(0.26)

// drums · clap
const clap = s("cp").struct("<~@60 A B@2 C ~@11 A B@6 C ~@21>".pickRestart({
  A: "~@8 x ~@2 x ~@2 x ~", B: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", C: "x!4 ~@4",
})).gain(0.18)

// drums · hihat
const hihat = s("hh").struct("<~@8 [~@8 x!2 ~@2 x!2 ~@2] [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!73 [x!2 ~@2 x!2 ~@10] ~@21>")
  .gain(0.18)
// … 41 more lines

More by Sophie B. Hawkins