Strudelify

Everybody Have Fun Tonight

Wang Chung

KeyE majorTempo130 bpm
0:00/0:00
// Everybody Have Fun Tonight — Wang Chung
// 130 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 electric guitar muted (copy of ch 5 electric guitar clean); ch 9 tenor sax (copy of ch 7 brass section)
// note: Full arrangement: all 148 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.

// bass · acoustic bass
const bass = note(`<
  ~ A ~ A ~ B C B C B C D E F G B H I J K B F L B H I J K B@8 M N L B M N L B C B C B O P F L B@2 I J B@9 M N L B@2 N F
  B C B C B C B Q R@7 S B C B C B C B C N L B M N T U V U V U V U W N L B M N L B C B C B C B C B C B C B C B C B C B C
  B C B C U V U V U V U W
>`.pickRestart({
  A: "e2@2 g#2 b2 ~@2 e2 ~", B: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", C: "d2 ~ d2 ~ d2 ~ d2 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  D: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ d2@2", E: "e2 ~@7", F: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  G: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ d2 ~", H: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ c#2@2",
  I: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ c#2 ~ c#2 ~", J: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  K: "d2 ~ d2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", L: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ d2@2",
  M: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ b1@2", N: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~",
  O: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", P: "d2 ~@7", Q: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~, d1",
  R: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", S: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ d2@2",
  T: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ f2@2", U: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ f2@2",
  V: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~", W: "g2 ~@7",
})).s("gm_acoustic_bass").gain(0.5)

// chords · epiano1
const epiano1 = note("<~@80 A B C D E F G F ~@60>".pickRestart({
  A: "[e4,f4,a4,c5]", B: "[d4,e4,g4,b4]", C: "[c4,d4,f4,a4]", D: "[a#3,c4,e4,g4]", E: "[a3,c4,d4,f4]",
  F: "[g#3,c4,d4,f4]", G: "[g3,a#3,c4,e4]",
})).s("gm_epiano1").gain(0.5)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A B C D@2 B E B F B F G H I@2 J@2 K@2 J@2 I@2 J@2 K@2 L@2 M N M N M N M O P Q R S P Q T C T C T U ~ I@2 J@2 K@2 L@2 M
  N M N M N M O P Q R S P Q T C T C T C T ~@9 T C T C T C T C P Q R S P Q V@6 W X P Q R S P Y T C T C T C T C T C T C T
  C T C T C T C T C T C V@6 W ~
