Strudelify

School Day

Chuck Berry

KeyC majorTempo122 bpm
0:00/0:00
// School Day — Chuck Berry
// 122 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "SCHOOL DAYS (HAIL HAIL ROCK" electric guitar jazz (copy of ch 4 "GUITAR" electric guitar clean); ch 7 viola (copy of ch 4 "GUITAR" electric guitar clean)
// note: Full arrangement: all 50 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(122/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 · "BASS"
const bass = note(`<
  A B C D E F G H E F A B E I C D E F G H E F A B C I C D C D J K C D A B E I E F E F J K E F A L M N
>`.pickRestart({
  A: "g2@3 ~ g2 ~ g2@3 ~ g2 ~ g2@3 ~ g2 ~ g2@3 ~ g2 ~", B: "g2@2 ~@2 g2 ~ g2@3 ~ g2 ~ g2@2 g2@2 g2@2 g2@4 g2@2",
  C: "c2@3 ~ c2@2 e2@3 ~ e2@2 g2@3 ~ g2@2 a2@4 g2@2", D: "c2@3 ~ c2@2 e2@3 ~ e2@2 g2@3 ~ g2@2 a2@3 ~ g2 ~",
  E: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~", F: "c2@2 ~@2 c2 ~ c2@3 ~ c2 ~ c2@2 c2@2 c2@2 c2@4 c2@2",
  G: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~", H: "f2@2 ~@2 f2 ~ f2@3 ~ f2 ~ f2@2 f2@2 f2@2 f2@4 f2@2",
  I: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ g2@3 ~ g2 ~ g2@3 ~ g2 ~", J: "f2@3 ~ f2@2 a2@3 ~ a2@2 c3@3 ~ c3@2 d3@4 c3@2",
  K: "f2@3 ~ f2@2 a2@3 ~ a2@2 c3@3 ~ c3@2 d3@3 ~ c3 ~", L: "g2@3 ~ g2@2 b2@3 ~ b2@2 d3@3 ~ d3@2 e3@4 d3@2",
  M: "c2@2 ~@2 c2 ~ c2@2 ~@2 c2 ~ c2@2 ~@2 c2 ~ c2@2 ~@2 c2 ~", N: "c2@7 ~@3 c2@10 ~@4",
})).s("gm_electric_bass_finger").gain(0.53)

