Strudelify

Working Class Man

Jimmy Barnes

KeyD majorTempo144 bpm
0:00/0:00
// Working Class Man — Jimmy Barnes
// 144 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(144/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 · fretless bass · "MIDI"
const bass = note(`<
  A@2 B@4 C D A@2 E@3 F C G C D H I J K L M N O P Q R S T U V W X Y R Z R Z X Z R AA AB AC C AD@2 AE@2 AF@2 AG@2 AF@2 AH
  AI A@2 AJ@2 AK F C AL AM Z AN O AO AP AQ AR AS AT U AU AV AT AW AX@4 AY AZ BA BB AX@4 AY AZ BA BB AX@4 AY AZ BA BB BC
  ~
>`.pickRestart({
  A: "d2/2", B: "[g2 d2]/4", C: "g2", D: "a2", E: "[g2@23 ~ g2@4 ~@4 e2@16, ~@14 f#2@3 ~@7]/3", F: "b2", G: "d2",
  H: "d2@5 ~ d2 ~ d2@6 ~@2", I: "d2@5 ~ d2 ~ d2@8", J: "g2@4 ~@2 g2 ~ g2@7 ~", K: "g2@5 ~ g2 ~ g2@8",
  L: "d2@6 d2 ~ d2@7 ~", M: "d2@4 d2 ~ d2 ~ d2@5 ~ d2@2", N: "g2@3 ~@3 g2 ~ g2@5 ~@3", O: "g2@5 ~ g2 ~ g2@4 f#2@4",
  P: "e2@3 e2 ~@3 g2, ~ e2", Q: "b2@5 ~ b2 ~ b2@8", R: "g2@5 ~ g2 ~ g2@5 ~ g2@2", S: "d2@4 ~@2 d2 ~ d2@5 ~ d2@2",
  T: "~ g2@4 ~ g2 ~ g2@8", U: "a2@4 ~@2 a2 ~ a2@5 ~ a2@2", V: "d2@6 d2@2 d3@5 ~ d3@2", W: "d2@2 d3 c#3",
  X: "b2@5 ~ b2 ~ b2@5 ~ b2@2", Y: "d2@4 d2 ~ d2 ~ d2@8", Z: "d2@5 ~ d2 ~ d2@5 ~ d2@2", AA: "a2@5 ~ a2 ~ a2@5 ~ a2 ~",
  AB: "f#2@5 ~ f#2 ~ f#2@4 ~@2 f#2@2", AC: "~@7 d3, g2@7 ~, ~@3 g3", AD: "[b2@23 ~ a2@8]/2",
  AE: "[d2@10 b2 a2 b2 a2 b2 a2]/2", AF: "[b2@3 a2]/2", AG: "[~@12 g2 a2!2 g2, d2@13 ~@3]/2", AH: "g2@12 g2 ~ d2@2",
  AI: "g1@7 ~@9", AJ: "[g2@23 ~ g2@4 f#2@4]/2", AK: "e2", AL: "d2@15 ~", AM: "d2@6 d2 ~ d2@5 ~@3",
  AN: "g2@5 ~ g2 ~ g2@7 ~", AO: "e2@4 ~@2 e2 ~ e2@5 ~ e2@2", AP: "b2@4 ~@2 b2 ~ b2@5 ~ b2@2",
  AQ: "b2@5 ~ b2 ~@3 b2@2 ~@4", AR: "g2@4 ~@2 g2 ~ g2@5 ~ g2 ~", AS: "d2@3 ~@3 d2 ~ d2@5 ~ d2 ~",
  AT: "g2@4 ~@2 g2 ~ g2@5 ~ g2@2", AU: "d2@4 ~@2 b2 ~ b2@5 ~ b2 ~", AV: "b2@5 ~ b2 ~ b2@5 ~ b2 ~",
  AW: "a2@4 ~@4 a2@2 a2 ~ a2@2 a2@2", AX: "[d2@4 ~@2 d2@2 d2@6 ~@2 g2 ~@5 d2 ~ d2@5 ~ d2@2, ~@15 d2@6 ~@11]/2",
  AY: "b2@4 ~@2 b2 ~ b2@5 ~ b2 ~", AZ: "b2@4 ~@2 b2 ~@3 b2@2 ~@4", BA: "g2@3 ~@3 g2 ~ g2@5 ~ g2 ~",
  BB: "a2@3 ~@3 a2 ~ a2@5 ~ a2 ~", BC: "d3@7 ~",
})).s("gm_fretless_bass").gain(0.57)

