Strudelify

Impossible Remix The Spectre

Bitzen808

KeyE majorTempo128 bpm
0:00/0:00
// Impossible Remix The Spectre — Bitzen808
// 128 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5833907; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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.

// other · piano
const piano = note(`<
  ~@32 A B C D E@2 F@2 G H I J K H I J L M N O P Q R S T U R V W X Y Z W X Y AA ~@20 A B C D E@2 F@2 G H I J K H I J L M
  N O AB AC AD AE AB AC AD AE AF AG AH AI AF AG AH AJ ~@5
>`.pickRestart({
  A: "e4!3 g#4", B: "c#5!3 b4", C: "g#4!4",
  D: "d#4@4 d#4@4 d#4@4 [c6,c#6,d6,d#6] [f#5,g5,g#5,a5,a#5,b5] [b4,c5,c#5,d5,d#5,e5,f5] [e4,f4,f#4,g4,g#4,a4,a#4]",
  E: "[[d4,d#4] ~ c#4@2 g#4@2 c#5@2 e5@2 e5@2 d#5 c#5 b4 c#5@3 c#5@2 e5@2 c#5@2 a4@2 a4@2 a4@2 a4@2, c#4 ~@15]/2", // D#maj7
  F: "[g#4@2 g#4@2 g#4@2 f#4@2 e4@2 e4@2 g#4 f#4 e4 f#4@3 f#4@2 f#4@2 g#4@2 d#4@2 d#4@2 d#4@2 d#4@2]/2",
  G: "e4!6 g#4!2", H: "c#5!6 b4!2", I: "g#4!8", J: "d#4!8", K: "c#3 g#3 c#4 e4 c#4 g#3 [c#4,g#4] g#4",
  L: "c#5@2 c#5@2 g#5@2 c#6@2 e6@2 e6@2 d#6 c#6 b5 c#6", M: "c#6!2 e6 c#6 a5!4",
  N: "g#5@2 g#5@2 g#5@2 f#5@2 e5@2 e5@2 g#5 f#5 e5 f#5", O: "f#5!3 g#5 d#5!4",
  P: "f#5@3 d#5@3 d#5@2 a#5 ~ [g#5,a#5] ~ a#5@2 f#5@2, a#4@8 ~@4 g#5 ~@3", // G#sus2
  Q: "d#5@3 b4@3 b4@2 b5 ~ [a#5,b5] ~ g#5@2 f#5@2, f#4@8 ~@4 a#5 ~@3", // Bmaj7
  R: "c#5@3 a#4@3 a#4@2 a#5 ~ [g#5,a#5] ~ a#5@2 f#5@2, f#4@8 ~@4 g#5 ~@3", // G#sus2
  S: "f5@3 c#5@3 c#5@2 a#5 ~ [g#5,a#5] ~ a#5@2 g#5@2, a#4@8 ~@4 g#5 ~@3", // G#sus2
  T: "f#5@3 f5@3 a#4@2 a#5 ~ [g#5,a#5] ~ a#5@2 f#5@2, a#4@6 ~@6 g#5 ~@3", // G#sus2
  U: "b5@3 a#5@3 f#5@2 b5 ~ [a#5,b5] ~ g#5@2 f#5@2, f#4@8 ~@4 a#5 ~@3", // Bmaj7
  V: "f#5@3 c#5@3 c#5@2 a#5 ~ [g#5,a#5] ~ a#5@2 g#5@2, a#4@8 ~@4 g#5 ~@3", // G#sus2
  W: "f#5@2 f#5@2 f#5@2 f#5@2 a#5@2 a#5@2 f#6 ~ [f6,f#6] ~", X: "d#6!3 c#6 a#5!2 g#5 a#5, f6 ~@15",
  Y: "a#5@2 a#5@2 a#5@2 a#5@2 c#6@2 b5@2 a#5 ~ [g#5,a#5] ~", Z: "f5!8, f#5 ~@15", AA: "f5!4 g#5!2 f5!2, f#5 ~@15",
  AB: "f#2 a#2 d#3 f#3 a#3 d#4 f#4 a#4 d#5 f#5 a#5 d#6 f#6 a#6 d#7 f#7",
  AC: "b7 f#7 d#7 b6 f#6 d#6 b5 f#5 d#5 b4 f#4 d#4 b3 f#3 d#3 b2",
  AD: "a#2 c#3 f#3 a#3 c#4 f#4 a#4 c#5 f#5 a#5 c#6 f#6 a#6 c#7 f#7 a#7",
  AE: "g#7 f7 c#7 g#6 f6 c#6 g#5 f5 c#5 g#4 f4 c#4 g#3 f3 c#3 g#2",
  AF: "[f#4,f#5]@2 [f#4,f#5]@2 [f#4,f#5]@2 [f#4,f#5]@2 [a#4,a#5]@2 [a#4,a#5]@2 [f#5,f#6] ~ [f5,f#5,f6,f#6] ~", // F# A# F# F#maj7
  AG: "[d#5,d#6]!3 [c#5,c#6] [a#4,a#5]!2 [g#4,g#5] [a#4,a#5], [f5,f6] ~@15", // D# C# A# G# A# F
  AH: "[a#4,a#5]@2 [a#4,a#5]@2 [a#4,a#5]@2 [a#4,a#5]@2 [c#5,c#6]@2 [b4,b5]@2 [a#4,a#5] ~ [g#4,a#4,g#5,a#5] ~", // A# C# B A# G#sus2
  AI: "[f4,f5]!8, [f#4,f#5] ~@15", AJ: "[f4,f5]!4 [g#4,g#5]!2 [f4,f5]!2, [f#4,f#5] ~@15",
})).s("gm_piano").gain(0.57)

