Strudelify

Be Bob A-Lula

Gene Vincent

KeyE majorTempo120 bpm
0:00/0:00
// Be Bob A-Lula — Vincent Gene
// 120 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 88 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · "FINGERDBAS"
const bass = note(`<
  ~ A B C D E F G H I J K L M N M N M O P Q R@2 S T U V W X M N M N M O P Q R@2 S T U V W X A B C D E F G H I J K L M N
  M N M O P Q R@2 S T U V W X Y Z AA AB AC AD B AE AF AG AH AI@2 AJ@2
>`.pickRestart({
  A: "e1@7 ~ g#1@8 a1@8 a#1@6 ~@2", B: "e1@8 g#1@8 a1@8 b1@5 a1@3", C: "e1@8 e2@8 d2@7 ~ a1@5 b1@2 ~",
  D: "d2@8 e2@8 b2@5 g#2@3 e2@5 b1@3", E: "a1@8 c#2@7 ~ e2@8 g2@5 e2@3", F: "a2@8 g2@5 c#2@3 b2@5 a2@3 g2@5 e2@3",
  G: "e1@8 g#1@7 ~ b1@5 d2@3 e2@5 d2@2 ~", H: "b1@3 g#2@2 a2@3 b2@2 ~ a2@2 g#2@2 ~ e2@3 g#2@2 d2@3 e2@5 d2@3",
  I: "b1@8 d#2@8 f#2@8 b1@5 a#1@2 ~", J: "a1@5 a2@2 ~ b1@5 a2@2 ~ c#2@5 a2@3 d2@5 a2@3", K: "e1@8 g#1@8 a1@8 a#1@7 ~",
  L: "b1@6 ~@7 b1@8 d#2@3 f#2@6 ~@2", M: "e2@3 ~@29", N: "e2@3 ~@18 b2@2 ~ d3@2 ~ b2@2 d3@2 ~",
  O: "e2@2 ~@19 b2@2 ~ d3@2 ~ b2@2 d3@2 ~", P: "e2@4 ~ e2 ~@2 e2@3 ~@2 e2 ~@2 e2@3 ~@2 e2 ~@2 e2@3 ~@2 e2 ~@2",
  Q: "e2@3 ~@2 e2@2 ~ f2@4 ~ f2@2 ~ f#2@4 ~ f#2@2 ~ g2@4 ~ g#2@2 ~",
  R: "[a1@6 ~ c#2@7 ~@2 e2@7 g2@6 e2@2 a2@8 ~ g2@8 e2@8 c#2@5 a1@2 ~]/2", S: "e1@8 g#1@8 b1@8 d2@4 ~ b1@2 ~",
  T: "e2@4 ~@2 g#2@4 ~ a2@3 ~@2 a#2@4 ~ b2@4 ~ a2@4 ~@2", U: "b1@8 d#2@8 f#2@8 b1@5 a#1@3",
  V: "a1@7 ~ c#2@8 e2@8 g2@5 e2@2 ~", W: "e1@8 g#1@7 ~ a1@8 a#1@8", X: "b1@3 ~@2 a1@3 a#1@5 b1@18 ~",
  Y: "e1@8 g#1@8 a1@8 b1@5 d2@2 ~", Z: "e1@8 g#1@7 ~ a1@8 b1@5 e2@2 ~", AA: "e1@8 g#1@8 a1@8 b1@5 d2@3",
  AB: "~@4 e1@4 ~@3 f1@4 ~ f#1@4 ~ g1@5 ~ g#1@3 ~@2", AC: "a1@5 a1@3 c#2@8 ~@8 g2@5 e2@2 ~, ~@16 e2@11 ~@5",
  AD: "a2@8 g2@8 e2@8 d2@5 e2@3, ~@16 f2 ~@15", AE: "e2@5 d2@2 ~ a1@5 e2@3 ~@5 e2@3 d2@5 b1@2 ~",
  AF: "b1@8 d#2@8 f#2@8 d#2@4 ~ b1@2 ~", AG: "a1@7 ~ c#2@8 e2@8 c#2@5 a1@3", AH: "e1 ~@7",
  AI: "[~@8 f1@5 e1@32 a#1 ~@2 b1@2 ~ d2@2 [d2,e2]@2 ~ e2@2 ~ e2@2 [d2,e2]@3, ~@59 d2 ~@4]/2", // Dsus2
  AJ: "[b1@3 a#1@2 a1@4 ~@7 g1 ~@12 e1@24 ~@11, ~@11 g#1@19 ~@34]/2",
})).s("gm_electric_bass_finger").gain(0.52)

