Strudelify
KeyF majorTempo120 bpm
0:00/0:00
// Don Carlo — Giuseppe verdiarr:Allan James
// 120 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5923120; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/3)

// 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@2 J@2 K L M N O I J@2 K P M Q O R S T U V W X Y Z AA AB AC AD AE AF AG AH AI ~@25 A B C AJ AK AL
  AM AN AO@2 AP@2 AQ AR AS AT AU AO AP@2 AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM
>`.pickRestart({
  A: "[bb2,bb3]@5 [f3,bb3,d4]@5 ~ [f3,bb3,d4]@5", B: "[bb2,bb3,d5,d6]@5 [f3,bb3,d4,d5,d6]@5 ~ [f3,bb3,d4,d5,d6]@5",
  C: "[f2,f3,f5,f6]@4 [eb5,eb6] [f3,a3,eb4]@5 ~ [f3,a3,eb4]@5, ~@5 [c5,c6]@10 ~", // F Eb F7 C
  D: "[f2,f3,c5,c6]@5 [f3,a3,eb4,c5,c6]@5 ~ [f3,a3,eb4,c5,c6]@5", // F5 F7
  E: "[f2,f3,eb5,eb6]@4 [d5,d6] [f3,bb3,d4]@5 ~ [f3,bb3,d4]@5, ~@5 [bb4,bb5]@10 ~", // F7 D Bb
  F: "[f2,f3,d5,d6]@5 [f3,bb3,d4,c5,c6]@5 ~ [f3,bb3,d4,bb4,bb5]@5", // Dm Bb
  G: "[c5,c6] [bb4,bb5]@3 [a4,a5] [f3,c4,eb4]@5 ~ [f3,c4,eb4]@5, [f2,f3]@5 [a4,a5]@10 ~", // C Bb A F7 F A
  H: "[f2,f3,c5,c6]@5 [f3,a3,eb4,bb4,bb5]@5 ~ [f3,a3,eb4,g4,g5]@5", I: "bb2@5 [bb3,d4,f4]@5 ~ [bb3,d4,f4]@5",
  J: "f2@5 [f3,a3,c4,f4]@5 ~ [f3,a3,c4,f4]@5", K: "f2@5 [bb3,d4,f4]@5 ~ [bb3,d4,f4]@5",
  L: "[f2,bb4,d5]@5 [bb3,d4,f4,a4,c5]@5 ~ [bb3,d4,f4,g4,bb4]@5", // Bb Bbmaj7 Gm7
  M: "c5 bb4@3 a4 [f3,a3,c4,f4]@5 ~ [f3,a3,c4,f4]@5, f2@5 a4@10 ~", // F
  N: "[f2,a4,c5]@5 [f3,a3,eb4,g4,bb4]@5 ~ [f3,a3,eb4,g4]@5", // F Eb F7
  O: "a4 g4@3 f4 [f3,bb3,d4]@5 ~ [f3,bb3,d4]@5, bb2@5 f4@10 ~", P: "[f2,d5]@5 [bb3,d4,f4,c5]@5 ~ [bb3,d4,f4,bb4]@5",
  Q: "[f2,c5]@5 [f3,a3,eb4,bb4]@5 ~ [f3,a3,eb4,g4]@5", R: "[e3,c5]@4 d5 [g3,bb3,c4,c5]@5 ~ [f3,bb3,c4,c5]@5",
  S: "e5 [f4,a4,f5]@2 ~@2 [a3,c4]@5 ~ [a3,c4]@5, f3@5 [f4,a4,c5]@10 ~", // F Am F
  T: "[gb3,d5]@4 eb5 [a3,c4,d4,d5]@5 ~ [a3,c4,d4,d5]@5", // D D7
  U: "gb5 [g4,bb4,g5]@2 ~@2 [bb3,d4]@5 ~ [bb3,d4]@5, g3@5 d5@10 ~", // Gm Bb
  V: "[a3,f5]@4 g5 [c4,eb4,f4,f5]@5 ~ [c4,eb4,f4,f5]@5", W: "[bb3,d4,bb4,g5]@5 ~@3",
  X: "[eb3,eb4,g4,c5]@3 ~@2 [f3,d4,f4,bb4]@3 ~@3 [f2,c4,eb4,a4]@3 ~@2", // Cm Bb F7
  Y: "[bb2,bb3,d4,f4]@5 [bb2,bb3,d4,f4]@5 ~ f5@4 f6, bb4@5 ~@3", Z: "[f3,a3,c4]@5 [f3,a3,c4]@5 ~ f5@4 f6, f6@5 ~@3",
  AA: "[bb3,d4]@5 [bb3,d4]@5 ~ f5@4 f6, f6@5 ~@3", // Bb
  AB: "[eb3,g3,c4,c6,eb6]@2 [d6,f6]@2 ~ [f3,bb3,d4]@3 ~@3 [eb5,a5,c6]@5, ~@2 [c6,eb6] ~@5, ~@5 [bb5,d6]@5 ~ [f2,f3]@3 ~@2", // Cm Dm Bb Adim Cm Bb F
  AC: "[bb2,f3,d5,bb5]@5 [f3,bb3,d4]@5 ~ [f3,bb3,d4,f5]@4 f6", // Bb
  AD: "[c6,eb6]@2 [a5,c6]@2 ~ [f3,a3,c4]@5 ~ [f3,a3,c4,f5]@4 f6, [f2,f3]@2 [f5,f6] ~@5, ~@5 [c6,eb6]@3 ~@8", // Cm Am F Cm
  AE: "[bb5,d6]@2 [eb5,bb5]@2 ~ [f3,bb3,d4]@5 ~ [f3,bb3,d4,f5]@4 f6, [f2,f3]@2 [f5,f6] ~@5, ~@5 [bb5,d6]@3 ~@8", // Bb Eb5 Bb F Bb
  AF: "[c6,eb6]@2 [a5,c6]@2 ~ [c6,eb6]@2 [a5,c6]@2 [f5,f6]@2 c6 [a5,c6]@2 [f5,f6]@2, [f2,f3]@4 [f5,f6]@2 ~@5 eb6@2 ~@3, ~@5 [f3,a3,c4]@5 ~ [f3,a3,c4]@5", // Cm Am Cm Am F Am F
  AG: "[d2,bb2,d3,bb4,f5,bb5]@5 ~@11", AH: "[eb2,eb3,c4,eb4,g4,c5]@5 ~@6 [c4,eb4,f4,a4]@5, ~@11 [f2,f3]@3 ~@2",
  AI: "[bb1,bb2,bb3,d4,f4,bb4]@3 ~@2 [bb1,d2,f2,bb2,bb4,d5,f5,bb5]@5 ~@6", AJ: "[c3,c4]@5 [g3,c4,e4]@5 ~ [g3,c4,e4]@5",
  AK: "[c3,c4,e5,e6]@5 [g3,c4,e4,e5,e6]@5 ~ [g3,c4,e4,e5,e6]@5", // C
  AL: "[g2,g3,g5,g6]@4 [f5,f6] [g3,b3,f4]@5 ~ [g3,b3,f4]@5, ~@5 [d5,d6]@10 ~", // G F G7 D
  AM: "[g2,g3,d5,d6]@5 [g3,b3,f4,d5,d6]@5 ~ [g3,b3,f4,d5,d6]@5", // G5 G7
  AN: "[g2,g3,f5,f6]@4 [e5,e6] [g3,c4,e4]@5 ~ [g3,c4,e4]@5, ~@5 [c5,c6]@10 ~", AO: "c3@5 [c4,e4,g4]@5 ~ [c4,e4,g4]@5",
  AP: "g2@5 [g3,b3,d4,g4]@5 ~ [g3,b3,d4,g4]@5", AQ: "g2@5 [c4,e4,g4]@5 ~ [c4,e4,g4]@5",
  AR: "[g2,e5]@5 [c4,e4,g4,d5]@5 ~ [c4,e4,g4,c5]@5", AS: "d5 c5@3 b4 [g3,b3,d4,g4]@5 ~ [g3,b3,d4,g4]@5, g2@5 b4@10 ~",
  AT: "[g2,d5]@5 [g3,b3,f4,c5]@5 ~ [g3,b3,f4,a4]@5", AU: "b4 a4@3 g4 [g3,c4,e4]@5 ~ [g3,c4,e4]@5, c3@5 g4@10 ~",
  AV: "[gb3,d5]@4 e5 [a3,c4,d4,d5]@5 ~ [g3,c4,d4,d5]@5", // D D7 Gsus4
  AW: "gb5 [g4,b4,g5]@2 ~@2 [b3,d4]@5 ~ [b3,d4]@5, g3@5 [g4,b4,d5]@10 ~", // G Bm G
  AX: "[ab3,e5]@4 f5 [b3,d4,e4,e5]@5 ~ [b3,d4,e4,e5]@5", AY: "ab5 [a4,c5,a5]@2 ~@2 [c4,e4]@5 ~ [c4,e4]@5, a3@5 e5@10 ~",
  AZ: "[b3,g5]@4 a5 [d4,f4,g4,g5]@5 ~ [d4,f4,g4,g5]@5", BA: "[c4,e4,c5,a5]@5 ~@3",
  BB: "[f3,f4,a4,d5]@3 ~@2 [g3,e4,g4,c5]@3 ~@3 [g2,d4,f4,b4]@3 ~@2", // Dm C G7
  BC: "[c3,c4,e4,g4]@5 [c3,c4,e4,g4]@5 ~ g5@4 g6, c5@5 ~@3", BD: "[g3,b3,d4]@5 [g3,b3,d4]@5 ~ g5@4 g6, g6@5 ~@3",
  BE: "[c4,e4]@5 [c4,e4]@5 ~ g5@4 g6, g6@5 ~@3", // C
  BF: "[f3,a3,d4,d6,f6]@2 [e6,g6]@2 ~ [g3,c4,e4]@3 ~@3 [f5,b5,d6]@5, ~@2 [d6,f6] ~@5, ~@5 [c6,e6]@5 ~ [g2,g3]@3 ~@2", // Dm Em C Bdim Dm C G
  BG: "[c3,g3,e5,c6]@5 [g3,c4,e4]@5 ~ [g3,c4,e4,g5]@4 g6", // C
  BH: "[d6,f6]@2 [b5,d6]@2 ~ [g3,b3,d4]@5 ~ [g3,b3,d4,g5]@4 g6, [g2,g3]@2 [g5,g6] ~@5, ~@5 [d6,f6]@3 ~@8", // Dm Bm G Dm
  BI: "[c6,e6]@2 [f5,c6]@2 ~ [g3,c4,e4]@5 ~ [g3,c4,e4,g5]@4 g6, [g2,g3]@2 [g5,g6] ~@5, ~@5 [c6,e6]@3 ~@8", // C F5 C G C
  BJ: "[d6,f6]@2 [b5,d6]@2 ~ [d6,f6]@2 [b5,d6]@2 [g5,g6]@2 d6 [b5,d6]@2 [g5,g6]@2, [g2,g3]@4 [g5,g6]@2 ~@5 f6@2 ~@3, ~@5 [g3,b3,d4]@5 ~ [g3,b3,d4]@5", // Dm Bm Dm Bm G Bm G
  BK: "[e2,c3,e3,c5,g5,c6]@5 ~@11", BL: "[f2,f3,d4,f4,a4,d5]@5 ~@6 [d4,f4,g4,b4]@5, ~@11 [g2,g3]@3 ~@2",
  BM: "[c2,c3,c4,e4,g4,c5]@3 ~@2 [c2,e2,g2,c3,c5,e5,g5,b5]@5 ~@6", // C Cmaj7
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note("<~@44 A@2 B@2 C D E F G A B@2 C D E F G H I J K L M N O ~@43>".pickRestart({
  A: "bb2@5 [bb3,d4,f4]@5 ~ [bb3,d4,f4]@5", B: "f2@5 [f3,a3,c4,f4]@5 ~ [f3,a3,c4,f4]@5",
  C: "f2@5 [bb3,d4,f4]@5 ~ [bb3,d4,f4]@5", D: "[f2,d5]@5 [bb3,d4,f4,c5]@5 ~ [bb3,d4,f4,bb4]@5",
  E: "c5 bb4@3 a4 [f3,a3,c4,f4]@5 ~ [f3,a3,c4,f4]@5, f2@5 a4@10 ~", F: "[f2,c5]@5 [f3,a3,eb4,bb4]@5 ~ [f3,a3,eb4,g4]@5",
  G: "a4 g4@3 f4 [f3,bb3,d4]@5 ~ [f3,bb3,d4]@5, bb2@5 f4@10 ~", H: "[e3,c5]@4 d5 [g3,bb3,c4,c5]@5 ~ [f3,bb3,c4,c5]@5",
  I: "e5 [f4,a4,f5]@2 ~@2 [a3,c4]@5 ~ [a3,c4]@5, f3@5 [f4,a4,c5]@10 ~", // F Am F
  J: "[gb3,d5]@4 eb5 [a3,c4,d4,d5]@5 ~ [a3,c4,d4,d5]@5", // D D7
  K: "gb5 [g4,bb4,g5]@2 ~@2 [bb3,d4]@5 ~ [bb3,d4]@5, g3@5 d5@10 ~", // Gm Bb
  L: "[a3,f5]@4 g5 [c4,eb4,f4,f5]@5 ~ [c4,eb4,f4,f5]@5", M: "[bb3,d4,bb4,g5]@5 ~@3",
  N: "[eb3,eb4,g4,c5]@3 ~@2 [f3,d4,f4,bb4]@3 ~@3 [f2,c4,eb4,a4]@3 ~@2", // Cm Bb F7
  O: "[bb2,bb3,d4,f4]@5 [bb2,bb3,d4,f4]@5 ~@6, bb4@5 ~@3", // Bb
})).s("gm_piano").gain(0.15)

stack(piano, piano_soft)