Strudelify

Everyone's a Winner

Hot Chocolate

KeyF majorTempo113 bpm
0:00/0:00
// Everyone's a Winner — Hot Chocolate
// 113 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(113/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 · electric bass pick · "Staff-3"
const bass = note(`<
  ~ A@4 B C D@2 B C D@2 E@8 F E F E F E F G D@2 B C D@2 B C D@2 E@8 F E F E F E F G D@2 B C D@2 B C D@10 B C D@2 B C D@2
  B C H@2 B C D@2 B C D@2 B C I ~
>`.pickRestart({
  A: "gb1@2 gb2@2 gb2@2 gb1!2 gb1@2 gb2@2 gb2@2 gb1@2", B: "e1@2 e1!2 e1@2 e1!2", C: "b0@2 b1!2 b0@2 b1!2",
  D: "gb1@2 gb2@2 gb2@2 gb1!2 gb1@2 gb2@2 gb2@2 gb1!2", E: "gb1@2 gb1@2 e1@2 gb1!2 gb1@2 gb1@2 e1@2 gb1!2",
  F: "e1@2 e1@2 e1@2 e1!2 e1@2 e1@2 e1@2 e1!2", G: "b1@2 b1@2 b1@2 b1!2 b1@2 b1@2 b1@2 b1!2",
  H: "gb1@2 gb1@2 gb1@2 gb1!2 gb1@2 gb1@2 gb1@2 gb1!2", I: "gb1 gb2!2 gb1!2 gb2!2 gb1",
})).s("gm_electric_bass_pick").gain(0.56)

// chords · epiano2 · "Staff-4"
const epiano2 = note(`<
  ~ A@2 B C ~@2 B@2 ~@2 B@2 ~ D ~ B ~ D ~ B E F G H G I J K F@2 ~@2 B@2 ~@2 B@2 ~ D ~ B ~ D ~ B E F G H G I L K F@2 ~@2
  B@2 ~@2 B@2 M N M N M N M N ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2 B ~
>`.pickRestart({
  A: "~ [bb3,e4] ~ [bb3,e4]", B: "~ [bb3,e4,gb4] ~ [bb3,e4,gb4]", C: "~@4 [bb3,e4,gb4]@4 b3@2 db4@2 e4 db4 b3@2",
  D: "~@3 [bb3,e4,gb4]", E: "~ ab3 ~ ab3", F: "~ [bb3,db4] ~ [bb3,db4]", G: "ab3!2 ab3@2 ~@4",
  H: "bb3!2 bb3@2 ~@2 [bb3,db4]@2", I: "db4 bb3 db4@2 ~@2 db4@2", J: "b3!2 b3@2 ~@4", K: "[b3,eb4]!4",
  L: "b3 b3@3 b3@4 ~@8", M: "~ [bb3,gb4] ~ [bb3,gb4]", N: "~@4 e4@4 b3@2 db4@2 e4 db4 b3@2",
})).s("gm_epiano2").gain(0.48)

// other · distortion guitar · "Staff-6"
const distortion_guitar = note(`<
  ~@5 A B C@2 A D C@2 ~@18 A B C@2 A E F@2 ~@18 A B C@2 A D C@2 ~@8 A B C@2 A D C@2 A E F@2 A G C@2 A B C@2 A D C@2
>`.pickRestart({
  A: "e3 eb3 e3 eb3 e3 eb3 e3 eb3 e3 eb3 db3 b2@5", B: "~@2 e3 f3 gb3 a3@3 e3 f3 gb3 a3@2 gb3 e3@2", C: "gb3/2",
  D: "~@2 b2 c3 db3 e3@3 a3@2 gb3 c4@2 gb3 a3 bb3", E: "~@2 b2 c3 db3 e3@2 db3 gb3@2 db3 e3@2 db3 c3@2", F: "gb2/2",
  G: "~@2 b2 c3 db3 e3@2 db3 c4@3 a3@2 gb3 e3@2",
})).s("gm_distortion_guitar").gain(0.56)

// chords · pad sweep · "Staff-7"
const pad_sweep = note(`<
  ~@5 A@2 B@2 C D B@2 E@8 C F C F C F G@2 B@2 A@2 B@2 C D B@2 E@8 C F C F C F G@2 B@2 A@2 B@2 C D B@2 ~@8 A@2 B@2 C D
  B@2 A@2 B@2 C D B@2 A@2 B@2 C D B@2
>`.pickRestart({
  A: "[ab3 gb3, [e3,b3]]/2", B: "[gb3,bb3,db4]/2", C: "[e3,ab3,b3]", D: "[e3,gb3,b3]", E: "[e3,gb3,bb3,db4]/4",
  F: "[gb3,bb3,db4,e4]", G: "[[e3,ab3] [gb3,eb4], b3]/2",
})).s("gm_pad_sweep").gain(0.48)

// other · brass section · "Staff-9"
const brass_section = note("<~@21 A B A C A B D E@3 ~@16 A B A F A B D E@3 ~@15 G H@4 I@4 H@4 I@8 J@4>".pickRestart({
  A: "ab4 e4 ab4 e4 ab4 ~@11", B: "bb4 gb4 bb4 gb4 bb4 ~@11", C: "bb4 gb4 bb4 gb4 bb4 ~@7 bb4@4",
  D: "b4 ab4 b4 ab4 b4 ~@11", E: "[~@12 b4@3 ~ bb4@31 ~, ~@12 gb4@35 ~]/3", F: "bb4 gb4 bb4 gb4 bb4 ~@7 bb4@3 ~",
  G: "db5 ~ db5 ~ db5 ~ db5 ~ db5 ~ [c5,db5]@2 [b4,db5]@2 [b4,db5]@2", // Dbmaj7 Bsus2
  H: "[ab4@15 ~@17 db5@23 ~ bb4 gb4 bb4 gb4 bb4@2 gb4@2, b4@31 ~@33, ~@16 gb4@39 ~@9]/4",
  I: "[ab4@15 ~@17 db5@23 ~ gb4 bb4 db5 bb4 ~ bb4 gb4@2, b4@31 ~@33, ~@16 gb4@39 ~@9]/4",
  J: "[ab4@15 ~@17 db5@23 ~@9, b4@31 ~@33, ~@16 gb4@39 ~@9]/4",
})).s("gm_brass_section").gain(0.48)

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

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

// drums · hihat
const hihat = s("hh").struct("<[x!2 ~ x!2 ~ x ~@3 x ~ x ~@3] [x!7 ~]!95 ~>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<A B@19 A B@3 A B@21 A B@3 A B@5 A B@11 A B@11 A B@15 ~>".pickRestart({
  A: "~@13 x ~@2", B: "~@7 x",
})).gain(0.48)

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

stack(bass, epiano2, distortion_guitar, pad_sweep, brass_section, kick, snare, hihat, open_hat, crash)

More by Hot Chocolate