Strudelify

Hey Ya!

Otkast

KeyE♭ majorTempo158 bpm
0:00/0:00
// Hey Ya! — Otkast
// 158 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 4, 4/4 at bar 5, 2/4 at bar 10, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 4 "Bass" named as a bass, played on electric bass finger (its piano patch is not one); ch 5 "Bass" named as a bass, played on electric bass finger (its piano patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5976308; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(158/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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.

// other · piano · "Tenor"
const piano = note(`<
  A B C D E@2 F G@2 H I J B C D E@2 F G@2 H I K@4 L@2 M N@2 O@3 B C P E@2 F G@2 Q I R S@2 T U@2 V@3 W ~ X@4 L@2 M N@2
  Y@3 Z AA AB AC@2 AD AE@2 AF AG K@4 L@2 M N@2 AH@6 L@2 M N@2 AI@3
>`.pickRestart({
  A: "~@4 eb4@3 eb4", B: "~ eb4 eb4@2 ab3@3 ab3", C: "~ ab3 ab3@2 ab3@3 ab3", D: "~ ab3 ab3@2 bb3 ~ ab3 ~",
  E: "c4@3 c4 ~ c4 c4@2", F: "eb4@3 eb4 ~ eb4 eb4@2", G: "ab3@3 ab3 ~ ab3 ab3@2", H: "bb3 ~ ab3 ~ c4@3 c4",
  I: "~ c4 c4@2 c4@3 c4", J: "~ c4 c4@2 eb4@3 eb4", K: "[~ c4 c4@2 g4@5 f4 g4@2 f4@14 ~@2 g4@2 f4@2]/4",
  L: "[eb4@7 ~]/2", M: "g4@5 f4 g4@2", N: "[f4@7 ~]/2", O: "[g4@2 f4@2 eb4@14 ~@2 eb4@3 eb4]/3",
  P: "~ ab3 ab3@2 bb3@2 g3@2", Q: "bb3@2 g3@2 c4@3 c4", R: "~ c4 c4@2 eb3@3 eb3", S: "~ eb3 eb3@2 eb3@3 eb3",
  T: "~ eb3 eb3@2 d3 ~ f3 ~", U: "g3@3 g3 ~ g3 g3@2", V: "eb3@3 eb3 ~ eb3 eb3@2", W: "d3 ~ f3 ~@5",
  X: "[~@4 g4@5 f4 g4@2 f4@14 ~@2 g4@2 f4@2]/4", Y: "[g4@4 f4@4 eb4@28 ~@4 bb3 ~ bb3 ~@3 bb3 ~]/3",
  Z: "~@2 bb3@2 bb3@4 ab3 ~ ab3 ~@3 ab3 ~", AA: "~@2 ab3@2 ab3@4 ab3 ~ ab3 ~@3 ab3 ~",
  AB: "~@2 ab3@2 ab3@4 f3@3 ~ bb3@3 ~", AC: "c4 ~ c4 ~@3 c4 ~@3 c4@2 c4@4", AD: "bb3 ~ bb3 ~@3 bb3 ~@3 bb3@2 bb3@4",
  AE: "ab3 ~ ab3 ~@3 ab3 ~@3 ab3@2 ab3@4", AF: "f3@3 ~ bb3@3 ~ c4 ~ c4 ~@3 c4 ~", AG: "~@2 c4@2 c4@4 c4 ~ c4 ~@3 c4 ~",
  AH: "[g4@2 f4@2 eb4@14 ~@2 g4@5 f4 g4@2 f4@14 ~@2 g4@2 f4@2]/6", AI: "[g4 f4 e4@7 ~@3]/3",
})).s("gm_piano").gain(0.3)

