Strudelify
KeyE minorTempo225 bpm
0:00/0:00
// metroid - kraids lair — Kenji Yamamoto/Hirokazu Tanaka Four hand piano
// 225 bpm, 3/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/1193411; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(225/3)

// 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 B A B A B A B A B A B A B A B C D E F C D E G C D E F C D E G H I J K H I J K L M N O L M N O P Q R S P Q R S T U T
  U T U C D E F C D E G C D E F C D E G H I J K H I J K L M N O L M N O P Q R S P Q R S T U T U T U V W X Y Z@8 ~
>`.pickRestart({
  A: "a5@5 g5@5 ~ f#5@5", B: "e5@5 f#5@5 ~ g5@5", C: "e4@10 ~ b3@5, e6@15 ~", D: "a4@10 ~ c4@5, e6@15 ~",
  E: "f#4@10 ~ d4@5, d6@15 ~", F: "b3@10 ~ a#3@5, e6@15 ~", G: "b3@10 ~ a#3@5, b5@15 ~",
  H: "g4@10 ~ d4@5, [g5,g6]@15 ~", I: "e4@10 ~ b3@5, [e5,e6]@15 ~", J: "f#4@10 ~ d4@5, [d5,d6]@15 ~",
  K: "a4@10 ~ e4@5, [c5,c6]@15 ~", L: "[e4,g4]@3 b3@2 [e4,g4]@3 b3@3 [e4,g4]@2 b3@3",
  M: "[e4,a#4]@3 c#4@2 [e4,a#4]@3 c#4@3 [e4,a#4]@2 c#4@3", N: "[e4,a4]@3 c4@2 [e4,a4]@3 c4@3 [e4,a4]@2 c4@3",
  O: "f#4@3 d#4@2 a4@3 f#4@3 b4@2 f#4@3", P: "f#4@3 g4@2 a4@3 b4@3 d5@2 b4@3, e3@10 ~ b3@5",
  Q: "f#5@3 d5@2 a4@3 g4@3 f#4@2 g4@3, c4@10 ~ b3@5", R: "a5@3 f#5@2 d5@3 a4@3 g4@2 f#4@3, c3@10 ~ g3@5",
  S: "e4@3 g4@2 a4@3 d5@3 [b3,e5]@5, a3@5 ~@3", T: "a5@3 ~@2 g5@3 ~@3 f#5@3 ~@2", U: "e5@3 ~@2 f#5@3 ~@3 g5@3 ~@2",
  V: "a5@5 g5@5 ~ [b3,f#5]@5, e4@5 ~@3", W: "e5@5 f#5@5 ~ [c4,g5]@5, a4@5 ~@3", X: "a5@5 g5@5 ~ [d4,f#5]@5, f#4@5 ~@3",
  Y: "e5@3 f#5@3 [a#3,g5]@2, b3@11 ~@5", // D#
  Z: "[~@2 a5@6 ~ g5@6 [b3,f#5]@6 ~ e5@8 f#5@8 [c4,g5]@8 a5@8 g5@8 [d4,f#5]@8 e5@10 f#5@10 ~ a#3@10 [e3,e4]@27, ~@2 e4@13 ~@7 a4@15 ~@9 f#4@15 ~@9 b3@20 ~ g5@37]/8", // B5 C5 D E
})).s("gm_piano").gain(0.4)

// chords · piano
const piano_2 = note(`<
  A B C A@2 B C D A B C A@2 B C D E F G E@2 F G H E F G E@2 F G H I@2 J@2 I@2 J@2 K L M N K L M N ~@3 O P@2 ~ O Q@2 ~@4
  E F G E@2 F G H E F G E@2 F G H I@2 J@2 I@2 J@2 K L M N K L M N ~@3 O P@2 ~ O Q@2 ~@14 R@3
>`.pickRestart({
  A: "e2@5 e3@10 ~, [e4,g4,b4,e5]@15 ~", B: "e2@5 e3@10 ~, [e4,a4,c5,e5]@15 ~", C: "d2@5 d3@10 ~, [d4,f#4,a4,d5]@15 ~",
  D: "b1@5 b2@10 ~, [b3,d4,f#4,b4]@15 ~", E: "[e2,e3]@5 [e1,e2]@10 ~, [e4,g4,b4,e5]@15 ~",
  F: "[e2,e3]@5 [e1,e2]@10 ~, [e4,a4,c5,e5]@15 ~", G: "[e2,e3]@5 [e1,e2]@10 ~, [d4,f#4,a4,d5]@15 ~",
  H: "[e2,e3]@5 [e1,e2]@10 ~, [b3,d4,f#4,b4]@15 ~", // E Bm
  I: "[~@27 [c1,c2]@5, [c1,c2]@27 ~@5, ~@5 c3@27, ~@11 c4@10 c4@11, ~ c5]/2", // C
  J: "[~@27 [c1,c2]@5, [d1,d2], ~@5 d3@27, ~@11 d4@10 d4@11, ~ d5]/2", K: "[e1,e2,e3,e4]@15 ~", L: "[g1,g2,g3,g4]@15 ~",
  M: "[f#1,f#2,f#3,f#4]@15 ~", N: "[b0,b1,b2,b3]@15 ~", O: "~@11 [e1,e2]@5", P: "[[e1,e2]@15 ~]/2",
  Q: "[[e1,e2]@25 ~@7]/2", R: "[~@5 [e1,e2]@30 ~@13]/3",
})).s("gm_piano").gain(0.3)

stack(piano, piano_2)