Strudelify
Stumblin' In cover art

Stumblin' In

Suzi Quatro

KeyG majorTempo129 bpm
0:00/0:00
// Stumblin' In — Suzi Quatro
// 129 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: The whole transcription plays 30 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(129/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.

// chords · epiano1
const epiano1 = note(`<
  ~ A B C@2 D B E F G B E H I J K@2 G B L@2 M@2 N@2 O P Q@2 R S T U V@2 W@2 X B Y@2 X Z AA@2 AB AC E AD AE@2 AF@2 AG B
  AH@2 AI AC AJ AK AG AL AM@2 AN AO AP AQ AG AC AR AS AT AC AU AV AW AX AY AZ X AC BA@2 X B BB@2 X BC BD BE BF BG BH@2
  BI BJ BK BL BM BN BO@2 BP BQ BR@2 BS BT BU@2 BV@2 BW BX BY BZ CA@2 CB@2 CC CD
>`.pickRestart({
  A: "[a4,c5]@3 ~ [a4,c5] ~ [b4,d5]@2 ~@2 [c5,e5]@2 e5 ~@3", B: "[f#4,a4]@3 ~ [f#4,a4] ~ [g4,b4]@2 ~@2 [a4,c5]@4 ~@2",
  C: "[[g4,b4]@3 ~ [g4,b4] ~ [g4,b4] ~@3 [a4,c5] ~@3 b4@8 g4@2 ~@2 b4@2 g4@2 ~@2, ~@14 g4@6 ~@4 d5@7 ~]/2", // G Am
  D: "[a4,c5]@3 ~ [a4,c5] ~ [b4,d5] ~@3 [c5,e5]@3 ~@3", E: "[g4,b4]@3 ~ [g4,b4] ~ [g4,b4]@2 ~@2 [g4,c5]@3 ~ [g4,b4] ~",
  F: "[g4,b4]@5 ~ [g4,b4] ~ [a4,c5] ~ [g4,b4]@5 ~", G: "[a4,c5]@3 ~ [a4,c5] ~ [b4,d5]@2 ~@2 [c5,e5]@3 ~@3",
  H: "[g4,b4]@6 g4@2 ~@2 b4@2 g4@3 ~, ~ d5", I: "[a4,c5]@4 ~@2 [a4,c5]@3 ~ [a4,c5] ~ [g4,b4]@2 ~@2",
  J: "[f#4,a4]@5 ~ f#4@4 ~@2 d5@3 ~, ~@5 f#4@2 ~", // F#m
  K: "[[g4,b4]@5 ~ b4@4 ~@4 d5@10 ~@2 g4@2 b4@2 ~@2, ~@6 g4@2 ~@2 g4@13 ~ d4@6 ~@2, ~@3 b4@3 ~@2]/2", // G
  L: "[[g4,b4]@3 ~ [g4,b4] ~ [g4,b4] ~@3 [f#4,a4]@2 ~@2 [g4,b4]@7 ~ [g4,b4] ~ [g4,b4] ~ [f#4,a4]@2 ~@2 [g4,b4] ~]/2", // G F#m G F#m G
  M: "[[a4,c5]@4 ~@2 [a4,c5] ~ [a4,c5] ~ g4@2 ~@2 [f#4,a4]@7 ~ [f#4,a4] ~ [f#4,a4] ~@3 [a3,d4]@3 ~, ~@10 b4 ~@21]/2", // Am F#m D5
  N: "[~@4 [d4,g4]@2 ~@2 [d4,g4]@2 ~@2 [d4,f#4] ~ [e4,g4]@8 e4 ~ [e4,g4]@3 ~ [e4,b4]@3 ~]/2", // G5 D Em E5
  O: "[a4,c5]@3 ~ [a4,c5] ~ [a4,c5]@2 ~@2 [g4,b4]@3 ~ [f#4,a4] ~", // Am G F#m
  P: "[f#4,a4]@4 ~@2 [f#4,a4] ~ [g4,b4]@3 ~ [a4,c5]@3 ~", // F#m G Am
  Q: "[[g4,b4]@5 ~ [g4,b4] ~ [g4,b4] ~ [a4,c5] ~@3 [g4,b4]@6 ~@2 [g4,b4]@4 g4@2 [g4,d5]@4]/2", // G Am G G5
  R: "[a4,c5]@3 ~ [a4,c5] ~ [a4,c5] ~@3 [g4,b4]@2 ~@2 [f#4,a4] ~", // Am G F#m
  S: "[f#4,a4]@5 ~ [f#4,a4]@3 ~@3 d4@2 ~@2, ~@12 a3 ~@3", // F#m
  T: "[d4,g4]@4 ~@2 [d4,g4] ~ [d4,g4]@2 [d4,g4] ~ f#4@2 d4 ~, ~@12 d4 ~@3", U: "e4@2 g4 [e4,g4,b4]@4 ~",
  V: "[[a4,c5]@2 ~@2 [a4,c5] ~ [a4,c5] ~@3 [g4,b4] ~@3 f#4@9 ~@3 f#4@2 ~@2 a4@2, ~@7 a4@7 d5@2]/2", // Am G
  W: "[[g4,b4]@4 ~@2 [g4,b4] ~@9 [d4,b4]@2 ~@14, ~@5 d4@3 ~@8, ~@6 g4@3 ~@7]/2", // G
  X: "[a4,c5]@3 ~ [a4,c5] ~ [b4,d5] ~@3 [c5,e5] ~@5", // Am Bm C
  Y: "[[g4,b4]@2 ~@2 [g4,b4] ~ [g4,b4] ~@3 [a4,c5] ~@3 [g4,b4]@6 ~@2 [g4,b4] ~ [g4,b4] ~ [a4,c5] ~@3 [f4,g4,a4,b4] ~]/2", // G Am G Am G7
  Z: "[f#4,a4]@2 ~@2 [f#4,a4] ~ [g4,b4] ~@3 [f#4,a4]@4 ~@2, ~@10 g#4 ~@5", // F#m G F#m
  AA: "[[g4,b4]@3 ~ [g4,b4] ~ [g4,b4]@2 ~@2 [g4,b4] ~ [g4,c5] ~ b4@8 g4@2 ~@4 g4@2 ~@2, ~@14 g4@5 ~@5 d5@7 ~, ~@26 b4@5 ~]/2", // G C5
  AB: "[a4,c5]@3 ~ [a4,c5] ~ [b4,d5] ~@3 [a4,c5]@5 ~", AC: "[f#4,a4]@3 ~ [f#4,a4] ~ [g4,b4] ~@3 [a4,c5]@5 ~",
  AD: "b4@6 ~@6 b4@2 g4 ~, g4@3 ~@3 g4@5 ~@5, ~@8 d5@7 ~",
  AE: "[~@4 [a4,c5] ~@3 [a4,c5] ~ [g4,b4] ~@3 [f#4,a4]@7 ~ a4@6 f#4@2 a4 ~, ~@22 f#4@3 ~@7]/2", // Am G F#m
  AF: "[d4@4 g4@2 ~@4 g4@2 ~@4 d4@3 ~ d4@4 ~@4 d4@2 ~@2, ~@6 b4@8 g4@7 ~@5 g4@5 ~, ~@12 d4@4 b4@15 ~]/2",
  AG: "[a4,c5]@2 ~@2 [a4,c5] ~ [b4,d5] ~@3 [c5,e5]@2 ~@4", // Am Bm C
  AH: "[[g4,b4]@3 ~ [g4,b4] ~ [g4,b4]@2 ~@2 [g4,b4] ~ [a4,b4,c5] ~ [g4,b4]@6 ~@2 [g4,b4]@4 g4@2 ~@2 b4 ~, ~@7 d5]/2", // G Am G
  AI: "~@2 [a4,c5] ~@3 [a4,c5] ~ [b4,d5] ~ a4@3 ~@3, ~@10 c5 ~@5", // Am Bm
  AJ: "[g4,b4]@4 ~@2 [g4,b4]@3 ~ [g4,b4] ~ [g4,c5]@3 ~", AK: "[g4,b4]@3 [g4,b4]@4 ~",
  AL: "[f#4,a4]@3 ~ [f#4,a4] ~ [g4,b4] ~@3 [a4,c5]@3 ~ [g4,b4] ~", // F#m G Am G
  AM: "[[g4,b4]@5 ~ [g4,b4] ~@3 [g4,b4] ~ [a4,c5] ~ [g4,b4]@7 ~ [g4,b4]@4 g4@2 ~@2 b4 ~, ~@7 d5]/2", // G Am G
  AN: "[a4,c5]@3 ~ [a4,c5] ~ [a4,d5] ~@3 [a4,c5]@4 ~@2", AO: "[f#4,a4]@5 ~ [f#4,a4]@8 ~@2",
  AP: "~@2 [d4,g4]@2 ~@2 [d4,g4] ~ [g4,b4]@3 ~ g4@2 b4 ~, ~@12 c5 ~@3", // G5 G
  AQ: "[g4,b4]@5 ~ b4@4 g4 ~ [g4,b4] ~@3, ~@3 g4 ~@4", AR: "[g4,b4]@4 ~@2 [g4,b4]@4 g4@2 d5@2 [g4,b4] ~",
  AS: "[g4,b4]@4 ~@2 [g4,b4]@3 ~ [g4,b4] ~ [g4,d5] ~@3", AT: "[a4,c5]@3 ~ [a4,c5] ~ [b4,d5] ~@3 [c5,e5]@4 ~@2",
  AU: "[g4,b4]@4 ~@2 [g4,b4]@3 ~ [g4,b4] ~@3 [g4,b4] ~", AV: "~@2 [g4,b4] ~@3 [g4,b4] ~ [g4,b4]@7 ~",
  AW: "c5@6 a4@2 ~@2 c5@2 a4@3 ~, a4@4 ~@4 e5@7 ~", AX: "~@2 a4 ~@3 f#4 ~, ~ f#4@2 d5@4 ~, ~@5 a4@2 ~",
  AY: "~ d4 g4 d4 ~ g4 d4 g4, ~@8 b4@5 ~@3", AZ: "d4 ~@7, g4 ~@15",
  BA: "[[g4,b4]@3 ~ [g4,b4] ~ [g4,b4] ~@3 [a4,c5] ~@3 b4@8 g4 ~ d5@4 b4@2 g4 ~, ~@14 g4@6 ~@4 g4@3 ~@5]/2", // G Am
  BB: "[[g4,b4]@3 ~ [g4,b4] ~ [g4,b4]@2 ~@2 [g4,b4] ~ [a4,c5] ~ [g4,b4]@6 ~@2 g4@4 ~@2 g4@3 ~, ~@22 b4@9 ~]/2", // G Am G
  BC: "[f#4,a4]@3 ~ [f#4,a4] ~ [g4,b4] ~@3 [a4,c5]@4 ~@2", BD: "b4@6 g4@2 ~@2 b4@2 g4@3 ~, g4@4 ~@4 d5@7 ~",
  BE: "[g4,b4]@4 ~@2 [g4,b4]@2 ~@2 [g4,b4] ~ [a4,c5] ~ [g4,b4] ~", BF: "[a4,c5]@4 ~@2 [a4,c5]@2 ~@2 [a4,c5]@5 ~",
  BG: "[f#4,a4]@3 ~ [f#4,a4] ~@3 [f#4,a4]@5 ~@3", // F#m
  BH: "[[g4,b4]@4 ~@2 [g4,b4]@3 ~ [g4,b4] ~ [a4,c5] ~ [g4,b4]@7 ~ [g4,b4]@3 ~ [g4,b4] ~ [a4,c5] ~ [g4,b4] ~]/2", // G Am G Am G
  BI: "[a4,c5]@2 ~@2 [a4,c5] ~ [a4,c5]@2 ~@2 [a4,c5] ~ g4@2 ~@2, ~@12 b4 ~@3", // Am
  BJ: "[f#4,a4]@2 ~ [f#4,a4] ~ [f#4,a4]@2 ~", BK: "~@2 [d4,g4]@2 ~@2 [d4,g4] ~ [d4,g4]@7 ~",
  BL: "[e4,g4]@4 ~@2 g4@4 e4 ~ [e4,g4]@2 ~@2, ~@3 e4 ~@4", // Em
  BM: "[a4,c5]@2 ~@2 [a4,c5] ~ [a4,c5]@2 ~@2 [a4,c5] ~ [b4,d5] ~@3", // Am Bm
  BN: "[f#4,a4]@4 ~@2 a4@6 f#4@2 a4 ~, ~@3 f#4@2 ~@3", // F#m
  BO: "[[g4,b4]@4 ~@2 [g4,b4]@3 ~ [g4,b4] ~ [a4,c5] ~ [g4,b4]@7 ~ g4@2 ~@2 [g4,b4]@3 ~ [g4,b4] ~, ~@22 b4 ~@9]/2", // G Am G
  BP: "[a4,c5]@4 ~@2 [a4,c5] ~ [a4,c5] ~ [a4,c5]@2 ~@2 [a4,c5] ~", // Am
  BQ: "~@2 [f#4,a4]@2 ~@2 [f#4,a4] ~ [g4,b4]@3 ~ [a4,c5]@2 ~@2", // F#m G Am
  BR: "[[g4,b4]@4 ~@2 [g4,b4] ~ [g4,b4]@3 ~ [a4,c5] ~ [g4,b4]@8 ~@2 [g4,b4] ~ [a4,c5] ~@3 [g4,a4,b4] ~]/2", // G Am G Am G
  BS: "[a4,c5] ~ [a4,c5]@2 ~@2 [a4,c5] ~ [a4,c5] ~ [a4,c5]@2 ~@2 [a4,c5] ~", // Am
  BT: "~@2 [f#4,a4]@2 ~@2 [f#4,a4] ~ [g4,b4]@3 ~ [g4,c5]@2 ~@2", // F#m G C5
  BU: "[[g4,b4]@5 ~ [g4,b4] ~ [g4,b4] ~ [g4,c5]@3 ~ [g4,b4]@7 ~ g4@2 ~@2 b4@2 g4@3 ~, ~@24 d5@7 ~]/2", // G C5 G
  BV: "[[a4,c5]@4 ~@2 [a4,c5] ~ [a4,c5] ~ g4@2 ~@2 [f#4,a4]@7 ~ [f#4,a4] ~ [f#4,a4]@6 ~@2, ~@10 b4 ~@21]/2", // Am F#m
  BW: "~@2 [d4,g4]@3 ~ [d4,g4] ~@5 d4@2 ~@2, ~@8 b4@7 ~, ~@10 g4@5 ~", BX: "d4 ~@5 g4@4 e4@2 [e4,g4,b4] ~@3, b4@3 ~",
  BY: "~@2 [a4,c5] ~@3 [a4,c5] ~ [b4,d5]@2 ~@2 [c5,e5]@2 ~@2", // Am Bm C
  BZ: "~@2 [f#4,a4]@2 ~@2 [f#4,a4] ~ [g4,b4] ~ [a4,c5]@5 ~", // F#m G Am
  CA: "[[g4,b4]@5 ~ [g4,b4] ~ [g4,b4] ~ [a4,c5] ~@3 [g4,b4]@6 ~@2 [g4,b4] ~ [g4,b4] ~ [a4,c5] ~@3 [g4,b4] ~]/2", // G Am G Am G
  CB: "[[a4,c5]@4 ~@2 [a4,c5] ~ [a4,c5] ~ [g4,b4] ~@3 [f#4,a4]@6 ~@2 [f#4,a4] ~ a4@4 f#4@2 a4 ~, ~@12 f#4 ~@3]/2", // Am G F#m
  CC: "~@4 [g4,b4] ~@5 d4@2 g4@2 d4 ~", CD: "[d4,g4,b4]@11 ~@5",
})).s("gm_epiano1").gain(0.19).pan(0.7)