// other · piano · "Tenor"
const piano_2 = note(`<
  A B@3 C@2 D E@2 F@3 B@3 C@2 D E@2 G@3 H@2 I J@2 K L@2 M N O P@2 Q R@2 S@3 T U V W@2 ~@2 X ~@6 H@2 I J@2 K L@2 M N Y Z
  AA AB AC@3 AD AE AF AG V H@2 I J@2 K L@2 M N AH@4 AI@2 AJ AK@2 AL@3
>`.pickRestart({
  A: "~@3 c4", B: "[bb3 ab3 g3@2 g3@2 ab3 g3@2 f3 eb3 f3 g3@2 ab3 g3@2 f3 eb3 f3 g3 ~ ab3 ~]/3", C: "[g3@7 ~]/2",
  D: "~@2 c4@2 bb3 ab3 g3@2", E: "g3@2 ab3 g3@2 f3 eb3 f3", F: "[g3 ~ ab3 ~ g3@14 ~@4 c4@2]/3",
  G: "[g3 ~ ab3 ~ g3@14 ~@6]/3", H: "[g3 ~ ab3 ~ bb3 ~ c4 ~ c4@20 ~@4]/2",
  I: "g3 ~ ab3 ~ bb3 ~ c4 ~ bb3 ~ ab3 ~ g3@3 ~", J: "c4@3 c4 ~ c4 c4@2", K: "~@8 g3 ~ ab3 ~ bb3 ~ c4 ~",
  L: "[c4@20 ~@4 g3 ~ ab3 ~ bb3 ~ c4 ~]/2", M: "bb3 ~ ab3 ~ g3@3 ~ c4@6 c4@2", N: "~ c4 c4@2 c4@3 c4",
  O: "~ c4 c4@2 eb3@3 eb3", P: "~ eb3 eb3@2 eb3@3 eb3", Q: "~ eb3 eb3@2 f3 ~ g3 ~", R: "g3@3 g3 ~ g3 g3@2",
  S: "eb3@3 eb3 ~ eb3 eb3@2", T: "f3 ~ g3 ~ g3@3 g3", U: "~ g3 g3@2 g3@3 g3", V: "~ g3 g3@2 ~@4",
  W: "[~@3 eb4@2 d4 c4 d4@2 c4 bb3 ~@5]/2", X: "g3@2 bb3!2 c4@2 d4 bb3", Y: "~@2 c4@2 c4@4 g3 ~ g3 ~@3 g3 ~",
  Z: "~@2 g3@2 g3@4 eb3 ~ eb3 ~@3 eb3 ~", AA: "~@2 eb3@2 eb3@4 ab3 ~ ab3 ~@3 ab3 ~",
  AB: "~@2 ab3@2 ab3@4 bb3@3 ~ bb3@3 ~", AC: "g3 ~ g3 ~@3 g3 ~@3 g3@2 g3@4", AD: "eb3 ~ eb3 ~@3 eb3 ~@3 eb3@2 eb3@4",
  AE: "ab3 ~ ab3 ~@3 ab3 ~@3 ab3@2 ab3@4", AF: "bb3@3 ~ bb3@3 ~ g3 ~ g3 ~@3 g3 ~", AG: "~@2 g3@2 g3@4 g3 ~ g3 ~@3 g3 ~",
  AH: "[~ c4 c4@2 eb4@5 d4 eb4@2 c4@14 ~@2 bb3@2 d4@2]/4", AI: "[eb4@7 ~]/2", AJ: "eb4@5 d4 eb4@2", AK: "[c4@7 ~]/2",
  AL: "[bb3 d4 g3@7 ~@3]/3",
})).s("gm_piano").gain(0.3)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A B C D E@2 F G@2 H I J B C D E@2 F G@2 H I K@2 C L M@2 N G@2 O P@2 Q C R E@2 M G@2 S I T Q C R E@2 M G@2 U ~ V Q C L
  M@3 G@2 O P W X Y Z AA@2 AB AC AA AD AE AF Q C L M@3 G@2 O P AG@4 AH@2 AI AJ@2 AK@3
