Strudelify

Shakin' All Over

Guess Who

KeyE minorTempo120 bpm
0:00/0:00
// Shakin' All Over — Guess Who
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 54 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar (Melody).
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.

// chords · distortion guitar · "Guitar (Harmony)"
const distortion_guitar = note(`<
  ~@3 A B C D E B C F E B C G H@2 I@2 J@2 K L A B C D E B C F E B C G H@2 I@2 J@2 K L M N O P Q R Q P Q R Q
>`.pickRestart({
  A: "e3@2 e4!2 d4!2 b3@2", B: "~@2 g5 e5 d5@2 b4@2 a4@2 g4@2 e4@2 d4@2", C: "[g3,b3,e4]",
  D: "e4@2 g3 b3 e4@2 g3 b3, ~ e4 ~ e4", E: "[g3,e4]@2 [g3,e4] [b3,d4]@2 [a3,c#4] [g3,b3]@2",
  F: "e4@2 g3 b3 e4@2 [g3,e4] [b3,e4], ~ e4 ~@2", G: "~ [b3,c#4,f#4]",
  H: "[[c4,e4]!3 [a3,c4] [c4,e4]@2 [c4,e4,g4]@7 [c4,e4,g4]!3]/2", // C Am C
  I: "[[b3,e4]@2 [b3,e4] [a3,d4] [b3,e4]@2 [g3,b3]@7 [g3,b3,e4]@2 c#4]/2", // E5 D5 E5 G Em
  J: "[[c4,e4]!3 [a3,c4] [c4,e4]@2 [c4,e4,g4]@10]/2", K: "~@4 [b3,e4]!3 b3", L: "[a3,d4] [b3,e4]@3",
  M: "~@6 [b4,e5] [a4,d5]", N: "[b4,e5]@2 [b4,e5] [a4,d5]@2 [f#4,b4] [e4,a4] [d4,g4]",
  O: "[f#4,b4]@2 [f#4,b4] [e4,a4]@2 [d4,g4] [b3,e4] [a3,d4]", P: "[b3,e4]@2 e4 d4@2 b3 a3 g3",
  Q: "b3@2 b3 a3@2 b3 e4 d4", R: "[a3,e4]@2 e4 d4@2 b3 a3 g3",
})).s("gm_distortion_guitar").gain(0.45).pan(0.4)

