Strudelify

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: 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 N A B G O G H I N I B P Q K M R S T U G V 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 W X Y Z A B A B R AA I B R AA K M R AB I B R AC AD AE AF AG A B A B C D C D E F E F G H
  G@2 A B A B C D C D W X Y Z A B A B A B A B C D C D W X Y Z A B A B A B A B C D C D W X Y Z A B A B A B A B C D C D W
  X Y Z 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 ~@11 bb1@2 ~@2", K: "g1 ~ g1@2 ~@12",
  L: "g1@2 ~@10 g1 ~@3", M: "g1 ~@7", N: "bb1@2 ~@10 bb1 ~@3", O: "f1@2 ~@10 f1 ~@3", P: "~ f1 g1@4 ~@10, ~@2 gb1 ~@13",
  Q: "g1 ~@5 g1 ~", R: "eb2 ~ eb2@2 ~@12", S: "eb2 ~@7", T: "d2 ~ d2@3 ~@11", U: "d2 ~@7", V: "f1 ~@5 f1 ~",
  W: "c2 ~ c2@2 ~@12", X: "c2@3 ~ bb1@2 ~@2", Y: "f1!2 ~@6", Z: "eb1@5 ~@3 eb1 ~ eb1@3 ~@3", AA: "f2@2 ~@10 f2 ~@3",
  AB: "f2@2 ~@10 f2@3 ~", AC: "eb2 ~@5 eb2 ~", AD: "f2 ~ f2 ~@13", AE: "f2 ~@7", AF: "f2 ~ f2@2 ~@12",
  AG: "f2 ~@5 f2 ~",
})).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 I@2 J@2 K@2 L@2 M@2 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 I@2 J@2 K@2 L@2 M@2 G@2 H@2 A@2 I@2 J@2 K@2 N@2 O P A@2 I@2 Q R S@2 T U V@2 W U X@2 Y@2 Z AA AB@2
  A@2 I@2 J@2 K@2 L@2 M@2 G@2 H@2 A@2 I@2 J@2 K@2 N@2 O P A@2 I@2 A@2 I@2 J@2 K@2 N@2 O P A@2 I@2 A@2 I@2 J@2 K@2 N@2 O
  P A@2 I@2 A@2 I@2 J@2 K@2 N@2 O P A@2 I@2
>`.pickRestart({
  A: "[bb3@4 c4@4 f4@4 d4@19 ~]/2", B: "[bb3 c4 f4 d4@4 ~]/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: "[bb3@4 c4@4 f4@4 d4@17 ~@3]/2",
  J: "[g4@4 f4@4 eb4@4 bb3@15 ~@5]/2", K: "[g4@4 f4@4 eb4@4 bb3@13 ~@7]/2", L: "[c4@4 d4@4 eb4@19 ~@5]/2",
  M: "[c4 d4 eb4@5 ~]/2", N: "[[eb4,g4]@24 [d4,f4]@7 ~]/2", O: "[c4,f4]", P: "[bb3,eb4]", Q: "~@13 eb4@2 ~, g4",
  R: "~@3 f4, a4@7 ~", S: "[bb4@23 ~ bb4@4 f4@4]/2", T: "g4", U: "a4@15 ~", V: "[bb4@3 a4]/2", W: "~ g4@8 eb4@3 g4@4",
  X: "[~@27 a4@5, bb4@29 ~@3]/2", Y: "[g4@6 g4 eb4]/2", Z: "~@2 a4 c5, a4@3 ~@5, ~@4 f4@9 ~@3",
  AA: "~ a4 c5 a4, f4@15 ~", AB: "[~@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@2 B@2 C@2 D@4 E@2 F@2 G@2 H@4 I@4 J@4 K@2 L@2 A@2 B@2 C@2 M@2 A@2 B@2 F@2 G@2 A@2 B@2 C@2 D@4 E@2 F@2 G@2 H@4
  I@4 J@4 K@2 L@2 H@4 I@4 N@2 O P H@4 Q R S@2 T R U@2 T R V@2 W@2 X@2 G@2 H@4 I@4 J@4 K@2 L@2 H@4 I@4 N@2 O P H@8 I@4
  N@2 O P H@8 I@4 N@2 O P H@8 I@4 N@2 O P Y@4
>`.pickRestart({
  A: "[bb2@31 ~]/2", B: "[bb2@15 ~]/2", C: "[g2@7 ~]/2", D: "[g2@28 ~@3 eb2@24 ~@9]/4", E: "[d2@11 ~@5]/2",
  F: "[f2@5 ~@3]/2", G: "[f2@31 ~]/2", H: "[bb2@55 ~ d3@8]/4", I: "[eb3@7 d3]/4", J: "[~@16 c4@2 d4@2 eb4@11 ~, c3]/4",
  K: "[c4@23 ~ g3@8]/2", L: "[a3@29 ~@3]/2", M: "[g2@28 ~@3 eb2]/2", N: "[c3@23 ~ bb2@7 ~]/2", O: "f3", P: "eb3",
  Q: "eb2@15 ~", R: "f2", S: "[bb2@3 d2]/2", T: "eb2", U: "[g2@3 f2]/2", V: "[bb2@3 f2]/2", W: "eb2/2", X: "f2/2",
  Y: "[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 J@4 K@4 L@2 M@2 N@4 A@4 B@2 C@2 D@3 ~ E@4 A@4 B@2 C@2 ~@4 A@4 O P Q@2 O P
  R@2 O S Q@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: "[[bb1,bb2]@29 ~@3]/4", K: "[[g1,g2]@29 ~@3]/4", L: "[[eb2,eb3]@29 ~@3]/2", M: "[[d2,d3]@27 ~@5]/2",
  N: "[[f1,f2]@61 ~@3]/4", O: "[eb2,eb3]", P: "[f2,f3]@15 ~", Q: "[[bb1,bb2]@15 ~]/2", R: "[[g2,g3]@24 [f2,f3]@7 ~]/2",
  S: "[f2,f3]@7 ~", // F
})).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