>`.pickRestart({
  A: "~@4 bb2@3 bb2", B: "~ bb2 bb2@2 c3@3 c3", C: "~ c3 c3@2 c3@3 c3", D: "~ c3 c3@2 bb2 ~ d3 ~",
  E: "e3@3 e3 ~ e3 e3@2", F: "bb2@3 bb2 ~ bb2 bb2@2", G: "c3@3 c3 ~ c3 c3@2", H: "bb2 ~ d3 ~ e3@3 e3",
  I: "~ e3 e3@2 e3@3 e3", J: "~ e3 e3@2 bb2@3 bb2", K: "[~ e3 e3@2 c3@8 c3@3 c3]/2", L: "~ c3 c3@2 bb2 ~ bb2 ~",
  M: "eb3@3 eb3 ~ eb3 eb3@2", N: "c3", O: "bb2 ~ bb2 ~ eb3@3 eb3", P: "~ eb3 eb3@2 eb3@3 eb3", Q: "~ eb3 eb3@2 c3@3 c3",
  R: "~ c3 c3@2 d3 ~ d3 ~", S: "d3 ~ d3 ~ e3@3 e3", T: "~ e3 e3@2 eb3@3 eb3", U: "d3 ~ f3 ~@5", V: "~@4 eb3@3 eb3",
  W: "~@2 eb3@2 eb3@4 bb2 ~ bb2 ~@3 bb2 ~", X: "~@2 bb2@2 bb2@4 ab2 ~ ab2 ~@3 ab2 ~",
  Y: "~@2 ab2@2 ab2@4 c3 ~ c3 ~@3 c3 ~", Z: "~@2 c3@2 c3@4 d3@3 ~ d3@3 ~", AA: "c3 ~ c3 ~@3 c3 ~@3 c3@2 c3@4",
  AB: "bb2 ~ bb2 ~@3 bb2 ~@3 bb2@2 bb2@4", AC: "ab2 ~ ab2 ~@3 ab2 ~@3 ab2@2 ab2@4",
  AD: "d3@3 ~ d3@3 ~ c3 ~ c3 ~@3 c3 ~", AE: "~@2 c3@2 c3@4 c3 ~ c3 ~@3 c3 ~", AF: "~ c3 c3@2 eb3@3 eb3",
  AG: "[~ eb3 eb3@2 eb3@5 d3 eb3@2 eb3@14 ~@2 d3@2 d3@2]/4", AH: "[c3@7 ~]/2", AI: "eb3@5 d3 eb3@2", AJ: "[eb3@7 ~]/2",
  AK: "[d3!2 c3@7 ~@3]/3",
})).s("gm_electric_bass_finger").gain(0.3)

// bass · electric bass finger · "Bass"
const bass_2 = note(`<
  A B C D E@2 F G@2 H I J B C D E@2 F G@2 H I J K C L E M N G@2 O I P B C D E@2 F G@2 H I J B C D E@2 F G@2 Q ~ A K C L
  E M N G@2 O I P B C R S@2 F G@2 T U J K C L E M N G@2 O I V@4 W@2 X Y@2 Z AA@2
>`.pickRestart({
  A: "~@4 eb2@3 eb2", B: "~ eb2 eb2@2 ab2@3 ab2", C: "~ ab2 ab2@2 ab2@3 ab2", D: "~ ab2 ab2@2 f2 ~ bb2 ~",
  E: "c3@3 c3 ~ c3 c3@2", F: "eb2@3 eb2 ~ eb2 eb2@2", G: "ab2@3 ab2 ~ ab2 ab2@2", H: "f2 ~ bb2 ~ c3@3 c3",
  I: "~ c3 c3@2 c3@3 c3", J: "~ c3 c3@2 eb2@3 eb2", K: "~ eb2 f2 g2 ab2@3 ab2", L: "~ ab2 ab2@2 d2 ~ bb2 ~",
  M: "c3@3 c3 ~ bb1 c2 d2", N: "eb2@3 eb2 ~ eb2 f2 g2", O: "d2 ~ bb2 ~ c3@3 c3", P: "~ bb1 c2 d2 eb2@3 eb2",
  Q: "f2 ~ bb2 ~@5", R: "~@2 ab2@2 ab2@4 f2@3 ~ bb2@3 ~", S: "c3 ~ c3 ~@3 c3 ~@3 c3@2 c3@4",
  T: "f2@3 ~ bb2@3 ~ c3 ~ c3 ~@3 c3 ~", U: "~@2 c3@2 c3@4 c3 ~ c3 ~@3 c3 ~",
  V: "[~ bb1 c2 d2 g2@5 d2 g2@2 ab2@14 ~@2 g2@2 bb2@2]/4", W: "[c3@7 ~]/2", X: "g2@5 d2 g2@2", Y: "[ab2@7 ~]/2",
  Z: "g2 bb2 ~@2", AA: "[~@2 c2@3 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.3)

stack(piano, piano_2, bass, bass_2)