Strudelify

The Bioluminescence of the Night

james horner

KeyD minorTempo80 bpm
0:00/0:00
// The Bioluminescence of the Night — James Horner
// 80 bpm, 3/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/4 at bar 1, 2/4 at bar 6, 3/4 at bar 7, 4/4 at bar 13, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5930185; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 62 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/3)

// 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 · piccolo
const piccolo = note("<~@33 A B C D E ~@6 F G F G H I J K J L M N O ~@5>".pickRestart({
  A: "d6@2 d6", B: "a5@16 b5@6 a5 b5", C: "c6@2 c6", D: "gb5 g5@11 f5@4 eb5@8", E: "d5", F: "ab6 c6 f6", G: "ab5 c6 f5",
  H: "f6@19 g6@2 f6@3", I: "e6@2 ~", J: "d7 g6 bb6", K: "d6 g6 bb5", L: "f6@4 g6 f6", M: "e6@4 f6 e6", N: "d6@2 c6",
  O: "d6@2 ~",
})).s("gm_piccolo").gain(0.3)

// other · piccolo · soft notes
const piccolo_soft = note("<~@4 A@4 ~@2 B@2 ~@5 C@3 ~@6 D@2 E F G H@2 ~@29>".pickRestart({
  A: "[~@16 a6 d7 ~ a6 d7@12 a6@16]/2", B: "[~@4 a6 d7 ~ a6 d7@8 a6@32]/2", C: "[a6 d7 a6 d7 a6 d7 e7@4 a6@18 ~@8]/3",
  D: "[a6@4 d7@4 a6 d7 ~ a6 d7 a6 ~ d7 e7@12 d7@20]/2", E: "b5", F: "a5", G: "g5 gb5 a5", H: "[g5@20 ~@2 d6 e6]/2",
})).s("gm_piccolo").gain(0.2)

// other · flute
const flute = note("<~@6 A B C D E@2 ~@27 F G H I ~ J@4 K L M N O P Q R S ~@5>".pickRestart({
  A: "~@2 a4", B: "d5@2 e5", C: "f5 g5 e5", D: "c5 a4 b4", E: "[a4@23 ~]/2", F: "~@2 c5", G: "d5@2 eb4 f4 c5 bb4",
  H: "~@4 ab5 eb5 c5 eb5@2 f5 c5 eb5", I: "g5 bb4 g4 eb4 g4 bb4 g4 bb4 eb5 bb4 g5 eb5",
  J: "[~@2 f5 ab5 g5@2 f5 g5 ab5 f5 c5 f5@3 c5 eb5 g5 f5@3 ~ c5 ab4 c5@2 ~ f5 ab5 g5@2 f5 g5 ab5 f5 c5 f5@3 c5 eb5 g5 f5@3 ~@2 f5 eb5]/4",
  K: "d5 f4 a4 f4 g4 a4 f4 a4 g4 a4@3", L: "c5 e4 g4 e4 f4 g4 e4 g4 f4 g4@3", M: "~@2 g4 d5 bb4@3 a4@3 ~@2",
  N: "~@2 bb4 a4@3 g4 a4 bb4 g4 d4 g4", O: "~@2 g4 d5 bb4@3 a4@3 f4 g4", P: "a4@2 ~@2 a4 f4 a4 d5 a4 f5@3",
  Q: "~@4 g4 e4 g4 c5 g4 e5@3", R: "f4@15 ~ c4@8", S: "d4 f4 bb4 f4 ~@2",
})).s("gm_flute").gain(0.45)

// other · flute · soft notes
const flute_soft = note("<~ A B C D@2 ~@7 E@3 F@4 G H I J K L@3 M N O P@2 ~@4 Q R S ~@16 T U V@4>".pickRestart({
  A: "a4 d5@2", B: "e5 f5@2", C: "c5 b4@2", D: "[d5@4 a4@19 ~]/2", E: "[~ f4@3 g4@3 b4@2]/3", F: "[c5 b4 a4@21 ~]/4",
  G: "f4", H: "g4@23 ~", I: "b4@8 c5@11 ~ b4@4", J: "a4@15 ~ g4@4 b4@4", K: "a4@15 ~ b4@8", L: "[a4@17 ~]/3",
  M: "d5@15 ~ e5@4 d5@4", N: "db5@8 d5@11 ~ db5@4", O: "b4 a4 db5", P: "[b4@19 ~@5]/2", Q: "g4 a4 bb4",
  R: "a4@11 ~ bb4@4 c5@8", S: "bb4@5 ~@3", T: "~@2 c4", U: "d4@23 ~", V: "[c5@91 ~@5]/4",
})).s("gm_flute").gain(0.25)

