Strudelify
Let It Go cover art

Memories EP

Let It Go

Prince

KeyE♭ minorTempo86 bpm
0:00/0:00
// Let It Go — Prince
// 86 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 91 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A@2 B C D E F G H@2 D E H@2 D E D E I E D E D E D E F G D E J K H@2 D E H@2 L E D E D E D E D E D E F G M E J K D E D
  E D E D E N@2 D E H@2 D E D E O E D E D E D E D E D E D E D E P
>`.pickRestart({
  A: "[eb1@30 eb1@3 ~@2 eb1 eb1@2 ab2 ~@5 eb1 bb2 ~@2]/2", B: "bb2@4 ~ eb1 eb1@3 ~@2 eb1 eb1@2 ab2 ~@5 eb1 bb2 ~@2",
  C: "bb2@3 ~@2 eb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ~ eb3 ~@2, ~@18 db3 ~@5", // Eb
  D: "~@5 eb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ~ gb1@2 ~, ~@18 db3 ~@5", // Eb
  E: "ab1@2 ~ gb1 ~ eb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ~ eb3 ~@2, ~@18 db3 ~@5", F: "~ [eb0,eb1] ~@2",
  G: "~@5 eb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ~ eb3 ~@2, ~@18 db3 ~@5", // Eb
  H: "[~@5 eb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ~ gb1@2 ~ ab1@2 ~ gb1 ~ eb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ~ eb3 ~@2, ~@18 [db3,f3]@12 ~@12 db3 ~@5]/2", // Eb Db
  I: "~@5 eb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 gb1 gb1@2 ~, ~@18 db3 ~@5", // Eb
  J: "~@5 eb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ~ db2 ~@2, ~@18 db3 ~@5", // Eb
  K: "eb2 ~ ab1 gb1 ~ gb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ~ eb3 ~@2, ~@18 db3 ~@5", // Eb
  L: "~@5 eb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ab2 gb1@2 ~, ~@18 db3 ~@5", // Eb
  M: "~@5 eb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ab1 gb1@2 ~, ~@18 db3 ~@5", // Eb
  N: "[~@6 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ~ gb1@2 ~ ab1@2 ~ gb1 ~ eb1 [eb0,eb1]@6 ~@3 db3 ~@2 eb3@2 ~ eb3 ~@2, ~@18 [db3,f3]@12 ~@12 db3 ~@5]/2", // Eb Db
  O: "~@5 eb1 [eb0,eb1]@6 ~@3 db3 ~@2 [db3,eb3] ~ eb3 gb1@2 ~", P: "~@5 eb1 [eb0,eb1]@6 ~@12",
})).s("gm_electric_bass_finger").gain(0.39)

// chords · pad warm · "WARM PAD"
const pad_warm = note("<A B C D@2 E@2 ~@8 F@7 G@5 ~@8 H@4 I@7 G@5 ~@4 J@8 K@8 L@2 M@8 N@7 O@3>".pickRestart({
  A: "~@4 eb4 bb3 eb4 bb3", B: "eb4 bb3 eb4 bb3 eb4 bb3 eb4 bb3",
  C: "eb4 bb3 eb4 bb3 [eb4,bb4] [bb3,ab4,eb5] [eb4,bb4,f5] [bb3,db5,ab5]", // Eb5 Ebsus4 Ebsus2 Bbm7
  D: "[[eb4,eb5,bb5] [bb3,ab5,eb6] [eb3,gb3,bb3]@3 [ab3,b3]@5 [eb3,gb3,bb3]@3 [eb3,ab3,b3]@2 ~, ~@15 eb3@13 ~@20]/2", // Eb5 Ebsus4 Ebm Abm Ebm Abm
  E: "[~@2 [eb3,gb3,bb3]@3 [eb3,ab3,b3]@5 [eb3,gb3,bb3] ~@5]/2", // Ebm Abm Ebm
  F: "[~@6 [eb3,gb3,bb3]@11 ~ [eb3,ab3,b3]@11 ~ [eb3,gb3,bb3]@11 ~ [eb3,ab3,b3]@11 ~ [eb3,gb3,bb3]@11 ~ [eb3,ab3,b3]@11 ~ [eb3,gb3,bb3]@11 ~ [eb3,ab3,b3]@11 ~ [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@13 ~@2 [eb4,gb4,bb4]@23 ~ [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@9]/7", // Ebm Abm Ebm Abm Ebm Abm Ebm Abm …
  G: "[~@6 [eb4,gb4,bb4]@9 [eb4,ab4,b4]@5 ~ [eb4,ab4,b4]@8 ~ [eb4,gb4,bb4]@11 ~ [eb4,ab4,b4]@11 ~ [eb4,gb4,bb4]@22 ~@2 [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@14 ~@19]/5", // Ebm Abm Ebm Abm Ebm Abm
  H: "[~@2 eb4@29 [eb4,ab4], ~ [gb3,bb3]@15]/4", // Ab5 Gb
  I: "[[gb4,bb4]@3 [ab4,db5]@3 [eb3,gb3,bb3]@12 [eb3,ab3,b3]@12 [eb3,gb3,bb3]@12 [eb3,ab3,b3]@12 [eb3,gb3,bb3]@12 [eb3,ab3,b3]@12 [eb3,gb3,bb3]@12 [eb3,ab3,b3]@10 ~@2 [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@13 ~@2 [eb4,gb4,bb4]@23 ~ [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@9]/7", // Gb Db5 Ebm Abm Ebm Abm Ebm Abm …
  J: "[~ [eb4,gb4,bb4]@4 [eb4,ab4,b4]@4 [eb4,gb4,bb4]@4 [eb4,ab4,b4]@4 [eb4,gb4,bb4]@4 [eb4,ab4,b4]@4 [eb4,gb4,bb4]@4 [eb4,ab4,b4]@3]/8", // Ebm Abm Ebm Abm Ebm Abm Ebm Abm
  K: "[~@6 gb3@81 ab3@14 gb3@24 ab3@24 ~ gb3@24 ab3@18, ~ [bb3,eb4]@31]/8", // Eb5
  L: "[~ gb3@2 [ab3,b3]@2 [gb3,bb3]@2 [ab3,b3]]/2", // Abm Gb Abm
  M: "[~@6 [gb3,bb3,eb4]@12 [ab3,b3,eb4]@12 [gb3,bb3,eb4]@12 [ab3,b3,eb4]@12 [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@13 ~@2 [eb4,gb4,bb4]@23 ~ [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@13 ~@2 [eb4,gb4,bb4]@9 [eb4,ab4,b4]@5 ~ [eb4,ab4,b4]@8 ~ [eb4,gb4,bb4]@11 ~ [eb4,ab4,b4]@11 ~ [eb4,gb4,bb4]@18]/8", // Ebm Abm Ebm Abm Ebm Abm Ebm Abm …
  N: "[~@6 [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@14 ~ [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@13 ~@2 [eb4,gb4,bb4]@23 ~ [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@13 ~@2 [eb4,gb4,bb4]@9 [eb4,ab4,b4]@5 ~ [eb4,ab4,b4]@8 ~ [eb4,gb4,bb4]@11 ~ [eb4,ab4,b4]@11 ~ [eb4,gb4,bb4]@18]/7", // Ebm Abm Ebm Abm Ebm Abm Ebm Abm …
  O: "[~@6 [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@14 ~ [eb4,gb4,bb4]@8 ~ [eb4,ab4,b4]@14 ~@19]/3", // Ebm Abm Ebm Abm
})).s("gm_pad_warm").gain(0.01).pan(1)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A@4 B ~ C ~@8 D@5 E F G ~ H I ~@12 J K ~@4 E F G ~ H I ~@7 L M ~@2 L M ~@13 N I O ~ N I P ~ N I Q ~ N I ~
>`.pickRestart({
  A: "[~@12 bb4@2 ~ f4@3 bb4@3 f4@3 bb4@3 f4@3 bb4@3 f4@3 bb4@3 f4@3 bb4@3 f4@3 bb4@3 f4@3 bb4@3 f4@3 bb4@3 [f4,ab4,eb5]@3 [bb4,f5]@3 [f4,db5,ab5]@3 [bb4,eb5,bb5]@3 [f4,ab5,eb6]@2 ~@19, eb1@77 ~@19]/4", // Fm7 Bb5 Db Eb5 Fm7
  B: "~@6 [bb3,eb4]@6 [db4,gb4,db6,gb6]@5 [bb3,eb4,bb5,eb6] ~@6", C: "~@6 [eb5,bb5,eb6]!2 ~@16",
  D: "[~@2 [bb4,eb5]@4 [gb4,b4]@4 [bb4,eb5]@4 [gb4,b4]@4 [bb4,eb5]@4 [gb4,b4]@4 ~@4 [ab4,b4]@3 ~@7, ~@13 [bb4,eb5]@2 eb6@2 ~@3, ~@29 db6@5 ~@6]/5", // Eb5 B5 Eb5 B5 Eb5 B5 Abm Eb5
  E: "~@5 eb6@2 ~@5 [eb5,eb6] ~@5 [eb5,eb6] ~@5, ~@5 eb5 ~@18", F: "eb6 ~@11, eb5 ~@23",
  G: "~@6 [bb5,eb6]@3 ~@3 [db5,gb5,db6,gb6]@6 [bb4,eb5,bb5,eb6] ~@5", // Eb5 Gb5 Eb5
  H: "~@6 [eb5,eb6] ~@5 eb6@2 ~@4 [eb5,eb6] ~@5, ~@12 eb5 ~@11", I: "[eb5,eb6] ~@23", J: "~@7 ab4", K: "bb4 db5 ~@6",
  L: "~@6 [bb3,eb4]@6 [gb5,gb6]@4 ~@5 db5@3", M: "eb5@3 gb5@2 ~@19", N: "~@6 [eb5,eb6] ~@5 [eb5,eb6] ~@5 [eb5,eb6] ~@5",
  O: "~@6 eb5@6 [db5,gb5,db6,gb6]@6 [eb5,bb5,eb6] ~@5, ~@9 bb4 ~@2", // Gb5 Eb5
  P: "~@6 [bb4,eb5]@3 ~@3 [db5,gb5,db6,gb6]@6 [bb4,eb5]@2 ~@4, ~@18 [bb5,eb6] ~@5", // Eb5 Gb5 Eb5
  Q: "~@3 eb5@3 [db5,gb5,db6,gb6]@3 [bb4,eb5] ~@2, ~@18 [bb5,eb6] ~@5", // Gb5 Eb5
})).s("gm_synth_strings_1").gain(0.06).pan(0.1)

