Strudelify
Y.M.C.A. cover art

1979

Y.M.C.A.

Village People

KeyF♯ majorTempo130 bpm
0:00/0:00
// Y.M.C.A. — Village People
// 130 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "brass" named as a brass, played on brass section (its string ensemble 1 patch is not one)
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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.

// other · brass section · "brass"
const brass_section = note(`<
  A@4 B@4 ~@8 C@2 D@2 E@2 F G H@2 ~ I J K L M N O P@2 Q@2 L M N R ~@8 C@2 D@2 E@2 F G H@2 ~ I J K L M N O P@2 Q@2 L M N
  R ~@8 C@2 D@2 E@2 F G H@2 ~ I J K L M N O P@2 Q@2 L M N R ~ I J K L M N O P@2 Q@2 L M N R ~
>`.pickRestart({
  A: "[a#5@6 g#5 ~ d#5@9 ~ a#5 ~ g#5@2 c#6 a#5 ~ a#5 g#5 ~ d#5 ~@3 a#5@6 g#5 ~ d#5@10 a#5 ~ g#5 ~ c#6 a#5 ~ a#5 g#5 ~ d#5@2 ~@2, c#2, ~@32 c#3@31 ~]/4",
  B: "[[a#5,a#6]@6 [g#5,g#6] ~ [d#5,d#6]@9 ~ [a#5,a#6] ~ [g#5,g#6]@2 [c#6,c#7] [a#5,a#6] ~ [a#5,a#6] [g#5,g#6] ~ [d#5,d#6] ~@3 [a#5,a#6]@6 [g#5,g#6] ~ [d#5,d#6]@10 [a#5,a#6] ~ [g#5,g#6] ~ [c#6,c#7] [a#5,a#6] ~ [a#5,a#6] [g#5,g#6] ~ [d#5,d#6]@2 ~@2, c#2, ~@32 c#3@31 ~]/4", // A# G# D# A# G# C# A# G# …
  C: "[a#4@2 c#5 ~@3 d#5 ~@3 f#5 ~@3 g#5@4 f#5@2 d#5@2 c#5 d#5@9, ~@14 f#5 ~@17]/2",
  D: "[a#4@2 c#5@2 ~@2 d#5@2 ~@2 f#5 ~@3 g#5@4 f#5@2 d#5 ~ d#5@9 ~, ~@14 f#5 ~@7 c#5 ~@9]/2",
  E: "[b4@2 d#5@2 ~@2 f#5 ~@3 d#5 ~@3 g#5@4 f#5@2 d#5 ~ c#5 d#5@9, ~@14 f#5 ~@17]/2", F: "f5@6 g#5@5 ~ b5@4",
  G: "~@2 c#6@5 b5@3 ~@2 a#5@2 ~@2", H: "c#6/2", I: "~@2 a#5 ~ a#5@2 g#5 ~ g#5 ~ f#5 ~ f#5@2 d#5 ~",
  J: "d#5 f#5@5 d#5@10", K: "~@2 a#5 ~ a#5@2 g#5 ~ g#5@2 f#5 ~ f#5@2 d#5@2", L: "g#5 g5", M: "f#5 f5", N: "f#5",
  O: "f5@9 ~ [f5,g#5] b5@2 ~ f5 ~", P: "[f#5@18 a#5 ~ a#5@2 g#5 ~ g#5@2 f#5 ~ f#5@2 d#5 ~]/2",
  Q: "[d#5 f#5@17 a#5 ~ a#5@2 g#5 ~ g#5@2 f#5 ~ f#5@2 d#5 ~]/2", R: "f5@9 ~ c#6 ~@3 f5 ~",
})).s("gm_brass_section").gain(0.71)

