Strudelify

All Cried Out

Allure

KeyD♭ majorTempo70 bpm
0:00/0:00
// All Cried Out — Allure
// 70 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/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 · "Right Hand"
const piano = note(`<
  A@4 B@3 C D@2 E F G H I J K L M N O P Q R S@2 T U V W X Y Z B@3 C D@2 E F G H AA AB K L M N O P Q R S@2 T U V W X Y AC
  P Q R S@2 T U AD AE@3 AF AG AH AI@8
>`.pickRestart({
  A: "[~@7 ab4, ab5@7 g5 ab5@7 g5 ab5@7 g5 ab5@8, ~ g5@5 eb5@3 g5@5 eb5@3 g5@5 eb5@3 g5@7, ~@2 eb5@3 bb4@5 eb5@3 bb4@5 eb5@3 bb4@5 eb5@6, ~@3 bb4 ab4@7 bb4 ab4@7 bb4 ab4@7 bb4@5]/4",
  B: "[[f4,ab4]@2 db5!2 db5@2 db5!2 [f4,ab4,db5]@2 [f4,ab4,eb5]@2 [ab4,db5,f5]@2 [db5,f5,ab5]@4 [f4,ab4,db5]@2 [f4,ab4,db5] db5!2 eb5 [ab4,db5,f5]@2 [db5,f5,ab5]@2 [c5,eb5,bb5]@2 c6@4 bb5@3 ab5 bb5@2 ab5@3 ~ [db5,f5,ab5]@2 f5@2, ~@38 [db5,f5]@5 ~@5]/3", // Fm Db Fm7 Db Cm7 Db
  C: "eb5@3 f5@8 ~ ab4 bb4 c5@2, [ab4,c5]@11 ~@5", // Ab
  D: "[db5@2 db5@2 db5@2 db5@2 [f4,ab4,db5]@2 [f4,ab4,eb5]@2 [ab4,db5,f5]@2 [db5,f5,ab5]@4 db5!2 [f4,ab4,db5]@2 [f4,ab4,eb5]@2 [ab4,db5,f5]@2 ab5@2 [c5,eb5,bb5]@2 [eb5,ab5,c6]@2, [f4,ab4]@7 ~@25]/2", // Db Fm7 Db Fm7 Db Cm7 Ab Fm
  E: "[c5,eb5,bb5]@3 ~ [c5,eb5,bb5]@2 [db5,f5,ab5]@5 ~ [f4,bb4,db5]@2 f5@2", // Cm7 Db Bbm
  F: "[gb4,c5,eb5]@4 [gb4,c5,eb5] [gb4,c5,f5]@8 bb4@2 ab4", // Cdim F
  G: "[bb3,db4,gb4,ab4]@7 ~ [db4,gb4,bb4]@2 c5@2 [gb4,bb4,db5]@2 f5@2", // Gb
  H: "[bb4,db5,gb5]@3 ~ [bb4,db5,gb5]@3 ~ [bb4,db5,gb5]@2 f5@2 [bb4,db5,f5]@2 [bb4,db5,f5]@2", // Gb Bbm
  I: "[ab4,c5,eb5]@2 [ab4,c5,eb5]@3 ~ [ab4,c5,f5]@5 ~ [ab4,ab5] [bb4,bb5] [db5,db6] [ab5,ab6]", // Ab Fm Ab Bb Db Ab
  J: "[bb4,db5,gb5]!5 ab5 [bb4,db5,gb5] [bb4,db5,ab5], gb6 ~@15", // Gb Bbm7
  K: "[ab4,c5,gb5]@2 f5@2 [ab4,c5,eb5]@2 [ab4,c5,f5]@2 [ab4,c5,eb5] db5 [ab4,c5,eb5]@5 ~", // Ab7 Ab Fm Ab
  L: "[bb4,db5,gb5]@2 [bb4,db5,gb5]@2 [bb4,db5,gb5] gb5!3 [bb4,db5,gb5]@2 [bb4,db5,f5]@2 [gb4,bb4,eb5]@2 f5@2", // Gb Bbm Ebm
  M: "eb5@5 f5@6 [ab5,ab6] [gb5,gb6] [f5,f6] [db5,eb5,eb6] [db5,db6], [ab4,c5]@11 ~@5", // Ab Gb F Dbsus2 Db Ab
  N: "[bb4,db5,gb5]!3 [bb4,db5,ab5] [db5,gb5,bb5]!4", // Gb Bbm7 Gb
  O: "[c5,eb5,a5]@2 [c5,eb5,a5]@2 [c5,eb5,a5]@2 [c5,eb5,bb5]@2 [eb5,a5,c6]@5 db6 c6@2", // Adim Cm7 Adim
  P: "[db5,f5,bb5]@2 ~@2 [f5,bb5,db6]@7 ~ [db5,f5,bb5]!2 ~ bb5", // Bbm
  Q: "bb5 ab5!2 ab5@2 ab5@2 bb5@2 ab5@2 bb5@4 db5, [c5,eb5]@7 [c5,eb5]@8 ~", // Cm
  R: "[bb4,db5,gb5] gb5!3 [bb4,db5,gb5]@2 [bb4,db5,ab5]@2 [db5,gb5,bb5]@2 [db5,gb5,bb5]@5 bb5", // Gb Bbm7 Gb
  S: "[[c5,eb5,a5]@2 a5!2 [c5,eb5,a5]@2 [c5,eb5,bb5]@2 c6@2 db6 c6@3 db6 ~ [db5,f5]@2 ~ f5 [f5,bb5,db6]@7 ~ [db5,f5,bb5]!2 ~ bb5, ~@8 [eb5,a5]@7 bb5@3 ~@14]/2", // Adim Cm7 Db Bbm Ebdim
  T: "bb5@2 ab5 ab5@2 gb5@2 gb5 f5 eb5 db5@2 ab4 bb4 ~ db5, [c5,eb5]@7 ab4@4 ~@5", // Cm
  U: "[bb4,db5,gb5]@3 ~ f5 eb5 db5@2 [gb4,bb4,db5]@5 ~ bb4 f5, ~@4 [gb4,bb4]@3 ~@9", // Gb
  V: "eb5@3 f5@8 ~ bb4@2 ab4@2, [ab4,db5]@11 ~@5", W: "[f4,ab4,db5]@3 ~ db4@3 ~ [ab3,db4,f4]@3 ~ ab4 ab3@3",
  X: "~ ab3 db4 eb4 [ab3,db4,f4] ab4 [c4,eb4,bb4] c5", Y: "[eb4,ab4,c5]@3 ~ ab4@2 [ab3,db4,f4]@4 ab3@2 db4 eb4 f4@2",
  Z: "[gb3,ab3,db4]@2 gb3@2 [gb3,ab3,db4]@3 ~ [gb3,ab3,c4]@7 ~", // Gbsus2 Ab7
  AA: "[ab4,c5,eb5]@2 [ab4,c5,eb5]@3 ~ [ab4,c5,f5]@5 [ab5,ab6] [gb5,gb6] [f5,f6] [eb5,eb6] [db5,db6]", // Ab Fm Ab Gb F Eb Db
  AB: "[bb4,db5,gb5]!5 ab5 [bb4,db5,gb5] [bb4,db5,ab5]", // Gb Bbm7
  AC: "[c5,eb5,bb5]@3 ~ [c5,eb5,a5]@2 f5@2 [c5,eb5,bb5]@3 ~ [eb5,a5,c6]@3 ~", // Cm7 Adim Cm7 Adim
  AD: "eb5@5 f5@3 [ab3,db4,eb4,gb4]@5 bb4 ~ db5, [ab4,db5]@7 ~@9", // Absus4 Db5
  AE: "[[bb4,db5,gb5]@3 ~ [bb4,db5,ab5] gb5 ~ ab5 [db5,gb5,bb5]@5 ~ ab5 db6@2 c6 ~ bb5 ab5@3 f5 [c5,eb5,bb5]@15 ~ [eb6,ab6]@3 ~ db6@2 c6@2, ~@40 db6 ~@7]/3", // Gb Bbm7 Gb Cm7 Ab5
  AF: "[e5,ab5,db6]@15 ~", AG: "[eb5,gb5,b5]@13 ~ eb6@2", AH: "[f5,ab5,db6]@15 ~",
  AI: "[~@11 ab4@4 ~, ab5@7 g5 ab5@7 g5 ab5@7 g5 ab5@7 g5 [ab5,bb5,eb6]@11 bb4@16 ~@5, ~ g5@5 eb5@3 g5@5 eb5@3 g5@5 eb5@3 g5@5 eb5@3 g5@5 eb5 g5 [c6,ab6,bb6,eb7]@16 ~@8, ~@2 eb5@3 bb4@5 eb5@3 bb4@5 eb5@3 bb4@5 eb5@3 bb4@5 eb5@3 bb4@4 g5@16 ~@7, ~@3 bb4 ab4@7 bb4 ab4@7 bb4 ab4@7 bb4 ab4@7 bb4 ab4@6 eb5@16 ~@6]/8", // Absus2 Ab
})).s("gm_piano").gain(0.22)