// chords · synth strings 1 · "SYN STR 1" · soft notes
const synth_strings_1_soft = note("<~@3 A@2 B C ~@32 D@2 E@3 ~@27 D@2 F@7 G@8 H@3>".pickRestart({
  A: "[~@6 [eb3,gb3,bb3]@8 ~ [eb3,ab3,b3]@13 ~@2 gb3@9 ~ b3@8, ~@5 eb3@3, ~@13 ab3@3]/2", // Ebm Abm
  B: "~@2 [eb3,ab3]@4 [eb3,gb3]@9 [eb3,ab3,b3]@9, ~@2 b3@2 ~@2 bb3@7 ~@11", // Ab5 Ebm Abm
  C: "~ b3@4 ~ [gb3,bb3]@3 ~@15, eb3 ~@2, ab3 ~@3", D: "[~ [eb5,eb6]@7]/2", E: "[[f5,f6] [gb5,gb6] [eb5,eb6]@16 ~@6]/3",
  F: "[[f5,f6]@3 [gb5,gb6]@3 [eb5,eb6]@48 [gb5,bb5]@9 [ab5,b5]@14 ~ [gb5,bb5]@24 gb5@9 [ab5,b5]@15 [bb4,gb5]@6 ~@6 [ab5,b5]@12 [gb5,bb5]@9 [ab5,b5]@9, ~@102 bb5 ~@23 bb5@12 ~@30]/7", // F Gb Eb Gb Abm Gb Abm Ebm …
  G: "[~@6 [gb5,bb5]@24 gb5@9 [ab5,b5]@15 bb5@12 [ab5,b5]@12 [gb5,bb5]@9 [ab5,b5]@14 ~ [gb5,bb5]@24 gb5@9 [ab5,b5]@15 [bb4,gb5]@6 ~@6 [ab5,b5]@12 [gb5,bb5]@9 [ab5,b5]@9, ~@30 bb5 ~@23 gb5@6 ~@66 bb5 ~@23 bb5@12 ~@30]/8", // Gb Abm Gb Abm Gb Abm Ebm Abm …
  H: "[~@2 [gb5,bb5]@8 gb5@3 [ab5,b5]@5 ~@6, ~@30 bb5 ~@41]/3", // Gb Abm
})).s("gm_synth_strings_1").gain(0.04).pan(0.1)

