Strudelify

star trek - the inner light

Jay Chattaway

KeyB♭ majorTempo100 bpm
0:00/0:00
// star trek - the inner light — Jay Chattaway
// 100 bpm, 3/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/6265621; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 108 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · trumpet
const trumpet = note(`<
  A@2 B@2 C D@2 E F@2 ~@16 G H I J K L M N O H I J P Q R S@2 ~@8 T U V W Q R X@2 ~@2 Y Z K AA@2 AB AC AD@2 AE AF@2 AG
  AH@6 AI AJ@7 AK@4 AL AM@3 AN AO@6 ~ AP@2 AQ@2
>`.pickRestart({
  A: "bb3/2", B: "[bb3@4 a3 f3]/2", C: "f3 g3 a3", D: "[bb3@2 f4@7 eb4 d4@2]/2", E: "c4", F: "c4/2",
  G: "~@6 d4 eb4 f4 eb4 d4 c4", H: "d4@3 c4 bb3@2", I: "f4@2 f4", J: "f4 g4 a4", K: "bb4", L: "a4@2 eb5", M: "d5@2 c5",
  N: "bb4@2 f4", O: "g4", P: "bb4@4 g4 a4", Q: "bb4@3 a4 g4@2", R: "a4@2 f4", S: "[g4@2 ~]/2", T: "f3@3 g3 f3@2",
  U: "bb3@2 bb3", V: "c4@2 f4", W: "d4@4 g4 a4", X: "g4/2", Y: "~ d4 g4", Z: "a4 bb4 c5", AA: "f4/2",
  AB: "~@4 d4@2 ~ d4@2 ~@2 d4@2 ~ d4@2 ~@2 d4@2 ~@4", AC: "~ d4@2 ~@2 d4@2 ~ d4@2 ~@2 d4@2 ~ d4@2 ~@5 a3@2",
  AD: "[~@2 a3@2 ~@2 a3@2 ~ a3@2 ~@2 a3@2 ~@5 bb3@2 ~ bb3@2 ~@2 bb3@2 ~@2 d4@2 ~ d4@2 ~@5 a3@2 ~@2 a3@2 ~]/2",
  AE: "a3@2 ~@2 c4@2 ~@2 c4@2 ~@5 bb3@2 ~ bb3@2 ~@2 bb3@2",
  AF: "[~ bb3@2 ~@2 bb3@2 ~@5 bb3@2 ~@2 bb3@2 ~ bb3@2 ~@2 bb3@2 ~ bb3@2 ~@6 eb4@2 ~ eb4@2 ~@2 eb4@2 ~ f4@2 ~@2]/2",
  AG: "g4@2 ~ f4@11 eb4@4 d4@6",
  AH: "[~ bb3@14 bb3@7 c4@14 ~ f4@7 d4@14 g4@4 a4@3 bb4@11 a4@3 g4@7 ~ a4@14 f4@7 d4@30 g4@6]/6",
  AI: "~ a4@7 bb4@12 a4@4",
  AJ: "[g4@8 f4@11 eb4@4 d4@8 g4@15 f4@8 d4@11 c4@4 bb3@8 c4@16 g4@8 f4@16 d4@8 c4@16 bb3@8 c4@19]/7",
  AK: "[~@5 f4@50 c4@25 ~@4 f3@4 bb3@4 c4@4]/4", AL: "d4@8 ~@5 bb3@4 eb4@4 f4@3",
  AM: "[~ g4@8 ~ f4@25 d4@12 c4@4 bb3@8 ~ f4@12]/3", AN: "eb4@4 d4@8 ~ bb4@11",
  AO: "[~ c5@4 d5@8 ~ g4@25 bb3@25 a3@25 bb3@25 bb3@17 ~@13]/6", AP: "[~@23 d4@22 ~@3]/2", AQ: "[~@5 d4@39 ~@4]/2",
})).s("gm_trumpet").gain(0.21).pan(0.6)

