Strudelify

glorious morning

Waterflame

KeyC minorTempo152 bpm
0:00/0:00
// glorious morning — Waterflame
// 152 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6307441; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(152/4)

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

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A B C D E B F D A B C D E B G H I@2 ~@6 I J K L M N O P ~@4 Q R S T U ~@3 Q R S V I J K L M N O P W X Y Z W X Y AA AB
  ~@5
>`.pickRestart({
  A: "eb5 ~@3 [g4,c5] ~@2 [g4,c5] ~@8", B: "eb5 ~@3 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@4 f5 ~@3",
  C: "eb5 ~@3 [bb4,eb5] ~@2 [bb4,eb5] ~@3 eb5 g5 ~@3", D: "f5 ~@3 [bb4,d5] ~@2 [bb4,d5] ~@4 f5 ~@3",
  E: "[c5,eb5] ~@3 [g4,c5] ~@2 [g4,c5] ~@8", F: "[eb5,g5] ~@3 [bb4,eb5] ~@2 [bb4,eb5] ~@4 [eb5,bb5] ~@3",
  G: "eb5 ~@3 [bb4,eb5] ~@2 [bb4,eb5] ~@8", H: "eb4 ~@3 [bb4,d5] ~@2 [bb4,d5] ~@4 [c5,eb5] ~@3",
  I: "c5 ~@3 c5 ~@3 c5 ~@3 c5 ~@3", J: "d5 ~@3 d5 ~@3 d5 ~@3 d5 ~@3", K: "eb5 ~@3 eb5 ~@3 eb5 ~@3 eb5 ~@3",
  L: "f5 ~@3 f5 ~@3 f5 ~@3 f5 ~@3", M: "g5 ~@3 g5 ~@3 g5 ~@3 g5 ~@3",
  N: "[f5,a5] ~@3 [f5,a5] ~@3 [f5,a5] ~@3 [f5,a5] ~@3", O: "[f5,bb5] ~@3 [f5,bb5] ~@3 [f5,bb5] ~@3 [f5,bb5] ~@3",
  P: "[g5,c6] ~@3 [g5,c6] ~@3 [g5,c6] ~@3 [g5,c6] ~@3", Q: "c5 ~@3 c5 ~@2 c5!2 ~@2 g4 c5 ~@2 g4",
  R: "eb5 ~@3 f5 ~@2 eb5 d5 ~@2 bb4 d5 ~@2 eb5", S: "~@4 c5 ~@2 c5 ~@3 g4 ~@3 g4",
  T: "eb5 ~@3 f5 ~@2 eb5 d5 ~@2 eb5 bb4 ~@2 d5", U: "c5 ~@15", V: "eb5 ~@3 d5 ~@2 eb5 g4 ~@3 bb4 ~@3",
  W: "[c6,f6] ~@7 [c6,eb6] ~@3 [bb5,d6] ~@2 [g5,c6]", X: "~@4 c5 g5 ~ f5 eb5@2 ~@2 d5@2 ~@2",
  Y: "~@4 c5 eb5 ~ d5 c5@2 ~@2 bb4@2 ~@2", Z: "~@4 bb4 g5 ~ f5 eb5@2 ~@2 d5@2 ~@2",
  AA: "[c6,f6] ~@7 [c6,eb6] ~@3 [bb5,d6] ~@3", AB: "[g5,c6] ~@15",
})).s("gm_string_ensemble_1").gain(0.3)

// other · glockenspiel
const glockenspiel = note("<~@65 [~ c6 d6 bb5] [c6 f6 a6 f6] [g6 f6 eb6 d6] [c6 ~@3] ~>").s("gm_glockenspiel").gain(0.3)

// other · viola
const viola = note("<~@6 A B C A D E C A D F C A D E C A D F ~@32 G H I J G H I J K@2 A B L@2>".pickRestart({
  A: "eb4", B: "d4", C: "c4", D: "g4", E: "[f4,bb4]", F: "bb4", G: "c4 ~ c4 ~ c4 ~ c4 ~", H: "bb3 ~ bb3 ~ bb3 ~ bb3 ~",
  I: "a3 ~ a3 ~ a3 ~@3", J: "g3 ~ g3 ~ g3 ~ g3 ~", K: "c4/2", L: "[c4@7 ~]/2",
})).s("gm_viola").gain(0.2)

// chords · flute
const flute = note("<~@24 A B A C A D E F ~@8 G H I J K ~@3 A B A C A D E F ~@14>".pickRestart({
  A: "eb6 c6 ~ eb6 d6 bb5 ~ d6 eb6 c6 ~ eb6 f6 eb6 ~ f6, c5 eb5",
  B: "eb6 c6 ~ eb6 d6 bb5 ~ d6 ~ d6 ~ eb6 d6 eb6 ~ f6, f5 bb5",
  C: "eb6 c6 ~ eb6 d6 bb5 ~ d6 bb5 d6 ~ eb6 d6 c6 ~ bb5, f5 d5",
  D: "eb6 c6 ~ eb6 d6 bb5 ~ d6 bb5 d6 ~ eb6 d6 eb6 ~ f6, f5 g5",
  E: "[c6,eb6] ~@2 eb6 d6 bb5 ~ d6 eb6 c6 ~ eb6 f6 eb6 ~ f6, ~ c6@6 ~ bb5@8", // Cm
  F: "c6 f6 ~ eb6 c6 f6 ~ eb6 g6 f6 ~ g6 bb6 g6 ~ bb6, a5 g5", G: "c6@3 ~ g5@3 ~ c6@3 g5 bb5@3 ~",
  H: "c6@3 ~ f5@3 ~ bb5@3 f5 d6@3 ~", I: "eb6@3 ~ f5@3 ~ eb6@3 f5 f6@3 eb6", J: "d6@3 ~ eb6@3 ~ d6@3 eb6 bb5@3 ~",
  K: "c6@3 ~@13",
})).s("gm_flute").gain(0.3)

// chords · flute · soft notes
const flute_soft = note("<~@8 A B A C A D E F A B A C A D E F ~@34 G H ~@2 G H ~@6>".pickRestart({
  A: "c5 eb5", B: "f5 bb5", C: "f5 d5", D: "f5 g5", E: "c6 bb5", F: "a5 g5", G: "~@2 f5 eb5", H: "c5 bb4",
})).s("gm_flute").gain(0.2)

// other · timpani
const timpani = note("<~@24 c3 ~@39 c3 ~@5>").s("gm_timpani").gain(0.3)

// bass · synth bass 1 · "Bass Synthesiser"
const bass = note("<~@29 A B C D E F G H I J K L I J K L I J K L I J I L M N O L I J I L I J K ~@6>".pickRestart({
  A: "~@15 c5", B: "eb5 c5 ~ eb5 f5 eb5 ~ f5 g5 f5 ~ g5 bb5 g5 ~ bb5",
  C: "c6 f6 ~ eb6 c6 f6 ~ eb6 g6 f6 ~ g6 bb6 g6 ~ bb6",
  D: "c5@2 ~ c2 g4@2 ~ c2 [c2,c5] ~@2 [c2,g4] bb4@2 ~ c2, c2 ~@3 c2 ~@7 c2 ~@3", // C C5
  E: "c5@2 ~ eb2 f4@2 ~ eb2 [eb2,bb4] ~@2 [eb2,f4] d5@2 ~ eb2, eb2 ~@3 eb2 ~@7 eb2 ~@3", // Eb5 Ebsus2
  F: "eb5@2 ~ f2 g4@2 ~ f2 [f2,eb5] ~@2 [f2,g4] [f2,f5] ~@2 [f2,eb5], f2 ~@3 f2 ~@11", // F7 Fsus2 F F7
  G: "d5@2 ~ g2 f4@2 ~ g2 [g2,bb4] ~@2 [g2,f4] d5@2 ~ g2, g2 ~@3 g2 ~@7 g2 ~@3", // Gm G7
  H: "c5@2 ~ c2!2 ~@2 c2!2 ~@2 c2!2 ~@2 c2, c2 ~@15", I: "eb2 ~@2 eb2!2 ~@2 eb2!2 ~@2 eb2!2 ~@2 eb2",
  J: "f2 ~@2 f2!2 ~@2 f2!2 ~@2 f2!2 ~@2 f2", K: "g2 ~@2 g2!2 ~@2 g2!2 ~@2 g2!2 ~@2 g2",
  L: "c2 ~@2 c2!2 ~@2 c2!2 ~@2 c2!2 ~@2 c2", M: "eb2 ~@2 eb2!2 ~@2 eb2!2 ~@2 eb2!2 ~@2 [eb2,c5]",
  N: "[f2,eb5] c5 ~ [f2,eb5] [f2,f5] eb5 ~ [f2,f5] [f2,g5] f5 ~ [f2,g5] [f2,bb5] g5 ~ [f2,bb5]", // F7 F Fsus2 Bb5
  O: "[g2,c6] f6 ~ [g2,eb6] [g2,c6] f6 ~ [g2,eb6] [g2,g6] f6 ~ [g2,g6] [g2,bb6] g6 ~ [g2,bb6]", // C5 Cm C5 Cm G Gm
})).s("gm_synth_bass_1").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@31 A B ~@14 A C@7 A C@7 A B ~@3 B ~>".pickRestart({
  A: "x!2", B: "x", C: "x ~@6 x ~@3 x ~@4",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  ~@20 A B A B C B A B A B D E A B A B A B D F A B A B A B G H A B A B A B D I A B A B A B D I A B D F J ~
>`.pickRestart({
  A: "x ~@3 x!2 ~ x!2 ~@3 x ~@3", B: "x ~@3 x!2 ~ x!2 ~@3 x!4", C: "x!4", D: "x ~@3 x!2 ~ x!2 ~@3 x!2 ~ x",
  E: "~@3 x!3 ~ x ~@3 x!3 ~ x", F: "x!2 ~ x!3 ~ x!2 ~@7", G: "x ~@3 x ~@2 x ~@4 x ~@3", H: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x",
  I: "~@3 x!3 ~ x!2 ~@2 x!3 ~ x", J: "x",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@32 x ~@31 x ~@3 x ~>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@30 A ~@15 B ~ C@6 D ~ C@6 D ~@7>".pickRestart({
  A: "~@8 x!2 ~ x!3 ~ x", B: "~@5 x ~ x!3 ~ x!3 ~ x", C: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  D: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x",
})).gain(0.3)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@30 [x!2 ~ x!3 ~ x ~@8] ~@15 [x!2 ~ x!2 ~@11] ~@23>").gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@30 A ~@15 A ~@7 A ~@7 A ~@7>".pickRestart({
  A: "~@11 x ~ x ~@2",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@24 A ~@6 B A ~@6 C A ~@6 B A ~@6 B A ~@6 B A ~@3 A ~>".pickRestart({
  A: "x", B: "x!2", C: "~ x",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@30 A ~@15 A ~@7 A ~@7 A ~@7>".pickRestart({
  A: "~ x",
})).gain(0.3)

stack(
  string_ensemble_1, glockenspiel, viola, flute, flute_soft, timpani, bass, kick, snare, low_tom, hihat, hihat_soft,
  mid_tom, crash, high_tom
)

More by Waterflame