Strudelify

ascend

Jaden Lothes

KeyE♭ majorTempo160 bpm
0:00/0:00
// ascend — Jaden Lothes
// 160 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Transcription provider: pdmx. https://musescore.com/score/5095317; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/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 · piano
const piano = note("<A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@3 ~@86 I@2 J@2 K@4>".pickRestart({
  A: "[bb4@2 c5@2 g4@8 f4@2 eb4@2 bb4@2 c5@2 g4@11 ~, [ab1,ab2]@15 ~]/2", // Ab
  B: "[c5@2 d5@2 g4@8 f4@2 eb4@2 c5@2 d5@2 g4@11 ~, [bb1,bb2]@15 ~]/2", // Bb
  C: "[d5@2 eb5@2 bb4@8 g4@2 f4@2 g4@2 bb4@2 d4@11 ~, [c2,c3]@15 ~]/2", // C
  D: "[eb5@2 f5@2 c5@8 bb4@2 c5@2 bb4 c5 d5 c5 d5 eb5 d5 eb5 f5 eb5 f5 g5 f5 g5 ab5@2, [g1,g2]@15 ~]/2", // G
  E: "[bb5@2 c6@2 g5@8 f5@2 eb5@2 bb5@2 c6@2 g5@11 ~, [ab2,ab3]@15 ~]/2", // Ab
  F: "[c6@2 d6@2 g5@8 f5@2 eb5@2 c6@2 d6@2 eb6@11 ~, [bb2,bb3]@15 ~]/2", // Bb
  G: "[f6@2 g6@2 c6@8 ab5@2 g5@2 ab5@2 g5@2 eb5@11 ~, [c3,c4]@15 ~]/2", // C
  H: "[~@11 f5 ~@6 d6@28 ~@2, g2@5 f4 g3 d4 g4 bb4 eb5@2 g4@4 eb6 f6@29 ~@2, ~ d3@12 d5@33 ~@2, ~ g3 eb4@5 g5@16 ~, ~@3 bb3@12 bb5@31 ~@2]/3",
  I: "[[g1,g2]@15 ~]/2", J: "[bb5@2 c6@2 g5@8 f5@2 eb5@2 bb5@2 c6@2 g5@11 ~, [ab1,ab2]@15 ~]/2",
  K: "[c6 d6 g5@4 f5 eb5 c6 d6 eb6@17 ~@5, [bb1,bb2]@51 ~@13]/4", // Bb
})).s("gm_piano").gain(0.3)

// chords · overdriven guitar · "Electric Guitar"
const overdriven_guitar = note(`<
  ~@17 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2
  A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~@6
>`.pickRestart({
  A: "[eb3 eb3, [ab2,ab3]]/2", B: "[f3 f3, [bb2,bb3]]/2", C: "[g3 g3, [c3,c4]]/2", D: "[d3 d3, [g2,g3]]/2",
})).s("gm_overdriven_guitar").gain(0.22)

// other · acoustic guitar steel · "Acoustic Guitar [Tablature]"
const acoustic_guitar_steel = note("<~@8 A B C@2 D@2 E@3 ~@94>".pickRestart({
  A: "eb3 g3 bb3 eb4 d4 eb4 bb3 g3", B: "eb3 g3 bb3 eb4 d4 eb4 bb3 eb3", C: "bb2 d3 bb3 eb4 d4 eb4 bb3 d3",
  D: "c2@2 c3@2 eb4 ~ d4@2 eb4@2 bb3@2 eb3@2 c3@2", E: "[~ eb4@11, c3, ~ g3@23]/3",
})).s("gm_acoustic_guitar_steel").gain(0.24)

stack(piano, overdriven_guitar, acoustic_guitar_steel)