// chords · piano · "A.PIANO"
const piano = note(`<
  ~ A@5 B C@2 D E@2 F G H I J K L M N O@4 P Q R S G H I J K L M N O@4 P Q R S T U V W X Y Z@2 AA@2 AB AC@8 N O@4 P Q R S
  AD AE@7 AF AG AH AI@2 AJ ~
>`.pickRestart({
  A: "[e2@8 [g#3,b3,d4] e4 ~@3 e3@3 ~@6 [g#3,b3,d4]@2 b2@4 ~@4 e2@8 b2@2 ~@4 a#4 ~ b4@2 ~@3 d5 ~@2 e3@5 [b2,e5]@2 e2@9 [b3,d4,g#4] ~@4 b2@3 [b3,d4,g#4] ~@4 b2@2 ~ [a#3,g4]@2 ~@3 b2@3 e2@4 b3 [d4,g#4] ~ [b3,d4] g#4 [e2,b3] [d4,g#4] b3 [d4,g#4] b3 g#4 ~ b3 ~@3 [b3,d4,g#4]@3 e3 ~@5 [a3,b3] ~@2 [e4,a4]@3 ~@2 [e4,a4]@2 ~@3 [d#4,a4] ~@2 [d4,a4] ~@2 [c#4,a4]@2 ~@6 a3@5 e3@3, ~@8 b2@3 ~@5 e2@9 ~@4 e3@2 [b3,d4,e4]@2 ~@23 d#5@2 ~@29 c#4@2 ~@4 [b3,d4,g#4]@7 ~@5 e3@2 ~@3 d4@2 ~@13 [d#4,a4]@2 a2@8 ~@6 e3@3 a2@7 ~@9, ~@22 e4 ~@7 g#3@2 ~@13 e3@3 ~@24 e3@5 ~@3 e2@4 ~@4 e3@5 ~@7 e3@3 b2@8 e2@9 ~@6 e3@2 ~@8 a3@8 ~@13 e4 ~@2]/5", // G#dim E5 G#dim D# Ddim Bm E5 Ddim …
  B: "[g4,c#5]@2 ~@3 g#4 ~@2 a3@5 [e3,e5]@2 a2@6 d#5 ~@2 e5@5 a5 b2@2, a2@5 ~@24 e3@3, e4 ~@7 a4@2 ~@22", // Gdim E
  C: "[~@5 a#3@3 b3@4 ~ b2@3 [b3,d4]@3 ~@2 [a#3,d4]@2 ~@3 [a3,d4]@3 b2@2 ~ e2@7 g#3 ~ d4 g#3 d4 ~ g#3 g#3@2 ~@4 [g#3,d4]@3 ~ e3@2 ~@3 a#3@3, e2@8 e3@8 e2@8 ~@5 e2 ~@12 b2@3 ~ e2@10 ~@8, ~@5 d4@7 ~@12 e3@7 [g#3,d4]@7 ~ e3@4 ~@2 d4@4 ~@15]/2", // Bm A# D5 G#dim
  D: "b3@4 ~ d#4@2 ~ b3@5 [e3,f3]@3 [d#4,f#4,b4]@3 ~@2 [d#4,f#4,b4]@3 b3@3 ~@2 [e3,a3]@2 ~, b2@8 ~@8 b2@8 ~@5 b3 ~@2", // Fmaj7 B A5
  E: "[[c#4,a4]@4 ~@7 [e4,a4]@2 e3 ~@6 a4@2 ~ a3@2 ~@3 e4 ~@2 [e2,e4]@6 [e3,e5]@2 ~@5 e5@2 ~@2 e4@4 ~ e5@2 ~ e4@3 ~@2 [e4,e5]@2 ~, a2@7 a3@8 ~ a2@9 ~@2 e3@4 ~@9 d3@7 c#3@8 ~ c3@8, ~@5 [d#4,a4]@4 ~@6 [e4,a4]@2 ~@3 d#4 ~@18 e4@3 ~@22]/2", // F#m A5 E D#dim A5
  F: "~@5 [b4,d#5] ~@2 f3@5 ~@3 b2@5 [d#4,b4] ~@2 b4@2 ~ e3@2 b2@3, b2@13 ~@19, ~@5 f#4@2 ~@6 [b3,d#4,b4]@5 ~@6 d#4 ~@7", // B G#m B
  G: "[e2,e3,g#3,b3,d4]@3 ~@29", H: "[e2,e3,g#3,b3,d4]@4 ~@17 [b2,b3] ~@2 [d3,d4]@2 ~ b2@2 d3@2 ~, ~@27 b3 ~ d4 ~@2",
  I: "[e3,e4]@3 ~@29", J: "[e2,e3,g#3,b3,d4,e4]@3 ~@18 b4@2 ~ [d4,d5] ~@2 [b3,b4] ~ d4@2 ~, b2 ~@20 b3 ~@7 d5 ~@2",
  K: "[e4,e5]@3 ~@29", L: "[e2,e3,g#3,b3,d4,e4]@3 ~@18 b2@2 ~ d3@2 ~ [b2,b3]@2 [d3,d4] ~@2, ~@21 b3 ~@2 d4 ~@7",
  M: "e4 ~ [e3,e4] ~@2 [e2,e3,e4] ~@2 [e2,e3,e4] ~ [e2,e3,e4] ~@2 [e2,e3,e4] ~@2 [e2,e3,e4] ~ [e2,e3,e4] ~@2 [e2,e3,e4] ~@2 [e2,e3,e4] ~ [e2,e3,e4] ~@2 [e2,e3] ~@2", // E
  N: "[e2,e3,a#5,d6] b5 ~ [e2,e3,b5,d6] ~ [e2,e3,b5,d6] ~@2 [e2,e3,b5,d6] ~@2 [e2,e3,b5,d6] ~ [e2,e3] [b5,d6] ~ [e2,e3,b5,d6] ~@2 [e2,e3,b5,d6] ~ [e2,e3,b5,d6] ~@2 [f5,g5,a5] [b4,c5,d5,e5] [e4,f4,g4,a4] [c4,d4] [g3,a3,b3] [e3,f3] [b2,c3,d3] ~", // Em7b5 E7 E Bm E7 F Cmaj7 Fmaj7 …
  O: "[[a2,e3,a3,c#4,g4]@3 ~@2 [a2,e3,a3,c#4,g4]@3 [a2,e3]@2 ~ [a3,c#4,g4]@2 [a2,e3] ~@2 [a2,e3]@2 ~@3 [a3,c#4,g4]@2 ~ [a2,e3]@2 [a3,c#4,g4]@2 [a2,e3] ~@3 a2@2 ~@2 a2 [a3,c#4,g4]@2 ~ [a2,e3]@2 [a3,c#4,g4]@2 e3 a2 ~@2 a2@2 ~@3 [a3,c#4,g4]@2 [a2,e3]@2 ~ [a3,c#4,g4]@2 a2@2 ~@2 [b2,g#4]@2 d4 [e2,b2,b3,g#4] ~ [b2,b3,d4,g#4] e2 ~ [e2,b2,b3,d4,g#4] ~@2 [e2,b2,b3,d4,g#4] ~ [b2,b3,d4] [e2,g#4] ~ [b2,b3,d4]@2 ~ [e2,b2,b3,d4,g#4] ~ [e2,b2,b3,d4,g#4] ~@2 [a#3,c#4,g#4]@4 ~ [e2,b2]@2 ~ [e2,b2]@3 ~@3 [b3,d4]@2 e2@2 ~ [b3,d4,g#4]@2 [e2,b2] ~@2 [b3,d4,g#4]@4 ~ e2 g#4@2 [e2,b2]@2 ~ g#4@2 [e2,b2]@2 ~, ~@15 [a3,c#4,g4]@4 ~@2 [a2,e3] ~@9 [a3,c#4,g4]@4 ~@12 [a3,c#4,g4]@4 ~@9 e3 ~@2 [b3,d4]@2 ~@28 g#4@11 ~@8 e2 ~@15, ~@31 e3@2 ~@3 e3@2 ~@9 e3@2 ~@3 [a2,e3]@2 ~@10 e2 ~@15 [e2,g#4] ~@7 [e2,b2]@2 ~@3 [b3,d4]@8 [e2,b2]@2 ~ b2 ~@7 b2@2 ~@3 [b2,b3,d4]@3 ~@2 [b3,d4]@4 ~@2]/4", // A7 A5 A7 A5 A7 A5 A7 A5 …
  P: "[b2,d#4,f#4] ~ [b3,d#4,f#4,b4] b2 ~ [b2,b3,d#4,f#4,b4] ~@2 [b2,b3,d#4,f#4,b4] ~ b2 [b3,d#4,f#4,b4] ~ [b2,b3,d#4,f#4,b4] ~@2 [b2,b3,d#4,f#4,b4] ~@2 [b2,b3,d#4,f#4,b4] ~ [b2,b3,d#4,f#4,b4] ~@2 [b2,b3,d#4,f#4,b4] ~@2 [b2,b3,d#4,f#4,b4] ~ [b3,d#4,f#4] ~@2, [b3,b4]@2 ~@27 b2@2 ~", // B
  Q: "[e4,a4]@3 ~@4 a2@3 [e4,a4]@2 ~ [a2,e4]@2 ~ a4@2 a4@2 ~ d4 a2 ~ [a2,c#4,a4]@3 ~ a2@4, a2@5 ~@11 a2@4 ~@12, [d#4,g4] ~@4 [e4,a4]@4 ~ d#4 ~@2 a4 ~@2 e4 ~ d#4 ~@2 a4@2 ~@9", // A5 A D# A5
  R: "e2@4 ~ [e3,e5]@2 ~ g#2@4 ~ g#3@2 ~ a2@4 ~ [a3,c#5]@2 ~ [a#2,c5]@4 ~ [a#3,c5]@3, e5@2 ~@6 d5@2 ~@3 d5 ~@2 c#5@2 ~@14", // E A A#sus2
  S: "[b2,b4]@3 ~@2 [a2,a4]@2 ~ [a#2,a#4]@3 ~@2 [b2,b4]@18 ~", // B A A# B
  T: "e6 ~ e5 e6 e5 ~ [e3,g#3,e6] e5 e6 e5 e6 e5 ~ e5 ~ e6 e5 e6 e5 e6 e5 [e3,e6] e5 e6 e5 e6 e5 e6 e5 e6 e5 e6, ~@6 d4@2 ~@8 [e3,g#3,d4]@4 ~ [g#3,d4]@2 ~@9", // E E7 G#dim
  U: "e5 e6 e5 e6 e5 [e3,g#3,e6] ~ e5 e6 e5 e6 e5 e6 e5 ~ e6 e5 e6 e5 e6 e5 [e3,g#3,d4]@2 e5 e6 e5@4 [b5,d6]@3, ~@5 d4@2 ~@9 [e3,g#3,d4]@4 ~ e6 ~@7 [a#5,c#6] ~@2", // E E7 Bm E7 A#m
  V: "~@2 a#5 [b5,d6]@2 [e3,g#3] c4 [b5,d6]@2 ~ [a#5,b5] ~@2 b5@2 ~ [e3,g#3,d4]@3 [b5,d6] ~ [e3,g#3,d4]@2 ~ [b5,d6] ~ a#5 c#6 ~ [a5,c6] ~@2, ~@5 d4@2 ~@3 d6@2 ~ d6 ~@2 [b5,d6] ~@4 [b5,d6] ~@10", // Bm E Bm Bmaj7 E7 Bm E7 Bm …
  W: "[g#3,d4,g#5,b5]@5 g#5 b5@2 g#5 b5 g#5 b5@2 ~ b5@2 ~@5 [e3,g#3,d4]@5 ~@3 [e3,g#3,d4] ~@2, e3@3 ~@2 [e3,g#3,d4]@2 ~@6 [e3,g#3,d4]@2 ~@17, ~@14 g#5 ~@17", // G#dim E7
  X: "[e3,g3,c#4]@4 ~@2 e3@2 d#6 ~ e6 ~@2 e6@2 g6 [e3,g3,c#4] ~ e6 ~@2 g6 ~@2 a6@2 g6 ~@2 [e3,g3,e6] ~@2, ~@5 [g3,c#4,d6]@2 ~@25", // C#dim Em G
  Y: "[e3,g3,c#4,a6]@4 ~@2 [e3,g3] ~@4 e6 ~ [e3,g3,c#4] g6 ~ [d6,e6] ~@2 g6@2 e6@2 ~ d#6 ~ d6 ~@2 [e3,g3]@2 ~, g6 ~@4 g6@5 ~@22, ~@6 c#4@2 ~@21 c#4 ~@2", // A7 Em C#dim Dsus2 Em
  Z: "[[e3,g#3,d4]@4 ~ [d4,a#5] b5@7 d6@2 ~ [g#3,d4,b5]@3 ~@2 a#5@2 ~ c#4@2 a5@3 ~@8 [e3,g#3,d4]@2 ~@9 b5@2 g#5 b5 [e3,g#3,d4,g#5]@2 ~@3 b5@2 ~ g#5 [e3,g#3] ~@2, ~@5 [e3,g#3]@2 ~@9 e3 ~@6 [e3,g3]@4 ~@2 [e3,g#3,d4]@7 ~@19 g#5@3 ~@2 b5@2 ~@2, ~@32 g#5@16 ~@6 b5@2 [e3,g#3,d4]@3 ~@2 d4@2 ~]/2", // E7 Gm G#dim E7 E Em E7
  AA: "[~@3 [f#3,a#5] ~@2 d#4@2 b5@4 ~@2 a#5 f#3 d#4@2 ~@2 b5@2 ~@7 [f#3,d#4]@2 ~ [e3,g3,a5]@5 ~ a5@4 ~ g5 ~ e5@2 ~ [e3,g3] ~@4 g5@4 ~@4 [e3,g3,c#4,e5]@2 ~, [b3,d#4]@5 b3@2 ~ a#5 ~@5 b5@4 ~@14 f3@2 ~@3 [e3,g3,c#4]@2 ~@25, ~@3 b5@3 f#3 ~@9 b3 ~@12 [b3,e5] ~ c#4@5 ~@12 c#4@2 ~@14, ~@32 g#5 ~@15 a5@4 ~@12]/2", // F# D#m A7 Em C#dim B C#dim E5
  AB: "[e3,g#3,d4,e5]@4 ~ [e3,g#3,d4,e5]@2 ~ d5@3 ~@2 b4@2 ~ [e3,g#3,d4,e5]@4 ~ [e3,g#3,d4,e5]@2 ~ d5@4 ~ [e3,g#3,d4,b4]@3", // E7
  AC: "[~@5 [f#3,b3,d#4,a4]@2 ~ a#4@3 ~@2 [f#3,b3,b4]@19 [e2,e3,g#3,d4]@3 ~@29 [e2,e3,g#3,b3,d4]@4 ~@17 [b2,b3] ~@2 [d3,d4]@2 ~ b2@2 d3@2 ~ [e3,e4]@3 ~@29 [e2,e3,g#3,b3,d4,e4]@3 ~@18 b4@2 ~ [d4,d5] ~@2 [b3,b4] ~ d4@2 ~ [e4,e5]@3 ~@29 [e2,e3,g#3,b3,d4,e4]@3 ~@18 b2@2 ~ d3@2 ~ [b2,b3]@2 [d3,d4] ~@2 e4 ~ [e3,e4] ~@2 [e2,e3,e4] ~@2 [e2,e3,e4] ~ [e2,e3,e4] ~@2 [e2,e3,e4] ~@2 [e2,e3,e4] ~ [e2,e3,e4] ~@2 [e2,e3,e4] ~@2 [e2,e3,e4] ~ [e2,e3,e4] ~@2 [e2,e3] ~@2, ~@13 d#4@243, ~@32 b3 ~@58 b3 ~ d4 ~@34 b2 ~@20 b3 ~@7 d5 ~@55 b3 ~@2 d4 ~@39]/8", // B7 B5 E7 B D E E7 D …
  AD: "[e2,g#3,b3]@8 [g#3,b3]@4 ~ e2 [g#3,b3] ~ [b3,d4,e4]@3 ~ g#3 [d4,e4] g#3 ~ e4 g#3@2 ~@2 e2 [g#3,b3] ~, [d4,e4]@12 ~@4 g#3 ~@4 b3@6 ~@5, ~@8 e3@8 e2@8 e3@7 ~, ~@12 d4 ~@3", // E G#m E7 Dsus2 G#m Dsus2
  AE: "[[g#3,b3,d4,e4]@3 ~@2 [g#3,b3,d4,e4]@3 ~@5 [e2,g#3,b3,d4,e4]@2 b2@3 ~@3 [g3,a#3,c#4]@2 ~@6 g#3@3 ~@4 g#3 d4 [g#3,b3] ~ [b3,d4] ~ g#3 [b3,d4] g#3 ~ [b3,d4] g#3 d4@2 ~ d4@3 g#3 ~@5 g#2 b3 [f3,g3] e2@2 ~@2 [e2,e3,e4]@4 ~@2 [f2,f3,f4]@4 ~@2 [f#2,f#3,f#4]@4 ~@2 [g2,g4]@4 ~@2 g#3@4 ~@6 [c#4,e4,g4]@2 a3@6 e3@2 ~@6 [c#4,e4] ~ a3@6 [e3,b4]@3 [d#5,a5] ~ [e5,a5] ~@2 [e5,a5] ~@2 [d#5,e5,a5] ~@2 [e5,a5] ~ [e5,a5] ~@7 [d#4,a4]@2 ~ [e4,a4]@2 ~@5 g#2 e2@5 [g#3,b3,d4,e4]@2 e3@6 ~ g#3 ~ [b3,d4,e4]@4 ~ [g#3,b3,d4,e4]@3 ~@5 e2 b3 ~ [g#3,b3,d4,e4]@3 ~@5 [g3,a#3,c#4]@3 ~@2 b2@3 ~@7 e3@2 ~ a2@3 a#2 ~@2, e2@8 e3@9 ~@4 e2@7 ~ [e3,b3,d4]@7 ~@3 e3@9 b3@7 ~@4 d4@2 ~@48 c#4 ~ [c#4,e4,g4]@4 ~@2 g4@2 ~@17 a3@7 ~@9 a3 ~@22 g#3@4 ~@5 e3@8 e2@8 ~@8 e2@8 ~@8, ~@32 e2@7 ~@8 e2@9 ~@2 e2@2 ~ b2@2 ~@27 [g#2,g#4]@4 ~ a2@9 ~@8 a2@8 ~@8 a2@9 ~@4 e3@3 a2@8 ~@5 [b2,e3]@4 ~@12 b2@3 e2@8 ~@5 b2@4 ~@31, ~@51 g#3 ~@3 e3@7 e3@2 ~@21 g3@115 e3@5 ~@19, ~@176 d#4 ~@4 c#4 ~@18 a3 ~@4 [g#3,b3,d4]@6 ~@2 [g#3,b3,d4,e4]@8 ~@3]/7", // E7 Gdim G#m Bm Fsus2 E F F# …
  AF: "b2@5 ~@2 b2@6 [f#3,b3,d#4] ~@2 [f#3,b3,d#4]@3 ~@5 b2@3 ~@2 a#2@3, ~@5 [f#3,b3,d#4]@6 ~@5 b2@5 [f#3,b3,d#4]@8 ~@3", // B
  AG: "a2@5 ~@2 a2@6 ~@2 a2@6 [g3,c#4,e4] ~ e4 [a2,c#4]@2 ~@3 b2@3, ~@5 [g3,c#4,e4]@6 ~@2 [g3,c#4,e4]@5 ~@5 g3@2 ~@4 e2 ~@2", // C#dim A C#dim
  AH: "[a4,b4] [b3,e5]@2 d5@2 b4 ~@2 d5@2 ~ b4 ~ a4 ~@2 b4@2 a4 ~@2 g4 ~@2 a4@2 g4 ~@2 e4 ~@2, [e2,e3,g#3,d4,e4]@3 ~@29, ~ d5 ~@30", // Asus2 E5 E7
  AI: "[g4@2 ~@6 [f2,f3,a3,d#4]@5 ~ e2@6 ~ e2 e3 d4 g#3@2 [e2,e3,d4] g#3 [e2,e3] d4 [e2,g#3] ~ [e2,g#3,d4] ~ [e2,e3] d4 [e2,g#3] e3 [e2,d4] g#3 [e2,e3] d4 [e2,g#3] e3 ~ g#3 e2@2 e3 ~@2 e4 ~@2 g#4 ~@2 b4 ~@2 d5 ~ e5 ~, ~@13 [e3,g#3,d4]@9 ~@9 e3@2 ~@11 d4@2 ~@18, ~@14 f2 ~@9 e2 ~@39]/2", // F7 E7 E E7 E E7 E E7
  AJ: "~@2 g#5 ~@2 b5 ~@3 d6 ~@9 e5 g#5@11 ~",
})).s("gm_piano").gain(0.8)

