Strudelify
The Power of Love cover art

1987 · Touch

The Power of Love

Laura Branigan

KeyB♭ majorTempo143 bpm
0:00/0:00
// The Power of Love — Laura Branigan
// 143 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 212 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(143/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger
const bass = note(`<
  ~@34 A B A B C D C D E F E F G H G H I J I B K L K M I J A B G N G H A J A B O L K M P Q R S G T G H A B A B C D C D E
  F E F G H G@2 A B A B C D C D U V G W A B A B P X A B P X K M P Y I B P Z AA AB AA X A B A B C D C D E F E F G H G@2 A
  B A B C D C D U V G W A B A B A B A B C D C D U V G W A B A B A B A B C D C D U V G W A B A B A B A B C D C D U V G W
  A B A ~
>`.pickRestart({
  A: "bb1 ~ bb1 ~@13", B: "bb1 ~@7", C: "eb1 ~ eb1@2 ~@12", D: "eb1 ~@7", E: "c1 ~ c1@2 ~@12", F: "c1 ~@7",
  G: "f1 ~ f1@2 ~@12", H: "f1 ~@7", I: "bb1 ~ bb1@2 ~@12", J: "bb1@2 ~@10 bb1 ~@3", K: "g1 ~ g1@2 ~@12",
  L: "g1@2 ~@10 g1 ~@3", M: "g1 ~@7", N: "f1@2 ~@10 f1 ~@3", O: "~ f1 g1@4 ~@10, ~@2 gb1 ~@13", P: "eb2 ~ eb2@2 ~@12",
  Q: "eb2 ~@7", R: "d2 ~ d2@3 ~@11", S: "d2 ~@7", T: "f1 ~@5 f1 ~", U: "c2 ~ c2@2 ~@12", V: "c2@3 ~ bb1@2 ~@2",
  W: "eb1@5 ~@3 eb1 ~ eb1@3 ~@3", X: "f2@2 ~@10 f2 ~@3", Y: "f2@2 ~@10 f2@3 ~", Z: "eb2 ~@5 eb2 ~", AA: "f2 ~ f2 ~@13",
  AB: "f2 ~@7",
})).s("gm_electric_bass_finger").gain(0.54)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@2 A@8 B@8 A@8 C@8 D@4 E@8 F@4 A@8 B@8 A@8 C@8 D@4 E@8 G@4 H@8 I@2 J K D@4 L M@4 N O@2 P Q R@2 S@2 T@2 U@2 D@4 E@8 J
  V W@2 H@8 I@2 J K D@4 H@8 I@2 J K D@4 H@8 I@2 J K D@4 H@8 I@2 J K D@4
>`.pickRestart({
  A: "[f4@63 g4@65, [bb3,d4]]/8", B: "[~ [a3,c4], f4]/8", C: "[[eb4,g4] d4 [a3,c4]@2, bb3 ~, ~ f4@3]/8",
  D: "[d4,f4,bb4]/4", E: "[~ c4, [eb4,g4]]/8", F: "[[a3,c4,f4]@31 ~]/4", G: "[a3,c4,f4]/4",
  H: "[[d4,f4]@64 [eb4,g4]@63 ~, bb4]/8", I: "[[c4,eb4,g4]@3 [bb3,d4,f4]]/2", J: "[a3,c4,f4]", K: "[g3,bb3,eb4]",
  L: "[eb4,g4,bb4]", M: "[[a4,c5] d5@2 [g4,eb5], f4@3 ~, ~ bb4@3]/4", N: "d5 c5, [f4,a4]",
  O: "[[g4,bb4,d5]@3 [f4,a4,c5]]/2", P: "[g4,bb4,eb5]", Q: "[f4,a4,c5]", R: "[[bb4,d5,f5]@3 [f4,a4,c5]]/2",
  S: "[g4,bb4,eb5]/2", T: "[a4,c5,f5]/2", U: "[c5,f5,a5]/2", V: "[f4,a4,c5] [eb4,g4,bb4]", W: "[[f4,a4,c5]@31 ~]/2",
})).s("gm_synth_strings_1").gain(0.3).pan(0.2)

// chords · lead 3 calliope
const lead_3_calliope = note(`<
  ~@2 A B C D E F G H I@2 J K L M N O A B C D E F G H P Q R S T U V W I X Y Z AA AB Q AB@5 AC AD AC@2 A B C D E F G H
  I@2 J K L M N O A B C D E F G H P Q R S T U V W I X Y Z AA AB Q AB@5 AC AD AC@2 R@4 AB@4 AE AF AC AB R@4 AG AH AI@2 AG
  AH AJ AK AG AH AI AL AG@2 AH@4 I X Y Z AA AB Q AB@5 AC AD AC@2 R@4 AB@4 AE AF AC AB R@8 AB@4 AE AF AC AB R@8 AB@4 AE
  AF AC AB R@8 AB@4 AE AF AC AB R@2 AM ~