// other · piano
const piano_2 = note(`<
  A B C D E F G D H I J K H I J L H I J M N O P Q N O P Q H I J M H I J M R S T U R S T U V W X Y Z AA AB AC AD AE AF AG
  AD AE AF AG AH AI AJ AK AH AI AJ AK AL AM AN AO AL AM AP AO N O P Q N O P Q H I J M H I J M R S T U R S T U V W X Y Z
  AA AB AC AD AE AF AG AD AE AF AG AH AI AJ AK AH AI AJ AK AQ AR AS AT AS
>`.pickRestart({
  A: "[c#4,e4,g#4]@15 ~", B: "[c#4,e4,a4]@15 ~", C: "[b3,e4,g#4]@15 ~", D: "[b3,e4,f#4] [b3,d#4,f#4]",
  E: "[c#4,e4,g#4,c#5]@15 ~", F: "[a3,c#4,e4,a4]@15 ~", G: "[b3,e4,g#4,b4]@15 ~", H: "[e3,g#3,c#4]@15 ~",
  I: "[e3,a3,c#4]@15 ~", J: "[g#3,b3,e4]@15 ~", K: "[e3,f#3,b3]@15 ~", L: "[f#3,b3,e4]@15 ~", M: "[f#3,b3,d#4]@15 ~",
  N: "~@3 c#4, c#3, ~ g#3@7, ~ c#4 e4@2, ~@3 d#4@5", O: "~@7 d#4, a2@3 c#4, ~ e3@7, ~ a3@3, ~@3 b3 c#4 b3@3",
  P: "~@3 e4, e3, e4!2 g#4@2, ~ b3@7, ~@3 f#4@5", Q: "~@7 f#4, b2@3 d#4, ~ f#3@7, ~ b3@3, ~@3 c#4 d#4 c#4@3",
  R: "g#3 c#4 g#3 c#4 g#3 c#4 g#3 c#4", S: "a3 c#4 a3 c#4 a3 c#4 a3 c#4", T: "g#3 b3 g#3 b3 g#3 b3 g#3 b3",
  U: "f#3 b3 f#3 b3 f#3 b3 f#3 b3", V: "e4!8", W: "a2 e3 a3 c#4 a3 c#4 d#4 c#4", X: "e3 g#3 b3 e4 b3 e4 b3 e4",
  Y: "b2 f#3 b3 f#3 b3 f#3 b3 f#3", Z: "c#3 g#3 c#4 e4 c#4 g#3 c#4 e4", AA: "a2 e3 a3 c#4 a3 c#4 e4 c#4",
  AB: "e3 g#3 b3 e4 b3 e4 g#4 e4", AC: "b2 f#3 b3 f#3 d#4 f#3 b3 f#3", AD: "d#4 a#3 d#4 a#3 d#4 a#3 d#4 a#3",
  AE: "d#4 b3 d#4 b3 d#4 b3 d#4 b3", AF: "c#4 a#3 c#4 a#3 c#4 a#3 c#4 a#3", AG: "c#4 g#3 c#4 g#3 c#4 g#3 c#4 g#3",
  AH: "d#3 a#3 d#4 f#4 d#4 a#3 d#4 f#4", AI: "b2 f#3 b3 d#4 b3 d#4 f#4 d#4", AJ: "f#3 a#3 c#4 f#4 c#4 f#4 b4 f#4",
  AK: "c#3 g#3 c#4 g#3 f4 g#3 c#4 g#3", AL: "c#3@15 ~", AM: "a2@15 ~", AN: "e2@15 ~", AO: "b2@15 ~", AP: "e3@15 ~",
  AQ: "[d#4,f#4,a#4]@15 ~", AR: "[b3,d#4,f#4,b4]@15 ~", AS: "[c#4,f#4,a#4]@15 ~", AT: "f#4 f4, [c#4,g#4]@15 ~",
})).s("gm_piano").gain(0.34)