// other · brass section · "BRASS"
const brass_section = note(`<
  ~@2 A@4 B@6 ~@2 C D E F G H ~ I@7 J ~ K L M N O P ~ Q@8 R@8 S T U V ~ W X Y Z AA AB ~ AC@7 AD AE@3 AF@5 AG@3 AH@4
>`.pickRestart({
  A: "[~@21 e3@2 ~@6 e3@54 ~@2 e3@2 ~@6 e3@35]/4",
  B: "[~@21 e3@2 ~@6 e3@54 ~@2 e3@2 ~@5 f#3@23 ~@2 f#3@2 ~@6 g3@22 ~@2 g3 ~@6 e3@36]/6",
  C: "~@21 [b3,b4]@2 ~ [d4,d5]@2 ~ b3@2 [d4,d5] ~@2, ~@27 b4 ~@4", D: "[e4,e5]@3 [d4,d5] [a3,c4,b4,c5] f3 ~@26",
  E: "~@21 [b3,b4]@2 ~ d5 ~ [b3,b4] ~@2 [d4,d5] ~@2, ~@23 d4@2 ~@7", // B D
  F: "[e4,e5]@3 d5 [c4,d4,b4,c5] [f3,a3,g4,a4] [e3,f4] ~@25", G: "~@21 [b3,b4]@2 d4 d5 ~ [b3,b4] ~@2 [d4,d5] ~@2",
  H: "[e4,e5]@2 ~ a3 ~@28", // E
  I: "[e3@49 ~@4 e3@2 ~@6 e3@54 ~@2 e3@2 ~@5 f#3@22 ~@3 f#3@2 ~@6 g3@22 ~@2 g3@3 ~@5 e3@34 ~]/7",
  J: "~@5 [a3,a4]@3 [a#3,a#4]@2 ~@3 [b3,b4]@17 ~@2", K: "~@21 [b3,b4]@2 ~ d4@2 b3 b4 ~ [d4,d5] ~@2, ~@24 d5 ~@7",
  L: "[e4,e5]@3 [d4,d5] [b3,c4,a4,b4,c5] g4 ~@26", M: "~@20 b3 b4 ~ d4 d5 ~ [b3,b4] ~@2 [d4,d5] ~@2",
  N: "[e4,e5]@2 d4 [c4,c5,d5] b4 ~@27", O: "~@21 [b3,b4] ~@2 [d4,d5] ~ [b3,b4] ~@2 [d4,d5] ~@2",
  P: "[e4,e5]@2 [d4,d5] b3 f3 ~@27", // E D
  Q: "[e3@49 ~@4 e3@2 ~@6 e3@51 ~@5 e3@2 ~@6 f#3@23 ~ f#3@2 ~@5 g3@22 ~@3 g3@2 ~@6 e3@37 ~@3 [a3,a4]@3 [a#3,a#4] ~@4 b3@17 ~@2, ~@236 b4@17 ~@3]/8", // A A#
  R: "[e3@117 b2@3 d3@5 e3@62 ~@2 e3@56 b2@3 d3@5 e3@3]/8", S: "f#3", T: "g3", U: "e3", V: "~@5 b2@2 ~@6 b2@2 ~@17",
  W: "~@21 [b3,b4]@2 ~ d4@2 [b3,b4] ~@2 [d4,d5] ~@2, ~@24 d5 ~@7", X: "[e4,e5]@3 [d4,d5] [c4,c5] g4 ~@26",
  Y: "~@20 b3@2 ~ d4 d5 ~ [b3,b4] ~@2 [d4,d5] ~@2, ~@20 b4 ~@11", Z: "[e4,e5]@3 [c4,d4,c5,d5] [b3,b4] f3 [d4,e4] ~@25",
  AA: "~@21 [b3,b4] ~ d4 d5 ~ [b3,b4] ~@2 [d4,d5] ~@2", AB: "[e4,f5] d4 [b3,c4,c5,d5] a4 d3 ~@27, e5 ~@15",
  AC: "[e3@48 ~@4 b2@3 d3@5 ~ e3@53 ~@3 e3@2 ~@5 f#3@23 ~ f#3@3 ~@5 g3@23 ~ g3@3 ~@5 e3@35 ~]/7",
  AD: "~@5 [a3,a4]@3 [a#3,a#4]@2 ~@3 b4@17 b3@2, ~@13 b3@15 ~@4", // A A#
  AE: "[[e3,e4]@51 ~@2 [e3,e4,e5]@3 ~@5 e5@2 ~@8 e4@25, ~@15 e4 ~@8, ~@60 e3@2 ~ e3@33]/3", // E
  AF: "[~@4 [e3,e4,e5]@4 ~@2 [f3,f4,f5]@3 ~@2 [f#3,f#4,f#5]@3 ~@2 [g3,g4,g5]@3 ~@2 [g#3,g#4,g#5]@4 ~@2 [a3,a4]@37 ~ [a3,g4,c#5]@2 ~@6 [a3,g4,c#5]@2 ~@6 [a3,g4,c#5]@2 ~@6 [g#3,b4]@56 [e3,e4]@3 ~@5 e4@2 ~, ~@156 e3@3 ~]/5", // E F F# G G# A A7 G#m …
  AG: "[[b3,b4]@19 a3 ~ [b3,b4]@7 ~ a#4@2 [a3,a4]@20 ~@2 a3@10 ~ [e4,e6]@2 ~ [a3,b3] c5 ~@27, ~@21 a4 ~@6 a#3@3 ~@22 a4@5 ~@5 e5@4 ~@29]/3", // B A E Asus2
  AH: "[~@8 [f4,a4,d#5]@5 [e4,g#4]@79 ~ g#4 ~ [e3,e4,e5]@4 c5 [b2,c3] ~@27, ~@13 d5@82 ~@33, ~@92 b2@3 ~@33]/4", // F7 E Cmaj7
})).s("gm_brass_section").gain(0.5)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C B@2 A C D B@3 E F@6 G H A C I J A K C L F@6 G H A C I J A K C L A B C B@2 A C D B@3 E F@6 G H A C I J A K C L
  M N O P Q D B D B@2 R S T U F
