Strudelify

Go West

Village People

KeyG majorTempo115 bpm
0:00/0:00
// Go West — Village People
// 115 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 131 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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.

// bass · synth bass 2 · "rhythm section"
const bass = note(`<
  ~@8 A B C D E A F B A B C D E A F B A B C D E A F B A B C D E A F B A B C D E A F B A B C D E A F B A B C D E A F B A
  B C D E A F B A B C D E A F B D C E A D C E B ~@17 F C G H B F D C F C G H B F D C F C G H B F D C@2 ~
>`.pickRestart({
  A: "c2@3 ~ c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~", B: "g2@3 ~ g2@2 ~ g2@2 ~ g2@2 ~ g2@2 ~",
  C: "a2@3 ~ a2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~", D: "e2@3 ~ e2@2 ~ e2@2 ~ e2@2 ~ e2@2 ~",
  E: "f2@3 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~", F: "d2@3 ~ d2@2 ~ d2@2 ~ d2@2 ~ d2@2 ~",
  G: "b1@3 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~", H: "f#2@3 ~ f#2@2 ~ f#2@2 ~ f#2@2 ~ f#2@2 ~",
})).s("gm_synth_bass_2").gain(0.29)

// chords · piano
const piano = note(`<
  ~@8 A B C D E A F B ~@16 A B C D E A F B A B C D E A F B A B C D E A F B A B C D E A F B A B C D E A F B A B C D E A F
  B ~@16 A B C D E A F B@2 G H I J B G D H G H I J B G D H G H I J B G D H@2 ~
>`.pickRestart({
  A: "~@2 [g3,c4,e4]@2 ~ [g3,c4,e4]@2 ~ [g3,c4,e4]@2 ~ [g3,c4,e4]@2 ~ [g3,c4,e4]@2", // C
  B: "~@2 [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2", // G
  C: "~@2 [e3,a3,c4]@2 ~ [e3,a3,c4]@2 ~ [e3,a3,c4]@2 ~ [e3,a3,c4]@2 ~ [e3,a3,c4]@2", // Am
  D: "~@2 [e3,g3,b3]@2 ~ [e3,g3,b3]@2 ~ [e3,g3,b3]@2 ~ [e3,g3,b3]@2 ~ [e3,g3,b3]@2", // Em
  E: "~@2 [f3,a3,c4]@2 ~ [f3,a3,c4]@2 ~ [f3,a3,c4]@2 ~ [f3,a3,c4]@2 ~ [f3,a3,c4]@2", // F
  F: "~@2 [d3,f3,a3,c4]@2 ~ [d3,f3,a3,c4]@2 ~ [d3,f3,a3,c4]@2 ~ [d3,f3,a3,c4]@2 ~ [d3,f3,a3,c4]@2", // Dm7
  G: "~@2 [f#3,a3,d4]@2 ~ [f#3,a3,d4]@2 ~ [f#3,a3,d4]@2 ~ [f#3,a3,d4]@2 ~ [f#3,a3,d4]@2", // D
  H: "~@2 [e3,a3,c#4]@2 ~ [e3,a3,c#4]@2 ~ [e3,a3,c#4]@2 ~ [e3,a3,c#4]@2 ~ [e3,a3,c#4]@2", // A
  I: "~@2 [f#3,b3,d4]@2 ~ [f#3,b3,d4]@2 ~ [f#3,b3,d4]@2 ~ [f#3,b3,d4]@2 ~ [f#3,b3,d4]@2", // Bm
  J: "~@2 [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2", // F#m
})).s("gm_piano").gain(0.25)