// other · french horn · "Horn in F"
const french_horn = note(`<
  A@2 B C D E F C G H ~@9 I J K J L M N O P Q R S R T U S I J K V W X Y@2 ~@8 A@2 Z AA AB C AC AD B C AE AF Z A@2 AG@5
  AH@3 AI AJ@2 AK AL@8 AM@7 AN AO@8 ~@2 AP@2 AQ@2
>`.pickRestart({
  A: "f3/2", B: "g3", C: "f3", D: "eb3", E: "f3 bb3@2", F: "c4", G: "f3@3 g3 a3 c4", H: "f4", I: "~ f3 bb3 f3 c4 f3",
  J: "~ f3 bb3 c4 d4 f4", K: "~ f3 g3 a3 c4@2", L: "~ eb4 f4", M: "~ f4 g4", N: "~ g4 a4", O: "~@6 d4 eb4 f4 eb4 d4 c4",
  P: "bb3@2 bb3", Q: "f3@2 f3", R: "a3@2 a3", S: "bb3", T: "bb3@2 c4", U: "bb3@2 a3", V: "~ f3 bb3 c4 d4@2",
  W: "d4@3 c4 bb3@2", X: "c4@2 a3", Y: "[g3@2 ~]/2", Z: "f3 g3 a3", AA: "bb3 c4 d4", AB: "eb4 d4 c4",
  AC: "~ d3 g3 d3 a3 f3", AD: "~ d3 g3 d3 g3 a3", AE: "~ d3!2", AF: "c3 d3 eb3",
  AG: "[f4@11 eb4@3 d4@7 bb3@14 ~ bb3@7 c4@14 f4@7 d4@14 ~@8 c4@14 g4@7 f4@13]/5",
  AH: "[~ eb4@7 ~ d4@14 bb3@7 g3@21 ~@4 f3@2 ~@2 f3@2 ~ f3@2 ~@2 f3@2 ~ f3@2 ~]/3",
  AI: "~@4 f3@2 ~@2 f3@2 ~@2 f3@2 ~ f3@2 ~@2 f3@2 ~@3",
  AJ: "[~@2 f3@2 ~ f3@2 ~@2 f3@2 ~@2 f3@2 ~ f3@2 ~@5 bb3@2 ~@2 bb3@2 ~ bb3@2 ~@2 bb3@2 ~@2 bb3@2 ~@5 g3@2 ~]/2",
  AK: "g3@2 ~@2 g3@2 ~ g3@2 ~@2 g3@2 ~@5 a3@2 ~@2 a3@2",
  AL: "[~ a3@2 ~@2 a3@2 ~ a3@2 ~@2 bb3@22 bb3@22 eb4@23 ~ d4@23 eb4@23 bb3@23 a3@24 bb3@19]/8",
  AM: "[~@5 ab3@24 f3@24 bb3@50 ~@4 f3@4 a3@4 c4@4 a3@8 ~ bb3@25 g3@12 f3@3]/7", AN: "~ eb3@8 ~ f3@14",
  AO: "[~@11 bb3@25 c4@25 bb3@25 f4@8 eb4@17 f4@25 f4@25 d4@25 d4@6]/8", AP: "[~@23 bb3@22 ~@3]/2",
  AQ: "[~@5 bb3@39 ~@4]/2",
})).s("gm_french_horn").gain(0.28).pan(0.4)

