Strudelify
KeyA♭ majorTempo150 bpm
0:00/0:00
// Crepusculo — José Vianna da Motta
// 150 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6165489; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 58 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(150/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
const piano = note("<~@47 A B C D@2 E F G H I J>".pickRestart({
  A: "~@2 c6 ab5 ~@2 eb6 c6 ~@2 ab5 eb5 ~@2 c6 ab5, [eb5,eb6] [ab5,ab6] [c5,c6] [f5,f6]", // Eb Ab C F
  B: "~@2 c6 ab5 ~@2 ab5 eb5 ~@2 eb5 c5 ~@2 eb5 c5, [eb5,eb6] [c5,c6] [bb4,bb5] [ab4,ab5]", // Eb C Bb Ab
  C: "~@2 eb5 db5 ~@2 db6 bb5 ~@2 db6 bb5 ~@2 db6 bb5, [g4,g5] [f5,f6] [eb5,eb6]@2", // G F Eb
  D: "[~@2 c5 ab4 ~@2 c6 ab5 ~@2 c6 ab5 ~@2 c6 ab5 ~@2 ab5 f5 ~@2 ab5 f5 ~@2 f6 bb5 ~@2 f6 db6, [gb4,gb5]@4 [f5,f6]@4 [eb5,eb6]@11 ~ [db5,db6]@4 [bb5,bb6]@4 [ab5,ab6]@4]/2", // Gb F Eb Db Bb Ab
  E: "~@2 db6 bb5 ~@2 db6 bb5 ~@2 bb5 f5 ~@2 bb5 f5, [g5,g6] [f5,f6] [eb5,eb6] [db5,db6]", // G F Eb Db
  F: "~@2 g5 eb5 ~@2 c6 g5 ~@2 g5 eb5 ~@2 bb5 g5, [c5,c6] [eb5,eb6] [bb4,bb5] [eb5,eb6]", // C Eb Bb Eb
  G: "~@2 c6 ab5 ~@2 eb5 c5 ~@2 eb6 c6 ~@2 eb6 bb5, [eb5,eb6] [ab4,ab5] [ab5,ab6]@2", // Eb Ab
  H: "~@2 g6 eb6 ~@2 bb5 g5 ~@2 bb6 g6 ~@2 bb6 g6, [bb5,bb6] [eb5,eb6] [eb6,eb7]@2", // Bb Eb
  I: "~@2 eb6 c6 ~@2 eb6 c6 ~@2 eb6 c6 ~@2 eb6 c6, [ab5,ab6] ~", J: "[ab6,eb7,ab7]@15 ~",
})).s("gm_piano").gain(0.15)