>`.pickRestart({
  A: "x ~@12 x ~@2 x ~@15", B: "x!2", C: "x ~@15 x ~@4 x ~@10", D: "x ~@4 x ~@10 x ~@4 x ~@10", E: "x!2 ~@2", F: "x",
  G: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", H: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@18",
  I: "x ~@12 x ~@2 x ~@12 x ~@2", J: "x ~@15 x ~@4 x ~@2 x ~@7", K: "x ~ x!2", L: "x ~@12 x ~@18", M: "x ~@6 x!2 ~@7",
  N: "x ~@15 x ~@12 x ~@2", O: "x ~@15 x ~@14 x", P: "~@4 x ~@10 x ~@15 x", Q: "~@15 x ~@16", R: "~ x ~@30",
  S: "~@5 x ~@12 x ~@10 x ~@2", T: "~@11 x ~@20", U: "~@9 x ~ x ~@6 x ~ x ~@11",
})).gain(0.7)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B C B A C@2 B C@3 D E F ~ F E F ~ G C B A H I J C K E F ~ F E F ~ G C B A H I J C K A B C B A C@2 B C@3 D E F ~ F
  E F ~ G C B A H I J C K A@2 L M A C@2 B C@2 ~ N O P ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@8 x ~@4 x ~@10 x ~@4 x ~@2", C: "~@8 x ~@15 x ~@4 x ~@2", D: "~@5 x ~@7 x ~@10 x ~@2 x ~ x ~@2",
  E: "~@29 x ~@2", F: "~@21 x ~@2 x ~@2 x ~ x ~@2", G: "~@16 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2",
  H: "~@8 x ~@4 x ~@10 x ~@2 x ~ x ~@2", I: "~@8 x ~@15 x ~@2 x ~ x ~@2", J: "~@8 x ~@4 x ~@7 x ~@7 x ~@2",
  K: "~@5 x ~@2 x ~@12 x ~@2 x ~@4 x ~@2", L: "~@8 x ~@15 x ~@4 x!2 ~", M: "~@9 x ~@11 x ~@5 x ~@4",
  N: "~@8 x ~@4 x ~@6 x ~@3 x ~@2 x ~@4", O: "x ~@6 x ~@8 x ~@4 x!2 ~ x!2 ~ x ~ x ~@2",
  P: "x ~@2 x ~ x ~@8 x ~@7 x ~@8 x",
})).gain(0.78)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@7 A ~@2 B C ~ D E D F D E ~@10 D E D F D E ~@16 A ~@2 B C ~ D E D F D E ~@20 G ~@4
>`.pickRestart({
  A: "x", B: "x ~@7 x ~@4 x ~@2 x ~@7 x ~@2 x ~ x ~@2", C: "x!4", D: "~ x ~ x", E: "~ x ~@2", F: "x!2 ~@2",
  G: "~ x ~@30",
})).gain(0.78)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@10 [~@3 x ~ x ~@5 x ~@7 x ~ x ~@10] ~@43 [~@3 x ~ x ~@5 x ~@7 x ~ x ~@10] ~@33>")
  .gain(0.39)

