Strudelify
KeyG majorTempo138 bpm
0:00/0:00
// Eat It — "Weird Al" Yankovic
// 138 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/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 pick · "T"
const bass = note(`<
  ~@13 A@5 B@4 C D C D E D C D C D C D E D C F@3 G@8 H@2 C D C D E D C D C D C D E D C F@3 G@8 I@4 H@2 J K J K J K J K J
  K J K J K J K C D C D E D C D C D C D E D C F@3 G@8 I@8 L@4
>`.pickRestart({
  A: "[~@7 e1@2 g1 b1 g2 e2@2 ~ f#2@2 e2 d2 ~ d2 ~@2 e1@2 g1 b1 g2 e2@2 ~ f#2@2 e2 d2 ~@4 e1]/5",
  B: "[~ g1 b1 g2 e2@2 ~ f#2@2 e2 c#2 ~ d2 ~@2 e1@2 g1 b1 g2 e2@2 ~ f#2@2 e2 d2 ~@5]/4", C: "~ e2!2 ~ e2 ~@2 d2",
  D: "d2 ~ d2 ~@5", E: "~ c2!2 ~ c2 ~@2 d2", F: "[d2 ~ d2 ~@4 e1@2 g1 b1 g2 e2@2 ~ f#2@2 e2 d2 ~ d2 ~@2 e1]/3",
  G: "[~@2 g1@2 b1@2 g2@2 e2@3 ~@3 f#2@4 e2@2 d2@2 ~@8 e1@4 g1@2 b1@2 g2@2 e2@3 ~@3 f#2@4 e2@2 d2@2 ~@2 d2@2 ~@4 e1@4 g1@2 b1@2 g2@2 e2@3 ~@3 f#2@4 e2@2 d2@2 ~@8 e1@4 g1@2 b1@2 g2@2 e2@4 ~@2 f#2@4 e2@2 d2@2 ~@2 d2@2 ~@4 e1@2, ~@56 g2 ~@71]/8",
  H: "[~@2 g1@2 b1@2 g2@2 e2@3 ~@3 f#2@4 e2@2 d2@2 ~@10]/2",
  I: "[~@2 g1@2 b1@2 g2@2 e2@3 ~@3 f#2@4 e2@2 d2@2 ~@8 e1@4 g1@2 b1@2 g2@2 e2@4 ~@2 f#2@4 e2@2 d2@2 ~@2 d2@2 ~@4 e1@2]/4",
  J: "~ e1!2 ~ e1 ~@2 e1", K: "e1 ~ e1 ~@5", L: "[~@2 g1@2 b1@2 g2@2 e2@3 ~@3 f#2@4 e2@2 d2@2 ~@4 d1@3 ~ e1@34]/4",
})).s("gm_electric_bass_pick").gain(0.38)

// chords · pad poly · "R"
const pad_poly = note(`<
  ~@22 A B A B C B A B D B A B C B A B A B A B A B A B A B A B A B A B C B A B D B A B C B A B A B A B A B A B A B A B A
  B A B ~@16 A B A B C B A B D B A B C B A B A B A B A B A B A B A B A B A B A B A B E ~
>`.pickRestart({
  A: "[b3,e4,g4]", B: "[a3,d4,f#4]", C: "[g3,c4,e4]", D: "[b3,e4,g4], f#4 ~@15", E: "[b3,e4,g4]@3 ~@13",
})).s("gm_pad_poly").gain(0.18)

