Strudelify

Blinding Lights

The Weeknd

KeyF majorTempo171 bpm
0:00/0:00
// Blinding Lights — The Weeknd
// 171 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 "Trompette en Si♭" trumpet (copy of ch 3 "Clarinette en Si♭" clarinet)
// note: Transcription provider: pdmx. https://musescore.com/score/5928337; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 134 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(171/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 · clarinet · "Clarinette en Si♭"
const clarinet = note(`<
  ~@4 A B@3 ~@4 A C A C D E@3 F@2 G@4 ~ H I J K@2 L@2 M@2 N@2 O@2 P@2 Q R S@2 T@2 D U@2 V S@2 T@2 D@2 W X A C A C D E@3
  F@2 G@4 ~ H I J K@2 L@2 M@2 N@2 O@2 P@2 Q R S@2 T@2 D U@2 V S@2 T@2 D@2 W X A C A C D E@3 A C A C D E@3 A C A C D Y@2
  Z AA@2
>`.pickRestart({
  A: "f4@4 ~@4 f4@3 ~@3 eb4@2", B: "[f4 g4 ~ c4@4 eb4@17]/3", C: "f4 g4 ~ c4@2 eb4@3", D: "bb4 g4@2 f4 ~ eb4@3",
  E: "[bb4 g4@2 f4 ~ eb4@2 f4@17]/3", F: "f4/2", G: "eb4/2", H: "~@3 bb4 c5 bb4 c5 bb4", I: "c5",
  J: "~@4 c5 bb4 c5 bb4", K: "[eb5@2 bb4 bb4@2 c5 g4@6 c5 bb4 c5 bb4]/2",
  L: "[eb5@4 bb4@2 bb4@4 c5@2 g4@12 bb4 c5@7]/2", M: "bb4/2", N: "[~@2 c4@2 eb4 f4@2 g4@2 c4@2 eb4@2 f4@2 ~]/2",
  O: "[c4@2 c4@2 eb4 f4@2 g4@2 c4@2 eb4@2 f4@2 ~]/2", P: "[bb3@2 c4@2 eb4 f4@2 g4@2 c4@2 eb4@2 f4@2 ~]/2",
  Q: "d5 ~@3 c5 ~@3", R: "bb4 ~@2 bb4 c5 eb4@3", S: "[f4@12 ~ f4 g4@2]/2", T: "[f4@2 eb4 eb4@2 c4 eb4@4 c4@4 eb4@2]/2",
  U: "[bb4 g4@2 f4 ~ eb4@5 f4@4 ~@2]/2", V: "~@3 bb4 c5 eb4@3", W: "eb4 f4 ~ d5", X: "~ d5 ~ d5",
  Y: "[bb4 g4@2 f4 ~ eb4@2 f4@9]/2", Z: "f4", AA: "f5/2",
})).s("gm_clarinet").gain(0.4)

// other · trombone
const trombone = note(`<
  A@8 ~@4 B@4 C@3 D ~@16 E@4 F@2 ~@2 E@4 G@3 H E@4 I@3 J B@4 C@3 D ~@16 E@4 F@2 ~@2 E@4 G@3 H E@4 I@3 J B@4 C@3 D B@4
  C@3 D ~@7 D K@2
>`.pickRestart({
  A: "f2/8", B: "[f3@13 eb3 f3 c3@17]/4", C: "[eb3@13 eb3 f3 d3@9]/3", D: "bb3@3 ab3@3 g3@2",
  E: "[f2@13 eb2 f2 c2@17]/4", F: "[eb2@13 eb2 f2@2]/2", G: "[eb2@13 eb2 f2 d2@9]/3", H: "bb2@3 ab2@3 g2@2",
  I: "[eb2@13 eb2 f2 d2@5 ~@2 d3@2]/3", J: "~ d3 ~ d3", K: "[~@5 eb3 f3@10]/2",
})).s("gm_trombone").gain(0.45)

// bass · tuba
const bass = note(`<
  A@8 ~@4 B@4 C@3 D ~@16 B@4 E@2 ~@2 B@4 C@3 D B@4 F@3 G B@4 C@3 D ~@16 B@4 E@2 ~@2 B@4 C@3 D B@4 F@3 G H@4 I@3 J H@4
  I@3 J ~@7 J K@2
>`.pickRestart({
  A: "f2/8", B: "[f2@13 eb2 f2 c2@17]/4", C: "[eb2@13 eb2 f2 d2@9]/3", D: "bb2@3 ab2@3 g2@2", E: "[eb2@13 eb2 f2@2]/2",
  F: "[eb2@13 eb2 f2 d2@5 ~@2 d3@2]/3", G: "~ d3 ~ d3", H: "[f3@13 eb3 f3 c3@17]/4", I: "[eb3@13 eb3 f3 d3@9]/3",
  J: "bb3@3 ab3@3 g3@2", K: "[~@5 eb3 f3@10]/2",
})).s("gm_tuba").gain(0.45)

// bass · tuba · "Sousaphone en Si♭"
const bass_2 = note(`<
  ~@12 A@4 B@3 C A@4 B@3 C A@4 B@3 C ~ D@3 ~ E ~@2 A@4 B@3 C A@4 F@3 G A@4 B@3 C A@4 B@3 C A@4 B@3 C ~ D@3 ~ E ~@2 A@4
  B@3 C A@4 F@3 G A@4 B@3 C A@4 B@3 C ~@7 C H@2
>`.pickRestart({
  A: "[f2@13 eb2 f2 c2@17]/4", B: "[eb2@13 eb2 f2 d2@9]/3", C: "bb2@3 ab2@3 g2@2", D: "[~@5 eb2 f2 c2@17]/3",
  E: "~@5 eb2 f2@2", F: "[eb2@13 eb2 f2 d2@5 ~@2 d3@2]/3", G: "~ d3 ~ d3", H: "[~@5 eb2 f2@10]/2",
})).s("gm_tuba").gain(0.5)

// bass · tuba · "Sousaphone en Si♭" · soft notes
const bass_soft = note("<A@8 ~@28 B@2 ~@2 C@2 D E ~@40 B@2 ~@2 C@2 D E ~@42>".pickRestart({
  A: "f1/8", B: "[f2@13 ~@3]/2", C: "[eb2@13 ~@3]/2", D: "d2 ~@3 c2 ~@3", E: "bb1 ~@7",
})).s("gm_tuba").gain(0.3)

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

// drums · rim
const rim = s("rim").struct("<~@8 [~ x ~ x]!3 [~@2 x ~@2 x ~ x] ~@122>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@12 [~ x ~ x]!120 ~@2>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B A B C@8 A B A B A B A B A B A B A B A B A B A B A B A B C@24 A B A B A B A B A B A B A B A B A B A B A B A B
  C@32 A B A B@5 ~@2
>`.pickRestart({
  A: "x!2", B: "x ~@3 x!2 ~@2", C: "x!8",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct(`<
  ~@26 A ~@7 A ~@2 B ~ B ~ B ~@2 A ~@29 A ~@7 A ~@2 B ~ B ~ B ~@2 A ~@39 A ~
>`.pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.4)

stack(clarinet, trombone, bass, bass_2, bass_soft, kick, rim, snare, hihat, crash)