// chords · piano
const piano_3 = note(`<
  ~@8 A B C D A B C D A E C D F G H@3 G I@2 A B C D A B C D J K L M J K L M J K L M J K L M N M O P N M O P Q R S T Q R
  S T A B C D A B C D U V W@3 V X@2 A B C D A B C D J K L M J K L M J K L M J K L M N M O P Y Z AA AB AC AD AE AF AC AD
  AE AF AG AH AI AJ AK
>`.pickRestart({
  A: "[c#2,c#3]@15 ~", B: "[a1,a2]@15 ~", C: "[e2,e3]@15 ~", D: "[b1,b2]@15 ~", E: "[a2,a3]@15 ~",
  F: "~@7 g#5 e6@2 d#6@2 c#6@2 b5@2, ~ g#5, ~@8 c#6 ~@7", G: "[e5,c#6] [e5,b5]",
  H: "[[b4,g#5]@11 ~ g#5@2 [b4,f#5]@6 g#5@2 [d#5,a5]@6 g#5@2 [e5,c#6]@9 ~ e6@2 d#6@2 c#6@2 b5@2, ~@5 g#5]/3", // E B5 D#dim C#m
  I: "[[b4,g#5]@11 ~ g#5@2 ~@2 b4@4 [b4,f#5]@2 [f#4,d#5]@6 [f#4,b4]@2 c#5@2, ~@7 f#5@3 ~@6]/2", // E B5 D#m B5
  J: "c#2 c#3 c#2 c#3 c#2 c#3 c#2 c#3", K: "a1 a2 a1 a2 a1 a2 a1 a2", L: "e2 e3 e2 e3 e2 e3 e2 e3",
  M: "b1 b2 b1 b2 b1 b2 b1 b2", N: "d#2 d#3 d#2 d#3 d#2 d#3 d#2 d#3", O: "f#2 f#3 f#2 f#3 f#2 f#3 f#2 f#3",
  P: "c#3 c#4 c#3 c#4 c#3 c#4 c#3 c#4",
  Q: "[d#2,d#4,a#4] [d#3,d#4,a#4] [d#2,d#4,a#4] [d#3,d#4,a#4] [d#2,d#4,a#4] [d#3,d#4,a#4] [d#2,d#4,a#4] [d#3,d#4,a#4]", // D#5
  R: "[b1,d#4,b4] [b2,d#4,b4] [b1,d#4,b4] [b2,d#4,b4] [b1,d#4,b4] [b2,d#4,b4] [b1,d#4,b4] [b2,d#4,b4]", // B
  S: "[f#2,c#4,a#4] [f#3,c#4,a#4] [f#2,c#4,a#4] [f#3,c#4,a#4] [f#2,c#4,a#4] [f#3,c#4,a#4] [f#2,c#4,a#4] [f#3,c#4,a#4]", // F#
  T: "[c#3,c#4,g#4] [c#4,g#4] [c#3,c#4,g#4] [c#4,g#4] [c#3,c#4,g#4] [c#4,g#4] [c#3,c#4,g#4] [c#4,g#4]", // C#5
  U: "~@7 g#5 e6@2 d#6@2 c#6@2 b5@2, [c#2,c#3]@15 ~, ~ g#5, ~@8 c#6 ~@7", V: "[e5,c#6] [e5,b5], [a1,a2]@15 ~",
  W: "[[b4,g#5]@4 ~@2 g#5 ~@3 g#5 [d#5,a5]@3 g#5 ~@5 e6 d#6 c#6 b5, [e2,e3]@14 [b4,f#5]@4 ~@12 [e5,c#6]@9 ~ g#5@8, ~@16 [b1,b2]@15 ~ [c#2,c#3]@15 ~]/3", // E D#dim E B5 C#m B C#
  X: "[[b4,g#5]@4 ~@2 g#5 ~@3 [b4,f#5] [f#4,d#5]@3 [f#4,b4] c#5, [e2,e3]@7 [b4,f#5]@2 ~@7, ~@16 [b1,b2]@15 ~]/2", // E B5 D#m B5 E B5 B
  Y: "[d#2,f#5]@2 ~@2 d#2@2 [d#3,a#4]@2 d#2@2 [g#5,a#5] ~ [d#2,a#5]@2 [d#3,f#5]@2, a#4@3 ~@5, ~ d#3 ~@3 d#3 ~@2, ~@3 f5@3 ~@2 a#5 ~@3 g#5 ~@3", // D#m D#5 G#sus2 D#5 D#m
  Z: "[b1,b5]@2 ~@2 b1@2 [b2,f#5]@2 b1@2 [a#5,b5] ~ [b1,g#5]@2 [b2,f#5]@2, f#4 ~, ~ b2 ~@3 b2 ~@2, ~@3 a#5@3 ~@2 b5 ~@3 a#5 ~@3", // B B5 Bmaj7 E B5
  AA: "[f#2,c#5]@2 ~@2 f#2@2 [f#3,a#4]@2 f#2@2 [g#5,a#5] ~ [f#2,a#5]@2 [f#3,f#5]@2, f#4 ~, ~ f#3 ~@3 f#3 ~@2, ~@3 a#4@3 ~@2 a#5 ~@3 g#5 ~@3", // F#5 F# G#sus2 F#
  AB: "[c#3,f#5]@2 ~@2 c#3@2 [c#4,c#5]@2 c#3@2 [g#5,a#5] ~ [c#3,a#5]@2 [c#4,g#5]@2, a#4 ~, ~ c#4 ~@3 c#4 ~@2, ~@3 c#5@3 ~@2 a#5 ~@3 g#5 ~@3", // F#5 C# G#sus2 F# C#5
  AC: "d#2 d#3 d#2 d#3 d#2 d#3 d#2 d#3, [f#4,a#4,d#5]@3 [f#4,a#4,d#5]@3 [f#4,a#4,d#5]@2", // D#m
  AD: "b1 b2 b1 b2 b1 b2 b1 b2, [f#4,b4,d#5]@3 [f#4,b4,d#5]@3 [f#4,b4,d#5]@2", // B
  AE: "f#2 f#3 f#2 f#3 f#2 f#3 f#2 f#3, [f#4,c#5,f#5]@3 [f#4,c#5,f#5]@3 [f#4,c#5,f#5]@2", // F#5
  AF: "c#3 c#4 c#3 c#4 c#3 c#4 c#3 c#4, [g#4,c#5,f5]@3 [g#4,c#5,f5]@3 [g#4,c#5,f5]@2", AG: "d#3@15 ~", AH: "b2@15 ~",
  AI: "f#2@15 ~", AJ: "c#3@15 ~", AK: "f#3@15 ~",
})).s("gm_piano").gain(0.35)