// chords · piano · "MIDI"
const piano = note(`<
  A@2 B@2 C@2 D E F@2 G@2 H I J K J L@5 M@2 N@2 O@2 P Q R S T@2 U V W X Y Z AA AB AC AD AE AF@2 AG@2 AH@2 AG@2 AI@2 AJ@2
  AK@2 AL@6 AM AN AO@2 AP@2 AQ AR@2 AS AT AU AV AW@2 AX AY AZ@2 AX@2 AR@2 BA@4 AX@2 AR@2 BA@4 AX@2 AR@2 BB@4
>`.pickRestart({
  A: "[~@6 d5@15 ~@3 e5@2 ~@2 e5@2 d5 ~, d2@31 ~, d1@26 f#5@5 ~, a4@21 ~ a4@9 ~, a5@10 ~@13 d5@4 ~@5]/2",
  B: "[[a4,d5,a5]@6 [a4,d5]@5 ~ [a4,d5]@10 ~@2 f#5@2 ~@4 d5@2, [g1,g2], g5 ~@21 a4@10, ~@11 d5@3 e5@2, ~@23 e5@3 f#5@6]/2", // D5 G
  C: "[[a4,d5]@3 [a4,d5]@8 a5!2 ~@2 [a4,e5], [d1,d2], a5@11 d5@5, ~@11 a4@2 e5 f#5@2, ~@13 a5@3]/2", // D5 A5 D
  D: "~@14 g2 ~, [g1,g2,b4,d5]@15 ~, ~@10 e5@5 ~, ~@3 f#5", E: "~@3 c#5, [a1,a2,e5], ~@5 d5@3",
  F: "[[d1,d2] ~@7 d2@24, [f#4,a4,d5], ~@3 d3@13]/2", // D
  G: "[b4@11 ~@3 [f#3,f#5]@2, g4, [g2,g3,d5]@23 [g2,d5]@9, ~@11 b4@5, ~@3 [g3,g5]]/2", H: "[e2,e3,b4,e5,g5]@15 ~",
  I: "[b2,b3,b4,d5,f#5]", J: "[g2,g3,g4,b4,d5]@15 ~", K: "[d2,d3,f#4,a4,d5]",
  L: "[~@12 d2@2 d3 ~@4 d3 ~@3 d3 b4@3 ~@2 b4 ~@5 [b4,d5] ~@2 f#5 e5, [a2,a3,c#5,e5]@30 d3@8 ~@2 [d3,d5]@6 d5@8 d5@6 [b4,d5]@10 ~@4 e5@4 d3 ~, a4@20 [a4,d5,f#5]@8 f#5@14 f#5@6 [a5,b5]@31 ~, ~@16 d2@8 ~@4 d2@4 d2@8 [d2,a4]@8 [g2,g3]@8 g2@8 g2@8 [g2,b4,d5]@7 ~, ~@16 d3@6 d3@6 [a4,d5]@8 [a4,d5]@4 e5@4 e5@4 ~@6 b4@2 g3@6 g3@8 g3@9 ~]/5", // Bm A D Bm D Asus2 D5 G …
  M: "[d3@3 ~@4 d3 ~ a4 ~ d3 ~ a4 ~ d3, [d5,f#5]@5 f#5@3, a4@9 ~ d5@4 [a4,d5]@2, d2!2 d2!2, ~@3 d3@4 ~ d3@2 a4@2 d3@3 ~]/2", // D D5
  N: "[g3@6 ~@16 [g3,b4]@2 ~@4 [f#2,f#3,f#5]@2 e3 ~, [d5,g5]@3 ~, b4@11 ~@5, g2@8 g2@8 g2@8 [g2,g3,b4,d5,g5]@7 ~, ~@3 g3@4 g3@4 ~@5]/2", // G F# G5 G
  O: "[e3@6 ~@2 e2@6 ~@2 b3@6 ~@4 b4@2 [b4,d5,f#5]@2 g3 ~, [b4,e5,g5]@15 d5@13 ~@4, e2@8 ~@6 b4@10 b2@7 ~, ~@6 e3@9 ~ f#5@12 ~@4, ~@16 b2@6 b3@9 ~]/2", // Bm Em
  P: "[g3,g4,b4,d5]@6 g3@2 ~@2 g4@2 [g4,b4,d5]@2 d3 ~, g2@8 [g2,g3]@7 ~, ~@3 [b4,d5]@3 ~@2, ~@3 g4@2 ~@3", // G Bm
  Q: "[d3,f#4,a4,d5]@3 ~@2 f#4 ~ d3, d2!2, ~@3 d3@4 ~, ~@3 [a4,d5]@3 ~@2, ~@3 f#4@2 ~ [f#4,a4,d5]@2", // D D5 D
  R: "[g3,d5]@6 g3@2 ~@2 g4@2 [g3,g4,b4,c#5,d5]@3 ~, g2@4 g2@3 ~, [f#4,a4] ~@5 [b4,d5]@6 ~@4, ~@3 g4@2 ~@3, ~@2 g3 ~", // G5 G F#m Bm
  S: "[a3,a4,c#5,e5]@6 a3@2 ~@2 a4@2 [a4,c#5,e5]@2 d3 ~, a2@8 [a2,a3]@7 ~, ~@3 [c#5,e5]@3 ~@2, ~@3 a4@2 ~@3", // A C#m
  T: "[[d2,d3,f#4,a4,d5]@6 f#4@2 ~@2 f#4 ~@7 f#4@2 ~@10 b3@2, ~@6 d3@8 d3@7 ~ d3@10, ~@6 [a4,d5]@5 ~ [f#4,a4,d5]@7 ~@9 [c#3,c#4,c#5]@4, ~@8 d2@7 ~ d2@6 ~@2 [d2,f#4,a4,d5]@8]/2", // D D5 D C# D
  U: "[b3,b4,d5]@3 b3 ~@3 d3, b2 [b2,b3], ~@3 [b4,d5]@2 [b4,d5,f#5]@3", // Bm B Bm
  V: "[d3,f#4,a4,d5]@6 d3@2 ~@4 [a4,d5]@2 d3 ~, d2@8 [d2,d3]@7 ~, ~@3 [a4,d5]@3 ~@2, ~@6 f#4@4 f#4@5 ~", // D D5 D D5
  W: "[g3,g4,b4,d5]@6 g3@2 ~@4 [b4,d5]@2 d3 ~, g2@8 [g2,g3]@7 ~, ~@3 [b4,d5]@3 ~@2, ~@6 g4@4 g4@5 ~", // G Bm G Bm
  X: "[d3,a4,d5]@6 d3@2 ~@4 a4@2 g3 ~, f#4@15 ~, d2@6 d5@2 [d2,d3,e5]@7 ~, ~@6 f#5@9 ~, ~@6 a4@4 d5@5 ~", // D5 Dsus2
  Y: "[g3,g4,b4,d5]@6 g3@2 ~@2 g4@2 [g4,b4,d5]@2 d3 ~, g2@15 ~, ~@3 [b4,d5]@3 ~@2, ~@3 g4@2 ~@3, ~@8 g3@7 ~", // G Bm
  Z: "[d3,f#4,a4,d5]@3 d3 ~@2 b4 c#5, d2@8 [d2,d3]@6 b3 ~, ~@6 [a4,d5]@9 ~, ~@6 f#4@4 f#4@5 ~", // D D5
  AA: "[b3,f#4,b4,d5]@6 b3@2 ~@4 [b4,d5]@2 d3 ~, b2@8 [b2,b3]@7 ~, ~@3 [b4,d5]@3 ~@2, ~@6 f#4@4 f#4@5 ~", // Bm B Bm
  AB: "[d3,f#4,a4,d5]@6 ~@6 d5@2 g3 ~, d2@8 d2@7 ~, ~@6 [d3,a4]@9 ~, ~@3 d5@3 ~@2, ~@6 f#4@4 f#4@5 ~", // D D5
  AC: "[g3,g4,b4,d5]@3 g3 ~ b4 [b4,c#5] d5, g2@8 [g2,g3]@7 ~, ~@6 [g4,d5]@9 ~, ~@6 b4@4 ~@4 g3 ~", // G Bsus2 G G5
  AD: "[a3,a4,c#5,e5]@3 a3 ~@3 [a4,e5], a2 [a2,a3], ~@3 e5@3 d5@2, ~@6 [a4,c#5]@3 a4@5 ~@2, ~@5 c#5@3", // A A5 A
  AE: "[f#3,a4,c#5,f#5]@6 f#3@2 ~@4 [c#5,f#5]@2 g3 ~, f#2@8 [f#2,f#3]@7 ~, ~@3 [c#5,f#5]@3 ~@2, ~@6 a4@4 a4@5 ~", // F#m F#5 F# F#5
  AF: "[d5@12 ~@4 g4@15 ~, [g2,g3,g5]@31 ~, g4 ~, b4@14 b4@17 ~, ~@12 d5@19 ~]/2", // G
  AG: "[[b2,b3,b4,d5,f#5]@23 ~ [a2,a3,a4,c#5,e5]@7 ~]/2", // Bm A
  AH: "[a4@6 ~@3 [a4,d5]@3 ~ f#5@3, [d2,d3,f#4], d5@7 d5@2 f#5@4 ~@3, ~@6 [a4,f#5]@3 ~@3 [a4,d5,e5]@4, ~@2 e5 ~]/2", // D5 D Asus4
  AI: "[a4@6 ~@3 [a4,d5]@3 ~@2 d5@2, [d2,d3,f#4], d5@7 d5@2 f#5@4 f#5@3, ~@6 [a4,f#5]@3 ~@3 [a4,e5]@4, ~@4 e5@2 d5 ~]/2", // D5 D A5
  AJ: "[~@24 [a2,a3,a4,c#5,e5]@7 ~, [b2,b3,b4,d5,f#5]@31 ~]/2", // A Bm
  AK: "[g2@12 ~@4 g1@15 ~, [g3,g4,b4,d5,g5]@31 ~, ~@12 g2@19 ~, ~@13 d2@18 ~]/2", // G
  AL: "[~@31 c#5 ~@15 e5, ~@7 d3@7 e5 g3@13 g3@3 e3@9 a3@4 b2 b4 f#5@2, ~ d2 [g2,b4]@2 e2@2, ~@11 a4@5 g4@13 g4@3 ~@2 g4@14, ~@13 f#5@3 d5@14 [f#3,d5,e5]@2 ~@3 b4 e5@7 b3@5]/6", // G D
  AM: "b4@4 ~@3 d3, [g2,g3,g5], d5@5 d5@3, ~ b4, ~@3 e5", AN: "[d2,d3,a4,d5,f#5]",
  AO: "[~@6 d3@2 ~@3 d4 ~@2 d3@2 [a4,d5]@2 [a4,d5]@2 ~@2 d3@2 ~@2 a4@2 [a4,d5,f#5]@2 [g3,a4,d5,f#5]@2, d2@2 d2 [d2,d3], d3@3 ~ d3@3 ~ d3@2 a4@3 ~@3, ~ [d4,f#4,a4,d5]@2 [d4,f#4]@5, ~@3 [a4,d5] f#5 [d5,f#5]@2 ~]/2", // D5 D D5 D
  AP: "[[g3,g4,b4,d5]@6 g3@2 ~@2 g4@2 ~@8 [g3,b4,d5]@4 ~@4 [f#2,f#3,f#5]@2 e3 ~, g2@16 g2@8 [g2,g3,b4,d5,g5]@7 ~, ~@3 [b4,d5]@3 [b4,d5]@4 ~@6, ~@6 g4@4 ~@2 g4@6 g4@13 ~, ~@4 g3@3 g3@3 ~@6]/2", // G F# G Bm
  AQ: "e3@3 ~@2 b4 ~ e3, [e5,g5]@3 ~, b4@5 ~ [b4,e5,g5]@2, e2!2, ~@3 e3@4 ~", // Em
  AR: "[b3@3 b3 ~ b4!2 b3 ~@3 b3 ~@3 [g3,e5,f#5], [a2,a3], [b2,f#5]@7 e5 f#5@5 b4@3, d5@6 d5@2 b2@2 d5 b4 [b2,b3]@4, b4@4 b3@3 b4 b3 e5@5 d5@2]/2", // C A B5 B
  AS: "[g3,g4,b4,d5]@3 g3 ~ g4 ~ d3, g2, ~@3 [b4,d5]@3 ~@2, ~@3 g4@2 ~ [g4,b4,d5]@2, ~ g3", // G Bm G
  AT: "[d3,f#4,a4,d5]@3 d3 ~ f#4 ~ g3, d2 [d2,d3], ~@3 [a4,d5]@3 ~@2, ~@3 f#4@2 ~ [f#4,a4,d5]@2", // D D5 D
  AU: "[g3,g4,b4,d5]@6 g3@2 ~@6 g3 ~, g2@15 ~, ~@6 [g4,b4]@9 ~, ~@6 d5@4 c#5@5 ~, ~@2 g3 d5", // G
  AV: "[a3,a4,c#5,e5]@3 a3 ~ a4 ~ a3, a2, ~@3 [c#5,e5]@3 ~@2, ~@3 a4@2 ~ [a4,c#5,e5]@2, ~@4 a3@3 ~", // A C#m A
  AW: "[[b3,f#4,b4,d5]@3 ~@2 f#4 ~ b3 ~ f#4@2 ~@4 g3, b2!2 b2!2, a#4 ~@5 b3@8 ~@2 b3@6 [b3,d5]@10, ~@3 [b4,d5]@3 [b4,d5]@5 b4@3 b4@2, ~@3 f#4@2 ~ f#4@3 ~@2 f#4@2 f#4@3]/2", // Bm
  AX: "[g3,g4,b4,d5]@6 g3@2 ~@2 g4@2 [g4,b4,d5]@2 g3 ~, g2@8 [g2,g3]@7 ~, ~@3 [b4,d5]@3 ~@2, ~@3 g4@2 ~@3", // G Bm
  AY: "[a2,a3,a4,c#5,e5]@15 ~", // A
  AZ: "[[d3,f#4,a4,d5]@3 d3 ~ f#4 ~@3 f#4 ~@3 f#4 ~ d3, d2 [d2,d3] d2!2, ~@3 [a4,d5]@3 [a4,d5]@4 [a4,d5]@4 ~@2, ~@3 f#4@2 ~ f#4@3 ~ f#4@3 ~ [f#4,a4,d5]@2, ~@8 d3@3 d3@4 ~]/2", // D D5 D
  BA: "[[g3,g4,b4,d5]@3 g3 ~ g4 ~@2 [a3,a4,c#5,e5]@3 a3 ~@3 a4 [d3,f#4,a4,d5]@3 d3 ~ f#4 ~@3 f#4 ~@3 f#4 ~ d3, g2@8 a2@3 [a4,c#5,e5] [a2,a3]@12 d3@2 [a4,d5]@4 [f#4,a4,d5]@2, ~@3 [b4,d5]@3 d5 d3@6 c#5@14 d3@4 ~, ~@3 g4@2 ~ [g4,b4]@10 d2@3 [f#4,a4,d5] [d2,d3]@2 [f#4,a4,d5]@2 d2@2 f#4@2 d2@4, ~@4 g3@9 a4 d5 e5@16 ~]/4", // G A D A D5 D Bm G …
  BB: "[[g3,g4,b4,d5]@3 g3 ~ g4 ~@2 [a3,a4,c#5,e5]@3 a3 ~@4 [d3,d4,d5,f#5,a5,d6]@16, g2@8 a2@3 [a4,c#5,e5] [a2,a3]@16 ~@4, ~@3 [b4,d5]@3 d5 d3@6 c#5@16 ~@3, ~@3 g4@2 ~ [g4,b4]@16 ~@10, ~@4 g3@9 a4 d5 [a4,e5]@16 ~]/4", // G A D A Bm G A5
})).s("gm_piano").gain(0.72)