// other · lead 2 sawtooth · "leadsynth"
const lead_2_sawtooth = note(`<
  ~@16 A B C D E F G H I J K L M N O P Q J C L R N S T ~@8 U V W X Y Z O AA U AB K X R N O AC Q V AD X R AE S AA Q AB AD
  X R AF ~@10 U B W AG R AF O AH I V K AI R AF O AJ@2 AK AL@2 AM@8 AN AO AN AP AQ AK AR@3 AS AT AU AV@2 AW
>`.pickRestart({
  A: "~@6 e5 c5", B: "d5@4 b4@2 g4@9 ~", C: "~@10 c5@3 a4@3", D: "b4@4 g4@2 e4@9 ~", E: "~@5 f4 ~ f4",
  F: "e4@4 g4@2 c5@9 ~", G: "~@10 a4@3 c5@3", H: "e5@3 f5@3 d5@7 ~@3", I: "~@10 e5@3 c5@3", J: "d5@2 b4 g4@4 ~",
  K: "~@5 e4 c5 a4", L: "b4@4 g4@2 e4@7 ~@3", M: "~@10 f4@2 ~ f4@2 ~", N: "e4@4 g4@2 c5@7 ~@3", O: "~@10 b4@3 c5@3",
  P: "e5@4 f5@2 d5@9 ~", Q: "~@5 d5@2 c5", R: "~@10 f4@2 ~ f4@3", S: "~@6 c5@3 ~ c5@2 a4@2 c5@2",
  T: "e5@3 ~ f5@2 d5@7 ~@3", U: "~@5 e5@2 c5", V: "d5@2 b4 g4@3 ~@2", W: "~@5 c5@2 a4", X: "b4@4 g4@2 e4@5 ~@5",
  Y: "~@10 f4@3 f4@2 ~", Z: "e4@4 g4@2 c5@5 ~@5", AA: "e5@4 f5@2 d5@5 ~@5", AB: "d5@4 b4@2 g4@5 ~@5",
  AC: "e5@2 f5 d5@2 ~@3", AD: "~@5 b4@2 a4", AE: "e4@3 ~ g4@2 c5@6 ~@4", AF: "e4@2 g4 c5@3 ~@2",
  AG: "b4@4 g4@2 ~ e4@5 ~@4", AH: "e5@2 f5 d5@3 ~@2", AI: "b4@3 g4@3 e4@6 ~@4", AJ: "[e5@4 f5@2 d5@21 ~@5]/2",
  AK: "~@5 e5@2 d5", AL: "[e5@4 ~@2 a4@9 ~@7 d5@4 ~@4 b4@2, ~@2 c#5@11 c#5@3]/2",
  AM: "[~@4 a4@2 f#4@6 ~@14 g4@2 ~@2 g4@2 f#4@4 a4@2 d5@9 ~@7 d5@2 ~@2 d5@2 b4@2 d5@2 f#5@4 g5@2 e5@9 ~@25 e5@8 d5@14 ~@2, c#5]/8",
  AN: "~@3 e5", AO: "d5@11 ~@5", AP: "d5@3 ~", AQ: "d4@2 ~ d4 d4@2 d4 d4@2 d4 d4@2 d4@2 d4@2",
  AR: "[e5@4 ~@2 a4@7 ~@17 b4@2 ~@4 a4@2 f#4@10, ~@2 c#5@11 c#5@5 ~@6]/3", AS: "~@5 g4 ~ g4", AT: "f#4@4 a4@2 d5@9 ~",
  AU: "~@3 d5 ~ d5 b4 d5", AV: "[f#5@2 g5 e5@9 ~@2 a4@2]/2", AW: "a5@15 ~",
})).s("gm_lead_2_sawtooth").gain(0.36).pan(0.3)

// other · synth brass 1 · "leadsynth"
const synth_brass_1 = note("<~@80 A B C D E F G H ~@43>".pickRestart({
  A: "~@8 b4@3 a4@3 b4@2", B: "c5@2 b4 a4@2 ~@2 e4", C: "g4@10 g4@3 ~ a4@2", D: "g4@4 f4@2 e4@5 ~@5",
  E: "~@8 b4@3 a4@2 b4@2 ~", F: "c5@4 b4@2 a4@7 b4@2 ~", G: "c5@6 ~@4 a4@3 c5@3", H: "e5@4 f5@2 d5@7 ~@3",
})).s("gm_synth_brass_1").gain(0.44).pan(0.3)

