Strudelify
KeyA minorTempo130 bpm
0:00/0:00
// call out my name — The Weeknd Frank Dukes and Nicolas Jaar
// 130 bpm, 3/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5893596; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 144 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/3)

// 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(`<
  A@4 B@2 C D A@4 B@2 C D A@4 B@2 C D A@4 B@2 C D A@4 E@2 F ~ G@4 H@2 I J K@4 H@2 I J G@4 H@2 I J L@2 M@2 H@2 I N ~@3 O
  B@2 C D A@4 B@2 C D A@4 B@2 C D A@4 B@2 ~ D G@4 H@2 I J K@4 H@2 I J G@4 H@2 I J L@2 M@2 H@2 I N P@4 Q@2 R S
>`.pickRestart({
  A: "[~@11 a4@5 c5@5 ~@6 a4@5 ~@11 a4@5 ~@11 a4@5, d3@61 ~@3, [a3,c4,f4,d5] [d4,f4,d5] [c4,e4,g4,b4,d5] [a3,d4,f4,d5], a4@11 ~@5 a4@11 ~@21 a4@11 ~@5, ~@5 c5@11 ~@5 c5@11 ~@5 c5@11 ~@5 c5@11]/4", // Dm7 Dm Cmaj7 Dm
  B: "[~@11 e4@5 ~@13 [a2,a3]@3, e3, [a2,a3]@27 e4@5, [c4,b4] [c4,d4,b4], e4@5 a4@11 ~@5 a4@11]/2", // A Cmaj7 G
  C: "~@11 e4@5, [a1,e2,a2,c4,b4], e4@11 ~@5, ~@5 a4@11", // Am
  D: "[a1,a2,c5,e5]@5 [c2,c3,b4,d5]@5 ~ [e2,e3,a4,c5]@5, [c4,e4]@15 ~", // Am G Am C
  E: "[~@11 e4@5 ~@13 [a1,a2]@3, [e3,a3], a2@27 e4@5, [c4,b4] [c4,d4,b4], e4@5 a4@11 ~@5 a4@11]/2", // A A5 Cmaj7 G
  F: "[a1,e2,a2,c4,e4,a4]@3 ~@13", // Am
  G: "[~@11 [d4,a4]@5 ~@11 [d4,e5,e6]@5 ~@11 [d4,a4]@5 c5@5 ~@6 [d4,a4]@5, d3@61 ~@3, [a3,c4,f4,d5,f5]@16 [d4,e5]@11 ~@5 [a3,f4,d5,f5,d6]@16 [a3,f4,d5,e5]@16, ~@5 [e4,c5]@11 [f4,a4,a5]@16 ~@5 [e4,c5]@11 ~@5 [e4,c5]@11, ~@21 [e4,c5,c6]@11 d4@11 ~@5 d4@11 ~@5]/4", // D5 Dsus2 D5 Dm7 Dsus2 Dm C F …
  H: "[~@11 [c4,e4]@5 ~@13 [a1,a2]@3, [e3,a3], a2@27 [c4,e4]@5, [b4,c5,e5] [b4,d5], e4@5 [d4,a4]@11 e4@5 [d4,a4]@11]/2", // C A A5 C Cmaj7 Bm D5
  I: "~@11 [c4,e4]@5, [a1,e2,a2,b4,d5,f5], e4@11 ~@5, ~@5 [d4,a4]@11", // C Bm7b5 D5
  J: "[a1,a2,e4,a4]@5 [c2,c3,c4,e4]@5 ~ [e2,e3,e4,g4]@5, [c5,e5]@15 ~", // A5 C Em C
  K: "[~@11 [d4,a4]@5 ~@13 [e5,e6]@3 ~@11 [d4,a4]@5 c5@5 ~@6 [d4,a4]@5, d3@61 ~@3, [a3,c4,f4,d5,f5]@16 e5@11 d4@5 [a3,f4,d5,f5,d6]@16 [a3,f4,d5,e5]@16, ~@5 [e4,c5]@11 [f4,a4,a5]@16 ~@5 [e4,c5]@11 ~@5 [e4,c5]@11, ~@16 d4@5 [e4,c5,c6]@11 d4@11 ~@5 d4@11 ~@5]/4", // D5 E D5 Dm7 Dm C F C
  L: "[~@11 [d4,a4]@5 ~@13 [b4,b5]@3, d3, [a3,c4,f4,d5,f5]@16 d4@11 d4@5, ~@5 [e4,c5]@11 [f4,a4,e5,a5]@16, ~@21 [e4,c5,c6]@11]/2", // D5 B Dm7 C Fmaj7 C
  M: "[~@11 [d4,a4]@5 c5@5 ~@6 [d4,a4]@5, d3, [a3,f4,d5,f5,a5] [a3,f4,d5,e5], d4@11 ~@5 d4@11 ~@5, ~@5 [e4,c5]@11 ~@5 [e4,c5]@11]/2", // D5 Dm C
  N: "c5@5 ~@6 [e2,e3,e4,e5]@5, [a1,a2,a4], [e4,e5]@11 ~@5, ~@5 [c2,c3,c4,c5]@11", O: "~@13 [a2,a3]@3",
  P: "[[a3,c4,f4,a4] [d4,f4,a4,c5] [c4,e4,g4,b4] [a3,d4,f4,a4], [d3,d5]@61 ~@3]/4", // F Dm7 Cmaj7 Dm D
  Q: "[[c4,e4,b4]@16 ~@13 [a2,a3]@3, e3, [a2,a3]@29 ~@3, ~ [c4,d4,a4]]/2", R: "[a1,e2,a2,c4,e4,b4]",
  S: "[a1,a2,a3,a4]@3 ~@2 [c2,c3,c4,c5]@3 ~@3 [e2,e3,e4,e5]@3 ~@2", // A C E
})).s("gm_piano").gain(0.4)

// other · violin
const violin = note(`<
  A B C A D@3 E F@4 G@3 H F@4 G@3 H F@4 G@3 H F@4 G@2 I ~ J K L B M N O M O P J B M N O M O P J B Q N O M R P J B Q N O
  S T@4 G@3 U F@4 G@3 U F@4 G@3 U F@4 G@2 ~@2 J K L B M N O M O P J B M N O M O P J B Q N O M R P J B Q N O S T@4 V@2 W
  X
