Strudelify
KeyF majorTempo126 bpm
0:00/0:00
// YMCA — Jayden Luedeke
// 126 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5679240; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · flute
const flute = note(`<
  ~ A@4 B C D E F E G H I@2 D E F E G H I@2 J K L ~ M N O P Q R L ~ M N O P Q ~ S ~ T ~ U@2 I@2 S ~ T ~ U@2 I@2 J K L ~
  M N O P Q ~ S ~ T ~ U@2 I@2 L ~ M N O P Q R L ~ M N O P Q R V
>`.pickRestart({
  A: "[d5@6 d5@2 d5@23 ~]/2", B: "[f5,f6]@6 [f5,f6]!2 [f5,f6]@6 [f5,f6]!2",
  C: "[f5,f6] f4 g4 a4 g4 a4 bb4 c5 bb4 c5 d5 e5 c5 d5 e5 f5", D: "c5 a4@4 ~ a4 g4", E: "f4 g4 a4 c5@2 a4 c5@2",
  F: "d5 a4@4 ~ a4 g4", G: "d5 bb4@4 ~ bb4 a4", H: "g4 a4 bb4 d5@2 f5 d5@2",
  I: "[e5@6 d5@6 c5@6 bb5@6 a5@3 ~ g5@3 ~]/2", J: "c6 ~ c6 ~ c6 ~ c6 ~", K: "c6 ~@7", L: "d6@4 c6@2 d6 c6",
  M: "a5@4 a5@2 a5!2", N: "~ a5@3 ~@4", O: "~ g5 g5@2 ~ gb5 gb5@2", P: "f5@3 e5 ~@4", Q: "d5@6 d5!2 d5@8",
  R: "~@2 c6@2 c6@2 a5@2 c6@2 a5@2 c6@3 ~", S: "c6 ~ a5@4 g5@4 a5@6", T: "d6 ~ a5@4 g5@4 a5@6",
  U: "[d5 ~ bb4@4 a4@4 bb4@14 ~@8]/2", V: "d6@8 c6@4 d6 ~ d6 ~",
})).s("gm_flute").gain(0.45)

// other · clarinet · "B♭ Clarinet 1"
const clarinet = note(`<
  ~ A@4 B C D E F G H I J@2 D E F G H I J@2 K L M N O P Q R S T M N O P Q R S ~ U V W V X@2 J@2 U V W V X@2 J@2 K L M N
  O P Q R S ~ U V W V X@2 J@2 M N O P Q R S T M N O P Q R S T Y
>`.pickRestart({
  A: "[d5@3 d5 d5@12]/2", B: "f5@6 f5!2 f5@6 f5!2", C: "f5 f4 g4 a4 g4 a4 bb4 c5 bb4 c5 d5 e5 c5 d5 e5 f5",
  D: "a4 f4@4 ~ f4 e4", E: "d4 e4 f4 a4@2 f4 a4@2", F: "bb4 a4@4 ~ f4 e4", G: "f4 e4 f4 a4@2 f4 a4@2",
  H: "d5 bb4@4 ~ g4 f4", I: "e4 f4 g4 bb4@2 d5 bb4@2", J: "[e5@6 d5@6 c5@6 bb4@6 a4@3 ~ g4@3 ~]/2",
  K: "f5 ~ f5 ~ f5 ~ f5 ~", L: "f5 ~@7", M: "d5@4 c5@2 d5 c5", N: "~ a4!2 g4!2 f4 f4@2", O: "g5@4 f5@2 g5 f5",
  P: "~ a4@3 ~@4", Q: "~ g5 g5@2 ~ gb5 gb5@2", R: "f5@3 e5 ~@4", S: "d5@6 d5!2 d5@8",
  T: "~@2 c5@2 c5@2 a4@2 c5@2 a4@2 c5@3 ~", U: "c5 ~ a4@4 g4@4 a4@6", V: "a4 c5", W: "d5 ~ a4@4 g4@4 a4@6",
  X: "[d5 ~ bb4@4 a4@4 bb4@14 ~@8]/2", Y: "d5@8 c5@4 d5 ~ d5 ~",
})).s("gm_clarinet").gain(0.45)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~ A@4 B C D E F E G H I@2 D E F E G H I@2 J K L M N O ~@4 L M N O ~@4 P Q P Q R S I@2 P Q P Q R S I@2 J K L M N O ~@4
  P Q P Q R S I@2 L M T U ~@4 L M T U ~@4 V