// other · trombone
const trombone = note(`<
  ~@15 A B C D E F C D A B C D E F C D G H G I J K L M ~@8 A B C D E F C D N B C D E F C D G O G P J K L Q@2 O G P J R L
  S T ~@2 U V ~@3 A B C D E F C D A B C D E F C D ~@28
>`.pickRestart({
  A: "~@15 [g3,g4]", B: "[e4,e5] [g3,g4] ~@6", C: "~@15 [c4,c5]", D: "[c4,c5] [a3,a4] ~@6", E: "~@15 [a3,a4]",
  F: "[a3,a4] [f3,f4] ~@6", G: "~@3 [g3,g4]", H: "[c4,e4,c5,e5]@15 ~", I: "[a3,c4,a4,c5]@3 ~", J: "~@3 [e3,e4]",
  K: "[f3,a3,f4,a4]@11 ~@5", L: "~@12 [g3,c4,g4,c5]@3 ~", M: "[a3,c4,a4,c5]@13 ~@3",
  N: "[f3,f4]@3 ~ [g3,g4]@3 ~ [a3,a4]@3 ~ [b3,b4]@3 ~", O: "[c4,e4,c5,e5] ~", P: "[a3,c4,a4,c5]@7 ~@9",
  Q: "[[a3,c4,a4,c5]@13 ~@2 [g3,g4]@5 [a3,a4]@4 [b3,b4]@4 [g3,g4]@4]/2", R: "[f3,a3,f4,a4] ~",
  S: "[a3,c4,a4,c5]@2 ~ [c4,c5] ~ [c4,c5] [a3,a4] [c4,c5]", T: "[c4,e4,c5,e5]@2 [c4,f4,c5,f5] [a3,b3,d4,a4,b4,d5]@5",
  U: "~@2 [g3,g4] [c3,c4] ~@4", V: "[c3,e3,e4,g4]@3 ~ [d3,f3,f4,a4]@3 ~ [e3,g3,g4,b4]@3 ~ [c4,e4,c5,e5]@3 ~",
})).s("gm_trombone").gain(0.31)

// other · brass section · "trombone"
const brass_section = note("<~@104 A B A C D E F G ~ H I J K L M N O B A C D E F G ~ P Q>".pickRestart({
  A: "~@3 [a3,a4]", B: "[d4,f#4,d5,f#5]@15 ~", C: "[b3,d4,b4,d5]@3 ~", D: "~@3 [f#3,f#4]", E: "[g3,b3,g4,b4]@11 ~@5",
  F: "~@3 [a3,d4,a4,d5]", G: "[b3,d4,b4,d5]@13 ~@3", H: "~@5 [f#4,f#5]@2 [d4,d5]", I: "[e4,e5]@2 [c#4,c#5] [a3,a4]@5",
  J: "~@11 [c#4,c#5]@2 [b3,b4]@2 ~", K: "[c#4,c#5]@4 [a3,a4]@2 [f#3,f#4]@9 ~", L: "~@5 [g3,g4]@2 [e3,e4]",
  M: "[f#3,f#4]@2 [a3,a4] [d4,d5]@5", N: "~@3 [d4,d5] ~ [d4,d5] [b3,b4] [d4,d5]",
  O: "[f#4,f#5]@2 [g4,g5] [e4,e5]@3 [a3,a4]@2", P: "[d4,d5]@4 [e4,e5]@2 [c#4,c#5]@5 ~ [a3,a4]@4",
  Q: "[d3,d4,f#4,b4,e5,f#5,b5,e6]@15 ~", // Bm
})).s("gm_brass_section").gain(0.27)

