Strudelify
KeyE♭ majorTempo198 bpm
0:00/0:00
// ft. — boxoftomatoes
// 198 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/261136; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 72 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(198/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 · "MIDI out #2"
const piano = note(`<
  A@7 B C@2 D@2 E@2 F@2 G H I@2 J K L M@8 N@3 O P@4 Q@3 R S T U V W X Y Z AA AB@5 AC AD@3 AE@3 AF@2 AG@2 AH@4
>`.pickRestart({
  A: "[~@6 [c3,g3,c4]@8 [bb2,f3,bb3]@6 [ab2,eb3,ab3]@14 [ab2,eb3,ab3]@4 [c3,g3,c4]@8 [bb2,f3,bb3]@6 [ab2,eb3,ab3]@7 [ab2,eb3,ab3]@7 [ab2,eb3,ab3]@4 [c3,g3,c4]@8 [bb2,f3,bb3]@6 [ab2,eb3,ab3]@14 [ab2,eb3,ab3]@4 [ab2,eb3,ab3]@4 ~@6]/7", // C5 Bb5 Ab5 C5 Bb5 Ab5 C5 Bb5 …
  B: "~@3 [ab2,eb3,ab3]@2 [ab2,eb3,ab3] [ab2,eb3,ab3]@2", // Ab5
  C: "[[ab2,eb3,ab3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3] [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [g2,d3,g3]@2 [g2,d3,g3] [g2,d3,g3]@2]/2", // Ab5 Bb5 G5
  D: "[[g2,d3,g3]@2 ~@7 g3@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3] [ab2,eb3,ab3]@2, ~@2 c3@3 c4@2 ~ c4@2 ~@6, ~@4 g3@2 eb4@3 ~@7]/2", // G5 Ab5
  E: "[[ab2,eb3,ab3]@2 ~@7 f3@2 [g2,d3,g3]@2 [g2,d3,g3] [g2,d3,g3]@2, ~@2 bb2@3 bb3@2 ~ bb3@2 ~@6, ~@4 f3@2 d4@3 ~@7]/2", // Ab5 G5
  F: "[[g2,d3,g3]@2 ~@7 g3@2 ~@2 c4@3, ~@2 c3@3 c4@2 ~ c4@2 ~ c3@2 ~@3, ~@4 g3@2 eb4@3 ~@3 g3@2 ~@2]/2", // G5
  G: "g3 c3@2 ~@2 bb3@3, ~@3 bb2@2 ~@3, ~@2 g3 ~", H: "g3 bb2@2 ~@2 ab3@3, ~@3 ab2@2 ~@3, ~@2 eb3 ~",
  I: "[eb3 ab2@2 [bb1,bb2]@2 [bb1,bb2]!2 [bb1,bb2]@4 ~@2 eb3@3, ~@11 g2@2 ~@3, ~@6 c3 ~]/2", // Bb
  J: "c3 g2@2 ~@3 d3@2, ~@3 bb1@2 bb2@2 ~, ~@2 f2 ~", K: "bb2 f2@2 ~@3 c3@2, ~@3 ab1@2 ab2@2 ~, ~@2 eb2 ~",
  L: "ab2 eb2@2 ~@3 g3@2, ~@3 eb2@2 eb3@2 ~, ~@2 bb2 ~",
  M: "[eb3 bb2@2 [c2,c3]@3 ~ c4@2 g3@2 [bb1,bb2]@3 ~ bb3@2 g3@2 [ab1,ab2]@3 ~ ab3@2 eb3 [eb2,eb3]@2 [eb2,eb3]@2 [eb2,eb3] [eb2,eb3]@2 [eb2,eb3]@2 c3@3 ~ c4@2 g3@2 [bb1,bb2]@3 ~ bb3@2 g3@2 ~@2 ab3@2 ~@2 bb3@2 ~@3 g3@2, ~@6 g3@2 ~@6 g3@2 ~@6 eb3@2 ~@14 g3@2 ~@6 g3@2 ~@3 ab2@2 ~@2 bb2@2 ~@2 eb2@2 eb3@2 ~, ~@26 eb3 ~ f3 ~ bb2 ~]/8", // C Bb Ab Eb Bb
  N: "[~ bb2@2 [c2,c3]@3 ~ c4@2 g3@2 [bb1,bb2]@3 ~ bb3@2 g3@2 ~@3 g3@2, eb3@2 ~@4 g3@2 ~@6 g3@2 ~@3 eb2@2 eb3@2 ~, ~@10 bb2 ~]/3", // C Bb
  O: "~ bb2@2 ~@3 d4@2, eb3@2 ~ bb2@2 bb3@2 ~, ~@2 f3 ~",
  P: "[~ f3@2 [c2,c3]@3 ~ c4@2 g3@2 [bb1,bb2]@3 ~ bb3@2 g3@2 ~@2 ab3@2 ~@2 bb3@2 ~@3 g3@2, bb3@2 ~@4 g3@2 ~@6 g3@2 ~@3 ab2@2 ~@2 bb2@2 ~@2 eb2@2 eb3@2 ~, ~@10 eb3 ~ f3 ~ bb2 ~]/4", // C Bb
  Q: "[~ bb2@2 [c3,g3,c4]@4 [bb2,f3,bb3]@3 [ab2,eb3,ab3]@7 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 ~@3, eb3 ~@11]/3", // C5 Bb5 Ab5
  R: "~@5 ab3@3, ~@3 ab2@2 ~@3, ~@2 eb3 ~", S: "~ ab2@2 ~@2 bb3@3, eb3@2 ~ bb2@2 ~@3, ~@2 f3 ~",
  T: "~ bb2@2 ~@3 bb3@2, f3@2 ~ g2@2 g3@2 ~, ~@2 d3 ~", U: "~ d3@2 ~@3 eb3@2, g3@2 ~ c2@2 c3@2 ~, ~@2 g2 ~",
  V: "~ g2@2 ~@3 c3@2, c3@2 ~ ab1@2 ab2@2 ~, ~@2 eb2 ~", W: "~ eb2@2 ~@3 d3@2, ab2@2 ~ bb1@2 bb2@2 ~, ~@2 f2 ~",
  X: "~ f2@2 ~@3 eb3@2, bb2@2 ~ c2@2 c3@2 ~, ~@2 g2 ~", Y: "~ g2@2 ~@2 bb2@3, c3@2 ~ bb1@2 ~@3, ~@2 f2 ~",
  Z: "~ f2@2 ~@3 c3@2, bb2@2 ~ ab1@2 ab2@2 ~, ~@2 eb2 ~", AA: "~ eb2@2 ~@2 bb2@3, ab2@2 ~ bb1@2 ~@3, ~@2 f2 ~",
  AB: "[f2@2 ab2@2 ~@3 bb2@2 ~ d2@2 ~@3 eb3@2 ~ g2 [ab1,ab2]@3 [ab1,ab2] [ab1,ab2]@2 [ab1,ab2]@2 [bb1,bb2]@3 [bb1,bb2] [bb1,bb2]@2 [bb1,bb2]@2 ~@3 eb3@2, ~@4 g1@2 g2@2 ~ g2@2 ~@2 g2@2 ~@20 c2@2 c3@2 ~, ~@5 d2@2 ~@5 c2@2 c3@2 ~ c3@2 ~@17 g2@2 ~@2]/5", // Ab Bb
  AC: "~ g2@2 ~@3 eb3@2, c3@2 ~ c2@2 c3@2 ~, ~@2 g2 ~",
  AD: "[~ g2@2 [ab2,eb3,ab3]@3 [ab2,eb3,ab3] [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 [bb2,f3,bb3]@3 [bb2,f3,bb3] [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~@3 eb4@2, c3@2 ~@17 c3@2 c4@2 ~, ~@10 g3 ~]/3", // Ab5 Bb5
  AE: "[~ g3@2 ~@5 g3@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3] [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3] [bb2,f3,bb3]@2 [bb2,f3,bb3]@2, c4@2 ~ c3@2 c4@4 ~@15, ~@2 g3 ~@9]/3", // Ab5 Bb5
  AF: "[[bb2,f3,bb3]@2 [g2,d3,g3]@2 [g2,d3,g3] [g2,d3,g3]@2 [g2,d3,g3]@2 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4]@2]/2", // Bb5 G5 C5
  AG: "[[c3,g3,c4]@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3] [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3] [bb2,f3,bb3]@2 [bb2,f3,bb3]@2]/2", // C5 Ab5 Bb5
  AH: "[[bb2,f3,bb3]@2 [g2,d3,g3]@2 [g2,d3,g3] [g2,d3,g3]@2 [g2,d3,g3]@2 [c3,g3,c4]@21 ~@2]/4", // Bb5 G5 C5
})).s("gm_piano").gain(0.4)

stack(piano)