// chords · string ensemble 2 · "MIDI"
const string_ensemble_2 = note(`<
  A@7 B C@4 D E F@3 B ~@8 G H I@3 J K@2 L M L M N O P O N Q R S@2 ~@9 T U@2 V@2 W@2 D E F@3 ~@3 X Y@2 Z AA Z AB Y@2 Z AB
  V@2 S@2 Y@2 Z AB V@2 S@2 Y@2 Z AB V@2 S@2 Y@2 Z AB AC@2
>`.pickRestart({
  A: "[d6@2 a5@2 [a5,d6]@2 d4, d5]/7", B: "[e4,e5]", C: "[d4,d5]/4", D: "[g4,g5]", E: "[f#4,f#5]", F: "[d4,d5]/3",
  G: "g5", H: "f#5", I: "d5/3", J: "e5", K: "[d5@6 d5 c#5]/2", L: "b4", M: "~@2 d5 c#5", N: "[d4,g4,b4]",
  O: "[f#4,a4,d5]", P: "[d4,f#4,b4]", Q: "[e4,a4,c#5]", R: "[f#4,a4,c#5]", S: "[g4,b4,d5]/2", T: "~ [a4,c#5,e5]",
  U: "[[g3,g4,b4,d5]@7 ~]/2", V: "[a4,d5,f#5]/2", W: "[b4,d5,g5]/2", X: "[b4,e5,g5]", Y: "[b4,d5,f#5]/2",
  Z: "[g4,b4,d5]", AA: "[a4,d5,f#5]", AB: "[a4,c#5,e5]", AC: "[[d5,f#5,a5]@31 ~]/2",
})).s("gm_string_ensemble_2").gain(0.35)

