Strudelify
KeyE♭ majorTempo96 bpm
0:00/0:00
// oblivion — ASTOR PIAZZOLLAarr. Bruce Xu
// 96 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5918663; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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 C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV
  AW AX ~@29
>`.pickRestart({
  A: "d6 g5 eb5 eb6 g5 eb5 c6 g5, [c3,c4,d5]@3 [ab2,ab3]@3 [g2,g3,c5]@2, ~@3 eb5@2 ~@3", // Csus2 Ab C5
  B: "d6 g5 eb5 bb5 g5 eb5 c6 g5, [c3,c4,d5]@3 [ab2,ab3,bb4]@3 [g2,g3,c5]@2", // Csus2 Absus2 C5
  C: "ab5 eb5 c5 bb5 eb5 c5 g5 eb5, [c3,c4,ab4]@3 [ab2,ab3,bb4]@3 [g2,g3,g4]@2", // Fm Absus2 G
  D: "ab5 eb5 c5 f5 c5 g5 eb5 f5, [c3,c4,ab4]@3 [ab2,ab3,f4]@3 [g2,g3,eb4]@2", // Fm Db Cm
  E: "d4 g3 ~ ab2 d3@2 g2@2, c2@3 ~@5, ~ eb4@3", F: "d4 g3 eb3 ab2 d3@2 g2@2, c2 ~@3",
  G: "d5 g4 ~ ab2 d3@2 g2@2, c2@3 ~@5, ~ eb4@3", H: "d6 g5 ~ ab2 d3@2 g2@2, c2@3 ~@5, ~ eb5@3",
  I: "c6 g5 eb5 [ab2,ab3,d6] g5 d5 bb5 g5, [c3,c4,c5]@3 d5@2 ~@3, ~@2 [ab2,ab3] [g2,g3,bb4]", // Abdim C Ab Gm
  J: "c6 g5 eb5 [ab2,ab3,ab5] eb5 c5 bb5 eb5, [c3,c4,c5]@3 ab4@3 ~@2, ~@2 [ab2,ab3] [g2,g3,bb4]", // Ab C Ab Gm
  K: "g5 eb5 c5 [ab2,ab3,ab5] eb5 c5 bb5 eb5, [c3,c4,g4]@3 ab4@3 ~@2, ~@2 [ab2,ab3] [g2,g3,bb4]", // Ab C5 Ab Gm
  L: "c6 g5 eb5 [ab2,ab3,d6] g5 eb5 c6 ab5, [c3,c4,c5]@3 d5@3 ~@2, ~@2 [ab2,ab3] [g2,g3,c5]", // Abdim C Ab C5
  M: "ab5 eb5 ab4 [f2,f3,ab5] eb5 d5 ab4 ab5, [f2,f3]@3 ~ [bb2,bb3]@2 [bb2,bb3]@2", // Fm F Bb
  N: "g5 d5 g4 [eb3,eb4,g5] d5 c5 g4 g5, [eb3,eb4]@3 ~ [ab2,ab3]@2 [ab2,ab3,d4]@2", // Eb Ab Abdim
  O: "f5 c5 ab4 [d2,d3,f4] [gb4,eb5,gb5] c5 ab4 gb4, [d2,d3]@3 ~ [d2,d3]@2 [d3,d4]@2", // Dm Ebm D
  P: "g5 [ab4,b4,d5] [f4,f5] [ab4,b4,d5] [eb4,eb5] [f4,ab4,b4] [d4,d5] [f4,ab4,b4], g3, g2 [f2,f3] [eb2,eb3] [d2,d3]", // Abdim F Abdim Eb Fdim D Fdim F …
  Q: "c5 g4 eb4 [ab2,ab3,d5] g4 d4 bb4 g4, [c3,c4]@3 d4@2 ~@3, ~@2 [ab2,ab3] [g2,g3,bb3]", // Abdim C Ab Gm
  R: "c5 g4 eb4 [ab2,ab4] eb4 c4 bb4 eb4, [c3,c4]@3 ab3@3 ~@2, ~@2 ab2 [g2,g3,bb3]", // Ab C Gm
  S: "g4 eb4 c4 [ab2,ab4] eb4 c4 bb4 eb4, [c2,c3,g3]@3 ab3@3 ~@2, ~@2 ab2 [g2,g3,bb3]", // Ab C5 Gm
  T: "c5 g4 eb4 [ab2,ab3,d5] g4 eb4 c5 ab4, [c3,c4]@3 d4@3 ~@2, ~@2 [ab2,ab3] [g2,g3,c4]", // Abdim C Ab C5
  U: "c5 f4 db4 bb4 f4 db4 ab4 db4, [g2,g3,c4]@3 [g2,g3,bb3]@3 [ab2,ab3]@2", // C5 Gm Ab
  V: "[e4,ab4] db4 bb3 f4 bb3 g3 db5 c5, [ab3,c4]@3 ~, c2@3 [db2,db3]@3 [c2,c3,bb4]@2", // E Ab Db C7
  W: "c4 ab3 f3 db4 ab3 f3 d4 ab3, [f1,f2,c3]@3 [f1,f2,db3]@3 [d3,f3]@2", // F5 Db Dm
  X: "[eb4,eb5]@2 [f4,ab4,c5]@2 [e4,e5]@2 [g4,bb4,db5]@2 [g4,g5]@2 [ab4,c5,e5]@2 [f1,f2,f4,f5]@2 [e1,e2] [eb1,eb2], [f1,f2]@4 [g1,g2]@2 ~ [ab4,c5]", // Eb Fm E Gdim G Abaug F E …
  Y: "~ [f3,c4] [ab3,d4] [d4,f4] [f4,ab4] [ab4,c5] [d1,d2,c5,f5] [c1,c2,f5,ab5,c6], [d1,d2]@3 [d2,d3]@3 ~@2", // F5 Abdim Dm Fm Ab Dm7 Fm D
  Z: "~@2 [f3,ab3]@2 [b3,d4]@2 [b3,d4,f4]@2 g4 [g4,ab4] [d4,f4,g4]@2 [eb4,g4,d5]@2 [g4,b4,d5,g5]@2, [b0,b1]@3 [b1,b2]@3 [b1,b2]@2, ~@4 f4 ~@3", // Fm Bm Bdim Abmaj7 G7 Ebmaj7 G B
  AA: "eb4@2 d4@2 eb4@2 [c3,c4]@2 g4@2 f4@2 g4@2 ~ d4, [c3,c4]@3 ~ [bb2,bb3,d4]@3 [bb2,bb3,eb4]", // C Bb Eb5
  AB: "[c4,g4,c5] [eb4,g4] ab4 [ab2,f4] [eb4,g4] [c4,eb4] [f2,f3,ab3,f4] [eb2,eb4,g4], [ab2,ab3]@3 ~ [g2,g3]@2 ~@2, ~ c4@3 ~@4", // C5 Eb Db Eb Cm Fm Eb Ab …
  AC: "[d4,gb4,ab4,eb5] ~ eb4 [a3,c4] gb4 eb4 ~ c4, [d2,d3]@3 ~@3 [ab2,d4]@2, ~ d4@3 [gb3,d4]@2 ~@2", // Ab7 Am D Abdim D
  AD: "g4 d4 b3 f4 b3 ab3 [eb2,eb3,eb4] [d2,d3,d4], [g2,g3]@3 [f2,f3]@3 ~@2", // Eb D G F
  AE: "[g4,c5] eb4 c4 [ab1,ab2,ab4] eb4 c4 g4 eb4, [c2,c3]@3 ~ [ab1,ab2]@2 [g1,g2,g3]@2, c4@2 ~ ab3@3 ~@2", // C5 Ab C Ab G
  AF: "bb4 eb4 c4 [ab1,ab2,ab4] eb4 c4 g4 d4, [c2,c3,bb3]@3 ab3@3 ~@2, ~@2 [ab1,ab2] [g1,g2,g3]", // Ab C7 Ab G
  AG: "[eb4,ab4,c5] [eb4,g4] [ab3,eb4] [c2,c3,ab4,c5,ab5] ab4 [ab3,eb4] [ab5,c6,eb6,ab6] [eb5,eb6], [f1,f2]@3 ~ [eb2,eb3]@2 [f1,f2]@2", // Ab Eb Ab5 Fm Ab5 Ab Eb F …
  AH: "ab4 d4 ab3 [f1,f2,ab4,bb4,ab5] [f4,c5,d5] ab4 [d6,f6,ab6] ab5, [bb1,bb2]@3 ~ [bb1,bb2]@2 [bb1,bb2]@2", // Bb7 Dm7 Ddim Bb
  AI: "g4 d4 g3 [bb1,bb2,g5] d5 g4 [g5,d6,g6] [d5,d6], [eb2,bb2,eb3]@3 ~ [eb2,eb3]@2 [eb2,eb3]@2", // Eb G5 D Eb5 Eb
  AJ: "g4 c4 g3 [eb2,eb3,g5] c5 g4 [g5,c6,g6] [c5,c6], [ab1,eb2,ab2]@3 ~ [ab1,ab2]@2 [ab1,ab2]@2", // Eb C5 C Ab5 Ab
  AK: "f4 c4 f3 [ab1,ab2,f4,f5] c5 f4 [f5,ab5,c6,f6] [c5,c6], [d2,ab2,d3]@3 ~ [d2,d3]@2 [d2,d3]@2", // Db Fm C Ddim D
  AL: "f4 b3 f3 f4 b4 [g1,g2,g4] [a1,a2,g4,c5,eb5] [b1,b2,g4,b4,d5], [g1,d2,g2]@3 [d2,d3]@2 ~@3", // G Am7b5 G G5 D
  AM: "[g4,c5,eb5] c5 g4 [c1,c2,eb5] [ab4,c5,f5] c5 ab4 [d1,d2,f5], [c2,c3]@3 ~ [d1,d2]@3 ~", // Cm Fm Dm C D
  AN: "[c5,eb5,g5] c5 g4 [eb3,eb4,g5] [bb4,e5,g5] db5 bb4 [e2,e3,g5], [eb1,eb2]@3 ~ [e3,e4]@3 ~", // Cm Eb Edim Em Eb E
  AO: "ab4 c5 ab4 [c3,c4,ab5] ab5 eb6 ab6 ab5, [f2,f3]@3 ~ [f2,f3]@2 [f2,f3]@2", // Fm F
  AP: "ab5 d6 ab6 [f2,f3,ab5] ab5 d6 ab6 ab5, [bb2,bb3]@3 ~ [bb2,bb3]@2 [bb2,bb3]@2", // Fm Bb
  AQ: "g5 d6 g6 [bb2,bb3,g5] g5 d6 g6 g5, [eb3,eb4]@3 ~ [eb3,eb4]@2 [eb3,eb4]@2", // Eb
  AR: "g6 c6 g5 [eb3,eb4,g6] g5 c6 eb6 g6, [ab2,ab3]@3 ~ [ab2,ab3]@2 [ab2,ab3]@2", // Eb Ab
  AS: "[c6,gb6] c6 gb5 [d3,d4,c6,gb6] c6 [gb5,c6] [c6,gb6] gb5, [d2,d3]@3 ~ [d3,d4]@2 [d2,d3]@2", // Cdim D7 Gbdim Cdim D
  AT: "g6 b5 [f5,f6] g6 [g5,b5] [f5,b5] [b5,f6] g5, [g2,g3]@3 [g2,g3]@3 [g2,g3]@2", // F G Fdim Bdim G
  AU: "[d6,f6] [c6,eb6] [d6,f6] [g2,c6,eb6] ab2@2 g1@2, c2@3 ~ [d6,f6]@4", // Dm Cm Dm Cm Dm
  AV: "[d5,f5] [c4,c5,eb5] [g4,d5,f5] [g3,f4,c5,eb5] ab3@2 g3@2, c3@3 ~ [g4,d5,f5]@4", // Dm Cm G7 Cm G7
  AW: "[d4,f4]@2 [c4,eb4]@2 [d4,f4]@2 ab3 g3 ab2@4 g2@4, c2@3 ~@5, ~ c3@2 [g2,c4,eb4] [ab3,d4,f4]@4", // Dm Cm Dm Cm Ddim
  AX: "[c4,c5,d5,f5] [bb3,bb4,c5,eb5] [a3,a4,d5,f5] [ab3,ab4,c5,eb5] ~@4", // Dm7 Cm7 Dm Ab
})).s("gm_piano").gain(0.3)

// chords · piano
const piano_2 = note("<~@49 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ~@4>".pickRestart({
  A: "~@4 [g3,g4] [f2,f3,g4,g5] [eb2,eb3,b4,b5] [db2,db3,b5,b6], ~ [d5,f5]", // G Fsus2 Abm Db7 Dm
  B: "c5 g4 eb4 [ab1,ab2,g4,d5] ~ d4 bb4 g4, [c2,c3,c4]@3 ~ [ab1,ab2,g4]@2 [g1,g2,bb3,f4]@2, eb4@2 ~ d4@2 ~@3", // G C Abmaj7 Gm7
  C: "c5 g4 eb4 ~ eb4 c4 ~ eb4, [c2,c3,c4]@3 [ab1,ab2,ab4] [ab1,ab2]@2 [g1,g2,bb3,d4]@2, eb4@4 ~@2 [ab3,d4]@6 ~ g4@3, ~@7 f4@5 bb4@2 ~@2", // C Ab Gm Abdim
  D: "~ eb4 ~@2 c4@2 [ab1,ab2,eb4,ab4]@2 ~@2 c4@2 bb4@2 eb4@2, [c2,c3,g3]@3 ~ [ab1,ab2,eb4]@2 [g1,g2,bb3,f4]@2, c4@2 ~ ab3@3 ~@2, g4 eb4@2 ~@5", // Ab5 C5 Ab5 Gm7
  E: "[g4,c5] ~ eb4 ~ g4 eb4 c5 ab4, [c2,c3,c4]@3 [ab1,ab2,d5] [ab1,ab2]@2 [g1,g2,c4,g4]@2, ~ g4@2 [d4,f4]@3 ~@2, ~@7 ab4@5 ~@4", // C5 C Abdim Ab C5 Dm
  F: "ab5 eb5 ab4 [f1,f2,ab5] [bb4,eb5] d5 ab4 ab5, [f1,f2]@3 ~ [bb1,bb2]@2 [bb1,bb2]@2", // Fm Eb5 F Bb
  G: "[bb4,g5] d5 g4 [eb2,eb3,g5] [c5,d5] c5 [g4,eb5] g5, [eb2,eb3]@3 ~ [ab1,ab2]@2 [d3,ab3,d4]@2", // Eb Csus2 Cm Eb Ab Ddim
  H: "[ab4,f5] c5 ab4 [d3,d4,f4,c5] [gb4,eb5,gb5] c5 [ab4,c5,eb5] gb4, [d2,d3]@3 ~ [d3,d4]@2 [d2,d3]@2", // Db Dm7 Ebm Ab D
  I: "[g4,g5] [ab4,b4,d5] [f4,f5] [ab4,b4,d5] [eb4,eb5] [f4,ab4,b4] db4 [f4,g4,b4], g3, g2 [f2,f3] [eb2,eb3] [db2,db3]", // G Abdim F Abdim Eb Fdim G7 F …
  J: "c5 g4 eb4 [ab1,ab2,d5] g4 d4 bb4 g4, [c2,c3,c4]@3 d4@2 ~@3, ~@2 [ab1,ab2] [g1,g2,bb3]", // Abdim C Ab Gm
  K: "c5 g4 eb4 [ab1,ab2,ab4] eb4 c4 bb4 eb4, [c2,c3,c4]@3 ab3@3 ~@2, ~@2 [ab1,ab2] [g1,g2,bb3]", // Ab C Ab Gm
  L: "g4 eb4 c4 [ab1,ab2,ab4] eb4 c4 bb4 eb4, [c2,c3,g3]@3 ab3@3 ~@2, ~@2 [ab1,ab2] [g1,g2,bb3]", // Ab C5 Ab Gm
  M: "c5 g4 eb4 [ab1,ab2,d5] g4 eb4 c5 ab4, [c2,c3,c4]@3 d4@3 ~@2, ~@2 [ab1,ab2] [g1,g2,c4]", // Abdim C Ab C5
  N: "c5 f4 db4 bb4 f4 db4 ab4 db4, [g1,g2,c4]@3 [g1,g2,bb3]@3 [ab1,ab2,ab3]@2", // C5 Gm Ab
  O: "[e4,ab4] db4 bb3 g4 bb3 g3 db5 c5, [ab3,c4]@3 ~, [c2,c3]@3 [db2,db3]@3 [c2,c3,c4]@2", // E Ab C Db C
  P: "c4 ab3 f3 db4 ab3 f3 d4 ab3, [f1,f2,c3]@3 [f1,f2,db3]@3 [d3,f3]@2", // F5 Db Dm
  Q: "[eb4,eb5]@2 [f4,ab4,c5]@2 [e4,e5]@2 [g4,bb4,db5]@2 [g4,g5]@2 [ab4,c5,e5]@2 [f1,f2,f4,f5]@2 [e1,e2] [eb1,eb2], [f1,f2]@4 [g1,g2]@2 ~ [ab4,c5]", // Eb Fm E Gdim G Abaug F E …
  R: "~ [f3,c4] [ab3,d4] f4 [f4,ab4] [ab4,c5] [d1,d2,d4,c5,f5] [c1,c2,c4,f5,ab5,c6], [d1,d2]@3 [d2,d3,d4]@3 ~@2, d4 ~@3", // F5 Abdim Fm Ab Dm7 Fm D
  S: "~@2 [f3,ab3]@2 [b3,d4]@2 [b3,d4,f4]@2 [g4,ab4] g4 ~@2 [g4,d5]@2 eb5 d5, [b0,b1]@6 [b1,b2]@5 f4@3 [g4,b4,g5]@2, ~@4 f4 [d4,g4] [g1,g2]@2", // Fm Bm Bdim Abmaj7 G5 B G G5 …
  T: "~@2 d4@2 eb4@2 [c2,c3,c4,eb4]@2 g4@2 f4@2 g4@2 ~ d4, [c2,c3,c4]@3 ~ [bb1,bb2,d4]@3 [bb1,bb2,eb4], eb4 ~@3", // Cm C Bb Eb5
  U: "[g4,c5] [c4,eb4,g4] ab4 f4 [eb4,g4] [c4,eb4] [f1,f2,f3,ab3,f4] [eb1,eb2,eb4,g4], [ab1,ab2,ab3]@2 [g1,g2,g3] ~", // C5 Cm Eb Cm Fm Eb Ab G
  V: "[d4,gb4,ab4,eb5] ~ eb4 c4 gb4 eb4 ~ c4, [d1,d2] gb3@2 [d2,d3,d4], ~ d4@3 [c4,d4]@2 ~@2", // Ab7 D Csus2
  W: "~ g4@3 [ab4,eb5,g5]@2 [ab3,b4]@2 [g3,b5,f6,ab6]@4 ~@4, g2@3 ~@5, [b3,eb4] ~@3", // Abmaj7 Abm Fdim B
  X: "g5 eb5 c5 ab5 eb5 c5 g5 eb5, c5@2 ~ ab4@3 g4@2", Y: "bb5 eb5 c5 ab5 eb5 c5 g5 eb5, c5@2 ~ ab4@3 g4@2",
  Z: "c6 g5 eb5 d6 g5 eb5 bb5 eb5, c5@3 ab4@3 g4@2",
})).s("gm_piano").gain(0.2)

// chords · piano · Cm C5 Cm
const piano_3 = note(`<
  ~@75
  [ab5 eb5 c5 g5 eb5 c5 f5 c5, c5@2 ~ ab4@3 g4@2]
  [[c3,g3,eb4,g5,c6,d6,g6]]
  [~ [c4,g4,c5]@15, [c3,g3,d4,eb4]]
  [[c3,g3,eb4,g5,c6,d6,g6]]
>`).s("gm_piano").gain(0.15)

stack(piano, piano_2, piano_3)