// chords · distortion guitar · "I"
const distortion_guitar = note(`<
  ~@13 A@5 B C D E F G F G H G I G F G F G H G I J@8 K@5 F G F G H G I G F G F G H G I J@8 L@8 M ~@8 N O D P N O D P F G
  F G H G I G F G F G H G I J@8 L@8 Q@7
>`.pickRestart({
  A: "[~@14 e3@4 g3@2 b3@2 g4@2 e4@3 ~@3 f4@4 e4@2 d4@2 ~@2 d4@2 ~@4 e3@4 g3@2 b3@2 g4@2 e4@4 ~@2 f4@4 e4@2 d4@2 ~@8 [b2,e3]!2]/5", // E5
  B: "[b2,e3]!4 [b3,e4,g4]@2 [b2,e3]!2 [b3,e4,g4]@2 [b3,e4]@3 [a3,a#3,d4,d#4] [b2,e3]!2", // E5 Em E5 Em E5 D#maj7 E5
  C: "[a3,d4,f#4]@2 [b2,e3]!2 [a3,d4,f#4]@2 [a3,d4]@7 [g#3,c#4] [f#3,g3,c4] ~", // D E5 D D5 C#5 C
  D: "~@2 [b2,e3]!2 [b3,e4,g4]@2 [b2,e3]!2 [b3,e4,g4]@2 [b3,e4]@3 [a3,a#3,d#4,f#4] d4 [b2,e3]", // E5 Em E5 Em E5 D#m E5
  E: "[a3,d4,f#4]@2 [b2,e3]!2 [a3,d4,f#4]@2 a3@7 ~@3, ~@6 d4@5 ~@5", F: "~ [e2,b2,e3]!2 ~ [e2,b2,e3] ~@2 [d2,a2,d3]",
  G: "[d2,a2,d3] ~ [d2,a2,d3] ~@5", H: "~ [g2,c3]!2 ~ [c2,g2,c3] ~@2 [d2,a2,d3], ~ c2@2 ~@5",
  I: "~ [b2,e3]!2 ~ [e2,b2,e3] ~@2 [d2,a2,d3], ~ e2@2 ~@5", // E5 D5
  J: "[[d2,a2,d3]@2 ~@2 [d2,a2,d3]@2 ~@8 e3@4 g3@2 b3@2 g4@2 e4@3 ~@3 f4@4 e4@2 d4@2 ~@2 d4@2 ~@4 e3@4 g3@2 b3@2 g4@2 e4@4 ~@2 f4@4 e4@2 d4@2 ~@8 e3@4 g3@2 b3@2 g4@2 e4@3 ~@3 f4@4 e4@2 d4@2 ~@2 d4@2 ~@4 e3@4 g3@2 b3@2 g4@2 e4@4 ~@2 f4@2]/8", // D5
  K: "[~@2 e4@2 d4@2 ~@8 e3@4 g3@2 b3@2 g4@2 e4@3 ~@3 f4@4 e4@2 d4@2 ~@2 d4@2 ~@4 e3@4 g3@2 b3@2 g4@2 e4@4 ~@2 f4@4 e4@2 d4@2 ~@10]/5",
  L: "[~@2 e4@2 d4@2 ~@8 e3@4 g3@2 b3@2 g4@2 e4@3 ~@3 f4@4 e4@2 d4@2 ~@2 d4@2 ~@4 e3@4 g3@2 b3@2 g4@2 e4@4 ~@2 f4@4 e4@2 d4@2 ~@8 e3@4 g3@2 b3@2 g4@2 e4@3 ~@3 f4@4 e4@2 d4@2 ~@2 d4@2 ~@4 e3@4 g3@2 b3@2 g4@2 e4@4 ~@2 f4@2]/8",
  M: "~ e4 d4 ~@5", N: "~@2 [b2,e3]!2 [b3,e4,g4]@2 [b2,e3]!2 [b3,e4,g4]@2 [b3,e4]@3 [a3,a#3,d4,d#4] [b2,e3]!2",
  O: "[a3,d4,f#4]@2 [b2,e3] [b2,e3,a3] [d4,f#4]@2 [a3,d4]@7 [g3,g#3,c4,c#4] f#3 ~", // D E5 Esus4 D D5 C#maj7
  P: "[a3,d4,f#4]@2 [b2,e3] [b2,e3,a3] [d4,f#4]@2 a3@7 ~@3, ~@6 d4@5 ~@5", // D E5 Esus4 D
  Q: "[~@2 e4@2 d4@2 ~@8 e3@4 g3@2 b3@2 g4@2 e4@3 ~@3 f4@4 e4@2 d4@2 ~@2 d4@2 ~@4 e3@4 g3@2 b3@2 g4@2 e4@4 ~@2 f4@4 e4@2 d4@2 ~@4 d3@3 ~ e3@32 ~@2]/7",
})).s("gm_distortion_guitar").gain(0.16).pan(0.8)

