Strudelify
KeyD minorTempo120 bpm
0:00/0:00
// Megalovania — Cloud Beat (Nathanael Quimby)
// 120 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/3735316; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · vibraphone
const vibraphone = note(`<
  ~@4 A B C D A B C D A B C D ~@3 D E F C G H I ~@2 J K L ~ H I ~@2 J K L ~@7 M N ~@7 O ~@14 A P Q R S T U@4
>`.pickRestart({
  A: "d4!2 d5 ~ a4@3 ab4 ~ g4@2 f4 ~ d4 f4 g4", B: "c4!2 d5 ~ a4@3 ab4 ~ g4@2 f4 ~ d4 f4 g4",
  C: "b3!2 d5 ~ a4@3 ab4 ~ g4@2 f4 ~ d4 f4 g4", D: "bb3!2 d5 ~ a4@3 ab4 ~ g4@2 f4 ~ d4 f4 g4",
  E: "f4@2 f4!2 ~ f4@2 e4 f4 e4@2 e4@2 ~@3", F: "f4@2 f4!2 ~ f4@2 e4 ~ f4@2 a4@2 f4 e4 d4", G: "bb3@4 f4@3 e4 ~@8",
  H: "~@8 d4!8", I: "c4 ~@3", J: "[d4,f4] [e4,g4] [f4,a4] [d5,f5] [c5,e5]@2 [bb4,d5]@2",
  K: "[g4,e5] [a4,f5] [c5,g5] [a4,e5]", L: "[d5,a5] ~", M: "~@10 d5 db5 c5 b4 bb4 a4",
  N: "ab4 g4 gb4 f4 e4 eb4 d4 ~@2 d4 ~ d4!4 ~", O: "~@2 a4@2 g4@3 e4 ~ g4@2 f4 ~ c4 d4 f4",
  P: "d4!2 d5 ~ a4@3 ~ ab4 ~ g4@2 f4 ~ d4 f4", Q: "g4 bb3 ~ bb3 d5 ~ a4@4 ab4 ~ g4@2 ~ f4",
  R: "~ d4 f4 g4 ~ c4!2 d5 ~@2 a4@4 ab4 ~", S: "~ g4@2 f4 ~@2 d4 f4 ~ g4 bb3!2 ~ d5 ~@2",
  T: "a4@4 g4 ab4 ~ g4@3 f4 ~@2 d4 ~ f4", U: "[g4 ~ a4@48 ~@14]/4",
})).s("gm_vibraphone").gain(0.4)

// other · glockenspiel
const glockenspiel = note(`<
  ~@8 A B C D A B C E F G H I J K L M N O P Q R S T U N O P Q R S T U ~@8 V W X Y V W Z ~@10 AA AB ~@5 AC AD AE AF AG@4
>`.pickRestart({
  A: "d6!2 d7 ~ a6@3 ab6 ~ g6@2 f6 ~ d6 f6 g6", B: "c6!2 d7 ~ a6@3 ab6 ~ g6@2 f6 ~ d6 f6 g6",
  C: "b5!2 d7 ~ a6@3 ab6 ~ g6@2 f6 ~ d6 f6 g6", D: "bb5!2 d7 ~ a6@3 ab6 ~ g6@2 f6 ~ d6 f6 g6",
  E: "bb5!2 d7 ~ a6@3 ab6 ~ g6@2 f6 ~ a5 d6 e6", F: "f6@2 f6!2 ~ f6@2 e6 f6 d6@2 d6@2 ~@3",
  G: "f6@2 f6!2 ~ g6@2 g6 ab6 g6 f6 d6 f6 g6 ~@2", H: "f6@2 f6!2 ~ g6@2 ab6 ~ a6 ~ c7@2 a6 ~@2",
  I: "d7@2 d7@2 d7 a6 d7 c7 ~@4 g7@4", J: "a6@2 a6!2 ~ a6@2 ab6 a6 g6@2 g6@2 ~@3",
  K: "a6@2 a6!2 ~ a6@2 g6 ~ a6@2 d7@2 a6 g6 f6", L: "d7 a6 g6 f6 c7 g6 f6 e6", M: "bb5@2 c6 d6 ~ f6@2 c7 ~@8",
  N: "~@8 f7 d7 f7 g7 ab7 g7 f7 d7", O: "g7 [g7,ab7] f7 ~ g7@4 ~@5 ab6@2 a6",
  P: "c7 ~ a6 ab6 g6 f6 d6 e6 f6@2 g6@2 a6@2 c7@2", Q: "db7@2 ab6@2 ab6 g6 f6 g6 ~@8",
  R: "[d6,f6] [e6,g6] [f6,a6] [d7,f7] [c7,e7]@2 [bb6,d7]@2", S: "[c7,e7] [d7,f7] [e7,g7] [c7,e7]",
  T: "[d7,a7]@8 a6 ab6 g6 gb6 f6 e6 eb6 d6", U: "db6 eb6", V: "bb5@3 f6", W: "e6 d6", X: "f6",
  Y: "~@3 d6 g6@2 f6@2 d6 c6 ~ a5 ~@4", Z: "d6", AA: "[g6,e7] [a6,f7] [c7,g7] [a6,e7]", AB: "[d7,a7]",
  AC: "~ bb5 ~ bb5 d7 ~ a6@4 ab6 ~ g6@2 ~ f6", AD: "~ d6 f6 g6 ~@12", AE: "~@10 d6!2 ~ d7 ~@2",
  AF: "a6@4 g6 ab6 ~ g6@3 f6 ~@2 d6 ~ f6", AG: "[g6 ~ d6@48 ~@14]/4",
})).s("gm_glockenspiel").gain(0.3)

