Strudelify

The Force, Part I

Droids

KeyE minorTempo138 bpm
0:00/0:00
// The Force, Part I — Droids
// 138 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 217 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(138/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 1 · "SYNTH BASS"
const bass = note(`<
  A B C D E F G H@4 I J K L M N O P Q K@2 P Q R S T I U V W P@3 X P K@2 P@6 K@2 P@2 Y Z P@2 Y Z P@10 Y AA AB K P@4 Y AA
  AB K P@6 Y@4 AC@2 Y@6 AC@2 Y@2 K AD Y@2 K AD Y@2 AE I P@2 K AF P@6 K@2 P@18 AG AH AI AJ AH@3 AK@2 AH AL@2 AM@4 AL@2
  AM@4 AL@2 AN@2 AO@2 AP AQ@2 AR AS@8 AT@2 AS@6 AT@2 AS@2 AU AV AW AU@2 AV AW AU AS@4 AT@2 AS@10 AX ~@2
>`.pickRestart({
  A: "e2 b2 e2 b2 e2 b2 e2 b2", B: "e2@2 b2@2 e2@2 b2@2 e2 ~ b2@2 e2 ~ b2@2",
  C: "e2@2 b2 ~ e2 ~ b2 ~ e2@2 b2@2 e2@2 b2@2", D: "e2 ~ b2 ~ e2 ~ b2@2 e2@2 b2@2 e2@2 b2@2",
  E: "e2@2 b2@2 e2@2 b2@2 e2@2 b2@2 e2@2 b2 ~", F: "e2 ~ b2 ~ e2@2 b2 ~ e2@2 b2 ~ e2@2 b2 ~",
  G: "e2@2 b2 ~ e2@2 b2@2 e2 ~ b2@2 e2@2 b2 ~", H: "e2@2 b2 ~ e2@2 b2 ~ e2@2 b2 ~ e2@2 b2 ~",
  I: "e2@2 b2 ~ e2@2 b2 ~ e2@2 b2 ~ e2 ~ b2 ~", J: "d2 ~ a2 ~ d2 ~ a2 ~ d2 ~ a2 ~ d2@2 a2 ~",
  K: "d2 ~ a2 ~ d2 ~ a2 ~ d2 ~ a2 ~ d2 ~ a2 ~", L: "e2@2 b2 ~ e2 ~ b2 ~ e2@2 b2 ~ e2@2 b2 ~",
  M: "e2 ~ b2 ~ e2@2 b2 ~ e2@2 b2@2 e2 ~ b2 ~", N: "e2 ~ b2 ~ e2@2 b2 ~ e2@2 b2 ~ e2 ~ b2 ~",
  O: "e2@2 b2 ~ e2 ~ b2 ~ e2 ~ b2 ~ e2@2 b2 ~", P: "e2 ~ b2 ~ e2 ~ b2 ~ e2 ~ b2 ~ e2 ~ b2 ~",
  Q: "e2 ~ b2 ~ e2 ~ b2 ~ e2 ~ b2 ~ e2@2 b2 ~", R: "a1 ~ e2 ~ a1@2 e2 ~ a1@2 e2 ~ a1 ~ e2 ~",
  S: "c2 ~ g2 ~ c2@2 g2 ~ b1@2 f#2 ~ b1 ~ f#2 ~", T: "e2@2 b2 ~ e2@2 b2 ~ e2 ~ b2 ~ e2 ~ b2 ~",
  U: "a1@2 e2 ~ a1@2 e2 ~ a1 ~ e2 ~ a1@2 e2 ~", V: "c2 ~ g2 ~ c2@2 g2 ~ b1 ~ f#2 ~ b1 ~ f#2 ~",
  W: "e2 ~ b2 ~ e2 ~ b2 ~ e2@2 b2 ~ e2 ~ b2 ~", X: "e2@2 b2 ~ e2 ~ b2 ~ e2 ~ b2 ~ e2 ~ b2 ~",
  Y: "a1 ~ e2 ~ a1 ~ e2 ~ a1 ~ e2 ~ a1 ~ e2 ~", Z: "c2 ~ g2 ~ c2 ~ g2 ~ b1 ~ f#2 ~ b1 ~ f#2 ~",
  AA: "b1 ~ f#2 ~ b1 ~ f#2 ~ b1 ~ f#2 ~ b1 ~ f#2 ~", AB: "c2 ~ g2 ~ c2 ~ g2 ~ c2 ~ g2 ~ c2 ~ g2 ~",
  AC: "g1 ~ d2 ~ g1 ~ d2 ~ g1 ~ d2 ~ g1 ~ d2 ~", AD: "f2 ~ c3 ~ f2 ~ c3 ~ e2 ~ b2 ~ e2 ~ b2 ~",
  AE: "e2 ~ b2 ~ e2@2 b2 ~ e2 ~ b2 ~ e2@2 b2 ~", AF: "d2@2 a2 ~ d2 ~ a2 ~ d2 ~ a2 ~ d2 ~ a2 ~",
  AG: "a3@2 a4@2 a3@2 a4@2 a3@2 a4 ~ a3@2 a4 ~", AH: "a3@2 a4 ~ a3@2 a4 ~ a3@2 a4 ~ a3@2 a4 ~",
  AI: "a3@2 a4 ~ a3@2 a4@2 a3@2 a4@2 a3@2 a4@2", AJ: "a3 a4 a3 a4 a3 a4 a3 a4",
  AK: "a3@2 a4 ~ a3@2 a4 ~ a3 ~ a4 ~ a3@2 a4 ~", AL: "g3 ~ g4 ~ g3 ~ g4 ~ g3 ~ g4 ~ g3 ~ g4 ~",
  AM: "a3 ~ a4 ~ a3 ~ a4 ~ a3 ~ a4 ~ a3 ~ a4 ~", AN: "e3 ~ e4 ~ e3 ~ e4 ~ e3 ~ e4 ~ e3 ~ e4 ~",
  AO: "d3 ~ d4 ~ d3 ~ d4 ~ d3 ~ d4 ~ d3 ~ d4 ~", AP: "a2@2 a3 ~ a2@2 a3 ~ a2 ~ a3 ~ a2 ~ a3 ~",
  AQ: "a2 ~ a3 ~ a2 ~ a3 ~ a2 ~ a3 ~ a2 ~ a3 ~", AR: "a2@2 a3 ~ a2 ~ a3 ~ a2 ~ a3 ~ a2 ~ a3 ~",
  AS: "a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~", AT: "g2 ~ d3 ~ g2 ~ d3 ~ g2 ~ d3 ~ g2 ~ d3 ~",
  AU: "d3 ~ a3 ~ d3 ~ a3 ~ d3 ~ a3 ~ d3 ~ a3 ~", AV: "f3 ~ c4 ~ f3 ~ c4 ~ f3 ~ c4 ~ f3 ~ c4 ~",
  AW: "d#3 ~ a#3 ~ d#3 ~ a#3 ~ d#3 ~ a#3 ~ d#3 ~ a#3 ~", AX: "a2 ~@15",
})).s("gm_synth_bass_1").gain(0.35).pan(0.2)