>`.pickRestart({
  A: "[d5,f5,bb5] ~ bb5 ~ [f5,bb5] ~ bb5 ~ [d5,f5,bb5] ~ [f5,bb5] ~ [f5,bb5] ~ [f5,bb5] ~", // Bb Bb5 Bb Bb5
  B: "[d5,f5,bb5] ~ [f5,bb5] ~ bb5 ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~ bb5 ~ [d5,f5,bb5] ~", // Bb Bb5 Bb Bb5 Bb
  C: "[d5,f5,bb5] ~ [f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~", // Bb Bb5 Bb Bb5 Bb
  D: "[d5,f5,bb5] ~ [f5,bb5] ~ [f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~", // Bb Bb5 Bb Bb5 Bb
  E: "[d5,g5,bb5] ~ [d5,g5,bb5] ~ [d5,g5,bb5] ~ [d5,g5,bb5] ~ [d5,g5,bb5] ~ [g5,bb5] ~ [d5,g5,bb5] ~ [d5,g5,bb5] ~", // Gm
  F: "[d5,g5,bb5] ~ bb5 ~ [d5,g5,bb5] ~ bb5 ~ [d5,g5,bb5] ~ [g5,bb5] ~ [d5,g5,bb5] ~ [g5,bb5] ~", // Gm
  G: "[d5,g5,bb5] ~ [g5,bb5] ~ [d5,g5,bb5] ~ [d5,g5,bb5] ~ [d5,g5,bb5] ~ [g5,bb5] ~ [g5,bb5] ~ [d5,g5,bb5] ~", // Gm
  H: "[d5,g5,bb5] ~ [g5,bb5] ~ [d5,g5,bb5] ~ [d5,g5,bb5] ~ [d5,g5,bb5] ~ [g5,bb5] ~ [g5,bb5] ~ [d5,g5] ~", // Gm G5
  I: "[d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~", // Bb Bb5 Bb
  J: "[d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~", // Bb Bb5 Bb Bb5 Bb Bb5
  K: "[d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~ [f5,bb5] ~", // Bb Bb5 Bb Bb5 Bb Bb5
  L: "[f5,a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~ [a5,c6] ~ [a5,c6] ~", // F Am F Am F Am
  M: "[f5,a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [a5,c6] ~", // F Am F Am
  N: "[f5,a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [a5,c6] ~", // F Am F Am
  O: "[f5,a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~", // F Am F
  P: "[eb5,g5,bb5] ~ [g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~", // Eb Gm Eb
  Q: "[eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [g5,bb5] ~ [eb5,g5,bb5] ~", // Eb Gm Eb
  R: "[d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~", // Bb
  S: "[d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~", // Bb Bb5
  T: "[f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~ [a5,c6] ~", // F Am F Am
  U: "[f5,a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~", // F Am F Am F Am F
  V: "[f5,a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~", // F Am F Am F
  W: "[f5,a5,c6] ~ [a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~", // F Am F
  X: "[d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~", // Bb Bb5 Bb Bb5 Bb Bb5 Bb
  Y: "[d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~", // Bb Bb5 Bb Bb5 Bb
  Z: "[d5,f5,bb5] ~ [f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~", // Bb Bb5 Bb
  AA: "[eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~", // Eb Gm Eb
  AB: "[eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~", // Eb
  AC: "[c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~", // F
  AD: "[c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c5,f5] ~", // F F5
  AE: "[eb5,g5,c6] ~ [eb5,g5,c6] ~ [eb5,g5,c6] ~ [eb5,g5,c6] ~ [eb5,g5,c6] ~ [eb5,g5,c6] ~ [eb5,g5,c6] ~ [eb5,g5,c6] ~", // Cm
  AF: "[eb5,g5,c6] ~ [eb5,g5,c6] ~ [eb5,g5,c6] ~ [eb5,g5,c6] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~", // Cm Bb
  AG: "[g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~", // Eb
  AH: "[a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~", // F
  AI: "[bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~", // Bb
  AJ: "[bb4,d5,g5] ~ [bb4,d5,g5] ~ [bb4,d5,g5] ~ [bb4,d5,g5] ~ [bb4,d5,g5] ~ [bb4,d5,g5] ~ [bb4,d5,g5] ~ [bb4,d5,g5] ~", // Gm
  AK: "[bb4,d5,g5] ~ [bb4,d5,g5] ~ [bb4,d5,g5] ~ [bb4,d5,g5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~", // Gm F
  AL: "[bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~", // Bb F
  AM: "[d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~@3", // Bb
})).s("gm_lead_3_calliope").gain(0.05).pan(0.8)

// chords · lead 3 calliope · soft notes
const lead_3_calliope_soft = note(`<
  ~@2 A B C D E F G H E@2 I J K L M N A B C D E F G H O P ~ Q R S T U E V W X Y ~ P ~@6 Z ~@2 A B C D E F G H E@2 I J K
  L M N A B C D E F G H O P ~ Q R S T U E V W X Y ~ P ~@6 Z ~@36 E V W X Y ~ P ~@6 Z ~@66