// other · electric guitar muted · "Muted Guitar"
const electric_guitar_muted = note(`<
  ~@2 A@4 B C A@2 B C A@2 D E F G H E F I A@4 B C A@2 B C A@2 D E F G H E F I A@2 J@10
>`.pickRestart({
  A: "e2@2 e3!2 d3!2 b2@2", B: "e2 ~ b1 ~", C: "e2@2 ~ b2@3 b1@2", D: "e2 ~ [b3,g4]@2", E: "a2 e3 a3 e3",
  F: "a2@2 e3 a3@2 e3 a2@2", G: "e2 b2 e3 b2", H: "e2@2 b2 e3@2 b2 e2@2", I: "[e2,b2,e3]", J: "e2 e3 ~ b2",
})).s("gm_electric_guitar_muted").gain(0.8).pan(0.8)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@2 A B C D E F G H A I E F J K L E F M N J ~ O C D G P G P A Q A I J M R G P S T J E F G P G H C D A U ~@2
>`.pickRestart({
  A: "e2@5 ~ a#2 ~ b2@5 ~ d#3 ~", B: "e3@5 ~@3 b2@4 d2 ~ e2 ~", C: "e2@5 ~ e2 ~ b1@5 ~ b1 ~",
  D: "e2@5 ~ e2 ~ b1 ~ e1 ~ e2@2 ~@2", E: "e2@5 ~ e2 ~ b2@5 ~ b2 ~, ~@8 a#2 ~@7", F: "e3@5 ~ e3 ~ b2@2 ~@2 b2 ~@3",
  G: "e2@5 ~ e2 ~ b2@4 ~@2 b2 ~", H: "e2@5 ~ e2 ~ b2@3 ~ b2 ~@3", I: "e3@6 a#2@2 b2@3 ~ b2@2 ~@2", J: "e2 ~@3",
  K: "a1@5 ~ a1 ~ e2@5 ~ e2 ~, ~@8 d#2 ~@7", L: "a2@5 ~ a2 ~ e2@2 ~@2 e2 ~@3", M: "a1@5 ~ a1 ~ e2@4 ~@2 e2 ~",
  N: "a1@5 ~ a1 ~ e2@3 ~ e2 ~@3", O: "e2@2 ~ e2@2 ~ e2@2 b2@2 ~@2 b2@2 ~@2", P: "e3@5 ~ e3 ~ b2@4 e2 ~@3",
  Q: "e3@5 ~@3 b2@4 e2 ~ e2 ~", R: "a2@5 ~ a2 ~ e2@4 a1 ~@3", S: "a1@5 ~ d#2 ~ e2@5 ~ g#2 ~",
  T: "a2@6 d#2@2 e2@3 ~ e2@2 ~@2", U: "e3@5 ~ a#2@2 b2@4 ~@4",
})).s("gm_fretless_bass").gain(0.48).pan(0.3)

// bass · fretless bass · "Bass" · soft notes
const bass_soft = note(`<
  ~@3
  [~@3 a#2 ~@4]
  ~@27
  [~@3 a#2 ~@4]
  ~@19
  [~@12 e2 ~ e2 ~]
  [e2@5 ~ a#2 ~ b2@5 ~ d#3 ~]
  [e3@5 ~ a#2@2 b2@4 c2 ~ f#2 ~]
>`).s("gm_fretless_bass").gain(0.24).pan(0.3)

// chords · piano
const piano = note(`<
  ~@2 A B C D E F C D G H I J K L M N O P Q K ~ R S T S T U V W@2 S T X L M W@2 P Q X N O N O E F Y Z AA@2 ~@2
>`.pickRestart({
  A: "[g3,b3,e4] ~@2 [g3,b3,e4] ~@2 [g3,b3,e4] ~", // Em
  B: "~@2 [g3,b3,e4] ~@3 e3@2 [g3,b3,e4] ~ e3@2 [g3,b3,e4] ~@3, ~@6 d#3 ~@9", // Em
  C: "~ [g3,e4,b4]@2 ~ [g3,e4,b4] ~ [g3,e4,b4] ~", D: "~@2 [g3,e4,b4]@4 ~@2 [g3,e4,b4]@2 e3@2 [g3,e4,b4] ~@3",
  E: "[g3,e4,b4] ~@2 [g3,e4,b4] ~@2 [g3,e4,b4] ~", // Em
  F: "~@2 [g3,e4,b4] ~@3 e3@2 [g3,e4,b4] ~ e3@2 [g3,e4,b4] ~@3, ~@6 d#3 ~@9", // Em
  G: "[g3,e4,b4]@2 ~@2 [g3,e4,b4]@2 ~@2 [g3,e4,b4] ~ [g3,e4,b4] ~ [g3,e4,b4] ~@3", // Em
  H: "~@2 [g3,e4,b4] ~@5 [g3,e4,b4] ~ e3@2 [g3,e4,b4] ~@3", I: "~@2 [g3,b3,e4]@7 ~ e4@2 g4 b4 e5 ~",
  J: "~@2 [g3,b3,e4]@4 ~@2 [g3,b3,e4] ~ e3@2 [g3,b3,e4] ~@3", K: "[g3,b3,e4]@3 ~@13",
  L: "[a3,c4,e4,a4]@2 ~@2 [a3,c4,e4,a4]@2 ~@2 [a3,c4,e4,a4] ~ [a3,c4,e4,a4] ~ [a3,c4,e4,a4] ~@3", // Am
  M: "~@2 [a3,c4,e4,a4] ~@5 [a3,c4,e4,a4] ~ a2@2 [a3,c4,e4,a4] ~@3", // Am
  N: "[g3,b3,e4]@2 ~@2 [g3,b3,e4]@2 [g3,b3,e4]@2 ~@2 [g3,b3,e4]@2 ~@2 [g3,b3,e4] ~", // Em
  O: "~@2 [g3,b3,e4] ~@3 [g#3,c4,f4] ~ [g3,b3,e4]@2 ~@2 [g3,b3,e4] ~@3", // Em Fm Em
  P: "[a3,c4,e4,a4]@2 ~@2 [a3,c4,e4,a4]@2 [a3,c4,e4,a4]@2 ~@2 [a3,c4,e4,a4]@2 ~@2 [a3,c4,e4,a4] ~", // Am
  Q: "~@2 [a3,c4,e4,a4] ~@3 [a#3,c#4,f4,a#4] ~ [a3,c4,e4,a4]@2 ~@2 [a3,c4,e4,a4] ~@3", // Am A#m Am
  R: "[g3,e4,b4] ~ [g3,e4,b4]@2 ~@2 [g#3,f4,c5] ~ [g3,e4,b4]@2 [f#3,d#4,a#4] ~ [g3,e4,b4] ~@3", // Em Fm Em D#m Em
  S: "~@2 [g3,e4,b4]@7 ~ e4@2 g4 b4 e5 ~", T: "~@2 [g3,e4,b4]@4 ~@2 [g3,e4,b4] ~ e3@2 [g3,e4,b4] ~@3",
  U: "[g3,e4,b4]@2 ~@2 [g3,e4,b4]@2 [g3,e4,b4]@2 ~@2 [g3,e4,b4]@2 ~@2 [g3,e4,b4] ~", // Em
  V: "~@2 [g3,e4,b4] ~@3 [g#3,f4,c5] ~ [g3,e4,b4]@2 ~@2 [g3,e4,b4] ~@3", W: "[[g3,b3,e4]@20 ~@6 [g3,b3,e4] ~@5]/2",
  X: "[g3,e4,b4]@3 ~@13", Y: "[g3,b3,e4]@2 ~@2 [g3,b3,e4]@2 ~@2 [g3,b3,e4] ~ [g3,b3,e4] ~ [g3,b3,e4] ~@3",
  Z: "~@2 [g3,b3,e4] ~@5 [g3,b3,e4] ~ e3@2 [g3,b3,e4] ~@3", AA: "[[g3,e4,b4]@5 ~@3]/2",
})).s("gm_piano").gain(0.56).pan(0.6)

// chords · piano · soft notes · Em
const piano_soft = note(`<
  ~@51
  [~@10 [g3,e4,b4] ~@5]
  [[g3,b3,e4]@2 ~@2 [g3,b3,e4]@2 ~@2 [g3,b3,e4] ~ [g3,b3,e4] ~ [g3,b3,e4] ~@3]
  [~@2 [g3,b3,e4] ~@5 [g3,b3,e4] ~ e3@2 [g3,b3,e4] ~@3]
>`).s("gm_piano").gain(0.16).pan(0.6)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@2 A@2 ~@2 A@7 ~@2 A@5 ~@3 A ~@2 A@7 ~@2 A@5 ~@2 A@6 ~@5 B>".pickRestart({
  A: "~@3 x ~@4", B: "x ~@3 x!2 ~@2",
})).gain(0.24)

// drums · rim
const rim = s("rim").struct("<A B C@2 ~@2 C@7 ~@2 C@5 D ~@2 C ~@2 C@7 ~@2 C@5 D ~ C@6 ~@2 C@2 ~@2>".pickRestart({
  A: "x!2", B: "x!4", C: "~ x ~ x", D: "~ x ~@2",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@5 [~@8 x ~ x!3 ~ x ~] ~@19 [~@3 x] ~@23 [~@3 x] ~@3 [~@3 x]>").gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@2 B@2 A@7 B ~ C@3 ~ C ~@3 A B D A@2 E A@4 B@2 C@3 ~ C ~@2 A@2 E A@3 B A F@2 ~@2
>`.pickRestart({
  A: "x!4", B: "x", C: "~ x ~ x", D: "x ~ x ~ x!3 ~", E: "x ~@3 x ~@2 x!2 ~@3 x ~@3", F: "x!8",
})).gain(0.48)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 A@2 B@2 A@7 B ~@9 C B ~ A@2 D C E A D B ~@8 A@2 D A@3 B D ~@2 F G
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~@6", C: "~ x ~@3 x ~ x", D: "~ x ~ x ~ x ~@2", E: "~ x!2 ~@3 x ~@3 x ~@3 x ~",
  F: "x!2 ~@6", G: "x!7 ~",
})).gain(0.16)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@2 ~@7 A ~@10 A ~@8 A ~@14 A B ~@4>".pickRestart({
  A: "~ x ~@2", B: "~@7 x",
})).gain(0.64)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@23 A ~@4 B A ~@2 B ~@11 B ~@7 C B>".pickRestart({
  A: "~@3 x ~@4", B: "~@7 x", C: "~ x ~@2",
})).gain(0.4)

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

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct(`<
  ~@3 A ~@3 B ~ B ~ B ~@11 B ~@3 B ~ A ~ B ~@11 B ~ B ~ A ~ C ~ D E F
>`.pickRestart({
  A: "~@5 x ~ x", B: "~@5 x ~@2", C: "~@9 x ~@6", D: "~@4 x!4", E: "x ~ x ~@5 x ~ x!3 ~ x ~", F: "~@2 x!8 ~ x ~ x!3",
})).gain(0.16)

// drums · ride
const ride = s("rd").struct("<~@2 A ~@3 A ~@7 A@2 ~@9 A@2 ~@7 A@2 ~@5 A@2 ~@6 A@2 ~@2 A>".pickRestart({
  A: "x",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@15 A B A C A D ~@14 A B A C A D ~@13>".pickRestart({
  A: "x ~ x ~ x!3 ~", B: "x!2 ~ x!2 ~ x ~", C: "x!5 ~ x ~", D: "x!3 ~ x ~ x ~",
})).gain(0.64)

stack(
  distortion_guitar, electric_guitar_muted, bass, bass_soft, piano, piano_soft, kick, kick_soft, rim, snare, hihat,
  hihat_soft, open_hat, open_hat_soft, high_tom, high_tom_soft, ride, tambourine
)

More by Guess Who