// other · overdriven guitar · "E"
const overdriven_guitar = note("<~@97 A@4 B@2 C@3 D@3 E F G@2 H I@2 ~@20>".pickRestart({
  A: "[~@12 b2@16 d3@10 a5@6 d6@8 [d5,e5] f#5 [f#5,g5] e5 [d5,e5] f#5 g5 [e5,f#5] [d5,e5] f#5 [f#5,g5] e5]/4", // Dsus2 Gmaj7 Dsus2 Esus2 Dsus2 Gmaj7
  B: "[[a4,d5] e5 [e5,f#5] d5 [a4,d5] e5 f#5 [d5,e5] b3@11 ~ [e5,f#5] g5 [g5,b5] f#5 [e5,f#5] g5 b5 [f#5,g5] [e5,f#5] g5 [g5,b5] f#5]/2", // D5 Esus2 D5 Dsus2 Esus2 G Esus2 Gmaj7 …
  C: "[[d5,e5] f#5 [f#5,g5] e5 [d5,e5] f#5 a5@5 ~ d6@8 ~@2 a4@5 g4 f#2@8 f6@4 d4@7 ~, ~@6 g5 ~@4 g5@2 ~@35]/3", // Dsus2 Gmaj7 Dsus2
  D: "[~@6 d4@4 a3 ~ d4@2 a3 g3@3 d4@3 ~ [g3,a3]@2 a5@10 d5@2 e5@2 d5 ~ e5 ~ g5@5 g4, ~@11 g3@2 ~@35]/3", // Gsus2
  E: "a4@3 g4 a4@10 c5 e5",
  F: "~ e5 [e5,g5] c5 [g4,c5] e5 g5 [c5,e5] [g4,c5] e5 [e5,g5] c5 [g4,c5] e5 a5 [d5,f#5], [c5,g5] ~@7", // Em C5 C C5 Em C5 D C5
  G: "[[d5,a5] a5 [d5,a5] d5@5 g2@2 e2@2 ~@7 f#5!4 g5!7 [g5,a5] a5, ~@12 e3@2 d#5@7 ~@11, ~@13 d#4@7 ~@12, ~@13 d#3@2 ~@17]/2", // D5 Gsus2
  H: "a5!2 [a5,a#5] b5!6 c6 c#6 d6!2 d#6!2 [d#6,e6]", // A#maj7 Emaj7
  I: "[e6!8 e6@4 ~ d#6@2 b5 ~@3 g#3@3 f3@4 ~@6, ~@12 b3@7 ~@13, ~@12 e4@3 ~@17]/2",
})).s("gm_overdriven_guitar").gain(0.36).pan(0.4)

// other · overdriven guitar · "V"
const overdriven_guitar_2 = note("<~@13 A@8 B ~@15 A@8 C@5 ~@15 A@8 D@8 E ~@31 A@8 F@8 G@7>".pickRestart({
  A: "[~@14 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@2 ~@2 d3@3 ~@3 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@3 ~@7 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@3 ~ d3@3 ~@3 e2@4 g2@2 b2@2 g3@2 e3@4 ~@2 f#3@2, ~@30 e3 ~@31 e3 ~@31 e3 ~@23 e3 ~@7 e3 ~]/8", // Em
  B: "~ e3 d3 ~@5",
  C: "[~@2 e3@2 d3@2 ~@8 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@2 ~@2 d3@3 ~@3 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@3 ~@9, ~@30 e3 ~@31 e3 ~@17]/5", // Em
  D: "[~@2 e3@2 d3@2 ~@8 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@2 ~@2 d3@3 ~@3 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@3 ~@7 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@2 ~@2 d3@3 ~@3 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@2, ~@30 e3 ~@31 e3 ~@31 e3 ~@31 e3 ~]/8", // Em
  E: "~@2 e3@2 d3@3 ~@9",
  F: "[~@2 e3@2 d3@2 ~@8 e2@4 g2@2 b2@2 g3@2 e3@4 ~@2 f#3@4 e3@2 d3@2 ~@2 d3@3 ~@3 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@3 ~@7 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@2 ~@2 d3@3 ~@3 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@2, ~@22 e3 ~@7 e3 ~@31 e3 ~@31 e3 ~@31 e3 ~]/8", // Em
  G: "[~@2 e3@2 d3@3 ~@7 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@2 ~@2 d3@3 ~@3 e2@4 g2@2 b2@2 [e3,g3]@2 e3@4 ~@2 f#3@4 e3@2 d3@3 ~@7 e2@32 ~@2, ~@30 e3 ~@31 e3 ~@49]/7", // Em
})).s("gm_overdriven_guitar").gain(0.19).pan(0.3)