>`.pickRestart({
  A: "[bb3@3 bb3 bb3@12]/2", B: "bb3@6 bb3!2 bb3@6 bb3!2", C: "bb3 f4 g4 a4 g4 a4 bb4 c5 bb4 c5 d5 e5 c5 d5 e5 f5",
  D: "c5 a4@4 ~ a4 g4", E: "f4 g4 a4 c5@2 a4 c5@2", F: "d5 a4@4 ~ a4 g4", G: "d5 bb4@4 ~ bb4 a4",
  H: "g4 a4 bb4 d5@2 f5 d5@2", I: "[g3@6 f3@6 e3@6 d3@6 c3@3 ~ bb2@3 ~]/2", J: "bb3 ~ bb3 ~ bb3 ~ bb3 ~",
  K: "bb3 ~ g3@2 bb3@2 g3@2 bb3@2 g3@2 bb3@3 ~", L: "f4@4 f4@2 f4!2", M: "~ a3!2 g3!2 f3 f3@2",
  N: "f3 ~ f3@4 f3 ~ f3@8", O: "f3 ~ f3@4 f3 ~ a3@4 a3@4", P: "a3 ~ a3@6 ~@4 a3@2 g3@2",
  Q: "f3@2 g3@2 a3 ~ c4@4 a3 ~ c4@4", R: "bb3 ~ bb3@6 ~@4 bb3@2 a3@2", S: "g3@2 a3@2 bb3 ~ bb3@4 d4@2 bb3@2 ~@2",
  T: "f3 f3@2 f3 f3@4", U: "f3 f3@2 f3 a3@2 a3@2", V: "f4@8 f4@4 f4 ~ f4 ~",
})).s("gm_tenor_sax").gain(0.45)

// other · trumpet · "B♭ Trumpet 1"
const trumpet = note(`<
  ~ A B A B C D E F G F H I J@2 E F G F H I J@2 K L M ~ N O P Q R S M ~ N O P Q R ~ T U V U W@2 J@2 T U V U W@2 J@2 K L
  M ~ N O P Q R ~ T U V U W@2 J@2 M ~ N O P Q R S M ~ N O P Q R S X
>`.pickRestart({
  A: "a4@3 g4 d4@4", B: "~@2 a4@2 g4@2 c5 a4 ~ a4 g4@2 d4@4", C: "f5@6 f5!2 f5@6 f5!2", D: "f5@3 ~@13",
  E: "c5 a4@4 ~ a4 g4", F: "f4 g4 a4 c5@2 a4 c5@2", G: "d5 a4@4 ~ a4 g4", H: "d5 bb4@4 ~ bb4 a4",
  I: "g4 a4 bb4 d5@2 f5 d5@2", J: "[e5@6 d5@6 c5@6 bb4@6 a4@3 ~ g4@3 ~]/2", K: "f5 ~ f5 ~ f5 ~ f5 ~", L: "f5 ~@7",
  M: "d5@4 c5@2 d5 c5", N: "a4@4 a4@2 a4!2", O: "~ a4@3 ~@4", P: "~ g5 g5@2 ~ gb5 gb5@2", Q: "f5@3 e5 ~@4",
  R: "d5@6 d5!2 d5@8", S: "~@2 c5@2 c5@2 a4@2 c5@2 a4@2 c5@3 ~", T: "c5 ~ a4@4 g4@4 a4@6", U: "a4 c5",
  V: "d5 ~ a4@4 g4@4 a4@6", W: "[d5 ~ bb4@4 a4@4 bb4@14 ~@8]/2", X: "d5@8 c5@4 d5 ~ d5 ~",
})).s("gm_trumpet").gain(0.45)

// other · trumpet · "B♭ Trumpet 2"
const trumpet_2 = note(`<
  ~ A@2 B C D E F G H I J K L@2 F G H I J K L@2 M N O ~ P Q R S T U O ~ P Q R S T ~ V W X W Y@2 L@2 V W X W Y@2 L@2 M N
  O ~ P Q R S T ~ V W X W Y@2 L@2 O ~ P Q R S T U O ~ P Q R S T U Z