// bass · fretless bass
const bass = note(`<
  ~ A B C D A B C E A F C E A G H I A B C E A J C D A K C E A K C E L M N O A B C D A B C E L B C E L K N P L K C E L K
  Q R A G C E L B C E A B C E A B C E A K I O A B C D A K C E A K C D L B C E L B C E A K C E A K C E A B C E A K C E A
  B C D A K S T
>`.pickRestart({
  A: "a2@4 ~@2 a2 ~ a2@4 ~@4", B: "d2@4 ~@2 d2 ~ d2@5 ~@3", C: "g2@4 ~@2 g2 ~ g2@4 f#2@4", D: "e2@4 ~@2 e2 ~ e2@7 ~",
  E: "e2@4 ~@2 e2 ~ e2@4 ~@4", F: "d2@4 ~@2 d2 ~ d2@7 ~", G: "d2@4 ~@2 d2 ~ e2@3 ~ f#2@3 ~", H: "g2@5 ~ g2 ~ g2@5 ~@3",
  I: "g2@4 ~@2 g2@3 ~ g2@2 d2@3 ~", J: "d2@4 ~@2 d2 ~ d2@4 ~@2 d2 ~", K: "d2@4 ~@2 d2 ~ d2@3 ~ e2@3 ~",
  L: "a2@4 ~@2 a2 ~ a2@7 ~", M: "d2@5 ~ d2 ~ d2@4 f#2@3 ~", N: "g2@4 ~@2 g2 ~ g2@3 ~ d2@4", O: "g1@5 ~@11",
  P: "g2@4 ~@2 g2@2 a2@2 g2@3 ~ g2 ~", Q: "g2@4 ~@2 g2 ~ g2@5 ~ d2@2", R: "g2@4 ~@2 g2@2 a2@3 ~ g2@3 ~",
  S: "g2@5 ~ d2@3 ~ d2 ~ b1@3 ~", T: "g1@11 ~@5",
})).s("gm_fretless_bass").gain(0.28)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~ A B C D A B C D A B C D A B E@2 A B C D A B C D A B C D A B C D A B C F G@2 C D A B C D A B C D A B H@2 A B C D A B
  I@2 A B C D A B C D A B C D A B C D A B J@2 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A
  B C D A B K@2