// other · piccolo
const piccolo = note(`<
  ~@2 A B@2 C@2 ~@12 D@2 E@2 F@2 D@2 ~@16 D@2 E@2 F@2 D@2 ~@8 G ~@15 D@2 E@2 F@2 D@4 E@2 F@2 D@2
>`.pickRestart({
  A: "~@5 eb5 f5 ab5", B: "[bb5@3 eb6@3 bb5@5 db6@4 ab5@4 a5 ab5 gb5@9 ~@18]/2",
  C: "[~ eb5@2 gb5 ab5!2 bb5@4 db6@4 ~ ab5@4 a5 ab5 gb5@9 ~@18, db5 ~@23]/2",
  D: "[~@6 bb5@4 db6@4 ~ ab5@4 a5 ab5 gb5@9 ~@18]/2", E: "[~@6 bb5@5 db6@4 ab5@5 [ab5,a5] gb5@8 ~@19]/2",
  F: "[~ eb5@2 ~ ab5@2 bb5@5 db6 ~@3 ab5@4 a5 ab5 gb5@8 ~@19, db5@2 ~ gb5@2 ~@43]/2",
  G: "~@15 e4@2 [bb3,eb4] ~@6, ~@15 b3 ~@8", // Eb5
})).s("gm_piccolo").gain(0.1).pan(0)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@3 A B A B ~@3 B ~@3 B ~@4 A ~ A B A ~ A B ~@7 B ~@3 B ~@4 A ~ A B A ~ A B ~@4 C B A ~ A B A ~@4 B ~@3 B ~@4 A ~ A B
  A ~ A B A ~ A B A ~ A ~