// chords · piano
const piano = note(`<
  A B C D E F G@2 H I J K L M N F O P Q R O P S T L U C D V P W@2 C D A B L X O P V P G@2 V P Y Z AA AB
>`.pickRestart({
  A: "[g2,d3]@2 ~@2 [g2,b3,d4,g4] ~ [g2,e3]@2 ~@2 [g2,e3] ~ [b3,d4,g4] ~@3 [g2,d3] ~ [g2,e3]@2 ~@2 [g2,e3] ~, ~@2 d3 ~@3 [g2,d3] ~@5", // G5 G C G G5 C G5
  B: "[g2,d3]@2 [g4,b4] ~ [g2,d3,g4,b4] ~ [g2,e3]@2 [f4,a4] ~ [g2,e3,f4,a4] ~ [g2,d3]@2 [e4,g4] ~ [g2,d3,e4,g4] ~ [g2,e3]@2 [d4,f4] ~ [e3,d4,f4] ~, [g4,b4] ~@5 [f4,a4] ~@5 [e4,g4] ~@5 [d4,f4] ~@3 g2@2", // G5 G C F Fmaj7 G5 Em Em7 …
  C: "[c3,g3]@2 ~@2 [c3,g3] ~ [c3,a3]@3 ~ [c3,a3] ~ [c3,g3,a#4,d#5]@3 ~ [c3,g3] ~ [c3,a3]@3 ~ [c3,a3] ~, ~@2 [g4,c5]", // C5 F Cm7 C5 F C5
  D: "[c3,g3]@3 ~ [c3,g3] ~ [c3,a3]@3 ~ [e5,g5,c6]@2 [c3,g3]@3 ~ [e5,g5,c6]@2 [c3,a3]@3 ~ [c3,a3] ~, ~@10 [c3,a3] ~@5 [c3,g3] ~@7", // C5 F C C5 C F C5
  E: "[c3,g3]@3 ~ [c3,g3,e4,g4,c5] ~ [c3,a3]@3 ~ [c3,a3] ~ [c3,g3,e4,c5]@2 ~@2 [c3,g3] ~ [c3,a3]@3 ~ [c3,a3,c5] ~, ~@12 g4 ~@11", // C5 C F C C5 F
  F: "[c5,e5,g5] ~ [c5,e5,g5] ~ [c3,g3,c5,e5,g5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c3,a3,c5,f5,a5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c3,g3,c5,e5,g5] ~ [c5,f5,a5] ~ [c5,f5,a5] ~ [c3,a3,c5,f5,a5] ~, [c3,g3] ~@2 [c3,a3] ~@2 [c3,g3] ~@2 [c3,a3] ~@2", // C F C F C5 F C5 F
  G: "[[f3,c4] ~@3 c4@2 [f3,c4,d4] ~@3 [f3,d4] ~ [f3,c4] ~@3 [f3,c4] ~ [f3,d4] ~@3 [f3,d4] ~ [f3,c4] ~@3 [f3,c4] ~ d4@2 ~@2 [f3,d4] ~ [f3,c4] ~@3 [f3,c4] ~ [f3,d4] ~@3 [f3,d4] ~, [a4,c5,f5], ~@4 f3 ~@25 f3 ~@17]/2", // F5 Dm7 Dm F5 Dm F5 Dm F5 …
  H: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@5", // C
  I: "[e4,c5]@2 ~@8 [e4,g4,c5]@2 ~@4 c6@3 [a5,b5] g5 [d5,e5,f5] [a4,b4,c5] ~, g4 ~@23", // C Asus2 Dm Am
  J: "[g2,d3]@2 ~@2 [g2,d3] ~ [g2,e3]@3 ~ [g2,e3] ~ [g2,d3,f4,a#4]@3 ~ [g2,d3] ~ [g2,e3]@3 ~ [g2,e3] ~, ~@2 [d4,g4]", // G5 C Gm7 G5 C G5
  K: "[g2,d3]@3 ~ [g2,d3] ~ [g2,e3]@3 ~ [b4,d5,g5]@2 [g2,d3]@3 ~ [b4,d5,g5]@2 [g2,e3]@3 ~ [g2,e3] ~, ~@10 [g2,e3] ~@5 [g2,d3] ~@7", // G5 C G G5 G C G5
  L: "[e4,g4,c5] ~@9 [e4,g4,c5]@5 ~ c6@3 [g5,a5,b5] [b4,c5,d5,e5,f5] a4 ~@2", // C G Bdim
  M: "[c3,g3]@2 ~@2 [c3,g3] ~ [c3,a3]@2 d5 [c5,b5] [c3,a3,a4,b4,g5,a5] [f4,g4,e5,f5] [g2,d3] ~@3 d3@2 [g2,d3,e3] ~@3 [g2,e3] ~, ~@4 [e5,c6]@5 ~@3 [b3,d4,g4]@12, ~@16 g2 ~@7", // C5 F Cmaj7 C G5 Em7 C G
  N: "[c3,g3]@2 ~@2 [c3,g3,e4,g4,c5] ~ [c3,a3]@3 ~ [c3,a3] ~ [c3,g3,e4,c5]@2 ~@2 [c3,g3] ~ [c3,a3]@3 ~ [c3,a3,c5] ~, ~@12 g4 ~@11", // C5 C F C C5 F
  O: "[c3,g3]@3 ~ [c3,g3,e5,g5,c6] ~ [c3,a3]@3 ~ [c3,a3] ~ [e5,g5,c6] ~@3 [c3,g3] ~ [c3,a3]@3 ~ [c3,a3] ~, ~@4 [c3,g3] ~@3", // C5 C F C C5 F C5
  P: "[e5,g5,c6] ~ [e5,g5,c6] ~ [c3,g3,e5,g5,c6] ~ [e5,g5,c6] ~ [e5,g5,c6] ~ [c3,a3,e5,g5,c6] ~ [e5,g5,c6] ~ [e5,g5,c6] ~ [c3,g3,e5,g5,c6] ~ [e5,g5,c6] ~ [e5,g5,c6] ~ [a3,e5,g5,c6] ~, [c3,g3] ~@2 [c3,a3] ~@2 [c3,g3] ~@2 [c3,a3] ~ c3", // C Am7 C Am7 C5 F C5 F
  Q: "[f3,c4]@2 ~@2 [f3,c4,a5,c6,f6] ~ [f3,d4]@3 ~ [f3,d4] ~ [a5,c6,f6] ~@3 [f3,c4] ~ [f3,d4]@3 ~ [f3,d4] ~, ~@4 [f3,c4] ~@3", // F5 F Dm F F5 Dm F5
  R: "[a5,c6,f6] ~ [a5,c6,f6] ~ [f3,c4,a5,c6,f6] ~ [a5,c6,f6] ~ [a5,c6,f6] ~ [f3,d4,a5,c6,f6] ~ [a5,c6,f6] ~ [a5,c6,f6] ~ [f3,c4,a5,c6,f6] ~ [a5,c6,f6] ~ [a5,c6,f6] ~ [d4,a5,c6,f6] ~, [f3,c4] ~@2 [f3,d4] ~@2 [f3,c4] ~@2 [f3,d4] ~ f3", // F Dm7 F Dm7 F5 Dm F5 Dm
  S: "[g2,d3]@2 ~@2 [g2,d3,b4,d5,g5] ~ [g2,e3]@3 ~ [g2,e3] ~ [b4,d5,g5] ~@3 [g2,d3] ~ [g2,e3]@3 ~ [g2,e3] ~, ~@4 [g2,d3] ~@3", // G5 G C G G5 C G5
  T: "[b4,d5,g5] ~ [b4,d5,g5] ~ [g2,d3,b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [g2,e3,b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [g2,d3,b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [e3,b4,d5,g5] ~, [g2,d3] ~@2 [g2,e3] ~@2 [g2,d3] ~@2 [g2,e3] ~ g2", // G Em7 G Em7 G5 C G5 C
  U: "[c3,g3] ~@3 g3@2 [c3,g3,a3] ~@3 [c3,a3] ~ [g2,d3]@2 ~@2 [g2,d3] ~ [g2,e3]@2 a4 [g4,f#5] [g2,e3,e4,f#4,d5,e5] [c4,d4,b4,c5], [e4,g4,c5]@12 ~@4 [b4,g5]@5 ~@3, ~@4 c3 ~@19", // C5 Am7 F G5 C Gmaj7 G C …
  V: "[c3,g3]@2 ~@2 [c3,g3,e5,g5,c6] ~ [c3,a3]@3 ~ [c3,a3] ~ [e5,g5,c6] ~@3 [c3,g3] ~ [c3,a3]@3 ~ [c3,a3] ~, ~@4 [c3,g3] ~@3", // C5 C F C C5 F C5
  W: "[[f3,c4] ~@3 c4@2 [f3,c4,d4] ~@3 [f3,d4] ~ [f3,c4] ~@3 [f3,c4] ~ [f3,d4] ~@3 [f3,d4] ~ [f3,c4] ~@3 [f3,c4] ~ [f3,d4] ~@3 [f3,d4] ~ [f3,c4] ~@3 [f3,c4] ~ [f3,d4] ~@3 [f3,d4] ~, [a4,c5,f5], ~@4 f3 ~@43]/2", // F5 Dm7 Dm F5 Dm F5 Dm F5 …
  X: "g3@2 ~@2 [c3,g3] ~ [c3,a3] ~@3 [c3,a3] ~ [g2,d3] ~@3 d3@2 [g2,d3,e3] ~@3 [g2,e3] ~, c3 ~@11 [b3,d4,g4]@12, ~@16 g2 ~@7", // C5 F G5 Em7 C G
  Y: "d3@2 ~@2 [g2,d3] ~ [g2,e3] ~@3 [g2,e3] ~ [g2,d3] ~@3 [g2,d3] ~ [g2,e3] ~@3 [g2,e3] ~, g2 ~@23", // G5 C G5 C
  Z: "[g2,d3]@2 ~@2 [g2,d3,b3,d4,g4] ~ [g2,e3]@3 ~ [g2,e3] ~ [b3,d4,g4] ~@3 [g2,d3] ~ [g2,e3]@2 ~@2 [g2,e3] ~, ~@6 [g2,d3] ~@5", // G5 G C G G5 C G5
  AA: "[e4,g4,c5]@2 ~@2 [e4,g4,c5] ~ [f4,a4,c5]@2 ~@2 [f4,a4,c5] ~ [e4,g4,c5]@2 ~@2 [e4,g4,c5] ~ [f4,a4,c5]@2 ~@2 [f4,a4,c5] ~", // C F C F
  AB: "[e4,g4,c5]@3 ~@2 [e5,g5,c6]@6 ~", // C
})).s("gm_piano").gain(0.27)