>`.pickRestart({
  A: "[e4,a4,c5]@15 ~", B: "[d4,f#4,a4]@15 ~", C: "[d4,g4,b4]@15 ~", D: "[e4,g4,b4]@15 ~",
  E: "[~@24 f4@7 ~, [d4,g4,b4]@31 ~]/2", F: "[d4,g4,b4]@3 ~@13", G: "[[e4,a4,c5]@13 ~ [d4,f#4,a4]@17 ~]/2",
  H: "[[d4,g4,b4]@31 ~]/2", I: "[~@16 f4@15 ~, [d4,g4,b4]@31 ~]/2", J: "[[d4,g4,b4]@19 ~@13]/2",
  K: "[[d4,g4,b4]@27 ~@5]/2", // G
})).s("gm_synth_strings_1").gain(0.09)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A@2 B@2 A@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 A@2 J@2 H@2 I@2 A@2 K@2 L M N@2 F@2 E@2 F@2 G@2 D@2 O P@3 N@2 A@2 Q@2 H@2
  R@2 H@2 S@5 T A@2 U V@3 W@2 L M N@2 F@2 E@2 X@4 Y@2 Z@2 L M AA@2 H@2 Q@2 AB@6 E@2 AC@2 AD@4 AE@2 L M AF AG L AH@2 AI
>`.pickRestart({
  A: "[[a3,a4]@31 ~]/2", B: "[~ b3@31, b4@31 ~]/2", C: "[b3,b4]/2", D: "[a4,a5]/2",
  E: "[[g4,g5]@23 ~ [d4,d5]@4 [e4,e5]@4]/2", F: "[[a4,a5]@7 [b4,b5]]/2", G: "[[g4,g5]@31 ~]/2",
  H: "[[a3,a4]@7 [b3,b4]]/2", I: "[[g3,g4]@31 ~]/2", J: "[[g3,g4]@6 [d3,d4] [e3,e4]]/2",
  K: "[[g3,g4]@21 ~@3 [b4,b5]@4 [d5,d6]@4]/2", L: "[c5,c6]@3 [b4,b5]", M: "[a4,a5]", N: "[[g4,g5]@9 ~@7]/2",
  O: "[b4,b5]@3 [c5,c6]", P: "[[b4,b5]@15 [c5,c6]@12 ~ [e5,e6]@3 [d5,d6]@8 ~ [b4,b5]@4 [a4,a5]@4]/3",
  Q: "[[g3,g4]@27 ~ [b3,b4]@4]/2", R: "[[g3,g4]@15 ~]/2",
  S: "[[g3,g4]@31 [a4,a5]@26 ~ [g4,g5]@2 [f#4,f#5]@2 [g4,g5]@12 ~@6]/5", T: "~@2 [g3,g4] [b3,b4]",
  U: "[b3,b4]@3 [c4,c5]", V: "[[b3,b4]@12 [g3,g4]@3 ~ a4@32, ~@15 a3@32 ~]/3",
  W: "[[b3,b4]@11 ~ [b4,b5]@2 [d5,d6]@2]/2", X: "[[a4,a5]@31 [g4,g5]@32 ~]/4", Y: "[[c5,c6]@7 [d5,d6]]/2",
  Z: "[[b4,b5]@7 [d5,d6]]/2", AA: "[[g4,g5]@23 ~ [d3,d4]@4 [e3,e4]@4]/2",
  AB: "[[a3,a4]@31 [g3,g4]@32 [a4,a5]@28 ~ [b4,b5]@4]/6", AC: "[[a4,a5]@6 [d5,d6] [b4,b5]]/2",
  AD: "[[g4,g5]@19 ~ [b4,b5]@4 [a4,a5]@3 [g4,g5]@4 ~ a5@32, ~@31 a4@32 ~]/4", // G B A G
  AE: "[[b4,b5]@12 [c5,c6]@3 [b4,b5]@16 ~]/2", AF: "[g4,g5]@3 [f#4,f#5]", AG: "[g4,g5] [a4,a5] [b4,b5] [d5,d6]",
  AH: "[[a4,a5]@15 [g4,g5]@10 [d4,d5]@3 [e4,e5]@4]/2", AI: "[g4,g5]@9 ~@7",
})).s("gm_string_ensemble_1").gain(0.16).pan(0.4)