>`.pickRestart({
  A: "~@20 [bb4,db5,eb5] ~@3", B: "~@6 ab3 ~ ab3 ~@2 a3 ~@3 bb3 ~@8", C: "~@20 [gb4,bb4,c5] ~@3",
})).s("gm_electric_guitar_clean").gain(0.19)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@3 A@2 B@2 ~@3 C ~@3 D E ~@6 F ~@3 G H@4 ~@3 I J ~@2 K L@5 ~@2 F ~@3 G H@4 ~@4 M ~@2 K N ~@2 O P ~@2 Q R@5 ~@2 S T
  ~@3 K N ~@2 K N ~@2
>`.pickRestart({
  A: "[~@6 [eb3,gb3,bb3]@9 [eb3,ab3,b3]@15 [eb3,gb3,bb3]@9 [eb3,ab3,b3]@6 [d5,f5] ~@2]/2", // Ebm Abm Ebm Abm Dm
  B: "[d5@2 [eb5,gb5] ~@3 [eb3,gb3,bb3]@9 [eb3,ab3,b3]@15 [eb5,bb5,eb6]!2 ~@16, f5 ~@29 [eb3,gb3,bb3]@3 ~@15]/2", // Ebm Abm Eb5 Ebm
  C: "~@23 [eb3,ab3,db4]", D: "~@17 [ab3,db4,f4] [ab2,db3,gb3] ~ [db3,gb3] [ab3,db4,f4] ~@2",
  E: "~@2 [ab3,db4,gb4] ~@21", F: "~@6 [gb4,bb4,eb5] ~ [gb4,bb4,eb5] ~@15", G: "~@3 [gb4,bb4,eb5] ~@8",
  H: "~@5 [eb4,ab4,c5]@2 ~", I: "~@21 [eb4,gb4,ab4] ~@2", J: "~@2 [eb4,ab4] ~@21", K: "~@7 [eb4,ab4]",
  L: "[[gb4,bb4] [ab4,db5] [eb3,gb3,bb3]@4 [eb3,ab3,b3]@4 [gb3,bb3]@4 [eb3,ab3,b3]@4 [gb3,bb3]@4 [eb3,ab3,b3]@4 [gb3,bb3]@4 [eb3,ab3,b3]@4 ~@6, ~@30 eb3 ~@23 eb3 ~@23 eb3 ~@41]/5", // Gb Db5 Ebm Abm Gb Abm Gb Abm …
  M: "~@15 [e4,b4] ~ [eb4,bb4] ~@6", N: "[gb4,bb4]@3 [ab4,db5]@2 ~@19",
  O: "~@17 [ab3,db4,gb4] ~@2 gb3 [db3,ab3,db4,f4] ~@2", P: "[ab3,f4] ~ [eb4,gb4] ~@21, db4 ~@11",
  Q: "~@6 [db3,gb3] [eb3,ab3]", // Gb5 Ab5
  R: "[[gb3,bb3]@3 [ab3,db4]@3 [eb3,gb3,bb3]@12 [eb3,ab3,b3]@11 ~ [eb3,gb3,bb3]@10 ~@2 [eb3,ab3,b3]@10 ~@2 [eb3,gb3,bb3]@10 ~@2 [eb3,ab3,b3]@10 ~@2 [eb3,gb3,bb3]@11 ~ [eb3,ab3,b3]@11 ~@19]/5", // Gb Db5 Ebm Abm Ebm Abm Ebm Abm …
  S: "~@6 [gb4,bb4,eb5] ~ [gb4,bb4,eb5] ~@12 [d5,f5] ~@2", T: "d5@2 [eb5,gb5] ~@21, f5 ~@23",
})).s("gm_epiano2").gain(0.11).pan(0.1)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note("<~@55 A@2 B C D E F@2 G ~@27>".pickRestart({
  A: "[~@15 db6 eb6 [bb5,db6] [b5,db6] bb5 [ab5,b5] bb5@6 ab5 bb5 [db5,eb5] ab5@4 ~ b5 ~ bb5@4 db6 ~ ab5@3 ~ f5, ~@21 ab5 ~@26]/2", // Bbm Bsus2 Abm Dbsus2
  B: "~ bb4 eb5@4 bb4@3 ab4 ~@13 [gb3,ab3,bb3,db4], ~@2 ab4 ~@3 ab4 ~@17", // Gb
  C: "bb4 b4 gb3 b4 db5 ~ db5 eb5 gb3 eb5 f5 gb3 ab5@3 f5 ~ bb3 c6 db6@2 e6 f6 ~",
  D: "db6@4 ~@2 bb5@2 [gb5,ab5] [ab4,bb4,db5,eb5] [db4,eb4,gb4] [gb3,ab3,bb3] ~@12, b5 ~@23", // Gbsus2 Absus4 Ebm7 Gb
  E: "~@5 [db4,eb4] [ab5,bb5] ~@2 ab5@2 db4 ab5@4 ~ gb5 ab5@2 ~ bb5@2 ~, ~@12 gb5 ~@11", // Dbsus2 Absus2
  F: "[~@8 bb5 [ab5,b5] [ab5,bb5]!2 b5 f6@3 ~ eb6 ~ db6@3 [ab5,bb5] [ab5,b5] ~@6 ab5@3 db5@2 ~ f5@4 ~ bb4!2 db5@2 f5@3, ~@23 bb5@5 ~@20]/2", // Abm Absus2 Abm
  G: "bb4 ~@5",
})).s("gm_lead_1_square").gain(0.31).pan(0.4)

