Strudelify

royals

Lorde

KeyD♭ majorTempo120 bpm
0:00/0:00
// royals — Lorde
// 120 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/870821; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 52 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · piano
const piano = note(`<
  ~@4 A B C D E F@2 G H F@2 I J K L M N K O P Q@2 ~ R ~ S T U V W X F@2 G H F@2 I J K L M N K O P Y@2
>`.pickRestart({
  A: "~@11 e4 e4@2 e4@2", B: "gb4 ab4 ab4@2 gb4@2 gb4 e4 gb4@3 e4@5", C: "~@10 ab4!2 ab4@2 db5@2",
  D: "b4@2 ~@3 ab4!2 db5", E: "b4 a4@2 ab4@3 ~@10", F: "e4@2 e4@2 ab4@2 ab4@2 b4!4 ab4@2 ab4@2",
  G: "a4 ab4@2 a4@7 ~@3 a4!3", H: "a4!2 a4@2 a4 gb4@2 e4@3 ~@6", I: "a4 ab4@2 a4@2 ~@3 a4@4 ab4@4", J: "e4@3 ~",
  K: "b4@2 e5 b4", L: "ab4@4 ab4 a4 b4 ab4", M: "a4@13 a4!3", N: "a4 a4@2 a4@2 a4 a4@6 ab4@2 a4@2",
  O: "ab4!5 b4 e5@4 ~@2 b4@2 e5@2", P: "d5@2 ~ d5!2 gb5 gb5@2", Q: "[e5@4 ~@2 e4!2 ab4@2 ab4@2 ab4 gb4 e4@4 ~@14]/2",
  R: "b4@2 b4@2 a4@2 a4 gb4@7 a4@2", S: "b4 b4@3 a4@2 a4 gb4@7 a4!2", T: "b4 ab4@3 gb4@6 ~@6",
  U: "e4@8 e5@3 d5 b4@3 a4", V: "ab4@3 a4 b4 db5 b4@4 ~@2 b4@4", W: "a4 gb4 a4 d5", X: "e5",
  Y: "[e5@4 ~@2 e4!2 ab4@2 ab4@2 ab4 gb4 e4@6 ~@12]/2",
})).s("gm_piano").gain(0.64)

// other · piano
const piano_2 = note("<~@14 A ~@2 B C D E B F G@3 ~@17 B C D E B F H I@2>".pickRestart({
  A: "e4@2 e4@2 e4@2 e4@2 e4!4 e4@2 e4@2", B: "ab4@2 b4 ab4", C: "e4@4 e4 gb4 ab4 e4", D: "gb4@8 d4@5 d4!3",
  E: "db4 db4@2 db4@2 db4 db4@6 e4@2 gb4@2", F: "e4!5 ab4 b4@4 ~@2 ab4@2 b4@2",
  G: "[a4@2 a4@2 a4@6 a4@2 a4@8 ~@2 e4!2 ab4@2 ab4@2 ab4 gb4 e4@4 ~@14]/3", H: "a4!2 a4@3 a4 a4@2",
  I: "[a4@4 ~@2 e4!2 ab4@2 ab4@2 ab4 gb4 e4@6 ~@12]/2",
})).s("gm_piano").gain(0.48)

// other · piano
const piano_3 = note("<~@9 A@2 B C A@2 D E ~@10 F ~ G H I J K L A@2 B C A@2 D E ~@9>".pickRestart({
  A: "ab3@2 ab3@2 b3@2 b3@2 e4!4 b3@2 b3@2", B: "d4 db4@2 d4@7 ~@3 d4!3", C: "db4!2 db4@2 db4 b3@2 a3@3 ~@6",
  D: "d4 db4@2 d4@2 ~@3 d4@4 db4@4", E: "a3@3 ~", F: "ab4@2 ab4@2 gb4@2 gb4 eb4@7 gb4@2",
  G: "ab4 ab4@3 gb4@2 gb4 eb4@7 db4!2", H: "ab4 f4@3 eb4@6 ~@6", I: "e4@8 b4@3 a4 gb4@3 e4",
  J: "e4@3 gb4 ab4 a4 ab4@4 ~@2 ab4@4", K: "gb4 d4 gb4 d4", L: "a4",
})).s("gm_piano").gain(0.48)

// other · piano
const piano_4 = note("<~@16 A@2 B C D B@2 E F G@5 H I@2 J K L M N O L M N O B@2 C D B@2 E F ~>".pickRestart({
  A: "[e3@12 eb3@8 eb3@3 bb3 e4 b3 e4@3 b3@3]/2", B: "e3@7 b3 e4 b3 e4@3 b3@3", C: "d4@6 ~ b3 d4 b3 d4@3 e4@3",
  D: "a3@6 ~ a3 a3@2 a3@3 b3@3", E: "d4 gb3", F: "a3 ~@3", G: "e3!2 ~@4 e3!2 ~@8", H: "e3!2 ~@4 e3!2 eb3@4 gb3@4",
  I: "e3!2 ~ e3 ~ e3!3", J: "d4!2 ~ d4 ~ d4!3", K: "a3!4 a4@4", L: "e4@2 e4@2 ~@2 e4@2 e4@2 b3 d4@2 b3 d4@2",
  M: "e4@2 e4@2 ~@2 e4@2 e4@2 d4 e4@2 d4 e4@2", N: "d4@2 d4@2 ~@2 d4@2 d4@3 d4@2 e4@3",
  O: "a3@2 a3@2 ~@2 a3@2 a3@3 a3@2 e4@3",
})).s("gm_piano").gain(0.48)

stack(piano, piano_2, piano_3, piano_4)