// other · french horn · "horn"
const french_horn = note(`<
  A B C D E F G H A B C D E F I J ~@16 A B C D E F I J ~@16 K L M N E O P Q A B C D E F I J A B C D E F I J R S T U R S
  V W X@2 Y@2 Z@2 AA AB AC@2 AD AE AF AG AH AI ~@27
>`.pickRestart({
  A: "e5@6 d5 c5", B: "d5@4 b4@2 g4@9 ~", C: "c5@6 b4 a4", D: "b4@4 g4@2 e4@9 ~", E: "a4@6 g4 f4",
  F: "g4@4 c5 ~ c5@9 ~", G: "c5@6 a4 c5", H: "e5@2 f5 d5@3 ~@2", I: "c5@11 ~ a4@2 c5@2", J: "e5@2 f5 d5@2 ~@3", K: "e4",
  L: "g3@2 b3 d4", M: "c4", N: "b3 d4 g4 b4", O: "g4", P: "a4", Q: "b4@15 ~", R: "[e3,e4,g4,b4]@15 ~",
  S: "[a3,e4,a4,c5]@15 ~", T: "[f3,c4,f4,g4,a4]@7 ~", U: "[c3,c4,d4,e4,g4]@15 ~", V: "[d3,f4,a4,c5]@15 ~",
  W: "[g3,g4,b4,d5]@15 ~", X: "[e5@2 c5 g5@7 f5@2 e5@2 d5@2]/2", Y: "[c5@3 e5@7 d5@2 c5@2 b4@2]/2",
  Z: "[a4@6 c5@14 g4@4 c5@4 e5@3 ~]/2", AA: "e5 a4 c5 e5", AB: "g5", AC: "[g3@31 ~]/2", AD: "a3",
  AE: "g3@4 b3@4 d4@4 g4@3 ~", AF: "g4 f4", AG: "g4 c5", AH: "a4@5 ~@3",
  AI: "d4 e4 f4 g4 e4 f4 g4 a4 f4 g4 a4 b4 g4 a4 b4 c5",
})).s("gm_french_horn").gain(0.2).pan(0.7)