// chords · rock organ · "MIDI"
const rock_organ = note(`<
  ~@18 A@2 B@2 A@2 B@2 C D E F E G A@2 D F E F E F D F E G H B@2 I@2 A@2 I@2 A@2 I@2 J ~ K@2 L@2 M@2 N O P@2 Q@2 R S@2 J
  T J U S@2 J U P@2 B@2 S@2 J U P@2 B@2 S@2 J U P@2 B@2 S@2 J U V@2
>`.pickRestart({
  A: "[f#4,a4,d5]/2", B: "[g4,b4,d5]/2", C: "[e4,g4,b4]", D: "[d4,f#4,b4]", E: "[d4,g4,b4]", F: "[f#4,a4,d5]",
  G: "[e4,a4,c#5]", H: "[f#4,a4,c#5]", I: "[[b4,d5,f#5]@3 [a4,c#5,e5]]/2", J: "[g4,b4,d5]", K: "d5/2", L: "g4/2",
  M: "[~ b4, e4]/2", N: "g4", O: "d4", P: "[a4,d5,f#5]/2", Q: "[b4,d5,g5]/2", R: "[b4,e5,g5]", S: "[b4,d5,f#5]/2",
  T: "[a4,d5,f#5]", U: "[a4,c#5,e5]", V: "[[d5,f#5,a5]@31 ~]/2",
})).s("gm_rock_organ").gain(0.4)

