Strudelify

I See The Light

Alan Menken

KeyC minorTempo120 bpm
0:00/0:00
// I See The Light — Alan Menken
// 120 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 78, 4/4 at bar 78) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/1351086; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 82 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 · flute
const flute = note(`<
  ~@4 A B A C D E F G A B A C H I J K L M N O L M P Q L M R S T A B U V ~ D E W X Y Z AA AB AC AD AE AF AG AH AI AH AI
  AD AJ AK AL AM AN ~ AL AM AO AP AQ AR@2 AS AT ~ AU AV AW Z ~ AU AX@2 AY@2
>`.pickRestart({
  A: "g5 f5 e5@2", B: "d5 e5 d5 b4 c5@2 g4@2", C: "d5 e5 d5 b4 c5@4", D: "a5 g5 f5@2", E: "g5 c6 g5 c5 e5@2 d5@2",
  F: "g5@2 ~ f5 e5@2 c5@2", G: "d5@15 ~", H: "a5@2 g5@2 f5@3 a5", I: "b5@3 g5 g5@3 b5", J: "c6@2 b5@2 a5@3 e5",
  K: "g5@11 ~ a5@2 b5@2", L: "c6@2 f5@2 f5@3 e5", M: "g5@11 ~ c5@2 d5@2", N: "d5@3 d5 g5@3 f5", O: "f5@2 e5@4 a5 b5",
  P: "e5@3 f5 e5@3 d5", Q: "c5@11 ~ a5@2 b5@2", R: "e5@3 f5 e5@2 d5@2", S: "d5 c5@2 ~", T: "~ a5", U: "g5 f5 e5 d5",
  V: "c5@15 ~", W: "g5 f5 e5 c5", X: "d5 ~@7", Y: "eb5 d5 c5 bb4 ab4 g4 ab4 f4", Z: "eb5@15 ~",
  AA: "~ d5 ab5 d5 ~ g4 eb5 g4", AB: "~ g4 eb5 g4 ~ g4 eb5 g4", AC: "~ g5 f5 d5 ~ ab5 g5 eb5",
  AD: "~ eb5 c6 eb5 ~ eb5 c6@2", AE: "~ eb5 bb5 eb5 eb5@2 d5@2", AF: "~ bb4 g5 bb4 ~ ab4 a5@2",
  AG: "~ f5 ab5 f5 d5 eb5 f5 g5", AH: "~ bb4 g5 bb4 ~ bb4 g5 bb4", AI: "~ d5 ab5 d5 ~ bb4 g5@2",
  AJ: "~ d5 bb5 d5 ~ d5 bb5@2", AK: "~ g4 eb5 g4 ~ c5 a5@2", AL: "~@6 c6 d6", AM: "eb6@2 ab5@2 ab5@3 g5", AN: "bb5 ~",
  AO: "bb5@4 ~@2 eb5 f5", AP: "g5@3 ab5 g5@2 d6@2", AQ: "eb6@4 ~@2 g5 ab5",
  AR: "[bb5@4 ab5@2 ab5@6 bb5@2 g5@9 ~@5 g5@2 g5@2]/2", AS: "f5@3 eb5 d5@2 f5@2", AT: "f5@3 ab5 ab5@4",
  AU: "bb5 ab5 g5 ~", AV: "f5 g5 f5 d5 eb5@2 bb4@2", AW: "bb5@3 ab5 g5@3 d5", AX: "[d6@8 eb6@15 ~@9]/2",
  AY: "[~@8 eb6@15 ~@9]/2",
})).s("gm_flute").gain(0.3)

