Strudelify

Mainstreet

Bob Seger

KeyE♭ majorTempo70 bpm
0:00/0:00
// Mainstreet — Bob Seger
// 69.8 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 1/4 at bar 2, 4/4 at bar 3) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(69.8/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(`<
  ~ A B C D E F C G E H C I J K L M N O P Q R S R T C U C V W X Y Z AA AB AC AD AA AE AA AF AA AG AA AH W X Y Z AI AJ AK
  AL AI AJ AK AL AJ AK AM AN AO AP@2 ~
>`.pickRestart({
  A: "eb2@5 ~ c2 ~ db2@7 ~", B: "ab2@5 ~ ab2 g2 f2@5 ~ c2 ~", C: "eb2@5 ~ eb2 ~ db2@5 ~ f1 g1",
  D: "ab1@5 ~ eb2 ~ f2@3 ~ f2 eb2 c2 ~", E: "eb2@5 ~ eb2 ~ db2@7 ~", F: "ab1@6 g1 ~ f1@5 ~ c2 ~",
  G: "ab1@4 ~@3 g2 f2@4 f2 eb2 c2 ~", H: "ab1@6 ab1 ~ f1@5 ~ c2 ~", I: "ab1@5 ~ ab2 g2 f2@4 ~ eb2 bb1 b1",
  J: "c2@6 ~ g2 c3@5 ~ bb2 g2", K: "c2@3 ~ c2 ~ c2 g1 c2@3 ~ c2 bb1 g1 ~", L: "g1@5 ~ f1 g1 ab1@5 ~ g1 ~",
  M: "f1@3 ~ f1 g1 ab1@2 bb1 ~ bb1@6", N: "eb2@5 bb1 eb2 ~ db2@3 ~ db2 c2 bb1 ~",
  O: "ab1@3 ~ ab1 ~ g1 ~ f1@3 ~ f1 gb1 g1 ~", P: "eb2@5 ~ eb2 d2 db2@4 db2 c2 bb1 ~",
  Q: "ab1@5 ab1 g1 ~ f1@3 ~ f1 gb1 g1 ~", R: "eb2@5 ~ eb2 ~ db2@5 ~ db2 ~", S: "ab1@6 ab1 g1 f1@5 ~ c2 ~",
  T: "ab1@5 ~ ab2 g2 f2@3 ~ f2 eb2 c2 bb1", U: "ab1@6 ab1 ~ f1@4 c2@2 f2 ~", V: "ab1@5 ~ ab2 g2 f2@4 f2 eb2 c2 bb1",
  W: "c2@5 ~ c2 g2 c3@3 c2!2 bb1 g1 ~", X: "c2@4 ~@2 c2 g1 c2@3 g1 c2 bb1 g1 ~", Y: "g1@5 ~ f1 g1 ab1@5 ~ ab1 g1",
  Z: "f1@2 ~ f1!2 g1 ab1 a1 bb1 ~ bb1@6", AA: "eb2@5 bb1 eb2 bb1 db2@3 ~ db2 c2 bb1 ~",
  AB: "ab1@3 ab1 g1@2 ~ g1 f1@3 ~ f1 gb1 g1!2", AC: "eb2@5 bb1 eb2 bb1 db2@4 db2 c2 bb1 ~",
  AD: "ab1@5 ab1 g1 ~ f1@2 ~ f1 f1@2 g1 f1", AE: "ab1@5 bb1 c2 eb2 f2@3 ~ f2 eb2 c2 bb1",
  AF: "ab1@4 ~ ab1 g1 ~ f1@4 f1 g1 bb1 ~", AG: "ab1@5 ~ c2 eb2 f2@5 eb2 c2 bb1",
  AH: "ab1@5 ~ ab1 g1 f1@3 ab1!2 ~ bb1 ~", AI: "eb2@5 ~ g1 ab1 bb1@5 ~ db2 ~", AJ: "eb2@5 ~ ab1 a1 bb1@5 bb1 db2 eb2",
  AK: "eb2@5 ~ g1 ab1 bb1@4 bb1!2 db2 ~", AL: "eb2@6 g1 ab1 bb1 g1 eb1@2 bb1 db2 eb2 db2",
  AM: "eb2@5 ~ g1 ab1 bb1@4 db2 bb1 db2 ~", AN: "eb2@5 ~ g1 ab1 bb1 g1 eb1@2 bb1!2 db2 ~",
  AO: "db2@5 db2 c2 bb1 ab1@3 ~ ab1 g1 f1 ~", AP: "[eb2@3 ~ eb2 db2 bb1 ~ eb2@24]/2",
})).s("gm_electric_bass_finger").gain(0.3).pan(0.6)

// chords · piano
const piano = note(`<
  A B C D E F G H I J G H K L M N O P C D Q J G H I R S H K T U N V P C D Q J G H I J G H K W M N O X Y Z Y Z Y Z Y Z Y
  Z Y AA AB@2 ~