// chords · electric guitar clean · "GUITAR"
const electric_guitar_clean = note(`<
  ~@2 A B C D E F G H I J K L M N O P Q R K S T U O H O V W X Y Z AA AB AC AD AE X AF AG AH AI AJ AK AL N AM AN AO@2
>`.pickRestart({
  A: "~@7 [g4,a#4]!2 ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~@2 g4 ~@2 g4 ~, ~@7 c3@4 ~@2 c3@3 ~@2 c3@5 ~, ~@6 a4 ~", // Gm
  B: "[c3,g4,c5]@3 ~@3 [c3,g4]@3 ~ c3@6 ~@2 [c3,c5]@6, ~@9 c5@7 ~@8, ~@9 g4@5 ~@2 g4@6 ~@2", // C5 C
  C: "~@6 [b2,g4,a#4] ~ [g4,a#4]!2 ~@2 [g4,a#4] ~ [g4,a#4]!2 ~@2 c3@4 g4 ~, ~@6 c3@4 ~@2 c3@4 ~@2 a4@3 ~@3", // D# Gm
  D: "[c3,g4,c5]@3 ~@3 g4@2 ~@2 [c3,g4,c5]@9 ~@5", // C5
  E: "~@6 [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~ [f3,d5]@4 c5 ~, ~@6 f3@2 ~@4 f3@5 ~@7", // Cm Dm
  F: "[f3,c5,f5]@3 ~@7 [f3,c5,f5]@8 ~@6", // F5
  G: "~@6 [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [c3,a4]@4 g4 ~, ~@6 c3@4 ~@2 c3@4 ~@2 g4 ~@5", // Gm F
  H: "[c3,g4,c5]@3 ~@7 [c3,g4,c5]@7 ~@7", // C5
  I: "~@6 [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [g3,e5]@4 d5 ~, ~@6 g3@4 ~@2 g3@5 ~ g5 ~@5", // G5 C
  J: "[g3,d5,g5]@3 ~@7 [g3,d5,g5]@7 ~@7", // G5
  K: "~@6 [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [c3,a4]@4 g4 ~, ~@3 c3 ~@2 c3@2 ~@4", // Gm F
  L: "[c3,g4,c5]@2 ~@8 [c3,g4,c5]@3 ~@11", // C5
  M: "~@6 [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ c3@4 g4 ~, ~@6 c3@2 ~@4 c3@2 ~@4 a4@3 ~@3", // Gm
  N: "[c3,g4,c5]@3 ~@7 [c3,g4,c5]@8 ~@6", // C5
  O: "~@6 [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [c3,a4]@4 g4 ~, ~@3 c3 ~@2 c3 ~@5", // Gm F
  P: "[c3,g4,c5]@3 ~@7 [c3,c5]@7 ~@7, ~@10 g4@5 ~@9", // C5 C
  Q: "~@6 [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~@2 [f3,d5]@3 c5 ~, ~@3 f3 ~@2 f3@3 ~@3", // Cm Dm
  R: "[f3,c5,f5]@2 ~@8 [c5,f5]@7 ~@7, ~@10 f3@9 ~@5", S: "~ [c3,g4]@2 ~@7 [c3,g4,c5]@9 ~@5",
  T: "~@6 [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [g3,e5]@4 d5 ~, ~@6 g3@5 ~ g3@5 ~ g5 ~@5", // G5 C
  U: "[g3,d5,g5]@2 ~@8 [d5,g5]@7 ~@7, ~@10 g3@9 ~@5", V: "[c3,g4,c5]@2 ~@8 [c3,g4,c5]@7 ~@7",
  W: "~@6 [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] g4 a#4 ~ a#4 ~ [c3,a4]@4 g4 ~, ~@6 c3@2 ~@4 c3@3 g4@2 ~@7", // Gm F
  X: "[c3,g4,c5]@2 ~@8 [c3,g4,c5]@9 ~@5", // C5
  Y: "~@6 d#5 b4 [b4,d#5] ~ [b4,d#5] f3 ~ b4 ~ c5 [c5,d#5] ~@2 [f3,d5]@3 c5 ~, ~@6 f3@3 ~@4 [f3,d#5]@4 ~@7", // B Cm Dm F7
  Z: "[f3,c5]@3 ~@7 [f3,c5]@9 ~@5, d#5 ~@9 f5@7 ~@7", // F5
  AA: "~@6 [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~@2 c3@3 g4 ~, ~@6 c3@2 ~@4 c3@4 ~@2 a4@3 ~@3", // Gm
  AB: "[c3,g4,c5]@2 ~@8 [c3,c5]@7 ~@7, ~@10 g4@5 ~@9", // C5 C
  AC: "~@6 [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [g3,e5]@4 d5 ~, ~@6 g3@2 ~@4 g3@5 ~@7", // G5 C
  AD: "[g3,d5,g5] ~@4 [g3,d5,g5]@4 ~@3", // G5
  AE: "~@6 [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ a#4 ~ a#4 ~ [g4,a#4] ~ c3@4 g4@2, ~@6 c3@4 ~@2 [c3,g4]@4 ~@2 a4@3 ~@3, ~@18 a#4 ~@5", // Gm C5
  AF: "~@6 [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4]@2 [c3,a4]@4 g4@2, ~@3 c3 ~@2 c3@2 ~@4", // Gm F
  AG: "[c3,g4,c5] ~@4 [g4,c5]@5 ~@2, ~@5 c3@4 ~@3", // C5
  AH: "~@6 [c3,g4]@2 [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [c3,a4]@4 g4@2, ~@6 a#4 ~@5 c3@2 ~@4 g4 ~@5", // C5 Gm F
  AI: "[c3,g4,c5]@3 ~@7 b4 c3@9 ~@4, ~@10 c5@9 ~@5, ~@10 g4@7 ~@7", // C5
  AJ: "~@6 [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~ [c5,d#5] ~@2 f3@3 c5 ~, ~@6 f3@2 ~@4 f3@5 ~ d5@3 ~@3", // Cm
  AK: "[f3,c5,f5]@3 ~@7 [f3,c5,f5]@7 ~@7", // F5
  AL: "~@6 [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~@2 c3@3 g4 ~, ~@6 c3@2 ~@4 c3@5 ~ a4@3 ~@3", // Gm
  AM: "~@6 [d5,g5] ~ [d5,g5] ~ [d5,g5] g3 d5 g5 ~@2 g5 ~ [g3,e5]@4 d5 ~, ~@6 g3@2 ~@5 g3@5 g5 ~@5", // G5 C
  AN: "[g3,d5,g5]@3 ~@7 [g3,d5,g5]@6 ~@8", // G5
  AO: "[~@4 g4@2 ~ a#4 ~ a4@3 ~ a4@2 g4@2 a4@2 g4@2 f4@2 g4@4 ~@2 d#4@3 ~ c4@8 ~@7, ~@3 [g4,c5] ~@2 a#4 ~@17]/2", // C5
})).s("gm_electric_guitar_clean").gain(0.41)