// bass · synth bass 2 · "SYNTH BASS"
const bass_2 = note(`<
  A B C B D E F D G E H E I@2 E@6 I@2 E@2 J K E@2 J K E@6 I@2 E@6 I@2 E@2 J K E@2 J K E@10 J L M N E@4 J L M N E@6 J@4
  O@2 J@6 O@2 J P Q R S P N T U@2 E@4 I@2 E@2 V E@3 I@2 E@16 V E ~@32 W X J@6 O@2 J@6 O@2 J@2 N Y Z N@2 Y Z N J@4 O@2
  J@10 AA ~@2
>`.pickRestart({
  A: "e1@2 e2 ~ e1@2 e2 ~ e1@2 e2 ~ e1@2 e2 ~", B: "e1@2 e2 ~ e1@2 e2 ~ e1@2 e2 ~ e1 ~ e2 ~",
  C: "e1 ~ e2 ~ e1@2 e2 ~ e1@2 e2 ~ e1@2 e2 ~", D: "e1 ~ e2 ~ e1@2 e2 ~ e1@2 e2 ~ e1 ~ e2 ~",
  E: "e1 ~ e2 ~ e1 ~ e2 ~ e1 ~ e2 ~ e1 ~ e2 ~", F: "e1 ~ e2 ~ e1 ~ e2 ~ e1@2 e2 ~ e1@2 e2 ~",
  G: "e1 ~ e2 ~ e1 ~ e2 ~ e1 ~ e2 ~ e1@2 e2 ~", H: "e1 ~ e2 ~ e1@2 e2 ~ e1 ~ e2 ~ e1 ~ e2 ~",
  I: "d1 ~ d2 ~ d1 ~ d2 ~ d1 ~ d2 ~ d1 ~ d2 ~", J: "a1 ~ a2 ~ a1 ~ a2 ~ a1 ~ a2 ~ a1 ~ a2 ~",
  K: "c2 ~ c3 ~ c2 ~ c3 ~ b1 ~ b2 ~ b1 ~ b2 ~", L: "b1 ~ b2 ~ b1 ~ b2 ~ b1 ~ b2 ~ b1 ~ b2 ~",
  M: "c2 ~ c3 ~ c2 ~ c3 ~ c2 ~ c3 ~ c2 ~ c3 ~", N: "d2 ~ d3 ~ d2 ~ d3 ~ d2 ~ d3 ~ d2 ~ d3 ~",
  O: "g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~", P: "a1@2 a2 ~ a1@2 a2 ~ a1 ~ a2 ~ a1 ~ a2 ~",
  Q: "d2 ~ d3 ~ d2 ~ d3 ~ d2 ~ d3 ~ d2@2 d3 ~", R: "f2 ~ f3 ~ f2@2 f3 ~ e2 ~ e3 ~ e2@2 e3 ~",
  S: "a1@2 a2 ~ a1@2 a2 ~ a1@2 a2 ~ a1@2 a2 ~", T: "f2 ~ f3 ~ f2 ~ f3 ~ e2 ~ e3 ~ e2@2 e3 ~",
  U: "a1@2 a2 ~ a1 ~ a2 ~ a1 ~ a2 ~ a1 ~ a2 ~", V: "e1@2 e2 ~ e1 ~ e2 ~ e1 ~ e2 ~ e1 ~ e2 ~",
  W: "a1@2 a2 ~ a1 ~ a2 ~ a1@2 a2 ~ a1@2 a2 ~", X: "a1@2 a2 ~ a1@2 a2 ~ a1 ~ a2 ~ a1@2 a2 ~",
  Y: "f2 ~ f3 ~ f2 ~ f3 ~ f2 ~ f3 ~ f2 ~ f3 ~", Z: "d#2 ~ d#3 ~ d#2 ~ d#3 ~ d#2 ~ d#3 ~ d#2 ~ d#3 ~", AA: "a1 ~@7",
})).s("gm_synth_bass_2").gain(0.45).pan(0.7)

