Strudelify

Bad Piggies Theme

Ilmari Hakkola

KeyE♭ majorTempo155 bpm
0:00/0:00
// Bad Piggies Theme — Ilmari Hakkola
// 155 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5026992; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 56 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(155/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 B C D A B C D E F G H E I G J K A B C D L M N O P Q R S T I G U V W X Y Z AA AB AC L AD N AE L AF N O AG AH AI AJ@2
  AK@2
>`.pickRestart({
  A: "bb4 ~ [g3,c4]@2 [g2,c5]@2 ~ bb4 [c3,c5]@2 [g3,c4]@2 c3@2 [g3,c4]@2, c3 ~@2 [g3,c4] ~@4, ~ c5@3 ~@6 bb4 ~ ab4 ~ g4 ~", // C5 C C5
  B: "bb4 ab4 ~ f4 bb2@2 [bb3,eb4,g4]@2 [eb3,g4]@2 [bb3,eb4]@2 bb2@2 [bb3,eb4,g4]@2, eb3@2 [bb3,eb4,g4]@2 eb4 ~ f4 ~@3 g4@4 ~@2", // Eb Eb5 Eb
  C: "ab4 ~ [c4,f4,ab4]@2 [c3,bb4]@2 ab4!2 [f3,g4]@2 [c4,f4,ab4]@2 c3@2 [c4,f4,ab4]@2, f3@2 ~@4 [c4,f4]@2 ~@4 eb4 ~@3, ~ bb4@3 ~@12", // Fm C7 Fsus2 Fm F5
  D: "g4 eb4 c4 eb4 f3@2 [f4,bb4,d5]@2 g3@2 [d4,g4,b4]@2 [d3,d4]@2 [d4,g4,b4]@2, bb3@2 [f4,bb4,d5]@2 g4 ~@3 eb4@4 ~@4", // Bb G D G Bb
  E: "ab3@2 c4 d4 eb3@2 [eb4,ab4,c5]@2 [ab3,f4]@2 [eb4,ab4,c5]@2 eb3@2 [eb4,ab4,c5]@2, ~@2 [eb4,ab4,c5]@2 eb4 ~ c4 ~@5 d4 ~ c4 ~", // Ab Db Ab
  F: "bb3@2 ~ ab3 f3@2 [f4,bb4,d5]@2 ~@2 [f4,bb4,d5]@2 ~@2 [f4,bb4,d5]@2, ~@2 [f4,bb4,d5]@2 g3 ~ ab3 ~ bb3@4 f3@4", // Bb
  G: "ab3@2 d3 eb3 eb3@2 [eb4,ab4,c5]@2 [g3,ab3]@2 [eb4,ab4,c5]@2 eb3@2 [eb4,ab4,c5]@2, ~@2 [eb4,ab4,c5]@2 f3 ~ d3 ~@3 f3 ~@3 d3 ~", // Ab Abmaj7 Ab
  H: "g3 [d4,g4,b4] d3 [d4,g4,b4] g3 [d4,g4,b4] ~ [d4,g4,b4], eb3!2 d3!2", // G
  I: "~ ab3 g3 ab3 f3@2 [f4,bb4,d5]@2 eb3@2 [bb3,eb4,g4]@2 bb2@2 [bb3,eb4,g4]@2, bb3@2 [f4,bb4,d5]@2 bb3 ~ ab3 ~ g3@4 eb3@4", // Bb Eb Bb
  J: "d3 ~ eb3@2 d3 ~ eb3@2 d3 ~ eb3@2 d3 ~ eb3@2, [g3,d4,g4]@15 ~", // G5
  K: "~ ab3 [g3,ab3] ab3 ~ ab3 [g3,ab3] ab3 ~ [c4,a4] [d4,b4] [eb4,c5] [f4,d5] [g4,eb5] [ab4,b4,f5] [b4,g5], [g3,g4] ab4 [g3,g4] ab4 [g3,g4] [ab3,ab4] [a3,a4] b3", // Abmaj7 F G Cm Dm Cm Fdim Em …
  L: "c4@2 [eb4,g4]@2 [g3,c5]@2 ~ bb4 [c4,c5]@2 [eb4,g4]@2 g3@2 [eb4,g4]@2, c5@4 ~@2 [eb4,g4]@2 ~@2 bb4 ~ ab4 ~@3", // Eb C5 C Eb
  M: "bb4 ab4 ~ f4 bb3@2 [g4,bb4]@2 [eb4,g4]@2 bb4@2 bb3@2 [g4,bb4]@2, eb4@2 [g4,bb4]@2 eb4 ~ f4 ~@3 g4@4 ~@2", // Gm Eb Gm
  N: "bb3@2 [d4,f4]@2 [f3,bb4]@2 ~ ab4 [bb3,g4]@2 [d4,f4]@2 f3@2 [d4,f4]@2, bb4@4 ~@2 [d4,f4]@2 ~@4 eb4 ~@3", // Dm Bb5 Eb Dm
  O: "g4 eb4!3 eb3@2 [c4,eb4]@2 g3@2 [b3,d4]@2 [d3,d4]@2 [b3,d4]@2, ab3@2 c4@2 g4 ~ f4 ~ eb4@4 ~@4", // Cm Bm D Bm
  P: "ab3@2 c4 [d4,d5] [eb4,eb5] ~ [eb4,ab4,c5]@2 [ab3,f4,f5]@2 [eb4,ab4,c5]@2 [d4,d5] ~ [eb4,ab4,c5]@2, ~@2 [eb4,ab4,c5]@2 eb3@2 c4 ~@3 eb5 ~ eb3@2 c4 ~", // D Eb Ab Db Ab D Ab
  Q: "[bb3,bb4]@2 ~ [ab3,ab4] [g3,g4] ~ [f4,bb4,d5]@2 bb4@2 [f4,bb4,d5]@2 f4@2 [f4,bb4,d5]@2, ~@2 [f4,bb4,d5]@2 f3@2 [ab3,ab4] ~ bb3@4 f3@4", // Bb Ab G Bb Ab
  R: "ab3@2 [d3,d4,eb4] [eb3,eb4] [f3,f4] ~ [eb4,ab4,c5]@2 [g3,ab3,g4]@2 [eb4,ab4,c5]@2 eb3@2 [eb4,ab4,c5]@2, ~@2 [ab4,c5]@2 eb3@2 [d3,d4] ~@3 [f3,f4] ~ eb4 ~ [d3,d4] ~", // Ebmaj7 Eb F Ab Abmaj7 Ab D F …
  S: "g3@2 [d4,g4,b4]@2 d3@2 [d4,g4,b4]@2 [d3,g3]@2 c3 d3 eb3 g3 [c4,d4] d4, [eb3,eb4]@2 [eb3,eb4]@2 ~ [d4,g4,b4] d3 [g4,b4]", // G G5 Csus2 Eb G
  T: "[ab3,eb4]@2 c4 d4 eb3@2 [eb4,ab4,c5]@2 [ab3,f4]@2 [eb4,ab4,c5]@2 eb3@2 [eb4,ab4,c5]@2, ~@2 [eb4,ab4,c5]@2 eb4 ~ c4 ~@5 d4 ~ c4 ~", // Ab5 Ab Db Ab
  U: "~ ab3 g3 ab3 g3 ab3 g3 ab3 ~ a3 b3 c4 [d3,d4]@2 [d4,g4,b4]@2, g3 [d4,g4,b4] d3 [d4,g4,b4] g3 [d4,g4,b4] ~@2", // D G
  V: "~ g3 eb3 g3 [g3,c4] g3 eb3 g3 ~ g3 eb3 g3 [g3,c4] g3 eb3 g3, c4 [eb4,g4] ~ [eb4,g4] c4 [eb4,g4] ~ [eb4,g4]", // C5 Eb
  W: "bb3 g3 eb3 g3 ~ g3 eb3 g3 bb3 g3 eb3 g3 ~ g3 eb3 g3, eb4 [g4,bb4] bb3 [g4,bb4] eb4 [g4,bb4] bb3 [g4,bb4]", // Gm
  X: "~ f3 d3 f3 [f3,bb3] f3 d3 f3 ~ f3 d3 f3 [f3,bb3] f3 d3 f3, bb3 [d4,f4] ~ [d4,f4] bb3 [d4,f4] ~ [d4,f4]", // Bb5 Dm
  Y: "[ab3,c4] ab3 eb3 ab3 c4 ab3 eb3 ab3 [g3,c4] g3 d3 g3 [d3,b3]@2 [b3,d4]@2, ~ [c4,eb4] eb3 [c4,eb4] ~ [b3,d4] ~@2", // Ab C5 G Bm Cm Bm
  Z: "~ g2 eb2 g2 [g2,c3] g2 eb2 g2 ~ g2 eb2 g2 [g2,c3] g2 eb2 g2, c3 g3 ~ g3 c3 g3 ~ g3", // C5
  AA: "bb2 g2 eb2 g2 ~ g2 eb2 g2 bb2 g2 eb2 g2 ~ g2 eb2 g2, eb3 bb3 bb2 bb3 eb3 bb3 bb2 bb3",
  AB: "~ f2 d2 f2 [f2,bb2] f2 d2 f2 ~ f2 d2 f2 [f2,bb2] f2 d2 f2, bb2 f3 ~ f3 bb2 f3 ~ f3", // Bb5
  AC: "[ab2,c3] ab2 eb2 ab2 c3 ab2 eb2 ab2 [g2,c3] g2 d2 g2 d2@2 d3@2, ~ eb3 eb2 eb3 ~ d3 b2@2", // Ab C5
  AD: "bb4 ab4 ~ f4 bb3@2 [g4,bb4]@2 [eb4,g4]@2 [g4,bb4,bb5]@2 bb3@2 [g4,bb4]@2, eb4@2 [g4,bb4]@2 eb4 ~ f4 ~@5 g5@4", // Gm Eb Gm
  AE: "g4 eb4!3 eb3@2 [c4,eb4]@2 g3@2 [b3,d4]@2 [d3,d4]@2 g4 [bb4,b4], ab3@2 c4@2 g4 ~ f4 ~ eb4@4 ~@2 [b3,d4]@2", // Cm Bm D Bmaj7 Bm
  AF: "bb4 ab4 ~ f4 bb3@2 [g4,bb4]@2 [eb4,g4]@2 [g4,bb4,g5]@2 bb3@2 [g4,bb4]@2, eb4@2 [g4,bb4]@2 eb4 ~ f4 ~@5 bb5@4", // Gm Eb Gm
  AG: "[c3,c4,c5]@4 [bb2,bb3,bb4]@4 [ab2,ab3,ab4]@4 ~ [g2,g3,g4]@3", // C Bb Ab G
  AH: "~ [f2,f3,f4]@5 ~ [eb2,eb3,eb4]@5 [d2,d3,d4]@4", AI: "~ [c2,c3,c4]@5 ~ [bb1,bb2,bb3]@5 [ab1,ab2,ab3]@4",
  AJ: "[~@2 [g1,g2,g3]@5 [f1,f2,f3]@5 [eb1,eb2,eb3]@10 ~ [d1,d2,d3]@9]/2", // G F Eb D
  AK: "[~@2 [c1,eb1,g1,c2,eb2,g2,c3]@20 ~ [c1,eb1,g1,c2,eb2,g2,c3,eb3,g3]@2 ~@7]/2", // Cm
})).s("gm_piano").gain(0.45)

// chords · piano
const piano_2 = note(`<
  A B C D A B C D E F E G E H E I J A B C D K L M N E F E G E H E G K L M N O P Q R K L M N K L M N ~@7