// drums · open hat
const open_hat = s("oh").struct("<~@6 A ~@2 A ~ B ~@3 A ~@15 A ~@18 A ~@2 A ~ B ~@3 A ~@22 A C ~@4>".pickRestart({
  A: "~@29 x ~@2", B: "~@5 x ~@7 x ~@7 x ~@10", C: "x",
})).gain(0.7)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@13 B ~ C ~@13 B ~ C ~@11 A ~@13 B ~ C ~@6 D ~@2 D ~ E ~@5 D ~>".pickRestart({
  A: "~@13 x ~@18", B: "~@19 x ~@12", C: "~@27 x ~@4", D: "~@29 x ~@2", E: "~ x ~@14",
})).gain(0.7)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 B ~@6 C ~ A ~@3 A ~@2 A ~@4 A B ~@2 A ~@3 A ~@2 A ~@4 A B ~ A ~@3 B ~@6 C ~ A ~@3 A ~@2 A ~@4 A B ~@4 D ~@4 A
  ~@2 B E ~@2
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "~@13 x ~@18", D: "~@15 x ~@5 x ~@10", E: "~@3 x ~@4 x ~@7",
})).gain(0.7)

// drums · ride
const ride = s("rd").struct(`<
  ~ A B C D E F C G H ~@2 I J@3 ~ J ~@3 K L K M N O P Q J@3 ~ J ~@3 K L K M N O P Q A B C D E F C G H ~@2 I J@3 ~ J ~@3
  K L K M N O P Q R S T U V W X Y Z AA ~ AB AC ~@2
>`.pickRestart({
  A: "~@8 x ~@4 x ~@2 x ~@4 x ~@7 x ~@2", B: "x ~@7 x ~@4 x ~@2 x ~@4 x ~@2 x ~@7",
  C: "~@8 x ~@4 x ~@5 x ~@4 x ~@4 x ~@2", D: "~@5 x ~@2 x ~@4 x ~@5 x ~ x ~@2 x ~@4 x ~@2",
  E: "x ~@12 x ~@7 x ~@2 x ~@4 x ~@2", F: "x ~@7 x ~@4 x ~@2 x ~@7 x ~@7", G: "~@3 x ~@4 x ~@10 x ~@12",
  H: "x ~@4 x ~@5 x ~@4 x ~@7 x ~@7", I: "~@5 x ~@26", J: "x", K: "~@8 x ~@4 x ~@2 x ~@7 x ~@4 x ~@2",
  L: "x ~@7 x ~@4 x ~@10 x ~@4 x ~@2", M: "x ~@7 x ~@4 x ~@5 x ~@4 x ~@7", N: "x ~@7 x ~@4 x ~@2 x ~@7 x ~@4 x ~@2",
  O: "~@8 x ~@4 x ~@7 x ~@5 x ~@4", P: "x ~@4 x ~@10 x ~@7 x ~@7", Q: "x ~@12 x ~@18",
  R: "x ~@7 x ~@5 x ~ x ~@6 x ~@5 x ~@2", S: "x ~@7 x ~@4 x ~@2 x ~@4 x ~@7 x ~@2", T: "~@5 x ~@7 x ~@2 x ~@7 x ~@7",
  U: "~@4 x ~@4 x ~@16 x ~@5", V: "x ~@4 x ~@6 x ~@2 x ~@7 x ~@5 x ~@2", W: "~@2 x ~@5 x ~@4 x ~@5 x ~@4 x ~@7",
  X: "~@5 x ~@7 x ~@2 x ~@7 x ~@5 x ~", Y: "~@8 x ~@4 x ~@10 x ~@4 x ~@2", Z: "x ~@4 x ~@7 x ~ x ~@7 x ~@5 x ~@2",
  AA: "~@5 x ~@7 x ~@7 x ~@2 x ~@7", AB: "~@13 x ~@18", AC: "~ x!2 ~@8 x ~@20",
})).gain(0.7)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@8 A ~@10 B C ~@14 B C ~@15 A ~@10 B C ~@10 D ~@11 E>".pickRestart({
  A: "~@29 x ~@2", B: "~@5 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2",
  C: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@18", D: "~@31 x", E: "x",
})).gain(4.16)

stack(bass, piano, brass_section, kick, snare, hihat, hihat_soft, open_hat, high_tom, crash, ride, bell_tree)