// other · flute
const flute_2 = note(`<
  ~@6 A B A B A C D@4 E@4 F G H I J K@3 L M N O@2 ~@4 P Q R S T U V W@4 X Y Z AA@2 AB AC AD AE AF AG@4
>`.pickRestart({
  A: "f6 a5 d6", B: "f5 a5 d5", C: "f5@2 a5@2 d5 f5", D: "[a4@4 f4@4 d4@23 ~ d4@24 e4@24 b4@16]/4",
  E: "[c5 b4 f4@21 ~]/4", F: "d4", G: "e4", H: "g4", I: "f4@15 ~ g4@4 e4@4", J: "f4@15 ~ g4@8", K: "[f4@17 ~]/3",
  L: "d5@15 ~ e5@4 d5@4", M: "db5@8 d5@11 ~ db5@4", N: "b4 a4 db5", O: "[b4@19 ~@5]/2", P: "g4 a4 bb4",
  Q: "a4@11 ~ bb4@4 c5@8", R: "bb4@15 ~ c5@8", S: "d5@2 eb5 f5 c6 bb5", T: "ab5", U: "bb5", V: "d6 eb6 d6",
  W: "[c6@7 ~]/4", X: "d6@19 e6@2 d6@3", Y: "e6@15 ~ f6@4 e6@4", Z: "d6@15 ~ c6@8", AA: "[d6@23 ~]/2",
  AB: "d6@15 ~ e6@4 d6@4", AC: "c6@15 ~ d6@4 c6@4", AD: "bb5@15 ~ ab5@8", AE: "bb5@15 ~ c5@8", AF: "d5@23 ~",
  AG: "[f4@91 ~@5]/4",
})).s("gm_flute").gain(0.25)

// other · flute
const flute_3 = note(`<
  A@6 B C D E F@2 ~ G@3 H@4 I J K L@5 M N O P@2 Q R S T U V@2 W X Y Z AA@4 AB AC AD AE@2 AF AG AH AI AJ AK@3 ~
>`.pickRestart({
  A: "[~@8 d4@129 ~@7]/6", B: "~@2 a4", C: "f4@2 g4", D: "a4 c5 g4", E: "f4 d4 g4", F: "[f4@23 ~]/2",
  G: "[~@8 f4@24 g4@24 g4@15 ~]/3", H: "[~@2 d4@21 ~]/4", I: "f4", J: "g4", K: "g4@5 ~@3", L: "[d4@19 ~]/5",
  M: "gb4@23 ~", N: "e4@23 ~", O: "g4 gb4 a4", P: "[g4@19 ~@5]/2", Q: "b4@23 ~", R: "f4@23 ~", S: "a4@23 ~",
  T: "eb4@23 ~", U: "d4@8 d4@15 ~", V: "[d4@15 ~ eb4@15 ~ d4@8 c4@8]/2", W: "d4 c4 g4", X: "f5", Y: "g5",
  Z: "bb5 c6 bb5", AA: "[ab5@7 ~]/4", AB: "a5@19 g5@2 f5@3", AC: "c6@15 ~ d6@4 c6@4", AD: "bb5@15 ~ a5@8",
  AE: "[bb5@23 ~]/2", AF: "a5@15 ~ g5@4 f5@4", AG: "g5@15 ~ f5@4 e5@4", AH: "f5@15 ~ f5@8", AI: "f5@15 ~ ab4@8",
  AJ: "bb4@23 ~", AK: "~ c4 f4 g4 ab4 c5",
})).s("gm_flute").gain(0.25)

// other · flute
const flute_4 = note(`<
  ~@6 A@4 B@2 ~ C@4 D E D F G H I@3 J H K L@2 M@2 K N L O P Q@2 ~ R S T U@4 V W X Y@2 Z AA X AB AC AD@4
>`.pickRestart({
  A: "[d4@91 ~@5]/4", B: "[d4@23 ~]/2", C: "[~@8 d4@24 c4@24 d4@23 ~@5 a4@4 e5@4 a4@4]/4", D: "f5@2 ~ a4 e5 a4",
  E: "f5 a4 ~ a4 e5 a4", F: "d4", G: "c4", H: "d4@23 ~", I: "~ a4 e5 a4 f5@2", J: "~ a4 e5 a4 f5 a4", K: "gb4@23 ~",
  L: "e4@23 ~", M: "[e4@19 ~@5]/2", N: "c4@23 ~", O: "eb4@23 ~", P: "c4@8 d4@15 ~", Q: "[d4@15 ~ eb4@15 ~@17]/2",
  R: "c5", S: "eb5", T: "f5 eb5 d5", U: "[c5@7 ~]/4", V: "f5@19 e5@2 d5@3", W: "g5@15 ~ f5@4 e5@4", X: "d5@15 ~ c5@8",
  Y: "[g5@23 ~]/2", Z: "f5@15 ~ g5@4 f5@4", AA: "e5@15 ~ f5@4 e5@4", AB: "d5@15 ~ f4@8", AC: "f4@23 ~",
  AD: "[c4@91 ~@5]/4",
})).s("gm_flute").gain(0.2)

// bass · flute · "Bass Flute"
const bass = note("<~@6 A@6 B@8 A C D A@5 E F G H@2 G I F J@2 K@2 L I M N I@4 A O D@3 A O P Q R I@4>".pickRestart({
  A: "d3", B: "[d3@4 d3@3 e3@3 g3@3 d3@3 d3@3 d3@3 d3@2]/8", C: "e3", D: "g3", E: "gb3", F: "a3", G: "b3",
  H: "[b3@5 ~]/2", I: "f3", J: "[c3@2 g3]/2", K: "[f3@2 eb3@2 d4 c4]/2", L: "bb3 a3 g3", M: "eb3", N: "bb3", O: "c3",
  P: "f3@2 f3", Q: "bb3@2 f3", R: "~ f3 d4@4",
})).s("gm_electric_bass_finger").gain(0.25)

stack(piccolo, piccolo_soft, flute, flute_soft, flute_2, flute_3, flute_4, bass)

More by james horner