// chords · overdriven guitar · "MIDI"
const overdriven_guitar = note(`<
  ~@18 A B C D E@2 F@2 G H I J K L E@2 M N K O M P M P I Q R S@2 T@2 U N T@2 U N V W X@2 ~@8 E@2 F@2 G H M I J K L H M K
  Y A B C D M@2 K L A B C D M@2 K L A B C D M@2 K L Z@2
>`.pickRestart({
  A: "~@4 [d3,a3]@2 ~@4 [d3,a3]@3 ~ [d3,a3]@2", B: "~@2 [d3,a3]@3 ~ d2@2 [d3,a3]@2 d2@2 a3 ~ a3 ~, ~@3 d3",
  C: "~@2 d3 ~@3 g2@2 d3@4 g2 ~ [g2,d3]@2", D: "~@2 [g2,d3]@2 ~@2 [g2,d3]@4 ~@2 g2 ~ [g2,d3]@2",
  E: "[~@4 [d3,a3]@2 ~@4 [d3,a3]@2 ~@2 [d3,a3]@4 d3@2 ~@2 d3@2 ~@2 d3@2 a3@2 d3 ~, ~@20 a3@4 d4@5 ~@3]/2", // D5
  F: "[[g2,d3,g3]@2 ~@4 [g2,d3,g3]@2 ~@2 [g2,d3,g3]@2 ~@2 [g2,d3,g3]@4 ~@2 g2@2 ~@2 [g2,d3,g3]@2 ~@2 g2 ~ d3 ~]/2", // G5
  G: "~@2 [e3,b3] ~@3 e2@2 [e3,b3]@6 ~@2", H: "[b2,f#3]@10 b1@2 b2@2 f#3 ~",
  I: "g2@2 d3 ~@7 d3@2 ~@2 d3 ~, ~@6 g2@5 ~ g2@4, ~@4 g3@3 ~", J: "[d3,a3]@10 d2@2 d3@2 a3 ~",
  K: "~@2 [g2,d3] ~@3 g2@2 d3@6 ~@2", L: "~@2 [a2,e3] ~@3 a2@2 ~@2 a2 ~ a2 ~ e3 ~, ~@2 e3 ~",
  M: "~@2 [b2,f#3] ~@5 b2@2 f#3@2 ~@2 f#3 ~, b1@5 ~ b1@10, ~@4 b3@3 ~, ~@3 b2", // B5
  N: "~@2 [d3,a3] ~@3 d2@2 ~@2 d2@2 ~@2 a3 ~, ~@2 [d3,a3] d3", // D5
  O: "~@2 [d3,a3] ~@5 d3@2 a3@2 ~@2 a3 ~, d2@5 ~ d2@10, ~@4 d4@3 ~, ~@3 d3", P: "~@2 [d3,a3]@2 ~@4 [d3,a3]@7 ~",
  Q: "~@2 e3@2 ~@4 e3@7 ~", R: "f#2@2 c#3 ~@7 c#3@2 ~@2 c#3 ~, ~@6 f#2@5 ~ f#2@4, ~@4 f#3@3 ~", S: "[[g2,d3]@31 ~]/2",
  T: "[[b2,f#3]@22 [f#3,b3]@2 [a2,e3]@7 ~]/2", U: "[d3,a3]@15 ~", V: "~@2 [b2,f#3]@2 ~@4 [b2,f#3]@7 ~",
  W: "~@2 [b2,f#3,b3]@2 ~@2 [b2,f#3,b3]@2 [a2,a3] ~@3 e3@2 [e3,a3]@2, ~@4 e3 a2@3", // B5 A A5
  X: "[[d3,a3,d4]@23 ~@5 [d3,a3,d4] ~@3]/2", Y: "[a2,e3]@11 ~ a2 ~ e3 ~", Z: "[[d3,a3]@31 ~]/2",
})).s("gm_overdriven_guitar").gain(0.35)

