Strudelify

Lights Up

Dylan McKinney

KeyD♭ majorTempo90 bpm
0:00/0:00
// Lights Up — Dylan McKinney
// 90 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5902522; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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.

// other · oboe
const oboe = note(`<
  A@2 B C D E F G ~@4 H I H J K@3 L M@2 N O P Q P Q P Q@3 H R S ~@2 R T U ~ R T U V K@3 W M@2 N O X Y X Y X Y@2 Z P Q P
  Q P Q@2 AA
>`.pickRestart({
  A: "f4@2 f4!2", B: "gb4@2 gb4!2", C: "gb4!2", D: "f4@2 f4 ab4", E: "ab4@2 ab4!2", F: "ab4!2", G: "ab4 ~", H: "bb4",
  I: "c5 db5", J: "bb4 ~", K: "[bb4@4 ~@4 bb4@4 bb4@2 ab4@6 ab4@4 ab4@3 ab4@3 ab4@4 gb4@2 gb4@4 ~@8]/3",
  L: "bb4@3 f4 f4@3 f4 ab4@4 bb4@4", M: "[~@4 db5@2 db5 c5@3 c5@2 c5@2 c5@2]/2", N: "bb4@2 bb4 bb4@4 ~",
  O: "~@8 f4 gb4 ab4 gb4@3 f4@2", P: "~@2 f4 db4@5", Q: "db4@3 d4@5", R: "~@6 f4@2 f4@2 eb4!2 eb4@4",
  S: "~@3 f4!2 eb4 eb4@2", T: "~@6 f5@2 f5@2 eb5@2 eb5 db5 bb4 db5", U: "bb4 ~@3", V: "bb4 ab4 ~@2",
  W: "ab4@3 f4 f4@3 f4 gb4@4 ab4@4", X: "gb4", Y: "f4@8 f4 gb4 ab4 gb4@3 f4@2", Z: "c5@3 d5@5", AA: "db4 eb4 f4 d4@5",
})).s("gm_oboe").gain(0.25)

// other · clarinet · "B♭ Clarinet"
const clarinet = note("<~@8 A@3 B C@2 D E ~@17 F G H I F G H I F G H ~@25>".pickRestart({
  A: "[f4@4 ~@4 ab4@4 bb4@2 eb4@6 db4@4 ab4@3 gb4@3 f4@4 db4@2 db4@4 ~@8]/3", B: "f4@3 db4 db4@3 db4 eb4@4 f4@4",
  C: "[~@4 ab4@2 bb4 eb4@3 db4@2 ab4@2 gb4@2]/2", D: "f4@2 db4 db4@2 ~@3",
  E: "f4@3 db4 db4@3 db4 eb4@3 f4 bb3@4, ~@12 eb4 ~@3", F: "bb4 ~@2 c5", G: "db5 ~@2 c5", H: "bb4 ~@3",
  I: "~@5 f4 bb4@2",
})).s("gm_clarinet").gain(0.3)

// other · clarinet · "B♭ Clarinet" · soft notes
const clarinet_soft = note("<~@33 A B C D A B C D A B ~@14 E F@2 ~@9>".pickRestart({
  A: "~@2 bb4 ~", B: "~@2 db5 ~", C: "~@2 ab4 db5", D: "bb4@2 ab4@2 gb4 ~@3", E: "gb4", F: "ab4@3 bb4@5",
})).s("gm_clarinet").gain(0.2)

// other · bassoon
const bassoon = note(`<
  A B C D E B F G ~@4 H I H J A K A H A K A L M N M N M N@3 O P Q R A P Q R A P Q S T A K A H A K A L U V U V U V@3 M N
  M N M N@2 W
>`.pickRestart({
  A: "db4@2 db4!2", B: "c4@2 c4 db4", C: "bb3@2 bb3!2", D: "bb3 db4", E: "db4@2 db4 c4", F: "bb3!2", G: "bb3 ~",
  H: "db4", I: "c4!2", J: "db4 ~", K: "c4@2 c4!2", L: "db4@8 ab3 c4 db4 bb3@3 ab3@2", M: "~ bb3", N: "ab3@3 bb3@5",
  O: "~@3 gb4 f4@4", P: "db4 ~ db4 eb4", Q: "f4 ~ f4 eb4", R: "db4 ~ db4!2", S: "db4 ~ db4 f4", T: "eb4 db4 ~@2",
  U: "~@2 f4 db4 bb3 gb3@2 bb3", V: "ab3 c4 eb4 bb3@5", W: "db4 eb4 f4 d4@5",
})).s("gm_bassoon").gain(0.2)

// bass · tuba · "Euphonium"
const bass = note(`<
  A@3 B C A D E ~@4 F G H E I J K H I J K L M N M N M N@3 O P Q R S P Q R S P Q T U I J K H I J K L V W V W V W@2 N M N
  M N M N@2 X
>`.pickRestart({
  A: "ab3@2 ab3!2", B: "ab3!2", C: "bb3@2 bb3 ab3", D: "gb3!2", E: "gb3 ~", F: "f3", G: "eb3 f3", H: "gb3",
  I: "f3@2 f3!2", J: "eb3@2 f3!2", K: "gb3@2 gb3!2", L: "gb3@8 ab3 bb3 c4 bb3@3 ab3@2", M: "~@5 gb3@3", N: "f3@3 f3@5",
  O: "~@3 eb3", P: "f3 ~ f3 eb3", Q: "db3 ~ db3!2", R: "eb3 ~ eb3!2", S: "eb3@2 eb3!2", T: "db3 ~ f3 ab3",
  U: "bb3 ab3 ~@2", V: "bb3", W: "ab3@8 ab3 bb3 c4 bb3@3 ab3@2", X: "db3 eb3 f3 d3@5",
})).s("gm_tuba").gain(0.2)

// bass · tuba
const bass_2 = note(`<
  ~@7 A B C D E B C D F B C D G B C D F ~@2 G H G H@3 ~ I J K G I J K G I J K L B C D G B C D F G H G H G H@3 ~@2 G H G
  H@2 M
>`.pickRestart({
  A: "~@8 bb1!2 bb1@2 bb1@2 bb1@2", B: "bb1 ~ f2 db2", C: "db2 ~ f2 db2", D: "eb2 ~ eb2!2", E: "eb2 ~@7", F: "eb2 ~",
  G: "eb2", H: "ab1@3 bb1@5", I: "bb1@2 f2 db2", J: "db2@2 f2 db2", K: "eb2@2 eb2!2",
  L: "eb2@4 eb2@4 bb1!2 bb1@2 bb1@2 bb1@2", M: "db2 eb2 f2 d2@5",
})).s("gm_tuba").gain(0.2)

stack(oboe, clarinet, clarinet_soft, bassoon, bass, bass_2)