// chords · piano
const piano_2 = note(`<
  A B C ~ D E F G A B C H I J K L M N F O P Q R S T U V W@2 ~@7 X Y Z AA AB AC ~ AA AD AE AF AG@8 AH AI AJ
>`.pickRestart({
  A: "~ [eb4,ab4,c5] ~ [ab4,c5,eb5] eb4 ab4 ~ [ab4,c5], [ab1,ab2,eb5]@4 eb3@11 ~, ~ ab5 [ab3,c4]@2, ~@2 c5 f5, ~@5 eb4@3", // Ab Ab5 Ab
  B: "~ [ab4,c5] ~ [eb4,ab4] ~ [c4,eb4] ~ [c4,eb4], [ab1,ab2,eb5]@4 eb3@11 ~, ~ c5 ab3@2, ~@2 bb4 ab4", // Ab Ab5 Cm Ab5
  C: "~ [bb3,db4,eb4] ~ [g4,bb4,db5] ~ [g4,bb4,db5] ~ [g4,bb4,db5], [ab1,ab2,g4]@4 eb3@11 ~, ~ f5 [g3,bb3,db4,eb4,eb5]@2", // Eb7 Gdim Abmaj7 Eb7
  D: "~ [ab4,c5] ~ [ab4,c5,eb5] eb4 ab4 ~ [ab4,c5], [ab1,ab2,eb5]@4 eb3@11 ~, ~ ab5 [ab3,c4]@2, ~@2 c5 f5, ~@5 eb4@3", // Ab Ab5 Ab
  E: "~ [ab4,c5] ~ [eb4,ab4] ~ [c4,eb4] ~ [c4,eb4], [f1,f2,eb5]@4 c3@11 ~, ~ c5 [f3,ab3]@2, ~@2 bb4 ab4", // Ab Ab5 Cm F7 Fm
  F: "~ [bb3,d4] ~ [bb3,d4,g4] ~ [bb3,d4] ~ [bb3,d4,f4], [bb1,bb2,g4]@4 bb2@11 ~, ~ bb4 [d3,ab3]@2, ~@2 f4 bb4", // Bb Gm Bb Eb Ddim
  G: "~ [bb3,db4,g4] ~ [eb3,g3,bb3] ~ [eb3,g3,c4] ~ [eb3,g3,db4], [eb2,eb3,bb4] eb4@3, ~ db3 c3 bb2", // Gdim Eb Cm Eb7 Eb5
  H: "~ [bb3,db4,eb4] ~ [g4,bb4,db5] ~ [ab4,c5] ~ [ab4,c5], [ab1,ab2,g4]@4 ab3@11 ~, ~ f5 [c4,eb4,gb4,eb5]@2", // Eb7 Gdim Ab Abmaj7 Cdim
  I: "~ ab4 ~ ab4 ~ [ab4,db5] ~ [ab4,db5], [db2,db3,eb5]@4 f3@11 ~, ~ db5 [ab3,db4,f4]@2, ~@2 bb5 ab5", // Db5 Dbsus2 Db
  J: "~ [bb4,db5] ~ [bb4,db5] f4 bb4 ~ [f4,bb4], [bb1,bb2,g5]@4 f3@11 ~, ~ f5 [bb3,db4]@2, ~@2 eb5 db5, ~@5 f4@2 ~", // Bbm Bb5 Eb Bbm
  K: "~ [eb4,g4] ~ [eb4,g4,c5] ~ [eb4,g4] ~ [eb4,g4,bb4], [eb2,eb3,c5]@4 eb3@11 ~, ~ eb5 [g3,db4]@2, ~@2 bb4 eb5", // Eb Cm Eb Cm Gdim
  L: "~ [eb4,ab4,c5] ~ [ab3,eb4] ~ [ab4,c5,eb5] ~ [ab4,c5,f5], [ab1,ab2,eb5] [c3,ab4] ab5@2, ~@2 f3 eb3", // Ab Ab5 Ab Fm Ab5 Fm
  M: "~ [bb3,f4,ab4] ~ [g4,bb4,d5] ~ [g4,bb4] ~ [f4,bb4,d5], [bb1,d3,bb4]@4 bb2@11 ~, ~ g5 [d3,ab3,bb3]@2, ~@2 d5 f5", // Bb7 Gm Bb Bb7
  N: "~ [g4,bb4] ~ [eb4,g4] ~ [bb3,eb4] ~ [bb3,eb4], [bb1,bb2,eb5]@4 bb2@11 ~, ~ bb4 eb3@2, ~@2 ab4 g4", // Gm Eb Eb5
  O: "~ [bb3,eb4,g4] ~ [g3,bb3] ~ [eb3,g3,bb3,eb4,g4,bb4] ~ [eb3,g3,bb3,eb4,g4,bb4], [eb2,eb3,bb4] [eb3,eb4] eb5@2, ~@2 d3 db3", // Eb Gm Eb Eb5 Eb
  P: "~ [e4,g4,bb4] ~ [ab4,c5,e5] ~ [ab4,c5] ~ [g4,c5,e5], [c2,c3,c5]@4 c3@11 ~, ~ ab5 [e3,bb3,c4]@2, ~@2 e5 g5", // Edim Abaug Ab C C7
  Q: "~ [ab4,c5] ~ [f4,ab4] ~ [c4,f4] ~ [c4,f4], [c2,c3,f5]@4 c3@11 ~, ~ c5 f3@2, ~@2 bb4 ab4", // Ab Fm F5
  R: "~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4,g4], [c2,c3,ab4]@4 c3@11 ~, ~ c5 [e3,bb3]@2, ~@2 g4 c5", // C Fm Edim
  S: "~ [c4,f4,ab4] ~ [ab3,c4] ~ [f3,ab3,c4,f4,ab4,c5] ~ [f3,ab3,c4,f4,ab4,c5], [eb2,eb3,c5] [f3,f4] f5@2, ~@2 e3 eb3", // Fm Ab Fm Cm F
  T: "~ [gb4,a4,c5] ~ [bb4,d5,gb5] ~ [bb4,d5] ~ [a4,d5,gb5], [d2,d3,d5]@4 d3@11 ~, ~ g5 [gb3,c4,d4]@2, ~@2 gb5 a5", // Gbdim Bbaug Bb D D7
  U: "~ [bb4,d5] ~ [g4,bb4] ~ [d4,g4] ~ [d4,g4], [d2,d3,g5]@4 d3@11 ~, ~ d5 g3@2, ~@2 c5 bb4", // Bb Gm G5
  V: "~ [d4,gb4] ~ [d4,gb4,bb4] ~ [d4,gb4] ~ [d4,gb4,a4], [d2,d3,bb4]@4 d3@11 ~, ~ d5 [gb3,c4]@2, ~@2 a4 d5", // D Daug D Gm Gbdim
  W: "[~ [d3,g3,d4,g4,bb4] ~ [d3,g3,d4,g4] ~ [c3,eb3,g3,eb4,g4] ~ [c3,d3,gb3,d4,gb4,a4] ~@8, [ab2,db5] [bb2,bb4] [a2,c5] db5@2 ~@3, ~@3 d2 ~@4]/2", // Gm G5 Cm D7 Db5 Bb Am
  X: "~@7 [g3,c4,eb4,g4], ~@3 [eb3,c5]", // Cm
  Y: "~ [ab3,bb3,d4,ab4] ~ [ab3,bb3,g4,bb4,d5] ~ [f3,ab3,bb3,f4,bb4,d5] ~ [d3,f3,bb3,f4,bb4,d5], [f3,bb4] [d3,g5] f5@2, ~@2 bb2 ab2", // Bb7 Gm Bb7 Bb Bb5 G5
  Z: "~@2 [eb3,bb3,eb4,bb4,db5]@2 ~@2 [g3,c4,c5,eb5,g5]@2 ~@2 [g3,db4,bb4,eb5,g5]@2 ~@2 db5 bb4, [g2,eb5] [eb2,c6] eb3@2, ~@2 bb5 [eb4,eb5], ~@7 [g3,db4]", // Eb7 Cm Eb7 Cm Eb Gdim
  AA: "~@2 c5 ab4 ~@2 eb5 c5 ~@2 ab4 ~@3 c5 ab4, [ab1,ab2,eb4,eb5]@4 eb3@11 ~, ~ [ab4,ab5] ab3@2, ~@8 [c4,eb4,c5]@3 eb4@5, ~@3 [f4,f5]", // Ab5 Ab Cm F
  AB: "~@2 c5 ab4 ~@2 ab4 eb4 ~@2 eb4 ~@3 eb4 c4, [ab1,ab2,eb4,eb5]@4 eb3@11 ~, ~@4 [c4,c5]@4 [bb3,c4,bb4]@3 c4@4 ~, ~@3 [ab3,ab4]", // Ab5 C Bbsus2 Ab
  AC: "~@2 eb4 db4 ~@2 db5 bb4 ~@2 db5 bb4 ~@2 db5 bb4, [ab1,ab2,g3,g4]@4 eb3@11 ~, ~ [f4,f5] [g3,bb3,db4,eb4,eb5]@2", // Abmaj7 F Eb7
  AD: "~@2 c5 ab4 ~@2 ab4 eb4 ~@2 eb4 c4 ~@2 eb4 c4, [f1,f2,eb4,eb5]@4 c3@11 ~, ~ [c4,c5] f3@2, ~@2 [bb3,bb4] [ab3,ab4]", // F7 C Bb Ab
  AE: "~@2 d4 bb3 ~@2 g4 d4 ~@2 d4 bb3 ~@2 f4 d4, [bb1,bb2,g3,g4]@4 bb2@11 ~, ~ [bb3,bb4] [d3,ab3]@2, ~@2 [f3,f4] [bb3,bb4]", // Eb Bb Ddim F Bb
  AF: "~@2 g4 db4 bb3@2 g3@2 ~@2 c5 g4 ~@2 db6 bb5, [eb2,bb3,bb4] [db3,eb3,eb4] [c3,eb4,eb5] [bb2,eb5,eb6], ~@5 eb3 ~ eb3", // Eb5 Dbsus2 Cm Eb5
  AG: "[ab2 ~@30 eb4, ~@4 eb4@8 eb4@8 eb4@8 eb4@8 eb4@8 eb4@8 eb4@8 eb4@15 ~ eb4@15 ~ eb4@8 eb4@8 eb4@8 eb4@8 ~@4, ~@8 [ab4,eb5]@8 eb3@11 ~@5 eb3@8 ~@8 eb3@11 ~@5 eb3@11 ~@5 eb3@11 ~@5 eb3@11 ~@5 eb3@11 ~@5, ~@6 ab4@2 ~@2 [g4,bb4,db5]@2 ~@2 [gb4,ab4,c5]@2 ~ f4@3 ~ f4@3 ~@8, ~@9 [ab4,db5] ~ [ab4,db5] ~ [g4,db5] ~ [ab4,c5,eb5]]/8", // Ab5 Gdim Ab7 Db5 Gdim Ab
  AH: "~@3 eb4, eb3@11 ~@5, ~ eb4@2 ~, ~ [g4,db5,eb5]", AI: "[ab3,ab4] [eb3,eb4]", AJ: "[ab2,eb3,c4]@15 ~",
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note("<~@3 A ~@24 B@3 C D E@2 F G ~@5 H ~@15>".pickRestart({
  A: "~ [bb3,db4,eb4] ~ [g4,bb4,db5] ~ [g4,bb4,db5] ~ [g4,bb4,db5], [ab1,ab2,g4]@4 eb3@11 ~, ~ e5 [g3,bb3,db4,eb4,eb5]@2", // Eb7 Gdim Abmaj7 Eb7
  B: "[~ [d3,g3,d4,g4,b4] ~ [d3,g3,e4,g4] ~ [c3,eb3,g3,e4,g4] ~ [c3,d3,gb3,d4,gb4,a4] ~ [d3,g3,d4,g4,b4] ~ [g3,b3,d4] ~ [g3,b3,g4,b4,d5] ~ [f3,g3,b3,g4,b4,d5] ~ [f3,g3,g4,b4,d5] ~ [b2,g3,g4,b4,d5] ~ [b2,g3,g4,b4,e5] ~ [b2,g3,g4,b4,f5], ab2@4 [bb2,b4]@4 [a2,c5]@4 d5@8 ~@4 g5@11 ~@13, ~@3 d2 g2 [gb3,g4] f3 d3 b2 [f2,g5] [e2,g5] [d2,g5]]/3", // G Em7 C D7 G G7 G Em …
  C: "c2 [g4,c5,e5] ~ [c4,eb4,c5,g5] ~ [c4,eb4,g4,c5] ~ [c4,f4,a4,c5], g5 [e3,c6] [g3,e5] [f3,a5]", // C Cm F C F
  D: "~ [c4,e4,g4,c5] ~ [g3,c4,e4,g4] ~ [g3,c4,e4,g4] ~ [g3,c4,e4,g4], [e3,g5] [c3,e5] [d3,d5] [e3,c5]", // C Em C D C
  E: "~ [g3,b3,d4,g4] ~ [g3,b3,g4,d5,f5] ~ [f3,g3,b3,g4,d5,f5] ~ [f3,g3,b3,g4,d5,f5], [f3,b4] [d3,a5] [b2,g5]@2", // G G7 Fdim D5 Em
  F: "~ [eb3,g3,c4,g4,c5,eb5] ~ [c4,eb4,c5,g5] ~ [c4,eb4,g4,c5] ~ [c4,f4,ab4,c5], [c3,g5] [eb3,c6] [g3,eb5] [f3,ab5]", // Cm Fm C5 Cm Fm
  G: "~ [c4,g4,c5] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~@2, [eb3,g5] [c3,eb5] [d3,d5] ~", // C5 Cm Eb Cm D
  H: "~@2 eb4 db4 ~@2 db5 bb4 ~@2 db5 bb4 ~@2 db5 bb4, [ab1,ab2,g3,g4]@4 eb3@11 ~, ~ [e4,e5] [g3,bb3,db4,eb4,eb5]@2", // Abmaj7 E Eb7
})).s("gm_piano").gain(0.2)

stack(piano, piano_2, piano_soft)