>`.pickRestart({
  A: "~@13 bb3 c4 eb4",
  B: "[g3,eb4]@2 eb3 bb2 [f4,g4] f4 bb2@2 [db3,f4]@2 ~@3 f4 eb4 f4, ~@2 eb4@2 eb3@2 ~@5 [f4,ab4]@2 ~@3, ~@3 bb3@2 ~ eb4 ~ eb4 ~ db4@2 [ab2,db3]@4", // Cm Fsus2 Db Fm Db5
  C: "[eb3,ab4]@2 eb4 ~ [ab2,eb3,ab4]@2 [c4,ab4] [bb3,g4] [c3,f3,ab3,f4]@2 ab3@2 [c3,f3,c4,ab4]@2 ab3 bb3, ~@2 c3@3 ~ c3@2 ~@2 c3 ~@5, ~@3 c4@2 ~@9 f4@2", // Ab5 Fm Eb Fm
  D: "[bb2,g3,eb4]@2 eb3 bb2 g4 f4 [bb2,eb4]@2 ~@5 f4 eb4 f4, ~@2 eb4@2 eb3@2 ~@2 [db3,ab3,f4]@3 [f4,ab4,db5]@2 ~@3, ~@3 bb3@2 ~@5 db4@2 [ab2,db3]@4", // Eb Eb5 Db Db5
  E: "c4@2 eb4 ~ [ab2,eb3,ab4]@2 [c4,ab4] [bb3,g4] [c3,f3,ab3,f4]@2 ab3@2 [c3,f3,c4,ab4]@2 ab3 bb3, [eb3,ab3]@3 c4@2 ~@9 f4@2, ~@2 c3@3 ~ c3@2 ~@2 c3 ~@5", // Ab5 Fm Eb Fm Ab5
  F: "[bb2,eb3,g3]@2 eb3 ~ f4 g4 f4 eb4 ~@2 ab4@2 [eb4,ab4] f4 eb4 db4, ~@2 bb3@2 [eb3,g3]@4 [db3,f3,db4]@2 f3 ~ [ab2,db3,f3]@4, ~@3 bb2@2 ~ bb2@2 ~ ab3@3 ~@2 [ab3,ab4]@2", // Eb Ab5 Eb Db Ab
  G: "~@5 ab3 c4 bb3 [c3,f3,ab3]@2 c3 ~ c3@2 bb4 ab4, [eb3,c4]@2 c3@2 [ab2,eb3]@3 ~@4 [f3,c5]@3 ~@2, ~ ab3@2 c4@2 ~ [c3,ab3]@2 ~@2 ab4@2 ab3 ~ ab3@2", // Fm Cm Ab5 F5 Fm
  H: "~ eb3 ~@2 f4 g4 f4 eb4 ~@4 [f3,ab4] f4 eb4 db4, [bb2,g3,bb4] eb3 [eb3,g3] ~ [db3,f3,db4] [ab3,ab4] [ab2,db3]@2, ~@3 bb2@2 ~ [bb2,g3]@2 ~ f4@2 db5@2 ab3@3, ~@7 [f3,ab4]", // Fm Eb Db Ab Db5 Eb Fm
  I: "eb4 c4 ab3 ~@2 c4 bb3 c4 ~@2 c3 ~ f3 f4 eb4 c4, [eb3,ab3]@2 c3@2 [ab2,eb3]@3 ~@2 c4@3 c3@3 ~, ~@3 c4@2 ~ [c3,ab3]@2 [c3,f3,ab3]@3 [ab3,ab4]@3 f3@2", // Ab5 Fm Ab
  J: "[bb2,eb3,g3,eb4]@2 eb3 ~ f4 g4 f4 eb4 ~@2 ab4@2 [eb4,ab4] f4 eb4 db4, ~@2 bb3@2 [eb3,g3]@4 [db3,f3,db4]@2 f3 ~ [ab2,db3,f3]@4, ~@3 bb2@2 ~ bb2@2 ~ ab3@3 ~@2 [ab3,ab4]@2", // Eb Ab5 Eb Db Ab
  K: "eb4 c4 ab3 ~@4 c4 ~@2 c3 ~ f3 f4 eb4 f4, [eb3,ab3]@2 c3@2 [ab2,eb3]@2 [c3,ab3]@2 [c3,f3,ab3]@3 [ab3,ab4]@3 f3@2, ~@3 c4@2 c4@2 ~@2 c4@3 c3@3 ~", // Ab5 Fm Ab
  L: "~@2 g4@2 [c3,g3,eb4,g4]@3 ~ g4@2 f4 eb4 [c3,f3,d4,f4]@4, [eb3,g3,eb4] ~ [c3,f3,d4] ~", // Cm Dm7 Eb Dm7
  M: "[c3,g3,eb4,g4]@2 eb3@2 ~@2 c4@2 d4@2 d4@2 ~@2 c4 bb3, ~ [eb3,g3,d4,g4] [c3,f3,f4] [c3,f3,d4,f4]", // Cm Ebmaj7 F5 Dm7
  N: "[g2,bb2,d3,g3]@2 ~@2 [g2,d3,g3]@2 [bb2,bb3]@2 [c3,ab3]@2 c3 ~ ab3@2 [eb3,c4]@2, ~ bb2@2 ~ [ab2,eb3]@2 [ab2,c3]@2, ~@2 bb3@2 ~@6 c4@2 eb3 ~@3, ~@3 d4@4 ~@4 eb4@3 ~@2", // Gm G5 Bb Fm Cm Ab5 Ab
  O: "ab4 ~ ab3@2 c4 f4 c4 f4 [bb2,f3,bb3,eb4] ~ [bb2,f3,bb3,eb4]@5 ~, [f2,c3,f3]@4 [f2,c3,f3]@3 ~@9, c4 ~@2 c3 ~@4, ~ f4@3 ~@12", // Bbsus4 F5
  P: "[g3,eb4]@2 eb3 bb2 g4 f4 bb2@2 [db3,f4]@2 ~@3 f4 eb4 f4, ~@2 eb4@2 eb3@2 ~@5 [f4,ab4]@2 ~@3, ~@3 bb3@2 ~ eb4 ~@3 db4@2 [ab2,db3]@4", // Cm Db Fm Db5
  Q: "c4@2 eb4 ~ [ab2,eb3,ab4]@2 [c4,ab4] [bb3,g4] [c3,f3,ab3,f4]@2 ab3@2 [c3,f3,c4,ab4]@2 c4 d4, [eb3,ab3]@3 c4@2 ~@9 f4@2, ~@2 c3@3 ~ c3@2 ~@2 c3 ~@5", // Ab5 Fm Eb Fm Ab5
  R: "[bb2,eb3,g3,eb4]@2 eb3 ~ f4 g4 f4 eb4 ~@2 ab4@2 [ab5,bb5] [db5,f5] bb5 [db5,f5], ~@2 bb3@2 [eb3,g3]@4 [db3,f3,db4]@2 f3 ~ [ab2,db3,f3]@4, ~@3 bb2@2 ~ bb2@2 ~ ab3@3 ~@2 ab3@2", // Eb Absus2 Db Eb Db
  S: "~@5 ab3 c4 bb3 [c3,f3,ab3]@2 c3 ~ c3@2 bb4 ab4, [eb3,c5]@3 c4@2 ~@5 ab4@2 ab3 ~ ab3@2, [c4,ab5]@2 c3@3 ~ [c3,ab3]@2 ~@3 [f3,c5]@3 ~@2, ~ ab3@3 [ab2,eb3]@3 ~@9", // Fm Cm Fm F5 Ab5
  T: "~@2 g4@2 [c3,g3,eb4,g4]@3 ~ g4@2 f4 eb4 f3@2 f3@2, [eb3,g3,eb4] ~ [c3,f3,d4] [c3,d4,f4]", // Cm Eb Dm7
  U: "[c3,g3,eb4,g4]@2 eb3@2 ~@2 c4@2 f4 g4 [d4,g4]@2 f4@2 c4 bb3, ~@4 [eb3,g3,d4,g4]@4 [c3,f3,d4]@3 ~ [c3,f3,d4]@4, ~@7 g4", // Cm G5 Ebmaj7 Dm7
  V: "c4@2 ab3@2 c4 f4 c4 f4 [bb2,f3,bb3,eb4] ~ [bb2,f3,bb3,eb4]@5 ~, [f2,c3,f3,f4]@2 [f2,c3,f3] c3 ~@4", // Bbsus4 F5
  W: "~@2 g4@2 [c3,g3,eb4,g4]@2 g3@2 g4@2 f4 eb4 f3@2 f3@2, [eb3,g3,eb4] ~ [c3,f3,d4] [c3,d4,f4]", // Cm Eb Dm7
  X: "[bb2,eb3,g3,eb4]@2 [eb3,f4] g4 f4 eb4 f4 eb4 [bb2,db3,f3,db4,f4]@2 ~@2 db3 f4 eb4 f4, ~@3 [bb2,bb3]@3 bb2@2 ~@3 bb4@4 ~, ~@4 [eb3,g3]@3 ~@3 [f3,db4]@2 [bb2,f3]@4, ~@11 f4@2 ~ db3@2", // Eb Ebsus2 Bbm Bb Eb Db Bb5
  Y: "[bb2,eb3,g3,eb4]@2 eb3 ~ f4 eb4 f4 eb4 [bb2,db3,f3,db4,f4]@2 ~@2 db3 f4 bb4 f4, ~@3 [bb2,bb3]@3 bb2@2 ~@3 ab4@2 ~ db3@2, ~@4 [eb3,g3]@3 ~@3 [f3,db4]@2 [bb2,f3]@4", // Eb Bbm Bb Eb Db Bb5
  Z: "[bb2,eb3,g3,eb4]@2 eb3 g4 f4 eb4 f4 eb4 [bb2,db3,f3,db4,f4]@2 ~@2 db3 f4 eb4 f4, ~@3 [bb2,bb3]@3 bb2@2 ~@3 bb4@4 ~, ~@4 [eb3,g3]@3 ~@3 [f3,db4]@2 [bb2,f3]@4, ~@11 f4@2 ~ db3@2", // Eb Bbm Bb Eb Db Bb5
  AA: "~@5 f4 eb4 f4 c4@2 eb4 ~ [ab2,eb3,ab4]@2 [c4,ab4] [ab3,f4], [db3,ab3,f4]@3 [f4,ab4,db5]@2 ~@6 c4@2 ~@3, ~ f3@3 [ab2,db3]@4 [eb3,ab3]@4 ~@4, ~@2 db4@2 ~@6 c3@3 ~ c3@2", // Ab5 Fm Db Db5 Ab5
  AB: "[[bb2,eb3,g3,eb4]@2 [eb3,f4] g4 f4 eb4 [bb2,f4]@2 [bb2,eb3,g3,eb4,g4,bb4]@24, ~@3 bb3@5 ~@24, ~@3 bb2@3 ~@26, ~@4 [eb3,g3]@3 ~@25]/2", // Eb Ebsus2 Bb5 Eb
})).s("gm_piano").gain(0.25).pan(0.7)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B C D A D A D A D A D E F G H A B A D A D A D A D A D E F G I A D A D A D A D A D A D E F G I J@12 K L@2 ~
>`.pickRestart({
  A: "~@7 g3 ~@7 f4, [bb3,g4]@3 g4@2 g4@3 ~ f4@3 ~ ab4@3, [g3,eb4] eb4@2 eb4 [db4,ab4]@2 f3 [f3,db4], ~ bb4@5 ~@5 db4@3 ~@2, ~ g3 [g3,bb3]@2 [f3,ab3]!2 [ab3,f4]@2", // Eb Cm Db5 Db Gm Fm Db
  B: "[ab3,eb4]@2 ~@5 ab3 ~@7 ab3, [eb3,c4,ab4]@3 ab4@2 ab4@3 ~ f4@2 c4@2 ab4@3, ~ eb4@2 eb4 [c4,ab4]@2 f3 [f3,c4], ~ ab3 [eb3,ab3,c4]@2 [f3,ab3]!2 [ab3,f4]@2", // Ab5 Ab Fm F5 Ab Fm Db
  C: "~@7 g3 ~@7 f4, [bb3,g4]@3 g4@2 g4@3 ~ f4@3 ~ ab4@3, [g3,eb4] eb4@2 eb4 [db4,ab4]@2 [f3,f4] [f3,db4], ~ bb4@5 ~@5 db4@3 ~@2, ~ g3 [g3,bb3]@2 [f3,ab3]!2 ab3@2", // Eb Cm Db5 F Db Gm Fm
  D: "[ab3,eb4]@2 ~@5 ab3 ~@7 f4, [eb3,c4,ab4]@3 ab4@2 ab4@3 ~ f4@2 c4@2 ab4@3, ~ eb4@2 eb4 [c4,ab4]@2 f3 [f3,c4], ~ ab3 [eb3,ab3,c4]@2 [f3,ab3]!2 [ab3,f4]@2", // Ab5 Ab Fm F5 Ab Fm Db
  E: "[g3,eb4] ~@2 eb4 ~@2 [eb3,g3,f4] [c4,g4], [eb3,c4,g4]@3 g4@2 g4@3 ~ f4@2 d4@3 ~@2, ~ eb4@2 ~ [d4,g4]@2 ~@2, ~ g3 [eb3,g3,c4]@2 [eb3,g3]!2 ~@2", // Cm Eb C5 Cm G5 Cm Eb
  F: "[g3,eb4] ~@2 [eb4,g4] ~@2 [eb3,g3,f4] [c4,g4], [eb3,c4,g4]@3 g4@2 ~@4 f4@2 d4@3 ~@2, ~ eb4@2 ~ [d4,g4]@2 ~@2, ~ g3 [eb3,g3,c4]@2 [eb3,g3]!2 ~@2", // Cm Eb C5 Cm G5 Cm Eb
  G: "[g3,d4]@2 ~@5 g3 ~@7 eb4, [bb3,g4]@3 g4@2 g4@3 ~ eb4@2 c4@2 ab4@3, ~ [d3,d4]@2 d4 [c4,ab4]@2 [ab3,eb4]@2, ~ g3 [g3,bb3]@2 [eb3,ab3]!2 eb3 [eb3,c4]", // G5 Eb D Fm Ab5 Gm Ab5 Cm
  H: "[ab3,f4]@2 ~@4 [ab3,f4]@2 [f3,bb3,eb4] ~ [f3,bb3,eb4,f4]@6, [f3,c4,ab4]@3 ab4@2 ab4@3 ab4@7 ~, ~ f4@2 ~ f4 ~@3, ~ ab3 [f3,c4]@2 ~@4, ~@2 ab3 ~@5", // Db Ebsus2 Fm F5
  I: "[ab3,f4]@2 ~@5 ab3 [f3,f4]@2 [f3,bb3,eb4,f4]@6, [f3,c4,ab4]@3 ab4@2 ab4@3 ab4@7 ~, ~ f4@2 f4 ~@4, ~@2 ab3@2 [f3,ab3,c4]@4 [bb3,eb4] ~@7", // Db F Ebsus2 Fm Eb5
  J: "~@7 g3 ~@7 f4, [bb3,g4]@3 g4@2 g4@3 ~ f4@3 ~ bb4@3, [g3,eb4] eb4@2 eb4 [db4,bb4]@2 [bb3,f4]@2, ~ bb4@5 ~@5 db4@3 ~@2, ~ g3 [g3,bb3]@2 [f3,bb3]!2 f3 [f3,db4]", // Eb Cm Gb Bb5 Gm Bb5 Db
  K: "~@3 [db4,f4] ~@3 [eb3,c4], [f3,f4]@3 f4@2 ~@4 eb4@3 ~ ab4@3, [ab3,db4] db4@2 ~ [c4,ab4]@2 [ab3,eb4]@2, ~ ab4@4 ab4@3 ~@3 c4@3 ~@2, ~ ab3 [f3,ab3]@2 [eb3,ab3]!2 eb3 ~", // Db Cm F Db5 Fm Ab5 Fm Ab5
  L: "[[g3,eb4] ~@2 eb4 [g3,bb3,eb4,g4]@12, [bb3,g4]@3 g4@2 g4@3 ~@24, ~ eb4@2 ~@13, ~ g3 [g3,bb3]@2 ~@12]/2", // Cm Eb Gm
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.3)

// other · distortion guitar
const distortion_guitar = note(`<
  ~ A B A C D ~@11 A E A F D ~@11 A E A G H I@2 J K L M N@2 ~@3 O P O Q O P O R@3 S T U V@2 ~
>`.pickRestart({
  A: "bb5@4 bb5 ab5 g5@2 ab5@4 ab5 bb5 ab5 f5", B: "g5@4 eb5@7 ~ eb5 f5 g5 ab5", C: "g5@4 eb5@4 c5 eb5 c5@4 bb4 c5",
  D: "bb4 ~", E: "g5 eb5@3", F: "g5@4 eb5@4 c5 eb5 c5@2 bb4 c5 bb4 c5", G: "g5@4 eb5@2 c5 eb5 c5@8",
  H: "bb3@4 bb3 c4 eb4@2 f4@4 f4 g4 ab4 bb4", I: "[c5@8 c5 bb4 ab4 g4 f4 eb4 bb4 g4@7 g4 eb4 f4@6 g4 f4]/2",
  J: "bb3 c4 eb4@4 bb3 c4 eb4 f3 g3 bb3 g3 f3 eb3 c3", K: "eb3@4 f3 g3 bb3 g3 f3@4 bb3 c4 eb4 f4",
  L: "c4@6 g4@2 ab4 g4 f4 g4 f4 eb4 bb3 c4", M: "bb3 c5 bb4 f5, ~@4 bb4 ~@7 eb5 ~@3",
  N: "[eb5@4 c5 bb4 g4 f4 eb4 c4 eb4 f4 eb4@9 ~@11]/2", O: "bb5@6 ab5 bb5 ab5@6 g5 ab5", P: "g5@6 f5 g5 f5@8",
  Q: "g5@6 f5 g5 f5 eb5 db5@6",
  R: "[g5 ab5 bb5@6 ab5 g5!2 f5!2 eb5 eb5@8 g5 ab5 bb5@4 ab5 g5 f5 eb5@7 eb5 db5 db5@6 db5@2]/3",
  S: "eb5@6 eb5@2 f5@5 ~ f5@2", T: "g5@6 g5 ab5 bb5@2 c6@6", U: "db6@4 db6 c6 bb5@2 ab5@4 c6@4, ~@12 bb5 ~@3",
  V: "[bb5@4 bb5 ab5 g5 ab5 g5@24]/2",
})).s("gm_distortion_guitar").gain(0.34)

// chords · rock organ
const rock_organ = note("<~@21 A@2 B@2 C D E@2 F@2 G@2 A@6 H@2 I D E@2 F J@3 K@10 L@3 M@2 ~>".pickRestart({
  A: "[[eb5,g5] f5 eb5 f5, ~ ab5@3]/2", B: "[[eb5,g5]@8 db5@8 eb5@8 ab5 bb5 c6@2 bb5@2 ab5@2, ~ ab5@2 f5]/2",
  C: "[eb5,bb5] [f5,db6], ~@8 c6 ~@7", D: "[eb5,c6]@2 ab5 f5, ~ c5", E: "[[eb5,g5] db5 ~ f5, ~ ab5@2 ~, ~ c5]/2",
  F: "[c6,eb6] [d6,f6]", G: "[[bb5,d6]@8 eb6@8 [ab5,f6]@8 [bb5,eb6] ~@7, ~ c6@2 ~]/2",
  H: "[[eb5,g5] db5 eb5 f5, ~ ab5@3]/2", I: "[eb5,bb5] [f5,db6]",
  J: "[[c6,eb6]@8 f6@8 bb5@8 eb6@8 [ab5,f6]@9 ~@7, ~ d6@2 c6@2 ~]/3", // Cm Db
  K: "[[eb5,g5] [db5,f5,ab5] [eb5,g5] [db5,f5], bb5]/2", // Eb Db Eb Db
  L: "[[eb5,g5] [db5,f5,ab5] [eb5,g5] db5 db6 [eb5,c6], bb5@2 ab5, ~@3 f5@2 ~]/3", M: "[g5,bb5,eb6]/2",
})).s("gm_rock_organ").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A C A C A C A C A C A C A D A C A C A C A C A C A C A C A D A C A C A B A C A B A C A C A D A C A C A C A C A C
  A C@3 ~@2
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x!2", C: "x ~@2 x!2 ~@3", D: "x ~@3 x!2 ~@2",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@5 [~ x ~ x]!11 [~ x ~@2] [~ x ~ x]!15 [~ x ~@2] [~ x ~ x]!4 ~@28>").gain(0.3)