>`.pickRestart({
  A: "[f4,a4]", B: "[a4,c5]", C: "[g4,b4]", D: "[e4 d4 e4, c4]/3", E: "[c4,e4]@5 [b3,d4]@5 ~ [a3,c4]@5",
  F: "d5@5 c5@5 ~ a4@5", G: "b4@5 a4@5 ~ e4@5", H: "c5@5 b4@5 ~ a4@5", I: "a4@3 ~@13", J: "d5",
  K: "[a3,a4]@5 [c4,c5]@5 ~ [e4,e5]@5", L: "[d4,d5]", M: "[c5,e5]", N: "[b4,d5]", O: "[d5,f5]", P: "a4@5 c5@5 ~ e5@5",
  Q: "d5@5 c5@5 ~ b4@5, e5", R: "[f4,f5]", S: "[c5,e5]@5 c5@5 ~ e5@5", T: "[a4 c5 b4 a4, d5]/4",
  U: "[c5,e5]@5 [b4,d5]@5 ~ [a4,c5]@5", V: "[b4 a4, g4]/2", W: "[e4,b4]",
  X: "[a3,a4]@3 ~@2 [c4,c5]@3 ~@3 [e4,e5]@3 ~@2", // A C E
})).s("gm_violin").gain(0.3)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A@4 B@3 C A@4 B@3 C A@4 B@3 C A@4 B@3 C A@4 D@3 ~ E C F@2 G@4 E C F@2 G@4 E C F@2 G@4 E C F@2 B@3 C H I J H B@3 C A@4
  B@3 C A@4 B@3 C A@4 K@2 ~@2 E C F@2 G@4 E C F@2 G@4 E C F@2 G@4 E C F@2 L@3 C H I J H M E N O
>`.pickRestart({
  A: "d4/4", B: "a3/3", C: "a3@5 c4@5 ~ e4@5", D: "[a3@35 ~@13]/3", E: "d4", F: "d4/2", G: "a3/4", H: "f4", I: "a4",
  J: "g4", K: "a3/2", L: "a4/3", M: "e4", N: "c4", O: "a3@3 ~@2 c4@3 ~@3 e4@3 ~@2",
})).s("gm_clarinet").gain(0.4)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A@4 B@2 C D E F G E B@2 C D E F G E B@2 C D E H I@2 B@2 C D E J K L B@2 M ~ E D E G N@3 O E D E G P Q R C E D E G N@3
  O E D E G S@2 T D U V W U B@2 C D E F G E B@2 C D E F G E B@2 C D E F G E B@2 X Y Z@2 ~ AA AB AC@2 Y Z@2 AD AA AB AC@2
  Y AE@2 X AA AF AC AG AH AI AJ X AA AB AC@2 Y F AK AL AM C AN AO AP
>`.pickRestart({
  A: "d3/4", B: "[a3@29 a3@3]/2", C: "a2", D: "a2@5 c3@5 ~ e3@5", E: "d3", F: "f3", G: "e3",
  H: "c3@8 b2@3 a2@5, ~@11 g2 ~@4", I: "[b2@3 a2@29]/2", J: "c4@8 b3@3 a3@5", K: "b3@3 a3@13", L: "c4@8 b3@3 a3@2 g3@3",
  M: "a2@3 ~@13", N: "c4@5 b3@5 ~ a3@5", O: "a3@5 e3@5 ~ a2@5", P: "g3@5 e3@8 d3@3", Q: "c3@5 b2@8 c3@3",
  R: "a2 g2 ~ a2@13", S: "e4/2", T: "a3@13 e3@3", U: "d4", V: "f4", W: "e4", X: "~@13 a3@3", Y: "a3@5 c4@5 ~ e4@5",
  Z: "[d4@19 c4 a3 ~@11]/2", AA: "e4@5 d4@5 ~ c4@5", AB: "b3@5 a3@8 g3@3", AC: "d4@5 b3@8 a3@3", AD: "~@13 c4@3",
  AE: "[f4 e4 ~ d4@19 ~@10]/2", AF: "d4 e4 ~ d4@2 c4@8 b3@3", AG: "d4@5 e4@8 c4@3", AH: "d4@5 d4@5 ~ c4@2 b3@3",
  AI: "d4 c4 ~ a3@2 c4@11", AJ: "d4@3 ~@13", AK: "c4", AL: "b3", AM: "a3", AN: "e2", AO: "a2@13 a2@3",
  AP: "a2@3 ~@2 c3@3 ~@3 e3@3 ~@2",
})).s("gm_baritone_sax").gain(0.45)

stack(piano, violin, clarinet, baritone_sax)