// other · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@3 A@2 ~@2 A@2 ~@2 A@2 ~@26 A@2 ~@2 A@2 ~@2 A@2 ~@34 B@2 ~@2 C@2 ~@2 D@2 ~@2 E@2 ~@2 A@2 ~@2 A@2 ~@2 F@2 ~@2 A@2 ~@2
  A@2 ~@2 E@2 ~@2 G H
>`.pickRestart({
  A: "[~@4 g3@2 a3@2 g3@2 f#3 ~@3 e3@9 ~@9]/2", B: "[~@4 g3@2 a3@2 g3@2 f#3 ~@3 e3@8 ~@10]/2",
  C: "[~@2 g3 a3 g3 f#3 ~ e3@4 ~@5]/2", D: "[~@4 g3@2 a3@2 g3@2 f#3@3 ~ e3@7 ~@11]/2",
  E: "[~@4 g3@2 a3@2 g3@2 f#3 ~@3 g3@8 ~@10]/2", F: "[~@4 g3 ~ a3@2 g3 ~ f#3 ~@3 g3@10 ~@8]/2",
  G: "~@4 g3 ~ a3@2 g3@2 f#3@5 ~", H: "g3@13 ~@3",
})).s("gm_electric_guitar_jazz").gain(0.31).pan(0.3)

// chords · overdriven guitar
const overdriven_guitar = note("<~@52 A B C D@2 E C F G ~@64>".pickRestart({
  A: "~@8 [g4,b4]@2 ~ [a4,c5]@2 ~ d5@2, ~@13 b4@2 ~", B: "[c5,e5]@5 ~ [c5,e5] ~ [c5,e5]@2 ~ [b4,d5]@2 ~ [b4,d5]@2",
  C: "[b4,d5]@2 ~ [a4,c5]@2 ~ [a4,c5] ~ [a4,c5]@3 ~ [g4,b4]@2 [a4,c5]@2", // Bm Am G Am
  D: "[[b4,d5]@4 ~@2 [c5,e5] ~ [b4,d5] ~ [a4,c5]@2 ~@2 [g4,b4]@10 ~@2 [a4,c5]@2 ~ [b4,d5]@2 ~]/2", // Bm C Bm Am G Am Bm
  E: "[c5,e5]@5 ~ [c5,e5] ~ [c5,e5]@2 ~ [b4,d5]@2 ~ [b4,d5] ~", F: "[b4,d5]@5 ~ [b4,e5] ~ [b4,d5]@4 [b4,e5]@3 ~",
  G: "[d5,g5]@9 ~@7", // G5
})).s("gm_overdriven_guitar").gain(0.27)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B C D E B C D E B C D E B C F E B C D E B C D E B C D E B C D E B G H A B C D E B C D E B C D E B C I E B C D E B
  J F E B C D E B C D E B C D E B C D E B K H A B C D E B C D E B C D E B C D E B C D A B C D E B C D E B C D E B C D E
  B C D E B F L
>`.pickRestart({
  A: "[e3,a3,c4,e4]@4 [e3,a3,c4,e4] ~ [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~", // Am
  B: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~", // D
  C: "[d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~ [d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~", // G
  D: "[e3,g3,b3,e4]@2 [e3,g3,b3,e4]@2 [e3,g3,b3,e4] ~ [e3,g3,b3,e4]@2 [e3,g3,b3,e4]@2 [e3,g3,b3,e4]@2 [e3,g3,b3,e4]@2 [e3,g3,b3,e4] ~", // Em
  E: "[e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~ [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~", // Am
  F: "[d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~ [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~ [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~ [d3,g3,b3,g4] ~", // G
  G: "[d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~ [d3,g3,b3,g4]@2 ~@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~ [d3,g3,b3,g4] ~", // G
  H: "[d3,g3,b3,g4]@3 ~@13", // G
  I: "[d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~ [d3,g3,b3,g4]@2 ~@2 [d3,g3,b3,g4]@2 ~@2 [d3,g3,b3,g4] ~", // G
  J: "[d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~ [d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~ [d3,g3,b3,g4] ~", // G
  K: "[d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~ [d3,g3,b3,g4]@3 ~ [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~ [d3,g3,b3,g4] ~", // G
  L: "[d3,g3,b3,g4]@3 ~", // G
})).s("gm_acoustic_guitar_steel").gain(0.11).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!16 [x ~@2 x!2 ~@3]!19 x [x ~@2 x!2 ~@3]!43 x [x ~@2 x!2 ~@3]!43 x>").gain(0.45)

// drums · snare
const snare = s("sd").struct("<~ A@7 B A@7 C A@19 ~ A@43 ~ A@43 ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "~ x ~@2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~ A@7 B A@7 C D A@18 E A@43 E A@43 ~>".pickRestart({
  A: "x!8", B: "x!6 ~ x", C: "x!4 ~@4", D: "~ x!7", E: "~@5 x ~@2",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 [~@5 x!3] ~@108>").gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A ~@7 B ~@19 A ~@43 A ~@44>".pickRestart({
  A: "~@3 x", B: "~ x",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@17 x ~@18 x ~@43 x ~@43 x>").gain(0.25)

stack(
  epiano1, bass, synth_strings_1, string_ensemble_1, electric_guitar_jazz, overdriven_guitar, acoustic_guitar_steel,
  kick, snare, hihat, mid_tom, open_hat, crash
)