Strudelify

control

Halsey

KeyG majorTempo120 bpm
0:00/0:00
// control — Halsey
// 119.8 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/2701326; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(119.8/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.

// chords · piano
const piano = note(`<
  A@6 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 K L@2 M N O@2 P Q R Q R Q R S@2 G@2 H@2 I@2 J@2 K L@2 M N O@2 P Q R Q R Q R
  S@2 T U V@2 W X Y T X Z AA AB AA AB AA AB AC@2 Q R Q R Q R AD@2 Q R Q AE AF AG AH@2 AI
>`.pickRestart({
  A: "[e5 b4 f5 b5, e3@15 ~]/2", B: "[e5@8 b4@21 ~ e4@2, e3@15 ~]/2",
  C: "[e4@3 e4@3 g4@2 ~@6 g4@2 a4@3 ~@3 g4@2 a4@3 g4@3 g4@2, e2@11 ~ e2@8 e2@11 ~, e3@8 e3@15 ~ e3@8, ~@8 b4@6 ~@5 g4@3 ~@10]/2",
  D: "[a4@3 g4@3 g4@2 a4@3 ~@3 g4@2 f#4@2 ~@12 e4@2, e2@11 g4@3 ~@4 e4@11 ~@3, e3@8 e3@15 ~ e3@8, ~@12 e2@8 e2@11 ~]/2",
  E: "[e4@3 e4@3 g4@2 ~@6 g4@2 a4@3 ~@3 g4@2 a4@3 g4@3 g4@2, a1@11 ~ a1@8 a1@11 ~, a2@8 a2@15 ~ a2@8, ~@8 b4@6 ~@5 g4@3 ~@10]/2",
  F: "[a4@3 g4@3 g4@2 a4@3 ~@3 g4@2 f#4@2 ~@6 a2@8, a1@11 g4@3 ~@4 e4@13 ~, a2@8 a2@15 ~@9, ~@12 a1@8 a1@11 ~]/2",
  G: "[e5@3 e5@3 e5@2 ~@6 b4@2 d5@3 ~@3 a4@2 a4@3 g4@3 g4@2, e2@11 ~ e2@8 e2@11 ~, e3@8 e3@15 ~ e3@8, ~@8 e5@6 ~@5 b4@3 ~@10]/2",
  H: "[a4@3 g4@3 g4@2 a4@3 ~@3 a4@2 a4@2 b4@2 ~@10 b4@2, e2@11 g4@3 ~@6 a4@8 ~@4, e3@8 e3@15 ~ e3@8, ~@12 e2@8 e2@11 ~]/2",
  I: "[e5@3 e5@3 e5@2 ~@6 b4@2 d5@3 ~@3 a4@2 a4@3 g4@3 g4@2, a1@11 ~ a1@8 a1@11 ~, a2@8 a2@15 ~ a2@8, ~@8 e5@6 ~@5 b4@3 ~@10]/2",
  J: "[a4@3 g4@3 g4@2 a4@3 ~@3 g4@2 f#4@2 ~@4 b3@2 e4@2 e4@2 e4@2 g4@2, a1@11 g4@3 ~@4 e4@4 ~@10, a2@8 a2@15 ~ a2@8, ~@12 a1@8 a1@11 ~]/2",
  K: "[e2,e3] b2 e3@2 g3 b2 e3@2, f#4@4 e4@11 ~", // E
  L: "[d#3@2 b2@2 ~@2 b3@2 [g3,e4]@2 [b2,e4]@2 e4@2 ~@2 d3@2 b2@2 d3@4 g3@2 b2@2 ~@2 g4 f#4, ~ d#3 ~ d#3 ~@3 d3, ~@14 g4@4 f#4@11 ~@3]/2", // C E5
  M: "c#3 b2 ~ b3 [g3,e4] [b2,e4] e4 g4, e4@3 ~@5, ~ c#3 ~ c#3", N: "c3 b2 c3@2 g3 b2 c3@2, f#4@4 e4@11 ~",
  O: "[g3@2 b2@2 ~@2 b3@2 [g3,e4]@2 [b2,e4]@2 e4@2 ~@2 f#3@2 b2@2 e3@4 g3@2 b2@2 ~@2 g4 f#4, ~ c3 ~ c3 ~@3 e3, ~@14 g4@4 f#4@11 ~@3]/2", // C E5
  P: "b1 f#2 b2@2 d#3 [b2,e4] e4 g4, e4@2 b4@3 ~ f#3@2", Q: "[c2,c3,a4] [g2,g4] [e3,e4] [g2,a4]",
  R: "[c3,g4]@2 [g2,e4]@2 a4 b4 [f#2,a4]@2, ~@2 [b1,b2] ~", // C5 C F#m B
  S: "[f#2 a2 [c3,g4] e3 g3 b3 g4 ~ b2 d#3 f#3 ~ d#4@4, f#4@2 ~ f#4@3 e4@2 ~@3 b3@2 ~@3, ~@7 f#4@2 b4@3 ~@4]/2", // C5
  T: "e5@3 e5@3 e5@2 e5@3 b4@3 b4@2, a2 a3", U: "d5@3 c5@3 b4@2 b4@3 a4@3 g4@2, a2 a3",
  V: "[e4@3 d4 e4 f#4@2 ~@2 d4@2 ~@2 d4!2 a4, a2 a3 a2 a3, ~@7 e4@2 ~@2 e4@2 ~@3]/2",
  W: "e5@3 e5@3 e5@2 e5@3 b4@3 b4@2, d3 d4", X: "d5@3 c5@3 b4@2 b4@3 a4@3 g4@2, d3 d4", Y: "a2 a3",
  Z: "d3@4 ~ e4!2 g4, ~ d4", AA: "a4 g4 e4 a4", AB: "g4@2 e4@2 a4 b4 a4@2",
  AC: "[f#4@2 g4 f#4@3 g4 f#4@2 b4@4 [b2,e4] e4 g4, ~@7 f#3]/2", // E5
  AD: "[f#2 a2 [c3,g4] e3 g3 b3 g4 ~ b2 d#3 f#3 b3@2 [b2,e4] e4 g4, f#4@2 ~ f#4@3 e4@2 ~@6 f#3@2, ~@7 f#4@2 b4@4 ~@3]/2", // C5 E5
  AE: "[c3,g4] [g2,e4] [b1,b2,g4,g5] [f#2,a4,a5]", AF: "[c2,c3] ~ e3 g2, [c5,c6]@3 [b4,b5]@4 ~, ~ g2 ~@2",
  AG: "c3 g2 [b1,b2,g4,g5] [f#2,a4,a5]", // Em F#m
  AH: "[f#2 a2 c3 e3 g3 b3 ~@2 b2 d#3 f#3 ~ b4@4, [c5,c6]@3 [b4,b5]@4 f#4@2 b4@3 ~@4, ~@6 e4@2 ~@3 b3@2 ~@3]/2", // C B
  AI: "a4@15 ~",
})).s("gm_piano").gain(0.3)

stack(piano)