// other · lead 1 square · "SQUAREWAVE" · soft notes
const lead_1_square_soft = note("<~@55 A ~ B C D E F G ~@28>".pickRestart({
  A: "~@18 c6 ab5 ~@4", B: "~@9 gb4 [eb4,e4] d4 ~@12", C: "~@5 gb3 ~@18", D: "~@5 bb3 ~@18",
  E: "~@5 gb3 ~@5 eb4 ~@4 db4 ~@7", F: "~@11 b5 ~@12", G: "~@5 e5 ~@18",
})).s("gm_lead_1_square").gain(0.15).pan(0.4)

// other · muted trumpet · "MT TRUMPET"
const muted_trumpet = note(`<
  ~@3 A@2 B@2 ~@9 C@2 ~ D@2 E@2 F@2 G@2 ~@13 C@2 ~ D@2 E@2 F@2 G@2 ~@6 H I ~@2 H I ~@9 C@2 ~ D@2 E@2 J@2 K@2 L@2 M@2 N@2
  G@2
>`.pickRestart({
  A: "[~@6 bb4@4 ~ db5 ~@3 ab4@5 [ab4,a4] gb4@8 ~@16 [d4,f4]@3]/2", // Amaj7 Dm
  B: "[[eb4,gb4]@2 ~ [gb4,bb4] ~@2 bb4@5 db5 ~@3 ab4@5 a4 ab4 gb4@8 ~@18, ~@6 ab4 ~@41]/2", // Ebm Gb
  C: "~@6 [db4,db5] ~@2 [eb4,eb5] ~@14", D: "[~@6 bb4@4 db5 ~@4 ab4@4 a4 ab4 gb4@6 ~@21]/2",
  E: "[~@6 bb4@5 db5 ~@3 ab4@4 a4 ab4 gb4@7 ~@17 [d4,f4]@3]/2", // Dm
  F: "[[eb4,gb4]@3 [f4,ab4] ~@2 bb4@5 db5 ~@3 ab4@5 [ab4,a4] gb4@6 ~@21]/2", // Ebm Fm Amaj7
  G: "[~@6 bb4@5 db5 ~@3 ab4@4 a4 ab4 gb4@7 ~@20]/2", H: "~@7 [db5,db6]", I: "[eb5,eb6]@3 [gb5,gb6]@2 ~@19",
  J: "[[eb4,gb4]@3 [f4,gb4,ab4,bb4] ~@2 bb4@5 db5 ~@3 ab4@5 [ab4,a4] gb4@6 ~@21]/2", // Ebm Gbmaj7 Amaj7
  K: "[~@6 bb4@5 db5 ~@3 ab4@4 a4 ab4 gb4@7 ~@17 [db5,db6]@3]/2", // Db
  L: "[[eb5,eb6]@3 [gb5,gb6]@2 ~ bb4@4 db5 ~@4 ab4@4 a4 ab4 gb4@6 ~@21]/2", // Eb Gb
  M: "[~@6 bb4@5 db5 ~@3 ab4@4 a4 ab4 gb4@7 ~@17 [d4,f4,db5,db6]@3]/2", // Dm
  N: "[[eb4,gb4,eb5,eb6]@3 [f4,gb4,ab4,bb4] ~@2 bb4@5 db5 ~@3 ab4@5 [ab4,a4] gb4@6 ~@21, ~@3 [gb5,gb6]@2 ~@43]/2", // Ebm Gbmaj7 Amaj7 Gb
})).s("gm_muted_trumpet").gain(0.18).pan(0.4)

