Strudelify

Going Down

Luminous0w0

KeyD majorTempo134 bpm
0:00/0:00
// Going Down — Luminous0w0
// 134 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 130) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5841124; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 130 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(134/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 · "Grand Piano"
const piano = note(`<
  A B C D E F G H I H C D G J K L M N O P Q M Q N R S T U V R V W M W O U Q M X Y Z AA AB AC Z AA AB AD M N O P Q M Q N
  AE AF AG AH AI AE AI AJ AK AJ AL AH AM AK AM AN Z AA AB AC Z AA AB AO ~@8 M N O P Q M Q N M N O P Q M AP AQ M N O P Q
  M AP AQ M N O P Q M AP AQ M N O P AR@2 ~@4
>`.pickRestart({
  A: "[f#3,a3,d4]@2 ~ a3, d2, d3@2 d3, ~ [f#3,d4], ~@2 a3 ~", B: "a2@5 ~@4 e4@3, [a1,e3,a3,c#4], ~@5 a2@7, ~ d4",
  C: "b2@5 ~@4 f#3@3, b1, f#3@3 ~, [b3,d4]!2, ~@5 b2@3 b2@4", D: "f#2@5 ~@4 e4@3, [f#1,f#3,a3,c#4], ~@5 f#2@7, ~ d4",
  E: "g2@5 ~@3 a3@4, [g1,b3,d4], g3!2, ~@5 g2@7", F: "d3@5 ~@4 d3@3, d2, [f#3,a3,d4]!2, ~@5 d3@4 ~@3",
  G: "g2@5 ~@3 [a3,b3,d4]@4, g1, [b3,d4]@2 ~, g3!2, ~@5 g2@7", H: "a2@5 ~@4 e4@3, [a1,e3,a3,c#4], ~@5 a2@3 a2@4, ~ d4",
  I: "d3@5 ~@6 a3, d2, [f#3,a3,d4] [f#3,d4], ~@5 d3@3 d3@4, ~@6 a3@5 ~", // D
  J: "d3@5 ~@3 d3@4, d2, [f#3,a3,d4]!2, ~@5 d3@3 ~@4", K: "g2@5 ~@3 g2@4, [g1,g3], [b3,d4] [a3,b3,d4], ~@5 g2@3 ~@4",
  L: "a2@3 ~@2 a3 ~@6, [a1,e3,c#4] ~, a3@5 ~@7, ~ a2 ~@2", M: "[f#3,a3,d4]!2, [d2,d3]", N: "[e3,a3,c#4]!2, [a1,a2]",
  O: "[f#3,b3,d4]!2, [b1,b2]", P: "[f#3,a3,c#4]!2, [f#1,f#2]", Q: "[g3,b3,d4]!2, [g1,g2]", R: "[d2,d3,f#3,a3,d4]",
  S: "[a1,a2,e3,a3,c#4]", T: "[b1,b2,f#3,b3,d4]", U: "~@3 e4, [f#1,f#2,f#3,a3,c#4], ~ d4", V: "[g1,g2,g3,b3,d4]",
  W: "~@3 e4, [a1,a2,e3,a3,c#4], ~ d4", X: "[g3,b3,d4]@2 ~ g2, g1, g2@3 ~, ~ [g3,b3,d4]",
  Y: "a3@2 ~ e4, [a1,a2,e3,c#4], ~ [a3,d4]", Z: "[d5,d6]@3 ~ g2@2, g1, g2@2 ~, ~ [d5,d6]",
  AA: "[d5,d6]@3 ~ d3@2, d2, d3@2 ~, ~ [d5,d6]", AB: "[c#5,c#6]@3 ~ a2@2, a1, a2@2 ~, ~ [c#5,c#6]",
  AC: "~ [a1,a2,e5,e6], [b1,b2,d5,d6]", AD: "[b1,b2,d5,d6]@12 [e5,e6]@11 ~", AE: "d7!2, [f#3,a3,d4]",
  AF: "d7!2, [e3,a3,c#4]", AG: "d7!2, [f#3,b3,d4]", AH: "d7@2 ~ e4, [f#3,a3,c#4], ~ [d4,d7]", AI: "d7!2, [g3,b3,d4]",
  AJ: "d7@2 ~ e4, [e3,a3,c#4], ~ [d4,d7]", AK: "[f#3,a3,d4,d7]!2", AL: "[f#3,b3,d4,d7]!2", AM: "[g3,b3,d4,d7]!2",
  AN: "[a3,d7]@2 ~ e4, [e3,c#4], ~ [a3,d4,d7]", AO: "~ [e5,e6], [b1,b2,d5,d6]", AP: "[g3,b3,d4] [g3,b3,d4,e4], [g1,g2]",
  AQ: "[a3,c#4] [a3,c#4,f#4], [a1,a2,e4]", AR: "[g1,g2,g3,b3,d4]/2",
})).s("gm_piano").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A
  B A B ~@8 A B A B A B A B ~@34
>`.pickRestart({
  A: "x ~@10 x", B: "x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@8 A@16 ~@8 A@15 ~ A@8 ~@8 A@16 ~@8 A@8 ~@34>".pickRestart({
  A: "~ x",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@16 A@8 ~@8 A@15 B A@8 ~@8 A@16 ~@8 A@8 ~@34>".pickRestart({
  A: "x!4", B: "x!2 ~@2",
})).gain(0.3)

stack(piano, kick, snare, hihat)