// chords · string ensemble 1 · "strings | upper"
const string_ensemble_1 = note(`<
  A@2 B@2 C D E F G@2 H@2 I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ ~@8 M N O P Q R S T M N O P
  Q R S AK AC AD AE AF AG AH AI AJ AC AD AE AF AG AH AI AJ AL W AM AN AL AO AP AQ M N O P Q R S AK AC AD AE AF AG AH AI
  AR@2 AS AT AU@2 AV AW AX AY AZ BA BB BC T BD BE BF BG@2 BH@2 BI@2 BJ BK@2 BL
>`.pickRestart({
  A: "[[g4,c5,e5]@4 ~@2 b3 c4, g3@3 ~, ~ [g4,b4,d5]]/2", B: "[[e4,a4,c5]@4 ~@2 g3 a3, e3@3 ~, ~ [e4,g4,b4]]/2",
  C: "c3 a3, [c4,f4,a4]", D: "[c3,g3,c4]@2 c4 b3, [e4,g4]", E: "[d3,d4,f4,a4], a3@7 ~",
  F: "[g3,c4]@6 b3@9 ~, [d4,g4,b4]", G: "[[g4,c5,e5,c6,c7]@4 ~@2 b3 c4, g3@3 ~, ~ [g4,b4,d5,b5,b6]]/2",
  H: "[[e4,a4,c5,a5,a6]@4 ~@2 g3 a3, e3@3 ~, ~ [e4,g4,b4,g5,g6]]/2", I: "c3 a3, [c4,f4,a4,f5,f6]",
  J: "[c3,g3,c4]@2 c4 b3, [e4,g4,e5,e6]", K: "[d3,d4,f4,a4,d5,d6], a3@7 ~", L: "g3@6 b3@9 ~, [d4,g4,b4,b6]",
  M: "[c3,g4,c5,e5]", N: "[g2,g4,b4,d5]", O: "[a2,e4,a4,c5]", P: "[e2,e4,g4,b4]", Q: "[f2,c4,f4,a4]",
  R: "[c3,c4,e4,g4]", S: "[d3,d4,f4,a4]", T: "[g2,d4,g4,b4]", U: "[g4,c5,e5], c3@7 ~", V: "g3@2 b3 c4, [g4,b4,d5]",
  W: "[a3,e4,a4,c5]", X: "e3@2 b3 g3, [e4,g4,b4]", Y: "[f3,c4,f4,a4]", Z: "[e3,c4] c4, [e4,g4]",
  AA: "d3@3 f3, [d4,f4,a4]", AB: "d5 e5 f5 g5 e5 f5 g5 a5 f5 g5 a5 b5 g5 a5 b5 c6, [g3,d4,g4,b4]",
  AC: "[c3,g4,c5,e5,c6,c7]", AD: "[g2,g4,b4,d5,b5,b6]", AE: "[a2,e4,a4,c5,a5,a6]", AF: "[e2,e4,g4,b4,g5,g6]",
  AG: "[f2,c4,f4,a4,f5,f6]", AH: "[c3,c4,e4,g4,e5,e6]", AI: "[d3,d4,f4,a4,d5,d6]", AJ: "[g2,d4,g4,b4,b6]",
  AK: "d5 e5 f5 g5 e5 f5 g5 a5 f5 g5 a5 b5 g5 a5 b5 c6, [g2,d4,g4,b4]", AL: "[e3,e4,g4,b4]",
  AM: "[f3,g4,a4], [c4,f4]@7 ~", AN: "g4 b4 c5 e5, c3, [c4,d4,e4]@7 ~", AO: "[e4,a4,c5]@7 ~, a3",
  AP: "[d3,d4,f4,a4,c5]", AQ: "d5 e5 f5 g5 e5 f5 g5 a5 f5 g5 a5 b5 g5 a5 b5 c6, g3, [g4,b4]@7 ~",
  AR: "[[d4,g4,b4,b6]@16 d5 e5 f5 g5 e5 f5 g5 a5 f5 g5 a5 b5 g5 a5 b5 c6, g2]/2", AS: "[d3,a4,d5,f#5,a5]",
  AT: "~ [a4,c#5,e5]@11 [b5,b6]@4, a2", // A B
  AU: "[[b2,f#4]@4 ~@3 [a5,a6], [f#5,f#6]@7 ~, [b4,d5]@7 ~ f#2@8, ~@8 [f#4,a4,c#5]@7 ~]/2", // B5 A F# Bm F#m
  AV: "[g5,g6]@11 ~ [a5,a6]@4, [g2,d4,g4,b4]", AW: "[d5,d6]@11 ~ [e5,e6]@3 ~, d3, [d4,f#4,a4]@7 ~",
  AX: "[f#5,f#6] [e5,e6], e3, [e4,g4,b4]@7 ~", AY: "[a2,a5,a6], [e4,a4,c#5]@7 ~", AZ: "[d3,a4,d5,f#5]",
  BA: "~@8 a5 g5 f#5 ~ g5 f#5 e5 d5, a2, [a4,c#5]@7 ~, e5@11 e5@3 ~@2", BB: "[f#4,b4,d5]@7 ~, b2",
  BC: "~@8 f#5 e5 d5 ~ e5 d5 c#5 b4, f#2, [f#4,a4]@7 ~, c#5@11 c#5@3 ~@2", // F#m
  BD: "~@8 d5 c#5 b4 ~ c#5 b4 a4 g4, [d3,d4,f#4], a4@11 a4@3 ~@2", BE: "[e4,g4,b4]@7 ~, e3", BF: "[a2,e4,a4,c#5]@15 ~",
  BG: "[d5 ~@4 g5 f#5 e5, [d3,a4,f#5] a2, ~@4 d5@11 ~ [a4,c#5]@14 ~@2, ~@3 a5@7 ~@6, ~@4 e5@3 ~]/2", // D A
  BH: "[~@5 e5 d5 c#5, b2 f#2, [f#4,b4,d5]@7 ~ [f#4,a4]@7 ~, ~@3 f#5@7 ~@6, ~@4 c#5@3 ~]/2", // Bm F#m
  BI: "[~@16 a4@4 ~@4 d5@4 f#5@3 ~, g2@17 ~@15, [d4,g4,b4]@15 ~ [d3,d4,f#4]@16, ~@6 d5@13 ~ a4@11 ~]/2", // G D
  BJ: "[b4,f#5] ~ d5 f#5, e3, [e4,g4]@7 ~, ~@2 b4@5 ~", BK: "[b5 a5 b5 a5, [a2,e4,a4,c#5]]/2",
  BL: "[d3,d4,f#4,a4,b4,e5,d6]", // Bm7
})).s("gm_string_ensemble_1").gain(0.15)