>`.pickRestart({
  A: "~@2 [d5,f5] ~ d5 ~ [d5,f5] ~@3 d5 ~ d5 ~ d5 ~", B: "~@2 d5 ~ [d5,f5] ~@5 d5 ~ [d5,f5] ~@3",
  C: "~@2 d5 ~ d5 ~@7 d5 ~@3", D: "~@2 d5 ~ d5 ~ d5 ~@3 d5 ~ d5 ~@3", E: "~@10 d5 ~@5",
  F: "~@2 [d5,g5] ~@3 [d5,g5] ~@3 d5 ~@3 d5 ~", G: "~@2 d5 ~@7 d5 ~ d5 ~@3", H: "~@2 d5 ~@7 d5 ~ d5 ~ bb5 ~",
  I: "~@2 d5 ~@7 d5 ~@3 d5 ~", J: "~@2 d5 ~@3 d5 ~@5 d5 ~ d5 ~", K: "~@2 f5 ~@5 f5 ~@3 f5 ~ f5 ~",
  L: "~@2 f5 ~ f5 ~ f5 ~@3 f5 ~ f5 ~ f5 ~", M: "~@2 f5 ~ f5 ~@5 f5 ~ f5 ~ f5 ~", N: "~@2 f5 ~ f5 ~ f5 ~ f5 ~@7",
  O: "~@2 eb5 ~@13", P: "~@12 eb5 ~@3", Q: "~@14 d5 ~", R: "~@10 f5 ~@3 f5 ~", S: "~@2 f5 ~@3 f5 ~@3 f5 ~ f5 ~@3",
  T: "~@2 f5 ~@7 f5 ~@5", U: "~@2 f5 ~@13", V: "~@2 d5 ~@3 d5 ~@3 d5 ~@5", W: "~@2 d5 ~@7 d5 ~@5", X: "~@2 d5 ~@13",
  Y: "~@10 eb5 ~@5", Z: "~@14 a5 ~",
})).s("gm_lead_3_calliope").gain(0.03).pan(0.8)

// other · pad poly
const pad_poly = note(`<
  ~@18 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 A@2 B@2 I@2 J@2 K@4 G@2 H@2 A@2 B@2 C@2 D@2 A@2 B@2 G@2 H@2 A@2 B@2 C@2 D@2 E@2
  F@2 G@2 H@2 A@2 B@2 I@2 J@2 K@4 G@2 H@2 A@2 B@2 I@2 J@2 L@2 M N A@2 B@2 O P Q@2 R S T@2 U S V@2 W@2 X Y Z@2 A@2 B@2
  I@2 J@2 K@4 G@2 H@2 A@2 B@2 I@2 J@2 L@2 M N A@2 B@2 A@2 B@2 I@2 J@2 L@2 M N A@2 B@2 A@2 B@2 I@2 J@2 L@2 M N A@2 B@2
  A@2 B@2 I@2 J@2 L@2 M N A@2 B@2