// chords · overdriven guitar · "MIDI" · soft notes
const overdriven_guitar_soft = note(`<
  ~@18 A ~ B C ~@2 C D E ~@3 F G ~@3 H F ~@2 I ~ I ~ J ~@5 K H ~@2 K H L ~@13 C D E ~@4 F G ~@2 F M A ~ B C ~@2 F G A ~
  B C ~@2 F G A ~ B C ~@2 F G ~@2
>`.pickRestart({
  A: "~@4 d2 ~@3", B: "g2@2 c#3 ~@13", C: "~@4 g2 ~@11", D: "~@4 d3@2 ~@4 g2 ~@5", E: "~@2 a#3 ~@13", F: "~@2 c#3 ~@13",
  G: "a2 ~@11 e3 ~@3", H: "d2 ~@11 a3 ~@3", I: "d2@5 ~ d2@9 ~", J: "a2@4 ~@2 a2@9 ~", K: "d2@15 ~", L: "b1@5 ~ b1@9 ~",
  M: "~@12 e3 ~@3",
})).s("gm_overdriven_guitar").gain(0.2)

// other · pad sweep · "MIDI"
const pad_sweep = note("<~@51 A@2 B@2 A@2 C ~@48 D@2>".pickRestart({
  A: "[f#4@3 e4]/2", B: "d4/2", C: "d4", D: "[[d3,f#3,a3]@31 ~]/2",
})).s("gm_pad_sweep").gain(0.48)