// chords · pizzicato strings · "strings | pizzicato"
const pizzicato_strings = note("<~@80 A ~ B ~ A ~ C ~@44>".pickRestart({
  A: "~@2 [b4,d5] ~ [d5,g5] ~ [b4,d5] ~@9", B: "~@2 [a4,c5] ~ [c5,g5] ~ [a4,c5] ~@9",
  C: "~@2 [f4,a4] ~ [a4,c5] ~ [c5,f5] ~@9", // F Am F5
})).s("gm_pizzicato_strings").gain(0.29)

// other · brass section · "brass"
const brass_section_2 = note(`<
  ~@11 A B ~@10 C D ~@14 E F G H I J@2 K@2 L ~@23 M ~ N ~ O ~ P Q ~@16 R ~ S ~ T ~ U ~@9 V W ~ X ~ Y ~ X ~ W ~ X ~ Y ~ X
  ~@3
>`.pickRestart({
  A: "~@6 g5!2 g5@2 ~ f5@2 ~ e5@2", B: "f5@11 ~@5", C: "~@12 [g4,g5]@3 ~", D: "[c5,c6]@3 ~@13",
  E: "~@9 g4 [a3,a4] ~ [c4,c5] [d4,d5] [d#4,d#5] [e4,e5]", // A C D D# E
  F: "c6 [g5,a5,b5] [g4,a4,b4,d5,e5,f5] [c4,d4,e4,f4] ~@6 [g4,a4,d5,g5]!2 ~ [g4,a4,d5,g5] [e4,a4,c5,e5] ~, c5@3 ~@13", // G G7 Dm7 Gsus2 Am
  G: "[f4,b4,e5,a5]@3 ~ [e4,e5]@2 [f4,g4,b4,d5,g5]@2 ~@2 [a4,a5] ~ [c5,c6] [d5,d6] ~ [c5,c6], ~@4 [f4,b4] ~@11", // Fmaj7 E G7 A C D C Fdim
  H: "~@15 [b4,b5]", // B
  I: "~ [a#4,a#5] [a4,a5] ~ [g4,g5] [a4,a5] ~ [b4,b5] ~@2 [a#4,a#5] [a4,a5] [g4,g5] ~ [f#4,f#5] [f4,f5]", // A# A G A B A# A G …
  J: "[~ [a3,a4] [g#3,g#4] [a3,a4] [e4,e5] ~ [d4,d5] [c4,c5] ~ [a3,a4] [g3,g4] [f3,f4] [e3,e4] [f3,f4] [f#3,f#4] [g3,g4]@9 ~ [g4,g5] ~ [e4,e5] [a4,a5] [g4,g5] [e4,e5] [d4,d5]]/2", // A G# A E D C A G …
  K: "[[e4,f4,a4,c5,e5]@2 ~ [c4,f4,a4,c5] ~ [a3,c4,f4,a4] [c4,f4,a4,c5]@2 ~@2 [d4,d5]@2 [e4,e5] [g4,g5] [a4,a5] [f4,b4,e5,g5]@8 ~ [g4,g5] ~ [g4,g5] ~@2 [e5,f5] [e4,f4,a4,b4,c5,d5] [f3,g3,a3,b3,c4,d4], ~@14 [g4,g5] ~]/2", // Fmaj7 F D E G A Em G …
  L: "e3 ~@15", M: "~@2 [g4,g5]!2 ~ [g4,g5] [f#4,f#5] ~ [g4,g5]@2 ~@6",
  N: "~@2 [a4,a5]!2 ~ [a4,a5] [g4,g5] ~ [a4,a5]@2 ~@6", // A G A
  O: "~@2 [g#3,g#4] [a3,a4] [c4,c5] [c#4,c#5] [d4,d5] [f4,f5] ~ [g4,g5] [g#4,g#5] [a4,a5] ~@4", // G# A C C# D F G G# …
  P: "~@2 [a4,c5,f5,a5] ~@2 [b4,d5,f5,b5] ~@2 [c5,f5,a5,c6]@2 ~@6", Q: "[g4,g5]@13 ~@3",
  R: "~@4 [g4,g5]@2 ~ [g4,g5] ~@8", S: "~@4 [c5,c6] [d5,d6] ~ [e5,e6] ~@8", T: "~@4 [a4,a5]@2 ~ [c5,c6] ~@8",
  U: "~@4 [a4,a5] [b4,b5] ~ [c5,c6] ~@8", V: "~@9 [a4,a5] ~ [f#4,f#5] [a4,a5] [c#4,c#5] [b3,b4] [a3,a4]",
  W: "[f#4,f#5]", X: "[d4,d5]", Y: "[b3,b4]",
})).s("gm_brass_section").gain(0.52)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B C B D B C B E B C B F B C B G B C B H B@2 I J B F B K B F B L B C B C B C B M B C B H B@2 N O B C B K B C B P
  B C B D B C B Q B C B F B C B R ~@24 A B F B K B F B E B F B F B F I J B F B S B D T U A ~
