Strudelify

Bus Rider

Guess Who

KeyC majorTempo149 bpm
0:00/0:00
// Bus Rider — Guess Who
// 149 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "Guitar 2" electric guitar muted (copy of ch 3 "Guitar 1" electric guitar muted)
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(149/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
const piano = note(`<
  ~ A@4 B C D E@5 F G E H I J K ~ E@2 L M L N O P Q R@2 E@3 F G E@2 S T U ~ E@2 L M L V W@2 X@2 Y@2 Z ~ E@2 L M L N AA
  AB AC AD AE E@3 F G E@2 AF AG AH ~ E@2 L M L N E AI AJ AK@2 AL@2 E@3 F G E@2 L M L AM AN AO L AM AP@2
>`.pickRestart({
  A: "[g2,c3,e3,g4,a#4]@15 ~", B: "[c2,g2]@2 [c2,a2] [c2,g2] [c2,a#2] [c2,g2] [c2,a2] [c2,g2]",
  C: "~@2 [e5,c6]@2 ~@2 [c2,f5]@2 ~ f5@2 ~@3 g5@2, c2@4 [c2,a#5]@3 ~ c2@4 c2@4, ~@5 g5@3 g5@2 ~ e5@2 f#5@2 ~, ~@6 f5 ~", // C F5 C7
  D: "~ c5 [c2,a2] [c2,g2] [a#1,a#2] [c2,g2] [c2,a2] [c2,g2], [c2,e5] ~@3", // F C5 A# C5 F C5 C
  E: "[c2,g2]@2 [c2,a2] [c2,g2] [a#1,a#2] [c2,g2] [c2,a2] [c2,g2]", // C5 F C5 A# C5 F C5
  F: "[c2,g2]@2 [c2,a2] [c2,g2] ~ [c2,g2] [c2,a2] [c2,g2], ~@4 a#2 ~@3, ~@9 a#1@2 ~@5", // C5 F C5 F C5
  G: "g2!2 [c2,a2] [c2,g2] ~ [c2,g2] [c2,a2] [c2,g2], c2@2 ~@2 a#2 ~@3, ~@9 a#1@2 ~@5", // F C5 F C5
  H: "[c2,g2]@2 a2 [c2,g2] [a#1,a#2] [c2,g2] [c2,a2] [c2,g2], ~@4 c2 ~@11", // C5 A# C5 F C5
  I: "[g5,b5,d6] ~ [g5,b5,d6] ~ [b2,d3,f3]@2 [a#2,d3,f3]@2 [b2,d3,f3,g5,b5,d6] ~ [b2,d3,f3,g5,b5,d6] ~ [g5,b5] d6 [g5,b5] d6, [b2,d3,f3]@4 [g5,b5,d6] ~ [f#5,b5,d6] ~@5 [b2,d3,f3]@2 [b2,d3,f3]@2", // G Bdim A# G7 G Bdim G Bm …
  J: "[g5,b5,d6] ~ [g5,b5,d6] ~ [b2,d3,f3,g5,b5,d6] ~ [b2,d3,f3]@2 [g5,b5] d6 [b2,d3,f3]@2 [a#2,c#3,e3]@2 [a#2,c#3,e3]@2, [b2,d3,f3]@4 ~@2 [f#5,b5,d6] ~ [b2,d3,f3]@2 [g5,b5,d6] ~ [f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~", // G G7 Bdim G Bdim A#dim Bdim Bm …
  K: "[a2,c3,d#3,f5,a5,c6] ~@15", L: "[c2,c4] [e2,e4] [g2,g4] [a#1,a#3]@2 [a#1,a#3] [a1,a3] [c2,c4]",
  M: "f4 ~ [c2,c4]@2 [c2,c4]@2 [c2,c4] ~@9, f2 ~@7, ~ [d#2,d#4]@2 ~@13", // C D#
  N: "f4 ~ [c2,c4]@2 [c2,c4]@2 [c2,c4]@2 c2@2 c2@2 [c2,c4]@3 c4, f2 ~@3 c4@2 ~@2, ~ [d#2,d#4]@2 ~@13", // C D#
  O: "[e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~", // Edim
  P: "[e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a5,e6] ~ [e5,a5,e6] ~ [a#4,e5,g5]@2 [a#4,e5,g5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2, c2@2 c2!2 c2@2 c2@2", // Edim A5 Edim F
  Q: "~ d#5 e5 [c5,g5] [c2,a#4]@2 [c2,a#4]@2 c2@2 c2@2 ~@2 [e4,a#4] ~, c2@4 ~@4 a#4 ~ a#4@4 ~@2, ~@3 c2", // C5 C7 Edim
  R: "[[e4,c5] [e4,a#4] [e4,c5] [g4,a#4] [e4,c5] [g4,a#4] [e4,c5] ~ [c2,g2]@2 [c2,a2] [c2,g2] [a#1,a#2] [c2,g2] [c2,a2] [c2,g2], c2!4 ~@4, ~@7 [e4,a#4]@3 ~@6]/2", // C Edim C Gm C Gm C C5 …
  S: "[g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [f#5,b5,d6] ~, [d3,f3]@2 [d3,f3]@2 [d3,f3] [d3,f3]@2 [d3,f3]", // G Bm Dm
  T: "[g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~, [d3,f3]@2 [d3,f3]@2 [d3,f3]!2 [c#3,e3]!2", // G F# Dm C#m
  U: "[c3,d#3,f5,a5,c6] ~@15", // F7
  V: "f4 ~ [c2,c4]@2 [c2,c4]@2 [c2,c4]@2 c2@2 c2@2 [c2,c4]@3 [c2,c4], f2 ~@3 c4@2 ~@2, ~ [d#2,d#4]@2 ~@13", // C D#
  W: "[a2,c3,f#3] ~ [a2,c3,f#3] ~ [a2,c3,f#3]@2 [a2,c3,f#3]@2 [a2,c3,f#3] ~ [a2,c3,f#3]@6", // F#dim
  X: "[a2,c3,d#3]@2 [a2,c3,d#3] ~ [a2,c3,d#3]@2 [a2,c3,d#3]@2 [a2,c3,d#3] ~ [a2,c3,d#3]@6", // Adim
  Y: "[b2,d3,f3]@2 [b2,d3,f3] ~ [b2,d3,f3]@2 [b2,d3,f3]@2 [b2,d3,f3] ~ [b2,d3,f3]@6", Z: "[a2,c3,d#3] ~@15",
  AA: "[e5,a#5,e6]!16", // Edim
  AB: "[e5,a#5,e6]!2 ~ [a#4,e5,g5,a#5,e6]@3 [a#4,e5,g5,a#5,e6]@2 ~ [c5,e5,g5] c5 a#4 g4 f4 d#4 d4", // Edim C
  AC: "e4 ~ c5@2 c4@2 a#4@2 a#3@2 a4@2 a3@2 g4@2, ~@10 e4 ~@5",
  AD: "g3 e4 f4@2 ~ d4 [g2,e4]@2 [c2,a#2]@2 [g2,d4]@2 ~ g#3 [g2,a#3]@2, g2 ~@3, c2 ~ [c2,a2,f3] ~@3 [c2,a2] ~", // C C7 G5 Gm F
  AE: "[g2,g3]@2 [c2,a2] [c2,g2] [a#1,a#2] [c2,g2] [c2,a2] [c2,g2]", // G F C5 A# C5 F C5
  AF: "[g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [f#5,b5,d6] ~, [g2,b2,d3,f3]!4", // G Bm G7
  AG: "[g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [f#5,b5,d6] ~ [g2,b2,d3,f3]@2 [g2,b2,d3,f3]@2 [f#2,a#2,c#3,e3]@2 [f#2,a#2,c#3,e3]@2, [g2,b2,d3,f3]@4 [g2,b2,d3,f3]@4 [g5,b5,d6] ~ [g5,b5,d6] ~ [f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~", // G Bm G7 F#7 G7 G F#
  AH: "[f2,a2,c3,d#3,f5,a5,c6] ~@15", AI: "[c2,g2]@2 a2 [c2,g2] [a#1,a#2] [c2,g2] [c2,a2] [c2,g2]",
  AJ: "~@2 [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~", // Edim
  AK: "[[e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~ [e5,a#5,e6] ~@3 c2@4 [c2,a2]@2 [c2,g2]@2 [a#1,a#2]@2 [c2,g2]@2 [c2,a2]@2 [c2,g2]@2, c2@2 c2!2 c2@2 c2@2 ~@8, ~@14 [e5,a#5,e6]@7 ~@11]/2", // Edim F C5 A# C5 F C5 Edim
  AL: "[[e4,a#4] [e4,c5] [g4,a#4] [f4,c5] [e4,a#4] [f4,c5] [e4,a#4] [e4,c5]@3 [c2,a2] [c2,g2] [a#1,a#2] [c2,g2] [c2,a2] [c2,g2]]/2", // Edim C Gm F5 Edim F5 Edim C …
  AM: "[f2,f4] ~ [c2,c4]@2 [c2,c4]@2 [c2,c4]@2 c2@2 c2@2 [c2,c4]@3 c4, ~ [d#2,d#4]@2 ~@5 c4@4 ~@4", // F C D#
  AN: "c4 [e2,e4] [g2,g4] [a#1,a#3]@2 [a#1,a#3] [a1,a3] [c2,c4], [c2,g2] ~@3", // E G A# A C C5
  AO: "[f2,f4] ~ [c2,c4]@2 [c2,c4]@2 [c2,c4] ~@9, ~ [d#2,d#4]@2 ~@13", AP: "[[g2,e3]@7 ~, c2@23 ~@9]/2",
})).s("gm_piano").gain(0.37).pan(0)

// chords · electric guitar muted · "Guitar 1"
const electric_guitar_muted = note(`<
  ~ A@4 B@12 ~ C D ~ B@2 E ~@3 B@12 ~ C D ~ B@2 E ~@3 F@2 G@2 H@2 I ~ B@2 E ~@3 B@12 ~ C D ~ B@2 E ~@3 B@14 E ~@7 J@2
>`.pickRestart({
  A: "[c4,e4,g4,a#4]!3 [c4,e4,g4,a#4]@2 [c4,e4,g4,a#4]!2 ~", // C7
  B: "[g2,c3] ~@3 [a2,c3] ~@3 [a#2,c3] ~@3 [a2,c3] ~ [g2,c3] ~", C: "~@4 [g2,b2]!2 [f#2,a#2]!2", D: "[f2,a2] ~@7",
  E: "[g2,c3] ~@3", F: "[a2,d3] ~@3 [b2,d3] ~@3 [c3,d3] ~@3 [b2,d3] ~ [a2,d3] ~",
  G: "[b2,e3] ~@3 [c#3,e3] ~@3 [d3,e3] ~@3 [c#3,e3] ~ [b2,e3] ~", // E5 C#m Dsus2 C#m E5
  H: "[d3,g3] ~@3 [e3,g3] ~@3 [f3,g3] ~@3 [e3,g3] ~ [d3,g3] ~", I: "[b2,e3] ~@15", J: "[[g2,c3]@7 ~]/2",
})).s("gm_electric_guitar_muted").gain(0.32).pan(0)

// bass · electric bass finger · "Bass Guitar"
const bass = note(`<
  ~ A@4 B C B C B C B C B C B D E F G ~ B C H I J K B C B C B L B C B C B D M N O ~ B C H I J K P@2 Q@2 R@2 S T B C H I
  J K B C B C B L B C B C B D M N O ~ B C H I J K B C L C B C B L B C B C B U H I J K H I J K V@2
>`.pickRestart({
  A: "c2", B: "c2@6 d#2@2 e2@2 g2 ~@3 e2@2", C: "c2@2 ~ d#2 e2 g2 ~ e2", D: "c2@4 ~@2 d#2@2 e2@2 g2@2 a2 ~ f#2@2",
  E: "g2@3 ~@3 f#2@2 g2@2 ~@4 f#2@2", F: "g2 ~ f#2 g2!2 f#2!2 f2", G: "f2 ~@7", H: "c3 e3 g3 a#2@2 a#2 a2 c3",
  I: "f3 d#3 c3@2 c3@2 c3 ~@9", J: "[c1,c3] [e1,e3] [g1,g3] [a#0,a#2]@2 [a#0,a#2] [a0,a2] [c1,c3]",
  K: "[f1,f3] [d#1,d#3] [c1,c3]@2 [c1,c3]@2 [c1,c3]@2 [c1,c3]@2 [c1,c3]@2 [c1,c3]@2 [c1,c3]@2", // F D# C
  L: "c2@4 ~@2 d#2@2 e2@2 g2 ~@3 e2@2", M: "g2@3 ~@3 f#2@2 g2@3 ~@3 f#2@2", N: "g2@2 ~@4 f#2@2 g2@2 g2@2 f#2 ~ f#2 ~",
  O: "f2 ~@15", P: "d1@4 ~@2 d1@2 d1@2 d1 ~@5", Q: "f1@4 ~@2 f1@2 f1@2 f1 ~@5", R: "g1@4 ~@2 g1@2 g1@2 g1 ~@5",
  S: "f1 ~@15", T: "~@2 d2!6", U: "c2@2 ~ d#2 e2 g2 ~ a#1", V: "[c2@7 ~]/2",
})).s("gm_electric_bass_finger").gain(0.4).pan(0)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@3 B C@3 D E@9 A@2 F G@2 A F C H E@3 I E@3 J K@5 L A F C@2 A F C@8 A M C@2 A ~ C H E@3 I E@10 A N C@2 A F C H C@2
  E@3 I E@2 J K@4 L A F G O G B C P A Q
>`.pickRestart({
  A: "x", B: "x ~@4 x ~ x", C: "x ~@2 x!2 ~@3", D: "x!2 ~@2 x ~@3", E: "x ~@3 x!2 ~@2", F: "~@5 x ~ x",
  G: "x ~@2 x!2 ~@2 x", H: "x ~@2 x!3 ~ x", I: "x ~ x!2 ~ x!3", J: "x ~@3 x!2 ~ x", K: "~@4 x!2 ~ x", L: "~@4 x!2 ~@2",
  M: "x!8", N: "x ~ x ~@2 x ~ x", O: "x ~ x!2", P: "x ~@2 x!2 ~ x ~", Q: "~@3 x",
})).gain(0.64).pan(1)

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

// drums · low tom
const low_tom = s("lt").struct("<~@18 A ~@21 B ~ C ~@5 D ~@7 E ~@3 F ~@15 B ~ G ~@5 H ~@17 I ~@3 J ~@2>".pickRestart({
  A: "~@10 x!6", B: "~@9 x!2 ~ x ~ x ~", C: "~ x ~@3 x!2 ~@9", D: "~@12 x!4", E: "~@3 x!5", F: "~@10 x ~@2 x!2 ~",
  G: "~@2 x!2 ~@4", H: "~@6 x ~@3 x ~@3 x!2", I: "~@13 x!3", J: "~@9 x!3 ~ x!3",
})).gain(0.64).pan(1)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~@18 B ~@10 C@2 D ~@3 E ~ F ~@4 C D ~@3 B A@6 B ~@5 D@2 G ~ G ~ D ~ H ~@2 I ~@3 E B ~@5 A B A@3 J A@10 B ~ A B A@3
  B@2 ~
>`.pickRestart({
  A: "x!4", B: "x", C: "~ x ~@6", D: "~@7 x", E: "~@3 x ~@4", F: "~@5 x ~@2", G: "x!2 ~@6", H: "~@3 x", I: "~@7 x ~@8",
  J: "x!3 ~",
})).gain(0.64).pan(1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@42 A ~@5 B ~@11 C ~@16 D ~@6 E ~@17 F ~@3 G ~@2>".pickRestart({
  A: "~ x!2 ~@5", B: "~@8 x!4 ~@4", C: "~@8 x!2 ~@2 x ~@3", D: "~@6 x!2", E: "~@4 x!2 ~@2 x!2 ~@6", F: "~@9 x!3 ~@4",
  G: "~@4 x!4 ~@8",
})).gain(0.64).pan(1)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A@3 B A@9 C ~@2 A@2 D ~ A C A@11 E A C D ~ A@2 D ~ A ~@9 A@2 D ~ A F G A G A@3 H E A@5 B ~@2 A@2 D ~@27
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2 ~@2", D: "x", E: "x ~ x ~ x ~ x!2", F: "x ~ x ~@2 x ~@2", G: "~ x!3",
  H: "x ~ x ~ x ~@2 x",
})).gain(0.64).pan(1)

// drums · high tom
const high_tom = s("ht").struct("<~@48 [~@4 x!4 ~@8] ~@53 [~@2 x!2 ~@4] ~@6>").gain(0.64).pan(1)

// drums · crash
const crash = s("cr").struct(`<
  ~ A@5 ~@2 B ~@14 A ~@3 A ~@3 A ~@13 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@2 B ~@14 A ~@3 A ~ A ~ A ~@9 A ~@3 A ~@3 A C
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~@3 x",
})).gain(0.64).pan(1)

// drums · ride bell
const ride_bell = s("rd").struct("<~@49 A@6 ~@28 A ~ A@3 B A@10 ~@4 C D A ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~@3 x ~ x ~ x", D: "~ x ~ x ~@4",
})).gain(0.64).pan(1)

stack(piano, electric_guitar_muted, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride_bell)

More by Guess Who