>`.pickRestart({
  A: "[a4@3 g4 d4@12]/2", B: "a4@3 g4 d4@4", C: "d4", D: "f5@6 f5!2 f5@6 f5!2", E: "f5@3 ~@13", F: "a4 f4@4 ~ f4 e4",
  G: "d4 e4 f4 a4@2 f4 a4@2", H: "bb4 a4@4 ~ f4 e4", I: "f4 e4 f4 a4@2 f4 a4@2", J: "d5 bb4@4 ~ bb4 a4",
  K: "g4 a4 bb4 d5@2 f5 d5@2", L: "[[g4,c5]@6 bb4@6 a4@6 g4@6 f4@3 ~ e4@3 ~]/2", M: "d5 ~ d5 ~ d5 ~ d5 ~", N: "d5 ~@7",
  O: "a4@4 a4@2 a4!2", P: "g4@4 f4@2 g4 f4", Q: "~ f4@3 ~@4", R: "~ g4 g4@2 ~ gb4 gb4@2", S: "f4@3 e4 ~@4",
  T: "bb4@6 bb4!2 bb4@8", U: "~@2 c5@2 c5@2 a4@2 c5@2 a4@2 c5@3 ~", V: "f4 ~ f4@4 f4@4 f4@6", W: "a4 c5",
  X: "d5 ~ a4@4 g4@4 a4@6", Y: "[bb4 ~ bb4@4 a4@4 bb4@14 ~@8]/2", Z: "a4@8 a4@4 a4 ~ a4 ~",
})).s("gm_trumpet").gain(0.45)

// other · french horn · "Mellophone"
const french_horn = note(`<
  ~ A B A B C D E F G F H I J@2 E F G F H I J@2 K L M N O P Q@2 R@2 M N O P Q@2 S@2 T U V U V W J@2 T U V U V W J@2 K L
  M N O P Q@2 S@2 T U V U V W J@2 M N O P Q@2 R@2 M N O P Q@2 R@2 X
>`.pickRestart({
  A: "a4@3 g4 d4@4", B: "~@2 a4@2 g4@2 c5 a4 ~ a4 g4@2 d4@4", C: "f4@6 f4!2 f4@6 f4!2", D: "f4@3 ~@13",
  E: "c5 a4@4 ~ a4 g4", F: "f4 g4 a4 c5@2 a4 c5@2", G: "d5 a4@4 ~ a4 g4", H: "bb4 g4@4 ~ g4 f4",
  I: "e4 f4 g4 bb4@2 d5 bb4@2", J: "[e4@6 d4@6 c4@6 d4@6 f4@3 ~ e4@3 ~]/2", K: "f4 ~ f4 ~ f4 ~ f4 ~", L: "f4 ~@7",
  M: "d4 ~ d4@4 d4 ~ d4@8", N: "~ a4!2 g4!2 f4 f4@2", O: "g4 ~ g4@4 g4 ~ g4@8", P: "~@5 f4!2 d4", Q: "f4!3 d4@3 c4 d4",
  R: "[f4 d4 c4 f4 ~ f4 ~ d4@5 d4@2 d4@2]/2", S: "[f4@2 d4@2 c4 ~ f4@2 ~@2 f4@2 ~@2 d4@10 d4@4 d4@4]/2", T: "f4@3 c4",
  U: "f4 g4 f4 e4", V: "f4@3 d4", W: "f4@3 d4@2 f4 d4 ~", X: "d4@2 d4@4 d4@2 d4@4 d4 ~ d4 ~",
})).s("gm_french_horn").gain(0.45)

// other · trombone
const trombone = note(`<
  ~ A B A B C D E F E F E F G@2 E F E F E F G@2 H I J K L M N@2 O@2 J K L M N@2 P@2 Q R S R T U G@2 Q R S R T U G@2 H I
  J K L M N@2 P@2 Q R S R T U G@2 J K L M N@2 O@2 J K L M N@2 O@2 V