// drums · snare
const snare = s("sd").struct("<~ A@4 ~@11 B ~@15 C ~@4 A@3 D A@7 E A@12 F G ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@4 x!2 ~@2", C: "~@7 x!2 ~ x ~@5", D: "~@4 x ~@7 x ~@2 x", E: "~@2 x!4 ~ x!2 ~ x ~@5",
  F: "~@4 x ~@4 x ~@2 x ~@3", G: "~ x ~@2",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@28 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 B ~@4>".pickRestart({
  A: "~@14 x!2", B: "~@7 x",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@2 B C A@3 D A@3 D E A@2 F A@3 G A@3 D A@3 D E A@2 F A@3 G A@2 B C A@2 B C H I J K L M A N L M A N L M A N M O ~@2
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~@3 x ~ x!3 ~ x ~", C: "x ~ x ~ x ~ x ~ x ~ x!3 ~@3", D: "x!7 ~",
  E: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", F: "x!6 ~@2", G: "x!4 ~ x!2 ~", H: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~",
  I: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~", J: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", K: "x!3 ~ x!3 ~ x ~ x ~@5",
  L: "x!3 ~ x!3 ~ x!3 ~ x ~ x!2", M: "x ~ x ~ x!3 ~ x ~ x ~ x!3 ~", N: "x ~ x!3 ~ x!2 ~@2 x ~ x ~@3", O: "x!3 ~ x ~@3",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@44 [~@11 x ~ x ~@2] ~@20>").gain(0.25)

// drums · open hat
const open_hat = s("oh").struct(`<
  A ~@2 B A ~@3 A ~@3 A ~ C ~@5 D ~@3 A ~@3 A ~ C ~ A ~@3 D ~@2 B A ~@2 B ~@2 C ~ A ~@3 D ~@3 D ~@3 D ~ B ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~@15 x", D: "~@4 x ~@2 x",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@29 x ~@15 x ~@11 x ~@7>").gain(0.2)

// drums · bongos
const bongos = s("bongo:18").struct("<~@5 A@11 ~ A@15 ~ A@15 ~ A@14 ~@2>".pickRestart({
  A: "~ x",
})).gain(0.52)

// drums · congas
const congas = s("conga:18").struct("<~@5 A@11 B A@15 B A@15 B A@13 B ~@2>".pickRestart({
  A: "~@4 x ~@6 x ~@2 x ~", B: "~ x ~@2",
})).gain(0.79)

// drums · congas
const congas_2 = s("conga:33").struct("<~@5 A@11 B A@15 B A@15 B A@13 B ~@2>".pickRestart({
  A: "~@3 x ~@2 x ~@3 x ~@2 x ~@2", B: "~@3 x ~@2 x ~@9",
})).gain(0.79)

stack(
  bass, piano, acoustic_guitar_steel, distortion_guitar, rock_organ, kick, rim, snare, low_tom, hihat, mid_tom,
  open_hat, crash, bongos, congas, congas_2
)

More by Bob Seger