// chords · tubular bells
const tubular_bells = note(`<
  ~@3 A B C D A B C D A B C D A E F G A E F G A H ~@2 I J K L M H ~@2 I J K L M N O P ~ N O E ~@15 J ~@7 Q E R@8
>`.pickRestart({
  A: "bb4 c5", B: "d5 ~", C: "c5 ~", D: "b4 ~", E: "d5", F: "c5", G: "b4", H: "~@9 bb4@4 ~@3", I: "~@7 g4@8 ~",
  J: "[d4,f4] [e4,g4] [f4,a4] [d5,f5] [c5,e5]@2 [bb4,d5]@2", K: "[c5,e5] [d5,f5] [e5,g5] [c5,e5]", L: "[d4,a4] ~",
  M: "ab4 bb4", N: "bb4@3 f5", O: "e5 d5", P: "f5", Q: "d5 d4 d5 d4",
  R: "[~ bb4@19 ~ c5@21 bb4@12 c5@6 a4@6 [d4,d5]@48 ~@14]/8", // D
})).s("gm_tubular_bells").gain(0.4)

// other · xylophone
const xylophone = note(`<
  A B C D E F G H E F G H E F G H ~@4 E F G H ~@4 I J K ~@5 I J K ~@12 L M ~@2 N ~@17 O P Q R@4
>`.pickRestart({
  A: "d5!2 d6 ~ a5@3 g5 ab5 g5@2 f5 ~ d5 f5 g5", B: "c5!2 d6 ~ a5@3 g5 ab5 g5@2 f5 ~ d5 f5 g5",
  C: "b4!2 d6 ~ a5@3 g5 ab5 g5@2 f5 ~ d5 f5 g5", D: "bb4!2 d6 ~ a5@3 g5 ab5 g5@2 f5 ~ d5 f5 g5",
  E: "d5!2 d6 ~ a5@3 ab5 ~ g5@2 f5 ~ d5 f5 g5", F: "c5!2 d6 ~ a5@3 ab5 ~ g5@2 f5 ~ d5 f5 g5",
  G: "b4!2 d6 ~ a5@3 ab5 ~ g5@2 f5 ~ d5 f5 g5", H: "bb4!2 d6 ~ a5@3 ab5 ~ g5@2 f5 ~ d5 f5 g5",
  I: "[d5,f5] [e5,g5] [f5,a5] [d6,f6] [c6,e6]@2 [bb5,d6]@2", J: "[g4,e5] [a4,f5] [c5,g5] [a4,e5]", K: "[a5,d6] ~",
  L: "~@3 d5 g5@2 f5@2 d5 c5 ~ a4 ~ g4 a4 c5", M: "bb4 ~@3", N: "~@2 f5@2 e5@3 c5 ~ e5@2 d5 ~ a4 c5 d5",
  O: "~@5 c5!2 d6 ~@2 a5@4 ab5 ~", P: "~ g5@2 f5 ~@2 d5 f5 ~ g5 bb4!2 ~ d6 ~@2", Q: "a5@4 g5 ab5 ~ g5@3 f5 ~@2 d5 ~ f5",
  R: "[g5 ~ d5@48 ~@14]/4",
})).s("gm_xylophone").gain(0.3)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  ~@4 A B C D A B C D A B C D A B C D A B C D E B A F E B A F E B A F E B A F E B C@2 E B A@2 ~@6 A@2 G H I J G H K@2 G
  H I J G H A L M N@2 O P@4