>`.pickRestart({
  A: "x!9 ~ x!3 ~@3", B: "~ x ~ x", C: "~@4 x ~@7 x ~@2 x", D: "~@2 x ~@3 x!2", E: "~@2 x ~@2 x ~@2 x ~ x ~ x!3 ~",
  F: "~@4 x ~@7 x ~ x!2", G: "~ x ~@2 x!2 ~ x ~@2 x!6", H: "~@2 x ~@2 x!3", I: "~@2 x ~@2 x ~@2 x ~@2 x!2 ~ x!2",
  J: "x!3 ~ x!11 ~", K: "~@4 x ~@7 x!4", L: "~@2 x ~@2 x ~@2 x ~@3 x!3 ~", M: "~ x!2 ~ x!3 ~@2 x!7",
  N: "~@2 x ~@2 x ~@2 x ~@2 x ~ x!3", O: "x!16", P: "~@2 x ~@2 x!2 ~ x!3 ~ x!3 ~", Q: "~ x!2 ~@2 x!2 ~ x ~ x ~ x!3 ~",
  R: "~ x!2 ~ x!2 ~ x ~ x!6 ~", S: "~@2 x ~ x!4", T: "~@2 x ~@2 x ~@2 x ~ x ~ x!4", U: "x!15 ~",
})).gain(0.28)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!80
  ~@4
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!12
  ~
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!24
  ~@2
>`).gain(0.28)

// drums · open hat
const open_hat = s("oh").struct("<~@8 [~ x ~ x ~ x ~ x]!80 ~@4 [~ x ~ x ~ x ~ x]!12 ~ [~ x ~ x ~ x ~ x]!24 ~@2>")
  .gain(0.28)

// … 15 more lines

More by Village People