// other · clavinet
const clavinet = note(`<
  ~@64 A B C D E@2 F G H I J K L M L@2 N O ~@28 P ~@11 Q@2 R@2 S T Q R U V Q R Q W X R Y ~@31 Z AA AB AC AD AE AC AF
  AG@2 AB AH AI AC AB AJ AK AL AM@2 AN AO AP AQ AR AS AT AU AB@2 AV AM AK AW AM@4 AX AM AY AM AX AM ~@3
>`.pickRestart({
  A: "a2@2 a3 e3 a2@2 a3 e3 a2@2 a3 e3 a2 e3 a3 e3", B: "b2@2 b3 f#3 b2@2 b3 f#3 b2@2 b3 f#3 b2 f#3 ~ f#3, ~@7 b3",
  C: "c3@2 c4 g3 c3@2 c4 g3 c3@2 c4 g3 ~ g3 c4 g3, ~@6 c3 ~",
  D: "d3@2 d4 a3 d3@2 d4 a3 d3@2 d4 a3 ~ a3 d4 a3, ~@12 d3@3 ~",
  E: "e3@2 e4 b3 e3@2 e4 b3 e3@2 e4 b3 ~ b3 e4 b3, ~@6 e3 ~",
  F: "e3@2 ~ b3 e3@2 e4 b3 e3@2 e4 b3 ~ b3 ~ b3, ~ e4 ~@4 e3 e4",
  G: "e3@2 e4 b3 e3@2 ~ b3 e3@2 ~ b3 e3 ~ b3 e3, ~@6 e4@2 ~@2 e4@2 ~ e4@2 ~",
  H: "a2@2 a3 ~ a2@2 a3 ~ a2@2 a3 e3 a2 e3 a3 e3, ~@3 e3@2 ~@2 e3@2 ~@7",
  I: "b2@2 b3 f#3 b2@2 b3 f#3 b2@2 b3 f#3 b2 f#3 b3 f#3",
  J: "c3@2 c4 ~ c3@2 c4 g3 c3@2 c4 g3 c3 g3 c4 g3, ~@3 g3@2 ~@11", K: "d3@2 d4 a3 d3@2 d4 a3 d3@2 d4 a3 d3 a3 d4 a3",
  L: "e3@2 e4 b3 e3@2 e4 b3 e3@2 e4 b3 e3 b3 e4 b3", M: "e3@2 ~ b3 e3@2 e4 b3 e3@2 ~ b3 e3 b3 e4 b3, ~ e4 ~@3 e4 ~@2",
  N: "e3@2 e4 b3 e3@2 e4 b3 e3@2 ~ b3 e3 b3 e4 b3, ~@5 e4 ~@2", O: "e3@2 e4 b3 e3@2 e4 b3 e3@2 e4 b3 e3 b3 e4 ~",
  P: "~@15 b2", Q: "e2@2 e3 b2 e2@2 e3 b2 e2@2 e3 b2 e2 b2 e3 b2",
  R: "e2@2 e3 b2 e2@2 e3 b2 e2@2 e3 b2 e2 b2 ~ b2, ~@7 e3", S: "e2@2 e3 b2 e2@2 e3 b2 e2@2 e3 b2 ~ b2 ~ b2, ~@6 e2 e3",
  T: "e2@2 e3 b2 e2@2 e3 b2 e2@2 ~ b2 e2 b2 e3 b2, ~@5 e3 ~@2", U: "e2@2 e3 b2 e2@2 e3 b2 e2@2 e3 b2 e2 e3 b2@2",
  V: "e2@2 e3 ~ e2@2 e3 b2 e2@2 ~ b2 e2 b2 ~ b2, ~@3 b2@2 ~@5 e3@2 ~@2 e3@2",
  W: "e2@2 e3 b2 e2@2 e3 b2 e2 ~ e3 b2 e2 b2 e3 b2", X: "e2@2 e3 b2 e2 ~ e3 b2 e2@2 e3 b2 e2@2 e3 b2", Y: "e2 ~@7",
  Z: "a1@2 a2 ~ g2 ~ a2 ~ a1 ~ a2 a1 ~ a1 g2 a2", AA: "a1 ~ a2 ~ [a1,g2] ~ a2 ~ a1 ~ a2 a1 ~ a1 g2 a2",
  AB: "a1 ~ a2 ~ g2 ~ a2 ~ a1 ~ a2 a1 ~ a1 g2 a2", AC: "a1 ~ a2 ~ a1 ~ a2 ~ a1 ~ a2 a1 ~ a1 g2 a2",
  AD: "a1 ~ a2 a1 g2 ~ a2 ~ a1 ~ a2 a1 ~ a1 g2 a2", AE: "a1 ~ a2 ~ [a1,b1,g2] ~ a2 ~ a1 ~ a2 a1 ~ a1 g2 a2",
  AF: "a1 ~ a2 ~ a1 ~ a2 ~ a1 a2 ~ a1 g2 a1 a2 ~", AG: "g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 g1 ~ g1 g2!2",
  AH: "a1 ~ a2 ~ g2 ~ a2 ~ a1 a2 ~ a1 g2 a1 a2!2", AI: "a1 ~ a2 ~ [a1,g2] ~ a2 ~@3 a2 a1 g2 a1 a2!2",
  AJ: "a1 ~ a2 ~@3 a2 ~ a1 ~ a2 ~@2 a1 g2 a2", AK: "g1 ~ g2 ~@3 g2 ~ g1 ~ g2 g1 ~ g1 g2!2",
  AL: "g1 ~ g2 ~@3 g2 ~ [g1,a1] ~ g2 g1 ~ g1 g2!2", AM: "a1 ~ a2 ~@3 a2 ~ a1 ~ a2 a1 ~ a1 g2 a2",
  AN: "d2 ~ d3 ~ d2 ~ d3 ~ d2 ~ d3 d2 ~ d2 c3 d3", AO: "f2 ~ f3 ~ f2 ~ f3 ~ f2 ~ f3 f2 ~ f2 f3!2",
  AP: "d#2 ~ d#3 ~ d#2 ~ d#3 ~ d#2 ~ d#3 d#2 ~ d#2 d#3!2", AQ: "d2 ~ d3 ~ d2 ~ d3 ~ d2 ~ d3 d2 c3 d2 d3 ~",
  AR: "d2 ~ d3 ~@3 d3 ~ d2 ~ d3 d2 ~ d2 d3!2", AS: "f2 ~ f3 ~@3 f3 ~ f2 ~ f3 f2 ~ f2 f3!2",
  AT: "d#2 ~ d#3 ~@3 d#3 ~ d#2 ~ d#3 d#2 ~ d#2 d#3!2", AU: "~@2 d3 ~@3 d3 ~ d2 ~ d3 d2 ~ d2 d3!2",
  AV: "g1 ~ g2 ~@3 a2 ~ a1 ~ a2 a1 g2 ~ a2 ~", AW: "~ g1 g2 ~@3 g2 ~ g1 ~ g2 g1 ~ g1 g2!2",
  AX: "a1 ~ a2 ~@3 a2 ~ a1 ~ a2 ~@3 a2 ~", AY: "a1 ~ a2 ~ a1 ~ a2 ~ a1 ~ a2 ~@3 a2 ~",
})).s("gm_clavinet").gain(0.4).pan(0.1)