// other · brass section · "BRASS 1"
const brass_section = note("<~@27 A B A B ~@20 A B A B ~@36>".pickRestart({
  A: "~@6 eb4 ~@2 eb4 ~@2 eb4 ~@2 eb4 ~@2 eb4 ~@2 eb4@2 db4",
  B: "eb4@2 gb4@4 eb4 ~@2 eb4 ~@2 eb4 ~@2 eb4@2 db4 eb4@2 bb3@4",
})).s("gm_brass_section").gain(0.35).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C B C D C B C B C B C B C B C E C B C B C B C D C B C B C B C B C B C B C B C E C B C B C B C F C B C B C B C B
  C B C B D ~ C B C B C B C B C E C B C B C B C B C B C B C B C D
>`.pickRestart({
  A: "~@6 x ~@4 x ~@5 x!2 ~@2 x ~ x", B: "~@5 x!2 ~@4 x ~@5 x!2 ~@2 x ~@2", C: "~@5 x!2 ~@4 x ~@5 x!2 ~@2 x ~ x",
  D: "~@5 x!2 ~@17", E: "~@5 x!2 ~@4 x ~@5 x!2 ~ x!2 ~@2", F: "~@5 x!2 ~@14 x ~@2",
})).gain(0.26)

// drums · snare
const snare = s("sd").struct("<~@6 A B ~@10 A B ~@10 A B ~@10 A B ~@6 A B ~@2 A B ~@18 A B ~@15>".pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.32)

// drums · clap
const clap = s("cp").struct("<~ A B@4 C B@11 D B@7 E B@15 D B@20 F ~ B@9 D B@14 G F>".pickRestart({
  A: "~ x", B: "x!2", C: "x!2 ~@2", D: "x ~ x!2", E: "x ~ x ~@2 x ~@2", F: "x", G: "x ~@2 x ~ x",
})).gain(0.52)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@10 B C ~@7 A ~@3 A ~@10 B C ~@11 C ~@18 B C ~@15>".pickRestart({
  A: "~ x ~@10", B: "~@7 x", C: "~@2 x!2 ~@20",
})).gain(0.39)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C D
>`.pickRestart({
  A: "~@6 x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2", B: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2",
  C: "x ~ x ~@3 x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2", D: "x!2 ~@6",
})).gain(0.39)

// drums · mid tom
const mid_tom = s("mt").struct("<~@6 A ~@11 B ~@7 B ~@3 A ~@11 B ~@11 A ~@19 B ~@16>".pickRestart({
  A: "~@7 x", B: "~@5 x",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~ x ~@6",
})).gain(0.52)

// drums · china
const china = s("cr").struct(`<
// … 24 more lines

More by Prince