// other · piano · "Left Hand"
const piano_2 = note(`<
  ~@2 A B C D E F C D E G H I F J K I F I L M N I L M N I O C D P G C D E F C D E G H I F J K I F I L M N I L M N I O C
  D P Q M N I L M N I O I R O S T U V@4 ~@4
>`.pickRestart({
  A: "[db2,db3]@13 ~ ab2@2", B: "[db2,db3]@11 ~ db3@3 ~", C: "db3@5 ~ db3@2 db3@5 ~ ab2@2",
  D: "db3@5 ~ db3@2 db3@3 ~ c3@3 ~", E: "bb2@5 ~ bb2@2 bb2@5 ~ bb2@2", F: "ab2@5 ~ ab2@2 ab2@5 ~ ab2@2",
  G: "ab2@5 ~ ab2@2 ab2@3 ~ ab2@3 ~", H: "ab2@3 ~ ab2@3 ~ ab2@3 ~ ab2@3 ~", I: "gb2@5 ~ gb2@2 gb2@7 ~",
  J: "gb2@5 ~ gb2@2 gb2@5 ~ gb2@2", K: "ab2@5 ~ ab2@2 ab2@3 ~ ab2@2 f2@2", L: "f2@5 ~ f2@2 a2@3 ~ a2@3 ~",
  M: "bb2@2 ~@2 bb2@7 ~ bb2!2 ~@2", N: "ab2@5 ~ gb2@2 f2@5 ~ f2@2", O: "ab2@5 ~ ab2@2 ab2@7 ~", P: "bb2@5 ~ bb2@9 ~",
  Q: "f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~", R: "ab2@5 ~ ab2@2 ab2@5 ~ eb2@2", S: "a2@5 ~ a2@2 a2@7 ~", T: "b2@5 ~ b2@2 b2@7 ~",
  U: "db3@5 ~ db3@2 db3@7 ~", V: "[[db2,db3]@31 ~]/2",
})).s("gm_piano").gain(0.15)

stack(piano, piano_2)