// other · pad poly · "POLY SYNTH"
const pad_poly = note(`<
  ~@64 A B C D E@4 A F C G H@6 ~@16 I J K@2 I L M@2 ~@23 N O@4 P@2 ~@16 K@2 Q@2 K@2 R@2 Q@2 S@2 T@2 U@2 K@2 ~@20 I V W
  X@2 V W G Y@2 ~@8 Z@2 AA@2 AB@2 K@2 ~
>`.pickRestart({
  A: "a2", B: "b2", C: "c3@15 ~", D: "d3@7 ~", E: "[e3@57 ~@7]/4", F: "b2@15 ~", G: "d3@15 ~", H: "[e3@83 ~@13]/6",
  I: "d3", J: "f3@7 ~ e3@8", K: "a2/2", L: "f3 e3", M: "[a3@31 ~]/2", N: "~@3 d3", O: "[e3 e2]/4", P: "e3/2",
  Q: "[g2@31 ~]/2", R: "[g2@4 a2@27 ~]/2", S: "[e2@15 ~]/2", T: "[d2@29 ~ g2@2]/2", U: "[a2@29 ~ g2@2]/2", V: "f3",
  W: "d#3", X: "d3/2", Y: "[a2@5 ~@3]/2", Z: "[a2@27 ~@3 g2@2]/2", AA: "[a2@28 ~@2 g2 ~]/2", AB: "[a2@26 ~@4 g2 ~]/2",
})).s("gm_pad_poly").gain(0.5).pan(0.9)