>`.pickRestart({
  A: "d2@2 d2@2 d2!2 ~ d2@2 d2 ~ d2!4 ~", B: "c2@2 c2@2 c2!2 ~ c2@2 c2 ~ c2!4 ~",
  C: "b1@2 b1@2 b1!2 ~ b1@2 b1 ~ b1!4 ~", D: "bb1@2 bb1@2 bb1!2 ~ c2@2 c2 ~ c2!4 ~",
  E: "bb1@2 bb1@2 bb1!2 ~ bb1@2 bb1 ~ bb1!4 ~", F: "db2@2 db2@2 db2!2 ~ eb2@2 eb2 ~ eb2!4 ~",
  G: "bb1@2 bb1@2 bb1!2 ~ bb1@2 bb1 ~ bb1!3 bb2 ~", H: "c2@2 c2@2 c2!2 ~ c2@2 c2 ~ c2!3 c3 ~",
  I: "d2@2 d2@2 d2!2 ~ db2@2 db2 ~ db2!3 db3 ~", J: "c2@2 c2@2 c2!2 ~ b1@2 b1 ~ b1!3 b2 ~",
  K: "d2@2 d2@2 d2!2 ~ d2@2 d2 ~ d2!3 d3 ~", L: "d2@2 d2@2 d2!2 ~@2 d2@2 d2 ~ d2!4",
  M: "~ bb1@2 ~ bb1@2 bb1!2 ~@2 bb1@2 bb1 ~@2 bb1", N: "[bb1!3 ~@2 c2@21 bb1@3 bb1@3]/2",
  O: "bb1!2 ~@2 c2@3 c2 ~@2 c2 ~ c2!2 ~ c2", P: "[~ d2@24 ~@7]/4",
})).s("gm_electric_bass_finger").gain(0.25)

// other · timpani
const timpani = note(`<
  ~@4 A B C D A B C D A B C D A B C D A B C D E B A ~ E B A ~ E B A ~ E B A ~@35 F G H@4
>`.pickRestart({
  A: "d3@2 d3@2 d3!2 ~ d3@2 d3 ~ d3!4 ~", B: "c3@2 c3@2 c3!2 ~ c3@2 c3 ~ c3!4 ~",
  C: "b2@2 b2@2 b2!2 ~ b2@2 b2 ~ b2!4 ~", D: "bb2@2 bb2@2 bb2!2 ~ c3@2 c3 ~ c3!4 ~",
  E: "bb2@2 bb2@2 bb2!2 ~ bb2@2 bb2 ~ bb2!4 ~", F: "~@10 bb2@3 bb2@3", G: "bb2!2 ~@2 c3@3 c3 ~@2 c3 ~ c3!2 ~ c3",
  H: "[~ d3@24 ~@7]/4",
})).s("gm_timpani").gain(0.25)

// chords · piano
const piano = note(`<
  ~@8 A B C D A B C D E F G H I J K L M N O P Q R S T M N O P Q R S T ~@6 U V ~@10 W@2 X Y Z ~@2 AA AB ~@4 AC AD@7 ~