// other · trombone
const trombone = note(`<
  A B C D E F G@4 ~@16 H I@2 J D J I K F L M N O J P Q@2 ~@8 A D R S T D C U V@2 W C X G@2 Y@5 Z@3 AA AB@2 AC AD@2 AE
  AF@7 AG@8 AH AI@3 AJ@2 ~@6
>`.pickRestart({
  A: "bb3", B: "a3", C: "g3", D: "f3", E: "eb3", F: "d3", G: "c3/2", H: "c3 d3 eb3", I: "f3@2 f3", J: "eb3@2 eb3",
  K: "f3@2 eb3", L: "~ f3 bb3 f3 c4 f3", M: "~ f3 bb3 g3 bb3@2", N: "~ f3 c4@4", O: "~ f3 g3 bb3 g3@2", P: "c3@2 c3",
  Q: "[d3@2 ~]/2", R: "f3 g3 a3", S: "bb3 c4 d4", T: "eb4 d4 c4", U: "a3 bb3 c4", V: "bb3/2", W: "~ d3 g3 d3 g3@2",
  X: "d3 eb3 f3", Y: "[f3@11 eb3@3 d3@7 bb3@14 ~ bb3@7 c4@14 f3@7 d3@14 ~@8 c3@14 g3@7 f3@13]/5",
  Z: "[~ eb3@7 ~ d3@14 bb3@7 g3@21 ~@4 d3@2 ~@2 d3@2 ~ d3@2 ~@2 d3@2 ~ d3@2 ~]/3",
  AA: "~@4 d3@2 ~@2 d3@2 ~@2 d3@2 ~ d3@2 ~@2 d3@2 ~@3",
  AB: "[~@2 c3@2 ~ c3@2 ~@2 c3@2 ~@2 c3@2 ~ c3@2 ~@5 d3@2 ~@2 d3@2 ~ d3@2 ~@2 d3@2 ~@2 d3@2 ~@5 eb3@2 ~]/2",
  AC: "eb3@2 ~@2 eb3@2 ~ eb3@2 ~@2 eb3@2 ~@5 c3@2 ~@2 c3@2", AD: "[~ c3@2 ~@2 c3@2 ~ c3@2 ~@2 d3@30 g3@6]/2",
  AE: "~ a3@7 bb3@12 a3@4",
  AF: "[g3@8 f3@11 eb3@4 d3@8 g3@15 f3@8 f3@11 eb3@4 d3@8 c3@16 g3@8 f3@16 d4@8 c4@16 bb3@8 bb3@8 a3@11]/7",
  AG: "[~@5 f3@50 a3@25 f3@25 eb3@25 f3@25 f3@25 a3@12]/8", AH: "g3@4 f3@8 ~ g3@11",
  AI: "[~ a3@4 bb3@8 ~ bb3@25 ~@8 d3@4 f3@4 bb3@8 ~@9]/3", AJ: "[f3@4 g3@4 a3@8 ~ f3@25 ~@6]/2",
})).s("gm_trombone").gain(0.14).pan(0.6)

// other · trombone · soft notes
const trombone_soft = note("<~@47 A B C D ~@50 E@2 ~ F@2 G@2>".pickRestart({
  A: "~ f3 c4", B: "d4", C: "~ c3 f3", D: "f3 g3 a3", E: "[~@18 f3@17 ~@13]/2", F: "[~@23 f3@22 ~@3]/2",
  G: "[~@5 f3@39 ~@4]/2",
})).s("gm_trombone").gain(0.08).pan(0.6)