// chords · synth strings 2 · "SYN STRING"
const synth_strings_2 = note(`<
  ~@8 A@6 B@8 C@3 D@4 E@8 F@7 G@5 H@4 I J@8 ~ K@3 L@7 M@2 N@6 O@4 P@8 Q@5 R S@4 T@8 U@8 V@4 ~@17 W@8 X@7 Y@5 Z@5 AA@8
  ~@5 AB@7 AC@5 AD@5 AE@2 AF@7 W@8 ~@5
>`.pickRestart({
  A: "[[g3,b3]@61 ~@3 f#3@31 ~, e4@63 [a3,d4]@32 ~]/6", B: "[[b3,e4]@95 ~ f#3@30 ~@2, g3@93 ~@2 [a3,d4]@32 ~]/8",
  C: "[[g3,b3]@30 ~ c4@17, e4, ~@31 a3@15 ~@2]/3", // G
  D: "[g3@7 ~ d4@8 g3@31 ~ [a3,c4]@15 g3, ~ b3@5 ~@2, ~@4 f#3@3 ~ e4@24]/4", // Am
  E: "[~@8 [f#3,d4]@8 e4@95 [f#3,a3,d4]@17, ~ b3@13 ~@2, ~@16 g3@93 ~@19]/8", F: "[~@16 [g3,e4]@95 ~, ~@15 b3@96 ~]/7",
  G: "[[f#3,a3,d4]@31 [g3,b3]@30 ~@2 [a3,c4]@15 ~ [g3,c4,e4], ~@31 e4@47 ~@2]/5", // D G Am C
  H: "[~@8 f#3@7 ~ [g3,e4]@31 ~ c4@15 ~, ~@7 b3@39 ~ [a3,e4]@15 ~@2, ~@7 d4@8 ~@49]/4", // C A5
  I: "[c4,e4]@8 [f#3,b3,d4]@7 ~, g3@3 ~@5", J: "[g3,b3,e4]/8",
  K: "[~@16 c4@15 ~ f#3@15 e4, ~@15 e4@16 ~@17, ~@15 a3@14 ~@2 [b3,d4]@16 ~]/3", // Bm
  L: "[[g3,c4]@15 [a3,d4]@16 ~ g3@61 ~@2 c4@16 [b3,d4], ~@15 f#3@14 ~@2 e4@80 ~, ~@31 b3@61 ~@3 a3@14 ~@3]/7", // C5 D5 Bm
  M: "[f#3@15 [c4,e4]@16 f#4, ~@15 g3@14 ~@3]/2", N: "[d4@15 ~ [g3,b3]@80, a3@13 ~@2 e4@81]/6",
  O: "[~@15 [a3,c4,e4]@49]/4", P: "[~@15 [b3,d4]@32 ~ [a3,c4]@80, ~@15 g3@31 ~ e4@81]/8",
  Q: "[~@15 [b3,d4]@32 [a3,c4,e4]@32 ~, ~@3 g3@6 ~@7]/5", R: "[a3,d4,f4]",
  S: "[[a3,c4,f4]@7 ~ [g3,b3]@8 [a3,c4]@31 ~ a3@15 [a3,c4,f4], ~@8 e4@39 [d4,f4]@16 ~]/4", // F G Am F Dm
  T: "[~@8 [g3,b3]@7 ~ a3@30 ~ [g3,b3]@61 ~@3 [f#3,a3,d4]@17, ~ e4@13 ~@2, ~@15 c4@32 ~@81]/8", // G D
  U: "[~@15 [g3,b3,e4]@96 ~ f#3@16, ~@111 [a3,d4]@17]/8", V: "[~@15 [g3,b3]@35 ~@14, ~@15 e4@41 ~@8]/4",
  W: "[a3,c4,e4]/8", X: "[[b3,d4]@31 ~ e4@63 [g3,b3,d4]@17, g3@30 ~ c4@64 ~@17, ~@16 a3@31 ~@9]/7",
  Y: "[~@15 [a3,c4,e4]@64 ~]/5", Z: "[[g3,b3]@30 ~ [g3,b3]@31 ~ [f3,a3,d4]@17, d4@31 e4@32 ~@17]/5",
  AA: "[~@15 [a3,c4,e4]@113]/8", AB: "[[g3,b3,d4]@31 ~ [a3,c4]@80, ~@31 e4@81]/7",
  AC: "[~@15 [b3,d4]@32 ~ c4@31 ~, ~@15 g3@30 ~@2 [a3,e4]@31 ~@2]/5", // Bm A5
  AD: "[d4@16 c4@14 ~@2 f#3@15 ~ f3@30 ~@2, f4@31 a#3@13 ~@3 d4@32 ~, a3@30 ~ d#4@16 a3@30 ~@3]/5",
  AE: "[[a3,c4]@14 ~@2 f#3@15 a3, f4@15 d#4@16 ~, ~@4 a#3@3 ~]/2", // Am
  AF: "[d4@15 ~@65 b3@32, f3@14 ~ a3@63 ~ d4@32 ~, ~@8 [c4,e4]@32 g3@15 ~]/7", // C
})).s("gm_synth_strings_2").gain(0.35).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@4 A B A B C@106 D C@23 ~@34 E C@41 ~@3>".pickRestart({
  A: "x!2 ~@6", B: "x", C: "x!4", D: "x ~ x ~ x!2 ~@2", E: "x!2",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@82 [~ x ~ x]!56 ~@36 [~ x ~ x]!40 ~@3>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@32 A@24 ~@8 A@74 ~@4 B@32 A@39 C ~@3>".pickRestart({
  A: "x!8", B: "x!16", C: "x!7 ~",
})).gain(0.56)

stack(bass, bass_2, clavinet, pad_poly, synth_strings_2, kick, snare, hihat)