>`.pickRestart({
  A: "~@7 b3", B: "[e3,d4]@3 e3 [g#3,e4]@2 [b3,e4]@2 d4@2 b3@2 d4@2 e4@2", C: "d4 a4 c#4 a4",
  D: "[[e3,d4]@3 e3 [g#3,e4]@2 [b3,e4]@2 d4@2 b3@2 [g#5,b5,d6]@13 ~@5 b3 ~]/2", E: "d4@4 a4@4 c#4@4 ~@2 b3 ~, ~@3 a4",
  F: "d4@2 a4@2 c#4@2 ~ b3, ~@3 a4", G: "[e3,d4]@3 e3 [g#3,e4]@2 [b3,e4]@2 d4@2 b3@2 d4 ~ d4@2", H: "e4 ~@15",
  I: "[~@2 [e4,a4,b4,d5] ~@5 [e4,a4,b4,d5] ~@3 [e4,a4,b4,d5]@20]/2", J: "[~@8 [e4,b4,e5] ~@3 [e4,b4,e5]@20]/2",
  K: "[~@2 [a4,d5,f#5] ~@5 [a4,d5,f#5] ~@3 [a4,c#5,e5]@20]/2", // D A
  L: "[~@8 [e4,b4,e5] ~@3 [e4,b4,e5]@12 [e4,b4,e5] ~@3 [e4,b4,e5] ~@3]/2", // E5
  M: "[a4,d5,f#5]@2 ~ [a4,d5,f#5]!2 ~@3 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~@3", // D
  N: "[b4,e5,g#5]@2 ~ [b4,e5,g#5]!2 ~@3 [b4,e5,g#5] ~@3 [b4,e5,g#5] ~@3", // E
  O: "[b4,e5,g#5]@2 ~ [b4,e5,g#5]!2 ~@3 [b4,e5,g#5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~", P: "[c#5,e5,g#5]",
  Q: "[a4,c#5,e5]", R: "[b4,d5,g#5]@2 ~ [b4,d5,g#5]!2 ~@3 [b5,d6,g#6]@2 ~ [b5,d6,g#6]!2 ~@3",
  S: "~@8 [e4,b4,e5] ~@3 [e4,b4,e5] ~@3", T: "e3@3 e3 g#3@2 b3@2 d4@2 b3@2 d4@2 e4@2", U: "d4 a4 [d4,a4] a4, ~ [b4,e5]",
  V: "f3@2 g3 ~@5", W: "f3@2 g3 ~@4 f3", X: "[g3,d5,f5,b5] [d5,f5,b5]!8 ~@7",
  Y: "~@10 [b4,g5] ~ [a4,f#5] ~ [g4,e5] ~, [a4,c#5,e5]@3 ~", // Em D C A
})).s("gm_electric_guitar_clean").gain(0.64)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@6 A ~ B ~ A ~@8 C D ~@8 E F E F E F E G ~@2 H I ~@3 J ~ B ~ K L ~@8 E F E F E F E M ~@2 H I ~@3 A ~ B ~ J ~ N O P Q
  R S T U V ~ A ~ B ~ A ~ B ~@2 H W ~@12 H W ~@3 J ~ B ~ J ~ B ~ J ~ B ~ A ~ B ~ J ~ B ~ A ~ B ~@8
>`.pickRestart({
  A: "[b3,b4]@2 [a3,a4] [g#3,g#4] [e3,e4]@4", B: "[b3,b4]@2 [a3,a4] [g#3,g#4] [g3,b4]@2 [f#3,a4] [e3,g#4]", C: "~@7 b3",
  D: "a3@2 g#3 e3@5", E: "a3", F: "g#3", G: "b3@15 ~", H: "[g#3,g#4]@2 [a3,a4] [b3,b4] ~@3 [b3,b4]",
  I: "[a3,a4]@2 [g#3,g#4] [e3,e4]@3 ~@2", J: "[b3,b4]@2 [a3,a4] [g#3,g#4] [e3,e4]@3 ~",
  K: "[b3,b4]@2 [a3,a4] [g#3,g#4] b4@2 a4 g#4, ~ e3", L: "d4 ~@7", M: "b3", N: "[b3,b4]@2 [a3,a4] [g#3,g#4] [b3,b4]@4",
  O: "[e4,f4,a4,c5]", P: "[d4,e4,g4,b4]", Q: "[c4,d4,f4,a4]", R: "[a#3,c4,e4,g4]", S: "[a3,c4,d4,f4]",
  T: "g#3@4 g#4@2 [g3,g4] [f3,f4], [c4,d4], f4@7 ~, ~ g#3", U: "[g3,a#3,c4,e4]",
  V: "g#3@4 ~@2 g#4 c5, [c4,f4], d4@5 d4@3, ~ g#3", W: "[a3,a4]@2 [g#3,g#4] [e3,e4]@4 ~",
})).s("gm_string_ensemble_1").gain(0.45)