// other · flute
const flute_2 = note(`<
  ~@16 A B C D E F G H E I J K E I L M N O P Q R@2 ~@2 S ~ T U ~ V ~ W X Y Z AA AB B AC AD AE Y AF AG AH AI AJ AG AK AL
  AM AN AO AP AQ AR AS AT AU AV AW AX@2 AY AZ@2
>`.pickRestart({
  A: "f5@15 ~", B: "g5@15 ~", C: "a5@15 ~", D: "f5 d5", E: "~ c5 f5 c5 ~ c5 a5@2", F: "~ c5 e5 c5 ~ c5 g5@2",
  G: "~ b4 d5 b4 ~ d5 f5@2", H: "~ g4 c5 g4 ~ c5 e5@2", I: "~ c5 e5 c5 c5@2 a4 b4", J: "~ g4 b4 g4 e5 d5 c5 b4",
  K: "a4@11 ~@5", L: "~ g4 b4 g4 ~ b4 g4@2", M: "~@3 g4 a4 c5 f4 g4", N: "a4 c5 f5 g5 c6@4", O: "e5@15 ~", P: "d5 c5",
  Q: "c5 b4", R: "[~@3 d5 e5 c5 d5 g4@2 g4 c5 d5 e5@2 g5@2]/2", S: "~ e4 g4 c5 ~ gb4 a4@2", T: "bb4@15 ~",
  U: "eb5 c5 bb4@2", V: "g5 f5 eb5@2", W: "ab5 g5 f5 ~", X: "bb4@2 c5 bb4", Y: "eb5 f5",
  Z: "~@4 ab4 bb4 c5@2 d5@2 eb5@2 f5@2 g5@2", AA: "bb5 ~ g5@2", AB: "ab5 g5", AC: "f5 eb5", AD: "c5@15 ~",
  AE: "d5@15 ~", AF: "bb4@2 ab4 bb4 c5 bb4 ab4@2", AG: "~ eb5 c6 eb5 ~ eb5 c6@2", AH: "f4 g4 bb4 g4 eb5@4",
  AI: "~ f5 ab5 f5 d5@2 bb4@2", AJ: "~ bb4 g5 bb4 ~ bb4 g5 bb4", AK: "~ eb5 g5 eb5 ~ eb5 bb5@2",
  AL: "~ d5 f5 d5 b4@2 d5@2", AM: "eb5 d5!2 c5 c5@2 ~@2", AN: "~ eb5 c6 eb5 bb5 eb5 ab4@2",
  AO: "~ bb4 f5 bb4 ~ bb4 g5@2", AP: "~ d5 bb5 d5 ~ d5 bb5@2", AQ: "~ eb4 ab4 bb4 c5@2 ab4 bb4",
  AR: "c5 eb5 ab5 bb5 eb6@4", AS: "~ g5 f5 g5 bb5@2 ~@2", AT: "ab5 bb5 ab5 f5 eb5@2 g5@2", AU: "~ eb5 ab5@2 ab5@2 f5@2",
  AV: "bb5 ab5 g5@2", AW: "f5 g5 f5 d5 eb5@4", AX: "[ab5@23 ~@3 g5@2 bb5@2 g5@2]/2", AY: "eb6 bb5@2 bb5 ~ g5 bb5 g5",
  AZ: "[eb6@4 bb5@4 bb5@15 ~@9]/2",
})).s("gm_flute").gain(0.3)

// other · flute
const flute_3 = note(`<
  ~@4 A B A C D E F G A B A C D A F G H G I J D K L M D K L ~ N G O P ~@2 D E F ~ Q G R G S Q T U V W X W X Q G Y Z Q G
  Z W Q G AA AB Q W G AC@2 W AD AE AF Y AG@5
>`.pickRestart({
  A: "e5@15 ~", B: "f5 e5", C: "d5 c5", D: "c5@15 ~", E: "e5@2 c5 d5", F: "c5 d5", G: "g4@15 ~", H: "a4@15 ~",
  I: "b4 d5", J: "c5@11 ~ a4@2 b4@2", K: "g4@11 ~@5", L: "b4 g4", M: "a4@11 ~@5", N: "~ f5", O: "g4 e4", P: "a4 g4",
  Q: "ab4@15 ~", R: "bb4 g4", S: "ab4 g4", T: "g4@2 ab4 f4", U: "g4 a4", V: "bb4!2", W: "eb5@15 ~", X: "f5 eb5",
  Y: "c5 f4", Z: "bb4@15 ~", AA: "f4@2 g4 b4", AB: "c5@11 ~ bb4@4", AC: "[ab4@15 ~]/2", AD: "eb5@2 eb5 g5",
  AE: "ab4 bb4", AF: "eb5 d5", AG: "[bb4@23 ~ eb5@15 ~ eb5@15 ~ eb5@15 ~@9]/5",
})).s("gm_flute").gain(0.3)

stack(flute, flute_2, flute_3)

More by Alan Menken