>`.pickRestart({
  A: "[bb3@4 c4@4 f4@4 d4@19 ~]/2", B: "[bb3@4 c4@4 f4@4 d4@17 ~@3]/2", C: "[bb4 a4 d4 g4@4 ~]/2",
  D: "[bb4@2 a4@2 d4@2 g4@7 ~@3]/2", E: "[g4 f4 bb3 eb4@3 ~@2]/2", F: "[f4@4 c4@4 bb3@4 d4@15 ~@5]/2",
  G: "[a4@4 g4@4 c4@4 f4@19 ~]/2", H: "[a4@4 g4@4 c4@4 f4@15 ~@5]/2", I: "[g4@4 f4@4 eb4@4 bb3@15 ~@5]/2",
  J: "[g4@4 f4@4 eb4@4 bb3@13 ~@7]/2", K: "[c4@4 d4@4 eb4@19 ~@5]/2", L: "[[eb4,g4]@24 [d4,f4]@7 ~]/2", M: "[c4,f4]",
  N: "[bb3,eb4]", O: "~@13 eb4@2 ~, g4", P: "~@3 f4, a4@7 ~", Q: "[bb4@23 ~ bb4@4 f4@4]/2", R: "g4", S: "a4@15 ~",
  T: "[bb4@23 ~ a4@8]/2", U: "~ g4@8 eb4@3 g4@4", V: "[~@27 a4@5, bb4@29 ~@3]/2", W: "[g4@6 g4 eb4]/2",
  X: "~@2 a4 c5, a4@3 ~@5, ~@4 f4@9 ~@3", Y: "~ a4 c5 a4, f4@15 ~",
  Z: "[~@4 c5@2 ~@6 f4@3 ~, f4@10 ~@2 f4@11 ~@9, ~@4 a4@8 ~@4 a4@9 ~@7, ~@20 c5@9 ~@3]/2",
})).s("gm_pad_poly").gain(0.31).pan(0.4)

// other · synth strings 1
const synth_strings_1_2 = note(`<
  ~@18 A@4 B@2 C@4 D@2 E@2 F@2 G@4 H@4 I@4 J@2 K@2 A@4 B@2 L@2 A@4 E@2 F@2 A@4 B@2 C@4 D@2 E@2 F@2 G@4 H@4 I@4 J@2 K@2
  G@4 H@4 M@2 N O G@4 P Q R@2 S Q T@2 P Q U@2 V@2 F@4 G@4 H@4 I@4 J@2 K@2 G@4 H@4 M@2 N O G@8 H@4 M@2 N O G@8 H@4 M@2 N
  O G@8 H@4 M@2 N O W@4