// other · electric guitar muted · "E"
const electric_guitar_muted = note(`<
  ~@22 A B A B C B A B D E D E D E D F ~@12 D E D E D E D F D E D E D E D F ~@16 G H G H G H G H G H G H G H G H ~@38
>`.pickRestart({
  A: "~@2 e2 ~ e2@2 ~@2 e2@2 ~@4 d2 ~", B: "d2 ~ d2 ~@5", C: "~@2 c2@2 c2@2 ~@2 c2@2 ~@4 d2 ~",
  D: "~@2 e3 ~ d3 ~ e3 ~ d3 ~ e3 ~ d3 ~ e3 ~", E: "~@2 e3 ~ d3 ~ e3 ~ g3 ~ e3 ~ d3 ~ e3 ~", F: "~@2 e3 ~ d3 ~ e3 ~@9",
  G: "~@2 [e2,b2,e3] ~ [e2,b2,e3] ~@3 [e2,b2,e3] ~@5 [e2,b2,e3] ~", H: "[e2,b2,e3] ~@3 [e2,b2,e3] ~@11",
})).s("gm_electric_guitar_muted").gain(0.22)

// bass · pad poly · "R"
const bass_2 = note("<A@2 B@2 A@2 C ~@75 D E@2 F G H G F@2 I D G J H K F L ~@37>".pickRestart({
  A: "g#3", B: "f3", C: "d#3", D: "e2@2 e2!2 e2@2 e2!2 e2@2 e2!2 e2@2 e2!2",
  E: "[e2@2 e2!2 e2@2 e2!6 e2@2 e2 e2@3 e2 e2@3 e2!2 e2@2 e2!2 e2@2 e2!2]/2", F: "e2@2 e2!2 e2@2 e2!6 e2@2 e2!2",
  G: "e2@2 e2!2 e2@2 e2!2 e2@2 e2!6", H: "e2!4 e2@2 e2!2 e2@2 e2!2 e2@2 e2!2", I: "e2@2 e2!14",
  J: "e2!4 e2@2 e2!2 e2@2 e2!2 e2@2 e2@2", K: "e2@2 e2!2 e2@2 e2!10", L: "e2@3 ~@13",
})).s("gm_pad_poly").gain(0.35).pan(1)

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

// drums · snare
const snare = s("sd").struct("<~@6 [~ x ~ x]!7 [~@2 x ~@2 x!2 ~] [~ x ~ x]!119 [~@2 x ~@2 x!2 ~] ~@2>").gain(0.36)

// drums · clap
const clap = s("cp").struct("<~@6 [~@3 x]!128 ~@2>").gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@6 [~@3 x]!89 [~@5 x ~ x!3 ~ x!3 ~ x] [x ~@2 x] [~@3 x]!37 ~@2>").gain(0.41)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@14 A B C B D E A B F@2 G H A I D C ~ J ~ K ~ C ~@2 A B C B D E A B F@2 G H A I D C ~ J ~ K ~ C ~@2 C ~@2 C A B C B D
  E A B F A B C B D E A B F A B C B D E A B F A B C B D E A B F A B C B D E A B F A B C B D E A B F A B C B D E A B F A
  B C B D ~@2
>`.pickRestart({
  A: "~@3 x ~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~@2", D: "~ x ~ x ~@4", E: "~@3 x ~ x ~@2",
  F: "~ x ~ x ~@3 x", G: "~ x ~@3 x ~ x", H: "~@5 x ~ x", I: "~ x ~@5 x", J: "~@5 x ~@2", K: "~@7 x",
})).gain(0.14)

// drums · crash
const crash = s("cr").struct("<~@14 A ~@15 A ~@7 A ~@19 A ~@7 A ~@39 A ~@7 A ~@18 B ~@2>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.32)

// drums · ride
const ride = s("rd").struct(`<
  ~@13 A B C@15 B C@7 B C@26 D B C@8 B C@8 B C@8 B C@8 B C@8 B C D C@6 B C@8 B C@4 E ~
>`.pickRestart({
  A: "~@7 x", B: "~ x!3", C: "x!4", D: "x ~ x ~ x ~ x!2", E: "x",
})).gain(0.27)

// drums · tambourine
const tambourine = s("tb").struct("<~@6 [~@3 x]!32 [x ~@2 x] [~@3 x]!95 ~@2>").gain(0.36)

// drums · shaker
const shaker = s("sh").struct("<~@12 A B ~@70 C D E F E F ~@4 E F E F ~@38>".pickRestart({
  A: "~ x!2 ~ x ~@2 x", B: "x!2 ~@2", C: "~ x ~ x ~ x ~ x", D: "~ x ~ x ~@4", E: "~ x!2 ~@2 x!3", F: "x ~@2 x!2 ~@3",
})).gain(0.27)

stack(
  bass, pad_poly, distortion_guitar, overdriven_guitar, overdriven_guitar_2, electric_guitar_muted, bass_2, kick, snare,
  clap, low_tom, hihat, hihat_soft, crash, ride, tambourine, shaker
)

More by "Weird Al" Yankovic