Strudelify
Johnny B Goode cover art

Chuck Berry

Johnny B Goode

Chuck Berry

KeyB♭ majorTempo167 bpm
0:00/0:00
// Johnny B Goode — BERRY CHUCK
// 167 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 "#Mtd.Dist" electric guitar muted (copy of ch 5 "#Muted Gt" electric guitar muted); ch 8 "Overdr.Gt" overdriven guitar (copy of ch 7 "Jazz Gtr." electric guitar jazz)
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(167/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.

// chords · piano · "Honky-Ton"
const piano = note(`<
  ~@12 A B@4 C@2 D E@2 F G H@5 I@2 J K@2 L M N O P Q R S T@2 U@2 V G W X@2 Y@2 I@2 J K@2 L M Z AA AB AC AD AE@3 AF AG AH
  AI@2 AJ AB AK AL AE@3 AF AG AH AM AN O P Q R S T@2 U@2 V G W X@2 Y@2 I@2 J K@2 L M AO@2 ~
>`.pickRestart({
  A: "~ f5 ~ f5 ~ f5 ~ f6, ~@2 f6 ~@3 f6 ~@3 f6 ~@3 f5 ~",
  B: "[bb4,f5] ~ [bb4,f5] ~ [bb4,f5] ~ [bb4,f5] ~ [bb4,f5] ~ [bb4,f5] ~ [bb4,f5] ~ [bb4,f5] ~", // Bb5
  C: "[db5,f5,bb5] ~ [db5,f5,bb5] ~ [db5,f5,bb5] ~ [db5,f5,bb5] ~ [db5,f5,bb5] ~ [db5,f5,bb5] ~ [db5,f5,bb5] ~ [db5,f5,bb5] ~", // Bbm
  D: "[f5,ab5]@2 [f5,ab5] ~ g5@2 [d5,f5] ~ [d5,f5]@2 ~ bb5 [eb6,g6]@3 bb5, ~@4 eb5 ~@7 d6 ~@3", // Fm Dm Eb
  E: "[[d6,f6]@3 f5 [bb5,eb6]@2 ~ [bb5,d6]@2 ~@2 bb5@2 ~@3 [f5,c6] ~ [f5,c6] ~ [f5,c6] ~ [f5,c6] ~ [f5,c6] ~ [f5,c6] ~ [f5,c6] ~ [f5,c6] ~, ~@11 d6 ~@3 eb5@2 ~@15]/2", // Dm Eb5 Bb F5
  F: "[f5,c6] ~ [f5,c6] ~ e6 f6 ~@2 [c6,eb6]@2 [c6,f6] ~@3 bb5@2, ~@2 [c6,eb6] ~@5", // F5 Cm F5 Cm
  G: "[d6,f6]@3 bb5 d6 ~ bb5@2 db6 d6@2 ~ db6 d6@2 f5, db6 ~@3 g6@3 ~ f6@3 ~ f6@3 ~, ~@5 eb6@2 ~@4 bb5@2 ~@3", // Dm
  H: "[[bb5,d6]@2 ~ f5 [bb5,eb6]@2 bb5 d6 ~@2 [bb5,d6]@2 ~@2 [bb4,f5]@4 bb4@2 bb4@2 [bb4,f5] ~ bb4@2 [bb4,f5] ~ [bb4,f5]@2 [bb4,f5]@4 ~@2 [bb4,eb5]@2 ~@2 d5@2 ~ bb5@2 ~ [bb4,f5]@4 bb4@2 bb4@2 [bb4,f5] ~ bb4@2 [bb4,f5] ~ [bb4,f5]@2 [bb4,f5]@4 ~@2 [bb4,eb5]@2 ~@2 d5@2 ~ bb5@2 ~@3, ~@4 db6 ~@13 f5 ~ f5 ~@3 f5 ~@14 [bb4,db5]@3 ~ bb4 ~@6 f5 ~ f5 ~@3 f5 ~@14 [bb4,db5]@3 ~ bb4 ~@4]/5", // Bb Eb5 Bb Bb5 Eb5 Bb5 Eb5 Bbm
  I: "[[f6,ab6]!2 ~ [f6,ab6]!3 ~ [f6,ab6]!3 ~ [f6,ab6]!2 ~@2 [f6,ab6]@4 ~ [eb6,g6]@2 ~ [db6,d6,f6] bb5@2 ~ [f6,bb6]!3 ~ [f6,bb6]]/2", // Fm Eb Db Bb5
  J: "[f6,bb6]!2 ~ [f6,bb6]!3 ~ [f6,bb6]!3 ~ [f6,bb6]!3 ~ [f6,bb6]", // Bb5
  K: "[[f6,bb6]!2 ~ [f6,bb6]!3 ~ [f6,bb6]!3 ~ [f6,bb6] [f6,ab6]!2 ~ f6@2 ~@5 [f5,c6]@2 ~@3 [f6,bb6]!3 ~ [f6,bb6], ~@15 c6 ~@16]/2", // Bb5 Fm F5 Bb5
  L: "[f6,bb6] ~@3 eb6@2 ~ [db6,f6] bb5 ~@2 f5 [bb5,db6]@2 ~@2, ~@4 g6 ~@11", // Bb5 Db Bbm
  M: "[d5,f5]@2 ~ bb4 [d5,f5]@2 ~ [f5,ab5]@5 [eb5,g5]@2 ~ bb4", // Dm Fm Eb
  N: "d5@2 ~ [f4,f5]@2 ~@2 f5@2 ~@2 f5 ~@2 [f4,f5]@2, ~@3 f4 ~ f4 ~@2", // F
  O: "db6 d6 ~@2 [eb6,g6]@2 bb5@2 [db6,d6] ~@2 bb5 [eb6,g6]@2 ~ bb5, f6@2 ~ bb5@2 ~@3 f6@2 ~@6", // Eb Dmaj7 Eb
  P: "[d6,f6]@2 bb5@2 [eb6,g6]@2 db6 d6@2 ~ [d6,f6]@2 ~@4, db6 ~@5 f6@2 ~@8", // Dm Eb Dm
  Q: "db6 d6@2 bb5 [eb6,g6]@2 db6 d6@2 ~@7, f6@3 ~@3 f6@2 ~@8", // Eb
  R: "db6 d6@2 bb5 [eb6,g6]@2 f6@2 ~@3 [f6,bb6]!3 ~ [f6,bb6], f6@3 ~@3 db6 ~@9", // Eb Bb5
  S: "[f6,bb6]!2 ~ [f6,bb6]!3 ~ [f6,bb6]!3 ~ [f6,bb6] [f6,bb6]@2 [f6,ab6]@2", // Bb5 Fm
  T: "[~@4 [eb6,g6]@2 ~@2 [db6,f6]@3 bb5 [c6,eb6]@2 ~ [bb5,d6]@3 ~@2 [bb5,d6]@3 ~ [bb5,d6]@3 f5 [bb5,eb6]@2 ~@2, ~@15 db6 ~@16]/2", // Eb Db Cm Bb Eb5
  U: "[[bb5,d6]@3 f5 [bb5,eb6]@2 ~ f6@2 ~ f5 ~ [db6,g6]@2 ~ [c6,g6]@2 ~@5 c6@2 ~@2 [f5,c6] ~@3 [c6,f6]@2, ~@6 bb5@2 ~@14 f5 ~@7 eb6 ~]/2", // Bb Eb5 Dbdim C5 F5
  V: "~@2 a5 ~ [c6,f6] ~@2 [db6,g6] [c6,f6]@2 eb6 [a5,c6] f5@2 bb5@2", // F5 Dbdim F5 Am
  W: "[bb5,d6]@2 ~ f5 [bb5,eb6]@2 ~ [bb5,d6] ~@3 [bb5,bb6] [db6,db7] ~@2 [eb6,eb7], ~@4 db6 ~@11", // Bb Eb5 Bb Db Eb
  X: "[[d7,f7]!2 ~ [d7,f7]!3 ~ [d7,f7]!3 d7 f7 [d7,f7] ~ db7 d7@3 ~@2 [bb6,eb7]@2 ~ [bb6,db7] [bb6,d7]@2 ~@2 db7 ~@2 eb7, ~@14 f7@4 ~@6 db7 ~@2 bb6@2 ~@3]/2", // Dm Eb5 Bbm Bb
  Y: "[[d7,f7]!2 ~ [d7,f7]!3 ~ [d7,f7]!3 ~ [d7,f7] [d7,f7]@2 ~ [d7,f7]@4 ~ [bb6,eb7]@2 ~@2 d7@2 ~ [bb5,bb6] db6@2 eb6 ~, ~@15 db7 ~@7 [bb6,db7]@3 ~@6]/2", // Dm Eb5 Bb Bbm
  Z: "d5@2 ~ [bb5,bb6] [bb5,bb6]@2 [bb5,bb6] ~ [bb5,bb6]@2 [bb5,bb6] ~ [db6,db7]@2 ~ [eb6,db7,eb7]", AA: "[f6,f7] ~@7",
  AB: "[bb3,db4,g4]@3 ~@13", AC: "[bb3,d4,f4,ab4]@3 ~@12 [db6,e6,f6]",
  AD: "~@3 [db6,f6] [c6,eb6]@2 ~ bb5 db6@2 ~ [bb6,eb7]@3 ~ [bb6,eb7], ~@8 f6 ~@7", // Db Cm Eb5
  AE: "[[bb6,eb7]!2 ~ [bb6,eb7]!3 ~ [bb6,eb7]!3 ~ [bb6,eb7]!2 ~ f6 g6@3 ~@2 f6@2 ~ eb6 eb6@2 ~@2 g6 bb5 ~ [eb6,g6]@2 bb5 ~ g6 bb5 eb6@2 bb5 db6 bb5 ~ eb6 bb5 g6 bb5 ~, ~@14 bb6@4 ~@6 g6 ~@3 db6@2 ~@5 db6@2 g6 ~@2 g6@2 g6@2 ~@4, ~@15 ab6 ~@4 e6 ~@6 bb5@2 ~@16 db6@2 ~]/3", // Eb5 Eb
  AF: "~ bb5 [db6,g6]@2 bb5 ~ bb5 ~ [db6,gb6] bb5 [eb6,g6]@2 bb5 g6 bb5 ~, [eb6,g6]@2 ~@3 [eb6,g6]@2 ~ g6@2 ~@3 eb6@2 ~", // Dbdim Gb5 Eb
  AG: "[c6,f6]@3 f5 db6 d6 [c6,f6]@3 ~ f6@2 ~@2 [f6,c7]@2, ~@4 f6@2 ~@4 c7 ~@5", // F5
  AH: "~@4 bb5@2 [db6,f6] ~ bb5 ~ db6 [d6,f6] bb5 ~@3, ~@3 [eb6,g6]@2 ~ d6@2 ~@8", // Db Dm Eb
  AI: "[[d6,f6]@3 f5 [d6,f6]@2 ~ [d6,gb6] [d6,g6]@2 ~ f5 [d6,gb6]@2 ~ [d6,f6]@3 [f5,f6]@3 ~ [f5,f6]@2 ~@2 [f5,f6]@5 ~]/2", // Dm D G5 D Dm F
  AJ: "[bb3,d4,f4]@3 ~@13", AK: "[bb3,d4,f4,ab4]@3 ~@13",
  AL: "~@4 bb3@2 ~@2 bb3@2 ~@2 bb3@3 [bb6,eb7], ~@3 [d4,ab4]@2 ~@2 [d4,ab4]@2 ~@2 [d4,ab4]@2 ~@3", // Eb5 Ddim
  AM: "[d4,f4]@3 f3 [d4,f4]@2 ~ [d4,gb4] [d4,g4]@2 ~ f3 [d4,gb4]@2 ~@2", // Dm D G5 D
  AN: "[f4,bb4]@2 ~@2 [d4,a4]@2 [bb3,d4,ab4]@9 ~", AO: "[d5@2 ~ [bb5,bb6] ~@3 [f4,ab4,d5,bb5,bb6]@25]/2",
})).s("gm_piano").gain(0.24)

// bass · acoustic bass · "Ac.Bass"
const bass = note(`<
  ~@3 A B C D E F G H I J K L M N O P Q L G@2 Q L R S Q T U V Q T G@2 Q L W X L N Y Z Q L AA@2 Q L AB K AC AD AE AF Q L
  G@2 Q L A AG AH AI Y Z Q L AA@2 Q L A AG AH AI Y Z Q L AA@2 Q L W X L N Y Z Q L AA@2 Q L AB K AC AD AE AF Q L G@2 Q
  AJ@3
>`.pickRestart({
  A: "bb1@3 ~@13", B: "~@7 d2", C: "bb2 ~ ab2 ~ g2 ~ f2 ~ eb2 ~ eb2@2 c2 ~ c2 ~",
  D: "eb2 ~ eb2@2 f2 ~ g2@2 eb2 ~ eb2@2 g2@2 ab2@2", E: "bb2@3 ~ bb2@3 ~ bb2@3 ~ g2@3 ~",
  F: "bb2@3 ~ bb2@3 ~ bb2@3 ~ bb2@3 ~", G: "c3@3 ~ d3@3 ~ f2@3 ~ g2@3 ~", H: "bb2@3 ~ c3@3 ~ eb2@3 ~ g2@3 ~",
  I: "bb2 ~ bb2@2 d3 ~ eb3 ~ f3 ~ f3@2 f2 ~ g2@2", J: "bb2 ~ bb2@2 d3 ~ eb3@2 f3 ~ f3@2 f2@2 g2@2",
  K: "bb2@3 ~ g2@3 ~ f2@3 ~ g2@3 ~", L: "bb1@3 ~ d2@3 ~ f2@3 ~ g2@3 ~", M: "bb2@3 ~ d3@3 ~ f3@3 ~ g2@3 ~",
  N: "bb2@3 ~ bb2@3 ~ f2@3 ~ bb2@3 ~", O: "eb2@3 ~ g2@3 ~ bb2@3 ~ c3@3 ~", P: "eb2@3 ~ g2@3 ~ eb3@2 ~ eb3 g2@3 ~",
  Q: "bb2@3 ~ g2@3 ~ f2@3 ~ bb1@3 ~", R: "bb2@3 ~ d3@3 ~ f3@3 ~ f2@2 g2 ~", S: "bb2@3 ~ bb2@3 ~ f2@3 ~ g2@3 ~",
  T: "bb1@3 ~ d2@3 ~ f2@3 ~ bb2@3 ~", U: "eb2@3 ~ g2@3 ~ bb2@3 ~ eb3@3 ~",
  V: "db3@3 ~ db3@2 ~ d3 eb3 ~ eb2 ~ g2 ~ ab2 ~", W: "bb2 ~ bb2@2 d3 ~ eb3@2 f3 ~ f2@2 g2 ~ a2@2",
  X: "bb2@3 ~ g2@3 ~ f2@3 ~ d2@3 ~", Y: "eb2 ~ eb2@2 g2 ~ eb2@2 bb2 ~ g2@2 eb2 ~ bb2@2",
  Z: "g2 ~ eb2@2 bb1@3 ~ bb1 ~ eb2@2 f2 ~ g2@2", AA: "c3 ~ c3@2 d3 ~ d3@2 c3 ~ f2@2 g2 ~ a2@2",
  AB: "bb2@3 ~ bb2@3 ~ f2@3 ~ f2@3 ~", AC: "bb2 ~ bb2@2 d3 ~ eb3 ~ f3@2 f2@2 g2 ~ a2@2",
  AD: "bb2@3 ~ g2@3 ~ f2@3 ~ bb2@3 ~", AE: "eb3@3 ~ g2@3 ~ bb2@2 ~ g2 eb2@3 ~",
  AF: "g2 ~ g2 ~ bb2 ~ g2 ~ db3@2 ~@2 g2 ~ ab2 ~", AG: "eb2@3 ~@13", AH: "bb1@3 ~@5 bb1@3 ~@5",
  AI: "bb1@2 ~@2 bb1@2 ~@2 bb1 ~ bb1 ~ c2 ~ d2@2", AJ: "[bb1@3 ~@4 bb1@5 bb1@24 ~@12]/3",
})).s("gm_acoustic_bass").gain(0.35)

// chords · electric guitar muted · "#Muted Gt"
const electric_guitar_muted = note(`<
  ~@3 A ~ B C D E F C D E D E D E B C D E F G D E D E D E B C D E F G D E D E D E B C D E F G D E D E D E B C D E F G D
  E H I H ~ B C D E F G D E H I H ~ B C D E F G D E D E D E B C D E F G D E D E D E B C D E F G D J@3
>`.pickRestart({
  A: "[f3,bb3,d4] ~@7", // Bb
  B: "[eb3,bb3] ~ [eb3,bb3] ~ [eb3,c4] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,c4] ~ [eb3,bb3] ~", // Eb5 Cm Eb5 Cm Eb5
  C: "[eb3,bb3]@2 [eb3,bb3] ~ [eb3,c4] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3]@2 [eb3,c4] ~ [eb3,bb3]@2", // Eb5 Cm Eb5 Cm Eb5
  D: "[bb2,f3] ~ [bb2,f3] ~ [bb2,g3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,g3] ~ [bb2,f3] ~", // Bb5 Eb Bb5 Eb Bb5
  E: "[bb2,f3]@2 [bb2,f3] ~ [bb2,g3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3]@2 [bb2,g3] ~ [bb2,f3]@2", // Bb5 Eb Bb5 Eb Bb5
  F: "[f3,c4] ~ [f3,c4] ~ [f3,d4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,d4] ~ [f3,c4] ~", // F5 Dm F5 Dm F5
  G: "[f3,c4]@2 [f3,c4] ~ [f3,d4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4]@2 [f3,d4] ~ [f3,c4]@2", H: "[bb2,f3] ~@15",
  I: "[eb3,bb3] ~@7", J: "[[bb2,f3]@2 [bb2,f3] ~ [bb2,f3] ~ [bb2,f3,d4,ab4]@27 ~@15]/3",
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.3)

// chords · electric guitar jazz · "Jazz Gtr."
const electric_guitar_jazz = note(`<
  A B C D E F G F G H I J K ~@12 L ~ L ~ M ~ N ~ N O ~@14 P ~ P ~ P ~ P ~ Q R ~ A S@2 T U V W X Y Z AA@2 AB S@2 T AC F G
  F G AD AE AF AG ~@12 L ~ L ~ M ~ N ~ AH O AI AJ@3
>`.pickRestart({
  A: "~@10 [db4,d4]@2 f4 ~ g4@2", B: "[f4,bb4]!8", C: "[f4,bb4]@2 ab4@2 g4 ~ f4 ~ db4@2 d4@2 bb3@2 ~@2",
  D: "[f3,bb3]!8", E: "[d4,f4]!2 [d4,g4] [d4,f4] c4 bb3 g3 f3", F: "e4@2 ~@2 f4@2 e4@2 ~@2 f4 ~ e4@2 ~@2",
  G: "[f4,bb4]@2 e4@2 ~@2 f4 ~ e4@2 ~@2 f4@2 ~@2", H: "e4@2 ~@2 bb4@2 ab4 ~ g4@2 f4 ~ c5@2 bb4 ~",
  I: "ab4@2 g4 ~ f4@2 eb4 ~ d4@2 ~ [bb3,d4] bb4@2 ab4 ~", // Bb
  J: "g4 ~ [f4,bb4]@2 e4@2 [e4,a4] ~ e4@2 [e4,a4] ~ [eb4,g4]@2 [db4,e4] ~", K: "[bb3,f4] ~@7",
  L: "~@2 [e4,f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4]@2 [f4,bb4]@2 ~@4", // E Fm Bb5
  M: "~@2 [e4,f4,ab4] ~ [f4,ab4]@2 [f4,ab4] ~ [f4,ab4]@2 [f4,bb4]@2 ~@4", // E Fm Bb5
  N: "~@2 [e4,f4,ab4] ~ [f4,ab4]@2 [f4,ab4] ~ [f4,ab4]@2 ~ [f4,bb4]@2 ~@3", O: "[c4,eb4]@3 ~@13",
  P: "~@2 [e4,f4,bb4] ~ [f4,bb4]@2 [f4,bb4] ~ [f4,bb4]@2 [f4,bb4] ~ [f4,bb4]@2 ~@2", // Bb Bb5
  Q: "~@2 [e4,f4,bb4] ~ f4@2 [f4,bb4] ~ f4@2 [f4,bb4] ~ [f4,bb4]@2 [f4,bb4] ~", R: "f4@2 [f4,bb4] ~ f4@2 ~@10",
  S: "[f4,bb4]!5 eb4 [db4,f4] bb3", T: "[f4,bb4] eb4 [d4,f4] bb3 [f4,bb4] eb4 [d4,f4] bb3",
  U: "[f4,bb4]@3 ~ [f4,bb4]@2 ~@2 [f4,bb4]@2 eb4@2 [db4,f4]@2 bb3@2", V: "e4@2 bb4@2 ~@2 bb4 ~ ab4@2 ~@2 c5@2 bb4 ~",
  W: "ab4 ~ g4 ~ f4@2 eb4 ~ [db4,d4]@2 bb3 [d4,f4] bb4 ~ bb4@2", X: "bb4@2 g4 ~ f4@2 d4!2 [f4,bb4]@2 bb4 ~ bb4@2 bb4@2",
  Y: "bb4 ~ g4@2 f4@2 d4 [d4,f4] bb4@2 g4 ~ f4@2 d4@2", // Dm
  Z: "[e4,f4,bb4] ~ [f4,bb4] ~ [f4,bb4]@2 [f4,bb4]@2 [f4,bb4]@2 [eb4,g4]@2 [d4,f4]@2 bb3@2", // Bb Bb5 Eb Dm
  AA: "[~@2 eb4@2 ~@2 [eb4,ab4]@2 ~@2 [eb4,ab4]@3 ~ [eb4,g4]@4 f4@2 db4@2 bb3@2 [eb4,g4]@2 f4 ~ db4@2 ~ bb3]/2", // Ab5 Eb
  AB: "[f4,bb4]@2 ~@8 [db4,d4]@2 f4 ~ g4@2", AC: "bb3@2 [d4,ab4]@3 ~ [d4,ab4]@3 ~ [d4,ab4]@5 ~",
  AD: "c5@2 bb4 ~ c5 ~ [f4,bb4]@2 [f4,ab4] ~ [eb4,g4] ~ [db4,d4,f4]@2 ~@2", // Bb5 Fm Eb Db
  AE: "[e4,f4,bb4]@2 [f4,bb4] ~ [e4,f4,bb4]@2 [f4,bb4] ~ [e4,f4,bb4]@2 [f4,bb4] ~ [d4,eb4,g4]@2 ~ [db4,f4]", // Bb Bb5 Bb Bb5 Bb Bb5 Ebmaj7 Db
  AF: "bb3@2 ~@2 [f4,bb4]@2 ~@2 bb3@2 ~@2 [eb4,g4]@2 ~ [db4,f4], ~@5 f4 ~@2, ~@11 bb4@2 ~@3", AG: "bb3 ~@3",
  AH: "~@2 [e4,f4,ab4] ~ [f4,ab4]@2 [f4,ab4] ~ [f4,ab4]@2 ~ bb4@2 ~@3, ~@5 f4 ~@2", // E Fm
  AI: "[f3,bb3]@2 [f3,bb3] ~@5 [f3,bb3]@2 [f3,bb3] ~@5", AJ: "[[f3,bb3]@2 ~@5 [f3,bb3]@27 ~@14]/3",
})).s("gm_electric_guitar_jazz").gain(0.3).pan(0.7)

// chords · electric guitar jazz · "Jazz Gtr." · soft notes
const electric_guitar_jazz_2 = note("<A B C D ~@53 E F ~ A G H I J ~@5 K ~ A G H L ~@35>".pickRestart({
  A: "~@15 e4", B: "~@3 e4 ~@2 e4 ~", C: "~@15 e3, ~@7 bb3", D: "~@6 e3@2 ~@4 e3@2 ~ db4", E: "~@2 bb4 ~ bb4 ~@3",
  F: "bb4 ~ bb4 ~@5", G: "~@6 e4@2 ~@2 g4@2 ~@3 e4", H: "~@3 e4 ~ g4 ~@2", I: "e4@2 g4@2 ~@4 e4@2 g4@2 ~@3 e4",
  J: "~@4 e4 g4 ~@2", K: "~ ab4 ~@6", L: "e4 g4 ~@2 e4 g4 ~@2",
})).s("gm_electric_guitar_jazz").gain(0.2).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@5 [x!2]!56 ~@4 [x!2]!8 ~@4 [x!2]!31 [x ~@6 x ~@8] ~@2>").gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@108 [~@3 x] ~@2>").gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@3 A B C@56 A@2 D E C@8 A@2 D E C@29 F G H ~@2>".pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~ x", D: "x ~@7 x ~@6 x", E: "x ~@3 x ~@3 x ~@2 x!2 ~@3", F: "~@4 x ~@7 x ~@2 x",
  G: "~@4 x ~@2 x ~@4 x ~@2 x", H: "~ x ~@2",
})).gain(0.48)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@5 A@56 ~@3 B A@8 ~@3 B A@31 C D ~>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x ~@2", D: "~@3 x ~@12",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@5 A@56 ~@4 B A@7 ~@4 B A@30 C ~@2>".pickRestart({
  A: "~ x ~ x", B: "x!2 ~ x", C: "~@7 x ~@8",
})).gain(0.32)

// drums · ride
const ride = s("rd").struct(`<
  ~@4 A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  ~@4 D C B C B C B C ~@4 D C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B E ~@2
>`.pickRestart({
  A: "~@15 x", B: "x!4", C: "x ~@3 x ~@2 x!2 ~@3 x ~@2 x", D: "~ x!3", E: "x ~@3 x ~@2 x ~@8",
})).gain(0.64)

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  ~@4 A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~@3
>`.pickRestart({
  A: "~@7 x ~@7 x", B: "~@11 x ~@4",
})).gain(0.4)

stack(
  piano, bass, electric_guitar_muted, electric_guitar_jazz, electric_guitar_jazz_2, kick, rim, snare, pedal_hat, crash,
  ride, ride_soft
)

More by Chuck Berry