// drums · kick
const kick = s("bd").struct("<[x ~ x!2 ~ x!2 ~ x!2 ~ x]!49 [x ~@2 x ~ x ~@6]>").gain(0.5)

// drums · snare
const snare = s("sd").struct("<A B A@11 B A@11 B A@11 B A@11 C>".pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@3 x!5", C: "x!2 ~@4",
})).gain(0.56)

// drums · clap
const clap = s("cp").struct("<~ A ~@11 A ~@11 A ~@11 A ~@10 A B>".pickRestart({
  A: "~ x ~ x", B: "x",
})).gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@49 [~@5 x ~@6]>").gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<A B A@11 B A@11 B A@11 B A@10 B ~>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x!12",
})).gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<~@49 [~@3 x!2 ~@7]>").gain(0.5)

// drums · high tom
const high_tom = s("ht").struct("<~@49 [~ x!2 ~@9]>").gain(0.5)

// drums · crash
const crash = s("cr").struct("<A ~ A ~@11 A ~@11 A ~@11 A ~@10 B>".pickRestart({
  A: "x", B: "x ~@4 x ~@6",
})).gain(0.44)

stack(bass, piano, electric_guitar_clean, kick, snare, clap, low_tom, hihat, mid_tom, high_tom, crash)

More by Chuck Berry