// drums · kick
const kick = s("bd").struct("<~@17 A B@15 C B@11 D ~ E@9 F D ~@8 A B@12 C B D B@24 D G>".pickRestart({
  A: "~@3 x", B: "x ~@2 x!2 ~@3", C: "x ~@6 x!2 ~@7", D: "x", E: "x ~@6 x", F: "x ~@13 x!2", G: "~@7 x",
})).gain(0.49)

// drums · rim
const rim = s("rim").struct("<~@47 [~ x ~ x]!10 ~@51>").gain(0.55)

// drums · snare
const snare = s("sd").struct(`<
  ~@17 A B@3 C B@11 D B@7 E B@2 F ~@21 A B@3 C B G B@2 F B@3 D E H B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C ~ I
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~ x ~@6 x!2 ~ x!2", D: "~@4 x ~@2 x!2 ~@3 x ~@3", E: "~@4 x ~@6 x!2 ~@3",
  F: "~@4 x ~@6 x!2 ~ x ~", G: "~@2 x ~@3 x!2", H: "~ x!7", I: "~@7 x",
})).gain(0.49)

// drums · hihat
const hihat = s("hh").struct("<A@18 B@27 C D B@10 C D A@8 B@14 E B@24 E ~>".pickRestart({
  A: "~ x ~ x", B: "x!8", C: "x!2 ~ x", D: "~ x ~@2", E: "x",
})).gain(0.44)

// drums · low tom
const low_tom = s("lt").struct("<~@107 [~@12 x!2 ~@2]>").gain(0.49)

// drums · mid tom
const mid_tom = s("mt").struct("<~@81 [~ x!7] ~@26>").gain(0.49)

// drums · open hat
const open_hat = s("oh").struct("<~@46 [~@3 x] ~@11 [~@3 x] ~@49>").gain(0.44)

// drums · crash
const crash = s("cr").struct(`<
  ~@18 A ~@3 A ~@10 B A ~@7 A ~@2 A ~@11 A ~@9 A ~@3 A C A ~ C A ~@2 B A@3 ~@6 C A ~@6 C A ~@6 C A ~
>`.pickRestart({
  A: "x", B: "~@2 x!2", C: "~@7 x",
})).gain(0.49)

stack(
  bass, piano, string_ensemble_2, rock_organ, overdriven_guitar, overdriven_guitar_soft, pad_sweep, kick, rim, snare,
  hihat, low_tom, mid_tom, open_hat, crash
)