Strudelify

a thousand years

Alex Snyder

KeyB♭ majorTempo75 bpm
0:00/0:00
// a thousand years — Alex Snyder
// 75 bpm, 6/8, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/3143296; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 66 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(75/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 · flute · "Flute 2"
const flute = note(`<
  A@2 B C B D A E F@2 G@2 H I F@2 G@2 H I J K L M N O P Q B R B S F@2 G@2 H I F@2 G@2 H I J T L U N O P Q B R B V N O P
  Q B R B W X@2
>`.pickRestart({
  A: "f4@11 ~ f4@11 ~", B: "g4@11 ~ g4@11 ~", C: "g4@11 ~ bb4@11 ~", D: "g4@11 ~ f5@11 ~", E: "f4@11 ~@13",
  F: "~ f5 bb5 d6 bb5 f5", G: "~ eb5 bb5 d6 bb5 eb5", H: "~ eb5 bb5 eb6 bb5 eb5", I: "~ f5 a5 c6 a5 f5",
  J: "g5@2 f5 g5@2 f5", K: "bb5@11 ~ c6@11 ~", L: "bb5@23 ~", M: "c5@11 ~ f5@11 ~", N: "bb4@11 ~ bb4@11 ~",
  O: "d5@12 c5@11 ~", P: "bb4@12 d5@11 ~", Q: "g4@11 ~ g5@11 ~", R: "g4@11 ~ f4@11 ~", S: "c5@11 ~ f4@11 ~",
  T: "bb5@12 c6@11 ~", U: "a5@23 ~", V: "f4@23 ~", W: "c5@23 ~", X: "[f5@23 ~]/2",
})).s("gm_flute").gain(0.25)

// other · flute · "Flute 3"
const flute_2 = note(`<
  A B C D A E A F A@2 C@2 A G H A C@3 I A J K L H M A N O P Q R S T S U V W S T S U V W C X Y Z H M A N O P Q L H M A N
  O P Q L AA@2
>`.pickRestart({
  A: "bb4@23 ~", B: "bb4@11 ~ a4@11 ~", C: "g4@23 ~", D: "g4@11 ~ f4@11 ~", E: "bb4@11 ~ f4@11 ~", F: "f4@23 ~",
  G: "c5@23 ~", H: "d5@23 ~", I: "eb4@23 ~", J: "g5@11 ~ a5@11 ~", K: "d4@11 ~ bb4@11 ~", L: "f5@23 ~",
  M: "bb4@12 a4@11 ~", N: "d5@11 ~ c5@11 ~", O: "eb5@11 ~ eb5@11 ~", P: "eb5@11 ~ bb4@11 ~", Q: "eb4@11 ~ d5@11 ~",
  R: "a4@23 ~", S: "bb4@11 ~ bb4@11 ~", T: "bb4@4 ~@2 d5 c5@3 bb4@2", U: "bb4@4 ~@2 f5@2 eb5 d5@3",
  V: "bb4 g4@3 ~@2 f5@2 eb5 d5@3", W: "c5@2 d5 a4@2 bb4", X: "g5@12 a5@11 ~", Y: "d6@3 c6 bb5@2 bb5@2 c6@2 d6@2",
  Z: "c6@23 ~", AA: "[bb4@23 ~]/2",
})).s("gm_flute").gain(0.25)

// other · flute · "Flute 4"
const flute_3 = note(`<
  ~@8 A@2 B@3 A C A B@3 A D E F G H I J K C L M N A@2 B@3 A C A B@3 A D O F P H I J K C L M A H I J K C L M N Q@2
>`.pickRestart({
  A: "f4@23 ~", B: "eb4@23 ~", C: "bb4@23 ~", D: "g4@2 f4 g4@2 f4", E: "g4@11 ~ f4@11 ~",
  F: "d5@3 c5 bb4@2 bb4@2 c5@2 d5@2", G: "a4@11 ~ c5@11 ~", H: "d4@23 ~", I: "bb4@12 a4@11 ~", J: "g4@23 ~",
  K: "d4@11 ~ g4@11 ~", L: "bb4@11 ~ f4@11 ~", M: "eb5@11 ~ d5@11 ~", N: "c4@23 ~", O: "bb4@12 c5@11 ~", P: "f4!6",
  Q: "[d4@23 ~]/2",
})).s("gm_flute").gain(0.4)

// other · flute · "Flute 4" · soft notes
const flute_soft = note(`<
  [d4@11 ~ d4@11 ~]
  [d4@11 ~ c4@11 ~]
  [d4@11 ~ d4@11 ~]!2
  [eb4@11 ~ eb4@11 ~]
  [eb4@11 ~ bb4@11 ~]
  [d4@11 ~ d4@11 ~]
  [c4@11 ~ bb4@4 a4@4 f4@4]
  ~@58
>`).s("gm_flute").gain(0.2)

stack(flute, flute_2, flute_3, flute_soft)