>`.pickRestart({
  A: "[bb2@31 ~]/2", B: "[g2@7 ~]/2", C: "[g2@28 ~@3 eb2@24 ~@9]/4", D: "[d2@11 ~@5]/2", E: "[f2@5 ~@3]/2",
  F: "[f2@31 ~]/2", G: "[bb2@55 ~ d3@8]/4", H: "[eb3@7 d3]/4", I: "[~@16 c4@2 d4@2 eb4@11 ~, c3]/4",
  J: "[c4@23 ~ g3@8]/2", K: "[a3@29 ~@3]/2", L: "[g2@28 ~@3 eb2]/2", M: "[c3@23 ~ bb2@7 ~]/2", N: "f3", O: "eb3",
  P: "eb2@15 ~", Q: "f2", R: "[bb2@3 d2]/2", S: "eb2", T: "[g2@3 f2]/2", U: "[bb2@3 f2]/2", V: "eb2/2",
  W: "[bb2@55 ~@9]/4",
})).s("gm_synth_strings_1").gain(0.3).pan(0.7)

// other · piano
const piano = note(`<
  ~@34 A@4 B@2 C@2 D@3 ~ E@4 F@4 G@4 H@4 I@4 F@4 J@4 K@2 L@2 M@4 A@4 B@2 C@2 D@3 ~ E@4 A@4 B@2 C@2 ~@4 A@4 N O P@2 N O
  Q@2 N O P@2 B@2 I@4 A@4 B@2 C@2 D@3 ~ E@4 A@4 B@2 C@2 ~@4 A@8 B@2 C@2 ~@4 A@8 B@2 C@2 ~@4 A@8 B@2 C@2 ~@4 A@4
>`.pickRestart({
  A: "[[bb1,bb2]@15 ~]/4", B: "[[eb2,eb3]@31 ~]/2", C: "[eb1,eb2]/2", D: "[c2,c3]/3", E: "[[f1,f2]@57 ~@7]/4",
  F: "[bb1@29 ~@3, bb2@7 ~]/4", G: "[[g1,g2]@15 ~]/4", H: "[bb1,bb2]/4", I: "[[f2,f3]@15 ~]/4", J: "[[g1,g2]@29 ~@3]/4",
  K: "[[eb2,eb3]@29 ~@3]/2", L: "[[d2,d3]@27 ~@5]/2", M: "[[f1,f2]@61 ~@3]/4", N: "[eb2,eb3]", O: "[f2,f3]@15 ~",
  P: "[[bb1,bb2]@15 ~]/2", Q: "[[g2,g3]@24 [f2,f3]@7 ~]/2",
})).s("gm_piano").gain(0.54)

// drums · kick
const kick = s("bd").struct(`<
  ~@34 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A
  B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A B A C A B A C A B A C A B A C A B
  A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A
  B A C
>`.pickRestart({
  A: "x!2 ~@6", B: "x ~@2 x", C: "x",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@34 [~ x]!48 ~@130>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@82 [~ x]!130>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@97 x ~@114>").gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@81 A ~@6 B ~@8 A ~@33 A ~@6 B ~@73>".pickRestart({
  A: "~@3 x", B: "x!2 ~@6",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@80 A B C ~@4 D ~@8 A B ~@3 D C ~@2 D C E ~ F C ~ G H ~@4 C ~@3 C ~@3 C ~@3 A B C ~@4 D ~@8 G H ~@3 D C ~@2 D C E ~ F
  C ~ G H ~@3 D C ~@2 D C E ~ F C ~ G H ~@3 D C ~@2 D C E ~ F C ~ G H ~@3 D C ~@2 D C E ~ F C ~ G H
>`.pickRestart({
  A: "~ x ~ x!2 ~@2 x", B: "x ~ x ~ x!2 ~@2", C: "x!2 ~@6", D: "~@4 x!4", E: "~@2 x!2", F: "~@5 x!2 ~",
  G: "~@2 x ~@3 x ~ x ~@5 x!2", H: "~ x ~ x!4 ~",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@109 A ~@49 A ~@15 A ~@15 A ~@15 A ~@4>".pickRestart({
  A: "~ x!2 ~@5",
})).gain(0.35)

stack(
  bass, synth_strings_1, lead_3_calliope, lead_3_calliope_soft, pad_poly, synth_strings_1_2, piano, kick, rim, snare,
  hihat, low_tom, mid_tom, high_tom
)

More by Laura Branigan