>`.pickRestart({
  A: "[g3,bb3]@3 [g3,bb3] [g3,bb3]@4", B: "~@2 a3@2 g3@2 c4 a3 ~ a3 g3@2 d3@4",
  C: "[bb3,d4]@6 [bb3,d4] ~ [bb3,d4]@6 [bb3,d4] ~", D: "[bb3,d4]@3 ~@13", E: "f3 d3@2 c3@2 d3@3", F: "bb3 [bb3,d4]",
  G: "[[g3,c4]@6 [f3,bb3]@6 a3@6 [c3,g3]@6 c4@3 ~ c4@3 ~]/2", H: "d4 ~ d4 ~ d4 ~ d4 ~",
  I: "d4 ~ g3@2 bb3@2 g3@2 bb3@2 g3@2 bb3@3 ~", J: "[a3,d4] ~ [a3,d4]@4 [a3,d4] ~ [a3,d4]@8",
  K: "c4 ~ c4@2 ~@2 c4 ~ a3@4 a3@4", L: "a3 ~ a3@4 a3 ~ a3@8", M: "f3 ~ f3@4 a3 ~@3 f4@2 f4@2 d4@2",
  N: "f4!3 d4@3 c4 d4", O: "[f4 d4 c4 f4 ~ f4 ~ d4@5 d4@2 d4@2]/2",
  P: "[f4@2 d4@2 c4 ~ f4@2 ~@2 f4@2 ~@2 d4@10 d4@4 d4@4]/2", Q: "[a3,c4] a3@3 ~@2 a3 g3",
  R: "f3@2 g3@2 a3 ~ c4@4 a3 ~ c4@4", S: "[a3,d4] a3@3 ~@2 a3 g3", T: "[bb3,d4] bb3@3 ~@2 bb3 a3",
  U: "g3@2 a3@2 bb3 ~ bb3@4 d4@2 bb3@2 ~@2", V: "[a3,d4]@2 [a3,d4]@4 [a3,d4]@2 [a3,d4]@4 [a3,d4] ~ [a3,d4] ~",
})).s("gm_trombone").gain(0.45)

// other · french horn · "Baritone"
const french_horn_2 = note(`<
  ~ A@4 B C D E D E D E F@2 D E D E D E F@2 G H I J K L M N O P I J K L M N O P Q R S R T U F@2 Q R S R T U F@2 G H I J
  K L M N O P Q R S R T U F@2 I J K L M N O P I J K L M N O P V
>`.pickRestart({
  A: "[c3@3 c3 c3@12]/2", B: "c3@6 c3 ~ c3@6 c3 ~", C: "c3@3 ~@13", D: "bb3 bb3@2 a3@2 bb3@3", E: "f3 d3",
  F: "[e3@6 d3@6 c3@6 c3@6 c3@3 ~ g3@3 ~]/2", G: "g3 ~ g3 ~ g3 ~ g3 ~", H: "g3 ~ g3@2 bb3@2 g3@2 bb3@2 g3@2 bb3@3 ~",
  I: "f3 ~ f3@4 f3 ~ f3@8", J: "a3 ~ a3@2 ~@2 a3 ~ c3@4 db3@4", K: "d3 ~ d3@4 d3 ~ d3@8",
  L: "d3 ~ d3@4 d3 ~ f3@4 gb3@4", M: "bb3@6 bb3 ~ bb3@6 bb3 ~", N: "g3@3 g3@5", O: "bb3@6 bb3 ~ g3@6 g3 ~",
  P: "g3 ~ g3@4 g3 ~ g3@4 g3@4", Q: "f3 f3@3 ~@2 a3 g3", R: "f3@2 g3@2 a3 ~ c4@4 a3 ~ c4@4", S: "a3 a3@3 ~@2 a3 g3",
  T: "f3 f3@3 ~@2 bb3 a3", U: "g3@2 a3@2 bb3 ~ bb3@4 d4@2 bb3@2 ~@2", V: "f3@2 f3@4 f3@2 f3@4 f3 ~ f3 ~",
})).s("gm_french_horn").gain(0.45)

// bass · tuba · "Sousaphone"
const bass = note(`<
  ~ A@4 B C D E D E D E F@2 D E D E D E F@2 G H I J K L M N O P I J K L M N O P I@2 K Q R@2 F@2 I@2 K Q R@2 F@2 G H I J
  K L M N O P I@2 K Q R@2 F@2 I J K L M N O P I J K L M N O P S