>`.pickRestart({
  A: "c2 [g2,c3] g1 [g2,c3] c2 [g2,c3] c2 [g2,c3]", // C5
  B: "eb2 [bb2,eb3,g3] bb1 [bb2,eb3,g3] eb2 [bb2,eb3,g3] bb1 [bb2,eb3,g3]", // Eb
  C: "f2 [c3,f3,ab3] c2 [c3,f3,ab3] f2 [c3,f3,ab3] c2 [c3,f3,ab3]", // Fm
  D: "bb2 [f3,bb3,d4] f2 [f3,bb3,d4] g2 [d3,g3,b3] d2 [d3,g3,b3]", // Bb G
  E: "ab2 [eb3,ab3,c4] eb2 [eb3,ab3,c4] ab2 [eb3,ab3,c4] eb2 [eb3,ab3,c4]", // Ab
  F: "bb2 [f3,bb3,d4] f2 [f3,bb3,d4] bb2 [f3,bb3,d4] f2 [f3,bb3,d4]", // Bb
  G: "g2 [d3,g3,b3] d2 [d3,g3,b3] g2 [d3,g3,b3] d2 [d3,g3,b3]", // G
  H: "bb2 [f3,bb3,d4] f2 [f3,bb3,d4] eb2 [bb2,eb3,g3] bb1 [bb2,eb3,g3]", I: "[g2,d3,g3]@15 ~",
  J: "[g2,g3] [ab2,ab3] [g2,g3] [ab2,ab3] [g2,g3] [ab2,ab3] [a2,a3] [b2,b3]", // G Ab G Ab G Ab A B
  K: "c3 [eb3,g3] g2 [eb3,g3] c3 [eb3,g3] g2 [eb3,g3]", L: "eb3 [g3,bb3] bb2 [g3,bb3] eb3 [g3,bb3] bb2 [g3,bb3]",
  M: "bb2 [d3,f3] f2 [d3,f3] bb2 [d3,f3] f2 [d3,f3]", N: "ab2 [c3,eb3] eb2 [c3,eb3] g2 [b2,d3] d2 [b2,d3]",
  O: "c2 g2 g1 g2 c2 g2 g1 g2", P: "eb2 bb2 bb1 bb2 eb2 bb2 bb1 bb2", Q: "bb1 f2 f1 f2 bb1 f2 f1 f2",
  R: "ab1 eb2 eb1 eb2 g1 d2 d1 d2",
})).s("gm_piano").gain(0.4)

stack(piano, piano_2)