// other · brass section
const brass_section = note(`<
  ~@5 A ~ A ~ A ~ B C ~@2 A ~@3 A ~@3 A ~@3 A@2 ~ D ~ E ~ D F G ~@6 A ~ A ~ A ~ H ~@2 A ~@3 A ~@2 D ~ I ~ D F J ~@6 A ~
  A ~ A ~ A ~@16 E ~@5 K L M L N L M L ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A E A ~ A ~ A ~ A E L M L O L M L ~
>`.pickRestart({
  A: "[d4,d5]@4 [e4,e5]@2 [e4,e5] ~@9", B: "[d4,d5]@4 [e4,e5]@2 [e4,e5] ~@7 [d4,d5]@2", C: "[e4,e5] ~@15",
  D: "~@8 [d4,d5]@2 [d4,d5]@2 [c#4,c#5]@2 [b3,b4] ~", E: "~@14 [b4,e5,b5] ~", F: "~@4 [d4,d5] ~@11",
  G: "~@4 [e4,e5]@2 [e4,e5] ~@7 [b4,b5] ~", H: "[d4,d5] ~@15", I: "~@10 [b4,e5,b5] ~@3 [a4,e5,a5] ~",
  J: "~@4 [e4,e5]@2 [e4,e5] ~@3 [b4,e5,b5]@2 [b4,e5,b5]@2 [b4,e5,b5] ~", K: "~@14 [a4,a5] ~",
  L: "~@4 [f4,f5] [g4,g5] ~@6 [f4,f5] [g4,g5] ~@2", // F G F G
  M: "~@4 [f4,f5] [g4,g5] ~@2 [f4,f5] ~ [f4,f5] ~ [f4,f5] [e4,e5] [d4,d5] ~", // F G F E D
  N: "~@4 [g4,c5,g5,c6] ~ [g4,c5,g5,c6]!2 ~ [f4,a#4,f5,a#5] ~ [f4,a#4,f5,a#5] ~@2 [c4,f4,c5,f5]!2", // C5 A#5 F5
  O: "~@4 [c5,g5,c6] ~ [g4,c5,g5,c6]!2 ~ [f4,a#4,f5,a#5] ~ [f4,a#4,f5,a#5] ~@2 [c4,f4,c5,f5]!2", // C5 A#5 F5
})).s("gm_brass_section").gain(0.8)

// other · celesta
const celesta = note(`<
  ~@36 A ~@5 B ~@14 C ~@7 A ~@3 D ~ E ~@7 F ~@17 G ~ H ~ E ~@3 I ~@5 J ~ K ~@29 I ~@4
>`.pickRestart({
  A: "~@2 a3 ~@5 f3 ~@3 d3 ~ d3 ~", B: "~@11 f3 ~@2 d3!2", C: "~@10 [d3,f3] ~@5", D: "~@14 [d3,f3] ~",
  E: "~@6 a3 ~ a3 ~ f3 ~ f3 ~ d3 ~", F: "~@2 c4 ~ a3 ~@3 a3 ~ a3 ~ f3 ~ d3 ~", G: "~@10 d3 ~ d3 ~ d3 ~",
  H: "~@8 f3 ~ f3 ~ d3 ~ d3 ~", I: "~@6 a3 ~ a3 ~ f3 ~ f3 ~ d3!2", J: "~@10 a3 ~ f3 ~ d3 ~", K: "~@10 a3 ~ a3 f3 d3 ~",
})).s("gm_celesta").gain(0.71)

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

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

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

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@6 A ~@4 B ~@3 B ~ B ~ B ~@2 C A ~@7 A ~@3 A ~ A ~@5 A B ~ B ~ B ~@10 C A ~@3 A ~@8 A@2 ~@19 A ~ D ~ B ~@5 A ~
  A ~ A ~@12 E A ~@6 E A ~@3 D ~ B ~@5
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~@7 x", D: "~@13 x ~@2", E: "~@15 x",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@87 A ~@5 B ~@23 B ~@5 B ~@7 C ~@7 C ~@8>".pickRestart({
  A: "~@4 x!5 ~@7", B: "~@10 x!5 ~", C: "~@8 x!8",
})).gain(0.64)

stack(bass, epiano1, electric_guitar_clean, string_ensemble_1, brass_section, celesta, kick, snare, hihat, crash, ride)

More by Wang Chung