>`.pickRestart({
  A: "d4!2 [d3,d4]@2 [d3,d4]!2 ~ [d3,d4]@2 [d3,d4] ~ [d4,f4] d3 d4 [d3,f4] g4, d3@2 d5 ~ a4@3 ab4 ~ g4@2 ~@5", // D Dm
  B: "c4!2 [c3,c4]@2 [c3,c4]!2 ~ [c3,c4]@2 [c3,c4] ~ [c4,f4] c3 [c4,d4] [c3,f4] g4, c3@2 d5 ~ a4@3 ab4 ~ g4@2 ~@5", // C F5 Csus2 F5
  C: "b3!2 [b2,b3]@2 [b2,b3]!2 ~ [b2,b3]@2 [b2,b3] ~ [b3,f4] b2 [b3,d4] [b2,f4] g4, b2@2 d5 ~ a4@3 ab4 ~ g4@2 ~@5", // B Bdim Bm Bdim
  D: "bb3!2 [bb2,bb3]@2 [bb2,bb3]!2 ~ [c3,c4]@2 [c3,c4] ~ [c4,f4] c3 [c4,d4] [c3,f4] g4, bb2@2 d5 ~ a4@3 ab4 ~ g4@2 ~@5", // Bb C F5 Csus2 F5
  E: "[d3,d4]@2 [d3,d4]@2 [d3,d4]!2 ~ [d3,d4]@2 [d3,d4] ~ d4 d3 d4 d3 ~", // D
  F: "[c3,c4]@2 [c3,c4]@2 [c3,c4]!2 ~ [c3,c4]@2 [c3,c4] ~ c4 c3 c4 c3 ~", // C
  G: "[b2,b3]@2 [b2,b3]@2 [b2,b3]!2 ~ [b2,b3]@2 [b2,b3] ~ b3 b2 b3 b2 ~", // B
  H: "[bb2,bb3]@2 [bb2,bb3]@2 [bb2,bb3]!2 ~ [c3,c4]@2 [c3,c4] ~ c4 c3 c4 c3 ~", // Bb C
  I: "d5!2 [d3,d4]@2 [d3,d4]!2 ~ [d3,d4]@2 [d3,d4] ~ [d4,f5] d3 [d4,d5] [d3,f5] g5, [d3,d4]@2 d6 ~ a5@3 ab5 ~ g5@2 ~@5", // D Dm D Dm D
  J: "c5!2 [c3,c4]@2 [c3,c4]!2 ~ [c3,c4]@2 [c3,c4] ~ [c4,f5] c3 [c4,d5] [c3,f5] g5, [c3,c4]@2 d6 ~ a5@3 ab5 ~ g5@2 ~@5", // C F5 Csus2 F5 C
  K: "b4!2 [b2,b3]@2 [b2,b3]!2 ~ [b2,b3]@2 [b2,b3] ~ [b3,f5] b2 [b3,d5] [b2,f5] g5, [b2,b3]@2 d6 ~ a5@3 ab5 ~ g5@2 ~@5", // B Bdim Bm Bdim B
  L: "bb4!2 [bb2,bb3]@2 [bb2,bb3]!2 ~ [c3,c4]@2 [c3,c4] ~ [c4,f5] c3 [c4,d5] [c3,f5] g5, [bb2,bb3]@2 d6 ~ a5@3 ab5 ~ g5@2 ~@5", // Bb C F5 Csus2 F5 Bb
  M: "[bb2,bb3]@2 [bb2,bb3]@2 [bb2,bb3]!2 ~ [bb2,bb3]@2 [bb2,bb3] ~ bb3 bb2 bb3 bb2 ~", // Bb
  N: "[c3,c4]@2 [c3,c4]@2 [c3,c4]!2 ~ [c3,c4]@2 [c3,c4] ~ c4 c3 c4 c3 a5, ~@13 ab5@2 ~", // C
  O: "[d3,d4]@2 a5 ab5 [d3,d4,g5] [d3,d4,f5] d5 e5 ~ [d3,d4] ~ d4 d3 d4 c6@2, c6 ~ [d3,d4]@2 ~@3 [d3,d4]@2 ~@5 d3 ~, ~@4 f5 g5 a5 ~", // D G5 Dm D
  P: "[db3,db4,db6]@2 [db3,db4,ab5]@2 [db3,db4,ab5] [db3,db4,g5] f5 [eb3,eb4]@2 [eb3,eb4] ~ eb4 eb3 eb4 eb3 ~, ~@7 g5 ~@8", // Db Db5 Dbdim Eb
  Q: "[bb2,bb3,d4,f4]@2 [bb2,bb3,e4,g4]@2 [bb2,bb3]!2 ~@3 [bb2,bb3] ~ bb3 bb2 bb3 bb2 ~, ~@2 [f4,a4] [d5,f5] [c5,e5]@2 [bb4,d5]@2, ~@7 [bb2,bb3]@2 ~@7", // Bb Edim Bb F Dm C Bb
  R: "[c3,c4]@2 [c3,c4]@2 [c3,c4]!2 ~@3 [c3,c4] ~ c4 c3 c4 c3 ~, [c5,e5]@4 [d5,f5]@3 [c3,c4]@2 ~@7, ~@2 [e5,g5] [c5,e5]", // C Dm C Em C
  S: "[d3,d4]@2 [d3,d4]@2 [d3,d4]!2 ~ [d3,d4]@2 [d3,d4] ~ d4 d3 d4 d3 ~, [d5,a5] ~", // D D5
  T: "[db3,db4]@2 [db3,db4]@2 [db3,db4]!2 ~ [eb3,eb4]@2 [eb3,eb4] ~ eb4 eb3 eb4 eb3 ~", U: "~@10 d5 db5 c5 b4 bb4 a4",
  V: "ab4 g4 gb4 f4 e4 eb4 d4 ~@2 d4 ~ d4!4 ~",
  W: "[d4!2 d5 ~ a4@3 g4 ab4 g4@2 f4 ~ d4 f4 g4@12 ~@2 ab5@2 a5, d2@15 ~@17]/2",
  X: "c6 ~ a5 ab5 g5 f5 d5 e5 f5@2 g5@2 a5@2 c6@2", Y: "~@8 a4 ab4 g4 gb4 f4 e4 eb4 d4",
  Z: "[d4,f4] [e4,g4] [f4,a4] [d5,f5] [c5,e5]@2 [bb4,d5]@2", AA: "[g5,e6] [a5,f6] [c6,g6] [a5,e6]", AB: "[d6,a6]@15 ~",
  AC: "[bb3,d4,f4]@12 ~ [f4,a4,c5]@3", // Bb F
  AD: "[~ [bb3,d4,f4]@9 ~ [f4,a4,c5]@9 ~ [c4,e4,g4]@20 ~ [bb2,d3,f3,bb3]@11 ~ [c3,e3,g3,e4]@6 [a2,c3,e3,c4]@6 [d3,f3,a3,d4,f4,a4]@46]/7", // Bb F C Bb C Am Dm
})).s("gm_piano").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@3 B C@3 D C@3 D C@7 E C@3 D C@3 D C@3 D C@3 D F A F A F A F A F A F A F A@3 C@15 A G H I J K ~@3
>`.pickRestart({
  A: "x", B: "x ~@7 x ~@2 x ~@2 x ~", C: "x ~@3 x!2 ~@2 x ~@2 x ~ x ~@2", D: "x ~@3 x!2 ~@2 x ~@2 x ~@2 x ~",
  E: "~ x ~ x ~@3 x ~@8", F: "x ~@2 x ~@4 x ~ x ~@5", G: "~ x ~@9 x ~@3 x", H: "~@2 x ~@2 x ~@10", I: "~@5 x ~@4 x ~@5",
  J: "x!2 ~@4 x ~@2 x!2 ~@2 x ~ x", K: "~ x ~@6",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A@3 B A@3 B A@7 C A@3 B A@3 B A@3 B A@3 B D E D E D E D E D E D E D E ~@2 A@15 ~@3 F G ~@4
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~ x ~@2 x ~@2 x ~", C: "x ~ x ~ x!3 ~@9", D: "~ x ~ x", E: "~@4 x ~@7 x ~ x!2",
  F: "~@13 x ~@2", G: "~@3 x ~@2 x ~@3 x ~@4 x",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@40 A ~ A ~ A ~ A ~ A ~ A ~ A ~@27>".pickRestart({
  A: "~@5 x!3",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B@2 C A B@2 C A B@3 A B D E A B@2 C B@3 C A B@2 C B@3 C ~@16 A@2 D@2 A@11 ~@3 F G ~@4
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!4 ~@4", D: "~ x!3 ~ x!3", E: "x!2 ~@6", F: "~@10 x ~@2 x ~@2", G: "x ~@2 x ~@12",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@16 B C B C B C B C B C B C B C ~@26>".pickRestart({
  A: "~@14 x!2", B: "~ x ~@7 x ~@5 x", C: "~@9 x ~ x ~@4",
})).gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@7 [~@8 x ~ x!2 ~ x!2 ~] ~@64 [~@11 x ~ x ~ x] [~ x!2 ~@2 x ~@10] ~@6>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@23 [~@12 x!2 ~@2] ~@56>").gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A@5 ~@2 B A ~@2 B A ~@3 A ~ C D A ~@2 B ~@3 B A ~@2 B ~@3 B ~ A ~ A ~ A ~ A ~ A ~ A ~ A@5 C@2 A@12 E ~@2 F G ~@3
>`.pickRestart({
  A: "x", B: "~@8 x ~@2 x ~@2 x ~", C: "x!2", D: "~@7 x ~@8", E: "~ x ~@14", F: "~@6 x ~@3 x ~@4 x", G: "~ x ~@6",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@3 A B@3 C ~@32 D E D E D E D E D E D E D E B@2 ~@15 F G ~@7>".pickRestart({
  A: "~@8 x ~@2 x ~@2 x ~", B: "~ x!3", C: "~ x ~@2", D: "x!5 ~@3", E: "~ x!7", F: "~@4 x ~@4 x ~@3 x ~@2",
  G: "~@3 x ~@4",
})).gain(0.25)

stack(
  vibraphone, glockenspiel, tubular_bells, xylophone, bass, timpani, piano, kick, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, ride
)

More by Cloud Beat (Nathanael Quimby)