Strudelify
KeyD majorTempo90 bpm
0:00/0:00
// despacito — Luis Fonsi ft. Daddy Yankee
// 90 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5098763; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 62 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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.

// other · piano
const piano = note(`<
  A B C@2 D E F@2 G H I@2 J K L M N O P Q R S@3 T U V W X@4 N O P Y Z@4 AA AB AC AD AE AF AG AH J K L AI AJ AK AL AM AA
  AN@3 AO AP
>`.pickRestart({
  A: "~@13 [c4,e4] [a4,c5] [a4,b4]", B: "a4@8 a4@3 b4@3 c5@2, g#4 ~@15",
  C: "[d5@3 e5@3 c5@2 e5@3 c5@3 e5@8 ~ e4 c5@3 d4 b4@3 c4]/2", D: "~@12 c5 b4 a4 g4", E: "f4@4 ~@8 c5 b4 a4 g4",
  F: "[c5@4 ~@8 c5 b4 a4 b4@5 ~@4 c5@4 b4@4]/2", G: "a4@4 ~ e4 a4 b4 c5 d5 ~ c5 b4 a4 ~ g4", H: "f4@3 c5@3 c5@6 ~@4",
  I: "[c5 ~ g4 ~ c5 ~ g4 ~ c5 ~ g4 ~ c5 ~ d5 b4@5 ~@12]/2", J: "~@2 a2 ~@3 a2 ~@3 a2 ~@3 a2 ~",
  K: "~@2 f2 ~@3 f2 ~@3 f2 ~@3 f2 ~", L: "~@2 c3 ~@3 c3 ~@3 c3 ~@3 c3 ~", M: "~@2 g2 ~@3 g2 ~@3 g2 ~@3 g2 ~",
  N: "a2@2 ~@2 c3 ~ e3 ~ a2@2 ~@2 c3 ~ e3 ~", O: "f2@2 ~@2 a2 ~ c3 ~ f2@2 ~@2 a2 ~ c3 ~",
  P: "c3@2 ~@2 e3 ~ g3 ~ c3@2 ~@2 e3 ~ g3 ~", Q: "g2@2 ~@2 b2 ~ d3 ~ g2@2 ~@2 b2 ~ d2 ~",
  R: "a4@4 a4!3 b4 c5 b4 c5 b4@2 c5 b4@2",
  S: "[a4@4 a4!3 b4 c5 b4 c5 b4@2 c5 d5 g4@5 g4!4 c5 b4 c5 b4 c5@2 d5 d5@3 b4@4 ~@10]/3",
  T: "a3 ~ e4 ~ c4 ~ e4 ~ a3@2 ~@2 c4 ~ e4 ~", U: "f3 ~ c4 ~ a3 ~ c4 ~ f3@2 ~@2 a3 ~ c4 ~",
  V: "c4 ~ g4 ~ e4 ~ g4 ~ c4@2 ~@2 e4 ~ g4 ~", W: "~@2 g4 ~@3 g4 ~ c5@4 b4@4",
  X: "[a4 ~ e4@2 ~ e4!4 a4!3 a4@2 g4 a4@3 f4 ~@2 f4!4 a4!3 a4@2 b4 c5@3 g4 ~@2 g4!3 c5 b4 c5 b4 c5@2 d5 d5@3 b4@11 ~@3]/4",
  Y: "d3 ~ b2 ~ g2 ~ d2 ~ e2@2 ~@2 b2 ~ c3 ~",
  Z: "[e5 d5 e5 d5 e5 ~ d5 e5@2 d5 e5 d5 e5 ~ f5 f5@2 c5@3 ~@2 c5 c5@2 f5!2 f5@2 f5 g5 f5@2 e5@3 ~@5 e5!2 e5@2 g5 f5 e5@2 d5@3 ~@12]/4",
  AA: "a2@3 e3 c3 ~ e3 ~ a2@3 e3 c3 ~ e3 ~", AB: "f2@3 c3 a2 ~ c3 ~ f2@3 c3 a2 ~ c3 ~",
  AC: "c3@3 g3 e3 ~ g3 ~ c3@3 g3 e3 ~ g3 ~", AD: "d3 ~ b2 ~ g2 ~ d3 ~ c5@2 c5 b4 c5@2 c5 b4, d5@2 c3 b2",
  AE: "[a2,a4]@2 a4@2 [c3,c5] b4 [e3,c5] b4 [a2,a4]@2 a4@2 [c3,c5] b4 [e3,c5] b4", // A C A C
  AF: "f2@2 f4!2 [a2,c5] ~ [c3,c5] b4 [f2,a4]@2 a4@2 [a2,d5] d5 [c3,d5] c5, a4 ~@15", // Am C F D5 Csus2
  AG: "[c3,d5]@2 c5@2 [e3,d5] d5 [g3,d5] c5 [c3,d5]@2 c5@2 [e3,c5] c5 [g3,c5] c5", AH: "b4 ~ b4!3 ~ b4 a4 ~@8, g3 ~",
  AI: "~@11 e4 c5@2 [d3,c5] b4, ~@12 b2 ~@3", // D7
  AJ: "[a2,a4]@2 ~ e3 [c3,c5] b4 [e3,c5] b4 [a2,a4]@2 ~ e3 [c3,c5] b4 [e3,c5] b4, ~ a4 ~@3 a4 ~@2", // A C A C
  AK: "f2@2 f4 [c3,f4] [a2,c5] ~ [c3,c5] b4 [f2,a4]@2 ~ c3 [a2,d5] d5 [c3,d5] c5, a4 ~@9 a4@2 ~@4", // F5 Am C F D5 Csus2
  AL: "[c3,d5]@2 ~ g3 [e3,d5] d5 [g3,d5] c5 [c3,d5]@2 ~ g3 [e3,c5] c5 [g3,c5] c5, ~ c5 ~@3 c5 ~@2", // Csus2 E7 G5 Csus2 C C5
  AM: "g2@2 b4 [d3,b4] [b3,b4] ~ [d4,b4] a4 [e3,c5]@2 c5 b4 [c3,c5]@2 c5 b4, b4 ~@9 d3@2 ~@2 b2@2", // G B G C
  AN: "[f2@3 c3 a2 ~ c3 ~ c5 f5!2 c3 a2 f5 [c3,g5] ~@2 e5@2 g3 e3 ~ g3 ~@2 e5!2 g3 e3 g5 [g3,f5] ~@2 d5@2 d3 b3 ~ d4 ~ e3@2 d3@2 c3@2 b2@2, ~@8 f2@3 f5@2 ~@2 f5@2 ~@10 e5@2 ~@2 e5@2 ~@15, ~@16 c3@3 ~@5 c3@3 ~@5 g2@3 ~@13]/3", // C5 G7
  AO: "[g2,g4]@3 ~@3 g2!2 ~@2 [c3,e4] ~@3 [b2,d4] ~", AP: "[b2,d4] ~ [a2,e4] ~@13",
})).s("gm_piano").gain(0.4)

stack(piano)