// bass · fretless bass · "bass"
const bass = note(`<
  A@2 B@2 C D C E F G H I J K L@2 F G H I J K L@2 M@2 F G H I N@2 M@2 F G H I N@2 M@2 F G H I J K L@2 F G H I J K L@2
  M@2 F G H I N@2 M@2 F G H I N@2 M@2 F G H I J K L@2 F G H I J K L@2 M@2 F G H I N@2 M@2 F G H I N@2 M@2 F G H I N@2
  M@2 F G H I N@2 O ~@2
>`.pickRestart({
  A: "[c#2@15 g#2]/2", B: "[c#3@13 g#2 c#3 g#2]/2", C: "c#2@7 g#2", D: "c#3@5 g#2 c#3 g#2",
  E: "c#3@6 g#2@2 c#3@2 g#2@2 c#3@2 g#2 ~", F: "f#2 f#3 f#2 f#3 f#2 f#3 f#2 f#3", G: "f#2 f#3 f#2 f#3 f#2 f#3 a#2 a#3",
  H: "d#2 d#3 d#2 d#3 d#2 d#3 d#2 d#3", I: "d#2 d#3 d#2 d#3 d#2 d#3 f#2 f#3", J: "b2 ~ b2 b3 b2 b3 b2 b3",
  K: "b2 b3 b2 b3 b2 b3 b2 b3", L: "[f2@3 [d#2,d#3]@3 [c#2,c#3]@3 b2@3 [a#2,a#3]@2 [g#2,g#3]@2, ~@9 b3@2 ~@5]/2",
  M: "c#2 c#3 c#2 c#3 c#2 c#3 c#2 c#3", N: "g#2 g#3 g#2 g#3 g#2 g#3 g#2 g#3", O: "c#2 c#3 c#2 c#3 c#2 c#3 ~@2",
})).s("gm_fretless_bass").gain(0.71)

// bass · slap bass 2 · "Slap Bass"
const bass_2 = note(`<
  A@6 B@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 B@2 C@2 D@2 G@2 H@2 I J K L G@2 H@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 B@2 C@2
  D@2 G@2 H@2 I J K L G@2 H@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 B@2 C@2 D@2 G@2 H@2 I J K L G@2 H@2 C@2 D@2 G@2 H@2 I J K
  L G@2 M ~@2
>`.pickRestart({
  A: "[[c#2,c#3]@31 ~]/2", B: "[c#2,c#3]/2", C: "[f#2@7 a#2]/2", D: "[d#2@7 f#2]/2", E: "b2/2",
  F: "[f3@6 d#3@6 c#3@6 b2@6 a#2@4 g#2@3 ~]/2", G: "g#2 g#3 g#2 g#3 g#2 g#3 g#2 g#3",
  H: "c#2 c#3 c#2 c#3 c#2 c#3 c#2 c#3", I: "f#2 f#3 f#2 f#3 f#2 f#3 f#2 f#3", J: "f#2 f#3 f#2 f#3 f#2 f#3 a#2 a#3",
  K: "d#2 d#3 d#2 d#3 d#2 d#3 d#2 d#3", L: "d#2 d#3 d#2 d#3 d#2 d#3 f#2 f#3", M: "c#2 c#3 c#2 c#3 c#2 c#3 c#2 ~",
})).s("gm_slap_bass_2").gain(0.71)

// drums · kick
const kick = s("bd").struct(`<
  A@7 B C@6 D E C@6 D E A F C@22 D E C@6 D E A F C@22 D E C@6 D E A F C@30 G C ~
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2", D: "x ~@2 x ~@2 x ~", E: "~ x ~@2 x ~ x ~", F: "x ~@4 x ~@3 x ~@2 x ~@3", G: "x",
})).gain(0.57)

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

// drums · low tom
const low_tom = s("lt").struct("<~@25 [~@12 x!3 ~] ~@33 [~@12 x!3 ~] ~@33 [~@12 x!3 ~] ~@33>").gain(0.57)

// drums · mid tom
const mid_tom = s("mt").struct("<~@25 [~@4 x!8 ~@4] ~@33 [~@4 x!8 ~@4] ~@33 [~@4 x!8 ~@4] ~@33>").gain(0.57)

// drums · high tom
const high_tom = s("ht").struct("<~@14 A B ~@6 A B C D ~@22 A B ~@6 A B C D ~@22 A B ~@6 A B C D ~@33>".pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "~ x ~@2 x ~@3", C: "x", D: "x!4 ~@12",
})).gain(0.71)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@7 A ~@7 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~ A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.71)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A@8 B@6 ~@2 B@6 ~@2 A@2 B@22 ~@2 B@6 ~@2 A@2 B@22 ~@2 B@6 ~@2 A@2 B@30 C D ~
>`.pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", B: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", C: "~@14 x!2", D: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@4",
})).gain(0.71)

stack(brass_section, bass, bass_2, kick, snare, low_tom, mid_tom, high_tom, crash, tambourine)

More by Village People