// bass · tuba · "Euphonium"
const bass = note(`<
  A B C D A@2 E F G@2 ~@9 H I J K L M N ~ O P Q R S T U V W@2 X Y Z AA AB@2 AC AD AE AF AG AD AH C AI A U AJ AK AL AM AN
  AO F AP@2 Z AQ@2 AR AS AT AU AV AW AX@2 AY@8 AZ@6 BA@7 BB@8 ~ BC@2 BD@2
>`.pickRestart({
  A: "bb2", B: "a2", C: "g2", D: "f2", E: "~ g2 bb2 c3 d3@2", F: "f3", G: "[f2 c3 f3@10]/2", H: "~ f3 bb3 f3 c4 f3",
  I: "~ f3 bb3 g3 bb3@2", J: "~ f3 c4@4", K: "~ f3 g3 bb3 g3@2", L: "~ bb3 eb4 bb3 f4 bb3", M: "~ bb3 f4 bb3 c4@2",
  N: "d4", O: "f2 bb2@2", P: "f2 d3@2", Q: "f2 a2 c3", R: "d3@2 eb3", S: "f3 c4@2", T: "f3 bb3@2", U: "f3 g3 a3",
  V: "bb3@2 a3", W: "bb3", X: "a3", Y: "g3", Z: "eb3@2 eb3", AA: "f3@2 f3", AB: "[g3@8 ~@2 g3 a3]/2",
  AC: "bb3@3 a3 g3@2", AD: "f3@2 d3", AE: "g3@2 f3", AF: "bb2@2 ~", AG: "c3@2 g3", AH: "c3@2 bb2", AI: "d3",
  AJ: "bb3 c4 d4", AK: "g3 f3 eb3", AL: "c3", AM: "~ d3 g3", AN: "a3 g3@2", AO: "~ bb2 eb3 f3 g3@2", AP: "g3/2",
  AQ: "f3/2", AR: "bb3@4 ~@14 f3@2 ~ bb3@3", AS: "~@19 a3@4 ~", AT: "~@4 g3 ~", AU: "~@7 f3@2 ~@3", AV: "~@11 d3@4 ~@9",
  AW: "~@9 eb3@4 ~@11", AX: "[~@6 eb3@4 ~@10 f3@7 bb3@18 f3@2 ~]/2",
  AY: "[~ bb3@21 a3@21 ~ g3@21 bb2@21 ~ f2@21 g2@22 g2@22 eb3@23 ~ bb2@16]/8",
  AZ: "[~@7 eb3@23 bb2@23 c3@16 g3@8 f3@16 d3@8 eb3@24 c3@19]/6", BA: "[~@5 bb2@50 bb2@50 bb2@25 c3@25 d3@12 c3]/7",
  BB: "[~@3 bb2@8 ~ f3@25 d3@25 f3@8 eb3@17 f2@4 bb2@21 f2@4 c3@21 bb2@25 bb2@17 ~@13]/8", BC: "[~@23 bb2@22 ~@3]/2",
  BD: "[~@5 bb2@39 ~@4]/2",
})).s("gm_tuba").gain(0.2).pan(0.6)

// bass · tuba
const bass_2 = note(`<
  A B C D E F G@2 H@2 ~@16 I J@2 K L M N O P O N M Q R O S@2 T U V W X U Y C Z F E AA E AA AB@2 AC@2 AB@2 R H@2 AD AE AF
  AG AH AI AJ@2 AK@6 AL@8 AM@2 AN@2 AO AP AQ@8 ~@2 AR@2 AS@2
>`.pickRestart({
  A: "bb1", B: "a1", C: "g1", D: "f1", E: "eb2", F: "d2", G: "c2/2", H: "f2/2", I: "~@4 d2 c2", J: "bb1@2 bb1",
  K: "c2@2 c2", L: "d2@2 eb2", M: "c3@2 c3", N: "bb2@2 bb2", O: "f2@2 f2", P: "g2@2 d2", Q: "d3@4 g2 f2",
  R: "eb2@2 eb2", S: "[g2@8 ~@2 g2 a2]/2", T: "bb2@3 a2 g2@2", U: "f2@2 d2", V: "g2@2 f2", W: "bb1@2 ~", X: "c2@2 g2",
  Y: "c2@2 bb1", Z: "bb1@5 c2", AA: "f2", AB: "g2/2", AC: "eb2/2", AD: "bb2@4 ~@14 f2@2 ~ bb2@3", AE: "~@19 a2@4 ~",
  AF: "~@4 g2 ~", AG: "~@7 f2@2 ~@3", AH: "~@11 d2@4 ~@9", AI: "~@9 eb2@4 ~@11",
  AJ: "[~@6 eb2@4 ~@10 f2@7 bb2@18 f2@2 ~]/2", AK: "[~ bb2@21 a2@21 ~ g2@21 eb2@21 ~ f2@21 g2@30 g2@6]/6",
  AL: "[~ f2@7 eb2@23 ~ bb1@23 eb2@23 bb1@23 f2@24 g2@24 ab2@24 f2@19]/8", AM: "[~@5 bb1@43]/2", AN: "[~@7 bb1@41]/2",
  AO: "~@3 eb2@5", AP: "~@5 f2@7", AQ: "[~@11 bb1@25 a1@25 g1@25 eb2@25 f2@25 f2@25 bb2@25 bb2@6]/8",
  AR: "[~@23 bb1@22 ~@3]/2", AS: "[~@5 bb1@39 ~@4]/2",
})).s("gm_tuba").gain(0.25).pan(0.4)

stack(trumpet, french_horn, trombone, trombone_soft, bass, bass_2)