Strudelify
KeyF majorTempo73 bpm
0:00/0:00
// Yummy — Justin Bieber
// 73 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5916979; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(73/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 C D C E F G H I H I J K L M N O N O N P Q G H R H R J K L M N O N O N P Q G S T U V J K L W N O N O N P Q G X
  Y Z AA S AB AC AD
>`.pickRestart({
  A: "a4@11 ~ f5@4, [g3,d4,f4]@15 ~", B: "[a3,g4,a4,c5,e5]@11 ~@5", C: "g2@9 ~ g2@3 g2@3, [d4,f4,a4]@15 ~",
  D: "[c4,e4,g4,a4]@5 d2 ~ [c4,e4,g4,a4], a2@9 ~@3 [c4,e4,g4,a4]@2 ~@2, ~@13 d2@3", // Am7
  E: "[c4,e4,g4,a4]@5 c3 ~ [c4,e4,g4,a4], a2@9 ~@3 [c4,e4,g4,a4]@2 ~@2, ~@13 c3@3", // Am7
  F: "d2@9 ~ d2@3 d2@3, [d4,f4,a4]@15 ~", // Dm
  G: "[c4,e4,g4,a4]@5 c2 ~ [c4,e4,g4,a4], c2@9 ~@3 [c4,e4,g4,a4]@2 ~@2, ~@13 c2@3", // Am7
  H: "[d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@3 ~ g3@2 ~@2 [d4,f4,a4]@2, g3@9 [d4,f4,a4]@3 [d4,f4,a4]@2 ~@2, ~@13 g3@3", // Dm
  I: "[c4,e4,g4,a4]@5 a3 ~ [c4,e4,g4,a4], a3@9 ~@3 [c4,e4,g4,a4]@2 ~@2, ~@13 a3@3", // Am7
  J: "[g2,d4,f4,a4]!2 ~@8 [g2,d4,f4,a4]!2 [d4,f4,a4]@2 [d4,f4,a4]@2", // Dm
  K: "[a2,c4,e4,g4,a4]!2 ~@8 [c3,c4,e4,g4,a4]!2 [c4,e4,g4,a4]@2 [c4,e4,g4,a4]@2", // Am7
  L: "d2!2 ~ [d4,f4,a4]@3 [d4,f4,a4]@3 ~ d2!2 [d4,f4,a4]@2 [d4,f4,a4]@2, [d4,f4,a4]@3 ~@6 [d4,f4,a4]@3 ~@4", // Dm
  M: "c2!2 ~@10 bb2@2 a2@2, [c4,e4,g4,a4] ~", // Am7
  N: "[d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@3 ~ g2@2 ~@2 [d4,f4,a4]@2, g2@9 [d4,f4,a4]@3 [d4,f4,a4]@2 ~@2, ~@13 g2@3", // Dm
  O: "[c4,e4,g4,a4]@3 [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@3 ~ d2@2 ~@2 [c4,e4,g4,a4]@2, a2@9 [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@2 ~@2, ~@13 d2@3", // Am7
  P: "[c4,e4,g4,a4]@3 [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@3 ~ c3@2 ~@2 [c4,e4,g4,a4]@2, a2@9 [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@2 ~@2, ~@13 c3@3", // Am7
  Q: "[d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@3 ~ d2@2 ~@2 [d4,f4,a4]@2, d2@9 [d4,f4,a4]@3 [d4,f4,a4]@2 ~@2, ~@13 d2@3", // Dm
  R: "~@5 a3 ~ [c4,e4,g4,a4], ~@6 [c4,e4,g4,a4] ~, ~@13 a3@3", S: "[g3,d4,f4,a4]@15 ~", T: "[a3,c4,e4,g4,a4]@15 ~",
  U: "g3@9 ~ g3@3 g3@3, [d4,f4,a4]@15 ~", // Dm
  V: "[c4,e4,g4,a4]@3 [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@3 ~ a3@2 ~@2 [c4,e4,g4,a4]@2, a3@9 [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@2 ~@2, ~@13 a3@3", // Am7
  W: "c2!2 ~ [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@2 ~@4 bb2@2 a2@2, [c4,e4,g4,a4]@3 ~@13", // Am7
  X: "[d4,f4,a4]@3 [d4,f4,a4]@3 a4@6 f5@4, g3@15 ~, ~@6 [d4,f4]@9 ~", // Dm
  Y: "[g4,a4,c5,e5]@3 [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@3 ~ a3@2 ~@2 [g4,a4,c5,e5]@2, a3@9 [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@2 ~@2, ~@13 a3@3", // Am7
  Z: "[f4,a4,d5]@3 [d4,f4,a4]@3 [d4,f4,a4]@9 ~, g3@15 ~", // Dm
  AA: "[e4,g4,a4,c5]@3 [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@3 ~ a3@2 ~@2 [e4,g4,a4,c5]@2, a3@9 [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@2 ~@2, ~@13 a3@3", // Am7
  AB: "a3@9 ~ a3@3 a3@3, [c4,e4,g4,a4]@15 ~", AC: "[g3,a3,d4,f4]@15 ~", AD: "[g3,a3,c4,e4]@15 ~",
})).s("gm_piano").gain(0.2)

stack(piano)