>`.pickRestart({
  A: "[c2@3 c2 c2@12]/2", B: "c3@6 c3 ~ c3@6 c3 ~", C: "c3@3 ~@13", D: "bb2 bb2@2 a2@2 bb2@3", E: "d2 f2",
  F: "[e2@6 d2@6 c2@6 bb2@6 a2@3 ~ g2@3 ~]/2", G: "c3 ~ c3 ~ c3 ~ c3 ~", H: "c3 ~@7", I: "f2!4", J: "f2!2 c2 db2",
  K: "d2!4", L: "d2!2 f2 gb2", M: "g2@6 g2 ~ g2@6 g2 ~", N: "f2@3 f2@5", O: "c3@6 c3 ~ a2@6 a2 ~", P: "c2!4",
  Q: "d2!2 ab2 a2", R: "bb2!4", S: "f2@4 f2@4 f2@4 f2 ~ f2 ~",
})).s("gm_tuba").gain(0.45)

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

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

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

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~ A B A B C D C B C B C B E F C B C B C B E F G ~@2 G ~ B ~ G ~ B ~ G ~ B ~ G ~ H ~ G ~ B ~ H E F ~ G ~ B ~ H E F G
  ~@2 G ~ B ~ G ~ H ~ G ~ B ~ H E F ~ G ~ B ~ G ~ B ~ G ~ B ~ G ~ B ~
>`.pickRestart({
  A: "~@5 x ~ x", B: "~ x ~@2", C: "~@14 x!2", D: "~@2 x!2 ~@10 x!2", E: "~@2 x ~@2 x ~@2",
  F: "x ~@3 x!3 ~@3 x ~ x!2 ~@2", G: "~@3 x", H: "x ~ x ~@5 x!2 ~@6",
})).gain(2.26)

// drums · whistle
const whistle = s("ballwhistle:1").struct("<~@13 A ~@7 A ~@25 A ~@7 A ~@17 A ~@18>".pickRestart({
  A: "x",
})).gain(0.52)

// drums · whistle
const whistle_2 = s("ballwhistle:0").struct(`<
  ~ A ~ A ~ B A@7 C D A@6 C D E ~ F@16 A@6 C D A@6 C D E ~ F@8 A@6 C D F@17
>`.pickRestart({
  A: "x", B: "x ~@2 x!2 ~@2 x", C: "x ~@2 x ~@2 x ~", D: "~ x ~@2 x ~ x ~", E: "x!4", F: "~ x ~ x",
})).gain(0.52)

// drums · guiro
const guiro = s("guiro:4").struct("<~ [~@3 x ~@4] ~ [~@3 x ~@4] ~@88>").gain(8.38)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@7 A@6 ~@2 A@6 ~@20 A@6 ~@2 A@6 ~@12 A@6 ~@19>".pickRestart({
  A: "~@2 x!2",
})).gain(0.58)

stack(
  flute, clarinet, tenor_sax, trumpet, trumpet_2, french_horn, trombone, french_horn_2, bass, snare, hihat, high_tom,
  cabasa, whistle, whistle_2, guiro, woodblocks
)