// chords · synth strings 1 · "String Synthesizer"
const synth_strings_1 = note(`<
  ~@36 A B C D A B C D A B C D A B C D E D F G E D F G E D F G E D F G A B C H A B C D ~@8 I J K L I J K L A B C D A B C
  D A B C D A B C D E D F G E D F G E D M G E D F G ~@5
>`.pickRestart({
  A: "[e3,g#3,c#4]", B: "[e3,a3,c#4]", C: "[g#3,b3,e4]", D: "[f#3,b3,d#4]", E: "[f#3,a#3,d#4]", F: "[a#3,c#4,f#4]",
  G: "[g#3,c#4,f4]", H: "[e3,f#3,b3]", I: "[e2,g#2,c#3]", J: "[e2,a2,c#3]", K: "[g#2,b2,e3]", L: "[f#2,b2,d#3]",
  M: "[f#3,c#4,f#4]", // F#5
})).s("gm_synth_strings_1").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@34 [~@2 x!2] [x!4]!49 ~@6 [~@2 x!2] [x!4]!33 ~@5>").gain(0.46)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@32 [x!4]!2 [x!2 ~@2] ~@53 [x!4]!2 [x!2 ~@2] ~@38>").gain(0.18)

// drums · snare
const snare = s("sd").struct("<~@34 A B ~@8 C@23 D ~@8 C@8 ~@6 A B ~@8 C@23 D ~@5>".pickRestart({
  A: "~@4 x!4", B: "x!16", C: "~ x ~ x", D: "~@2 x ~ x!4",
})).gain(0.46)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@32 [x!8]!2 [x!4 ~@4] ~@53 [x!8]!2 [x!4 ~@4] ~@38>").gain(0.18)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@44 [~ x ~ x ~ x ~ x]!24 ~@32 [~ x ~ x ~ x ~ x]!24 ~@5>").gain(0.46)

// drums · crash
const crash = s("cr").struct("<~@68 x ~@60>").gain(0.46)

stack(piano, piano_2, piano_3, synth_strings_1, kick, kick_soft, snare, snare_soft, pedal_hat, crash)