Strudelify
KeyF majorTempo120 bpm
0:00/0:00
// Tonight Belongs to Us — The Prom MusicalMatthew Sklar Chad Beguelin
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5689521; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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(`<
  A B C D A B E F A B G H I J K L M N O P Q R A B C S T U V W X U Y Z AA AB AC AD AE AF AG AH@2 AI AJ@2 AK AL AM AN AO@2
  AP AQ AR AS AT AU AV AW AX@2 AY@2 AZ BA BB BC BD BE BF BG BD BE BH BI BJ@2 BK BL BM@2 BN@2 BO@2 BP BQ BR@2 BS@4 BT BU
  BV@2 BW@2
>`.pickRestart({
  A: "[f2,f4,f5]@2 [f4,f5]@2 ~ a2 c3 g2, ~@2 [f4,f5]!2", B: "[f4,f5]@2 [f4,f5]@2 ~ ab2 a2 bb2, ~@2 [f4,f5]!2",
  C: "[f4,f5]@2 [f4,f5]@2 ~ c3 db3 d3, ~@2 [f4,f5]!2", D: "d3 a2 d3 c3!3 g2 c2, [f4,f5]!4",
  E: "[f4,f5]@2 [f4,f5]@2 ~ bb2 c3 db3, ~@2 [f4,f5]!2", // F
  F: "[d3,c4,f4,a4]!2 ~ [c3,d4,f4,bb4] c3!2 c2 c3, ~@2 [d4,f4,bb4] [f4,bb4,f5]", // Dm7 Bb Bb5
  G: "~ [bb1,bb2,ab3,d4,f4] ~ [bb1,bb2,ab3,d4,f4]", // Bb7
  H: "c3 g2 bb2 [c3,bb3,d4,f4] c3 g2 bb2 [c3,d4,f4,bb4], [f3,bb3,d4]@3 ~ [bb3,d4,f4]@3 ~", // Bb
  I: "d3@2 bb2@2 f4 bb4 c5 d5 [f4,bb4,d5,f5]@4 ~@4, [d4,f4,bb4]@2 c3 bb2 c3 ~@3", // Bb
  J: "~@4 [c4,f4,a4]@3 [c4,f4,a4] a1@2 [c2,c4,e4,g4]@2 f2@2 a1@2, f1 ~", // F C
  K: "[c4,e4,g4]@4 [db4,e4,g4]@3 [db4,e4,g4] db2@2 [e2,db4,e4,g4]@2 g2@2 a2@2, a1 ~", // C Dbdim
  L: "~@4 [d4,f4,bb4]@3 [d4,f4,bb4] d2@2 [f2,d4,f4,bb4]@2 g2@2 bb2@2, bb1 ~", // Bb
  M: "[d3,c4,f4,a4] [d3,c4,e4,g4]@2 [c3,c4,e4,g4]!2 [c4,c5] [d4,d5] [f4,f5], ~@5 [c2,c3]@3", // Dm7 C D F C
  N: "~@4 [d4,f4,bb4]@3 [d4,f4,bb4] a1@2 [c2,d4,f4,bb4]@2 f2@2 [g1,c4,f4,a4]@2, f1 ~", // Bb F
  O: "[c4,f4,a4]@2 ~@2 g1@3 g1 bb1@2 d2@2 g2@2 d2@2, g1 ~@3, ~ [b3,d4,g4]@3 [b3,d4,g4]@4", // F G
  P: "[g2,d4,f4,bb4]@2 g2 f2 g2 [f2,d4,f4,bb4] g2 [a2,c4,f4,a4], ~ [d4,f4,bb4] ~@2", // Gm7 Bb F Bb
  Q: "[c4,f4,a4] [c4,c5]!2 [a2,c4,c5] [d4,d5] ~@2 a2, a2@3 ~ a2@3 ~, ~@5 [f4,f5]@3", // F C Am D F
  R: "[bb1,bb2,d4,f4,bb4]@2 ~@3 [c2,c3,f4,bb4,d5,f5]@3", S: "d3 a2 c3 d3!2 d2 [d3,g4,c5,e5,g5]@2, [f4,f5]!3 ~",
  T: "[g1,g2,g4,g5]@2 [g4,g5]@2 ~ b2 d3 a2, ~@2 [g4,g5]!2", U: "[g4,g5]@2 [g4,g5]@2 ~ bb2 b2 c3, ~@2 [g4,g5]!2",
  V: "[g4,g5]@2 [g4,g5]@2 ~ c3 d3 eb3, ~@2 [g4,g5]!2", // G
  W: "[e3,d4,g4,b4] b2 e3 [d3,e4,g4,c5]!2 d3 d2 d3, ~ [d4,g4,b4]@2 ~@2 [g4,c5,e5]@3", // Em7 C G C
  X: "[g2,g4,g5]@2 [g4,g5]@2 ~ b2 d3 a2, ~@2 [g4,g5]!2", Y: "~ [c2,c3,bb3,e4,g4] ~ [c2,c3,bb3,e4,g4]",
  Z: "d2!3 [d2,g3,c4,e4] d2!3 [d2,c4,e4,g4], ~@4 [g3,c4,e4]@3 ~", // C
  AA: "d2!3 [d2,g4,c5,d5] [d2,g4,d5] [d2,g4,e5] d2!2, [c4,e4,g4]@3 ~@3 [c5,e5,g5]@2", // Csus2 G5 Em7 C
  AB: "~@4 [d4,g4,b4]@3 [d4,g4,b4] b1@2 [d2,d4,g4,b4]@2 g2@2 [b1,eb4,gb4,a4]@2, [g1,g2] ~", // G B7 G
  AC: "[eb4,gb4,a4]@4 [eb4,gb4,a4]@3 [eb4,gb4,a4] eb2@2 [gb2,eb4,gb4,a4]@2 a2@2 b2@2, b1 ~", // Ebdim
  AD: "~@4 [e4,g4,c5]@3 [e4,g4,c5] e2@2 [g2,e4,g4,c5]@2 a2@2 c3@2, c2 ~", // C
  AE: "[e2,e3,d4,g4,b4] [e2,e3,d4,g4,b4]@2 [d2,d3,d4,gb4,a4]!2 [d4,d5] [e4,e5] [g4,g5], ~@5 [d2,d3]@3", // Em7 D E G D
  AF: "~@4 [d4,g4,b4]@3 [d4,g4,b4] b1@2 [d2,d4,g4,b4]@2 g2@2 [a1,d4,g4,b4]@2, [g1,g2] ~", // G
  AG: "[d4,g4,b4]@2 ~@2 a1@3 b1 c2@2 e2@2 a2@2 e2@2, a1 ~@3, ~ [db4,e4,a4]@3 [db4,gb4,a4]@4", // G A Gbm
  AH: "[[a2,e4,g4,c5]@2 a2 g2 a2 [g2,e4,g4,c5] a2 [d4,g4,b4] [d4,g4,b4] [d4,b4]!2 [b2,d4,b4] [e4,e5] ~@2 b2, ~@2 [e4,g4,c5]@2 ~@3 b2@4 ~ b2@3 ~, ~@13 [g4,g5]@3]/2", // Am7 C G Bm E C G
  AI: "[c2,c3,e4,g4,c5]@2 [c2,c3,e4,g4,c5]@2 ~ [d2,d3,g4,c5,e5,g5]@3", // C
  AJ: "[[g2,g4,g5]@2 [g4,g5]@2 ~ b2 [d3,g4,g5] gb4 gb4 [a1,a2,gb4,db5,eb5,ab5]@2 [bb1,bb2,g4,db5,eb5,ab5]@2 [b1,b2,g4,db5,eb5,ab5] [c2,c3,c5,eb5,ab5]@2, ~@4 [g4,g5]@2 ~ [ab1,ab2,db5,eb5,ab5]@2 ~@7]/2", // G G5 Ebm7b5 Eb7 Abm Ab G Absus4
  AK: "[db5,f5,ab5,bb5,db6]@2 e4 [e2,f4] [f2,ab4] [ab2,bb4] [bb2,db5] [f3,f4,a4,c5,f5], [db2,db3]@3 ~@5", // Bbm7 Fmaj7 Fm Absus2 Bbm F Db
  AL: "[f4,a4,c5,f5] ~@2 ab1 a1 c2 eb2 f2, f2@3 ~@5, ~ [eb4,a4,c5,eb5]@3 [eb4,a4,c5,eb5]@4", // F Adim
  AM: "[gb4,bb4,db5,gb5]!2 ~ a1 bb1 db2 eb2 gb2, [gb1,gb2]@3 ~@5, ~ [gb4,bb4,db5,f5] [gb4,bb4,eb5] [gb4,bb4,db5]", // Gb Gbmaj7 Ebm Gb
  AN: "[bb2,ab4,db5,f5] bb2 bb1 ab2 ab1 [ab1,ab4,ab5] [b1,g4,e5] [c2,gb4,eb5], ~ [ab4,db5,f5]@2 [ab4,c5,eb5]@2 ~@3", // Bbm7 Ab Em Cdim Db Ab
  AO: "[[db4,db5] e4 f4 [e1,ab4] [f1,bb4] [ab1,db5] [bb1,bb4] [eb2,g4,bb4,db5]@2 eb1@2 gb1 g1 bb1 db2 eb2, db2@3 ~@6 [bb4,db5,gb5]@3 [bb4,db5,gb5]@4]/2", // Db E Bb5 Db5 Bb Eb7 Gb
  AP: "[c4,eb4,a4]@2 ~@2 [c4,eb4,a4]@2 ~ c2, f2 ~ [c4,eb4,a4]@2 ~@2 [c4,eb4,a4]@2, ~@3 f3@4 ~", // Adim
  AQ: "[c4,eb4,a4]@2 ~ db3 [c4,eb4,a4]@2 ~ c3, f2 ~ [c4,eb4,a4]@2 db3@3 ~, ~@3 [c4,eb4,a4]", // Adim
  AR: "[db4,f4,bb4]@2 ~ bb2 [db4,f4,bb4]@2 ~ f2, bb2 ~ [db4,f4,bb4]@2 bb2@3 ~, ~@3 [db4,f4,bb4]", // Bbm
  AS: "[db4,f4,bb4]@2 ~ bb2 [db4,f4,bb4]@2 ~ ab2, bb2 ~ [db4,f4,bb4]@2 bb2@3 ~, ~@3 [db4,f4,bb4]", // Bbm
  AT: "[c4,eb4,a4]@2 ~ f3 [c4,eb4,a4]@2 ~ c2, f2 ~ [c4,eb4,a4]@2 f3@3 ~, ~@3 [c4,eb4,a4]", // Adim
  AU: "[c4,eb4,a4]@2 ~ f3 [c4,eb4,a4]@2 ~ c3, f2 ~ [c4,eb4,a4]@2 f3@3 ~, ~@3 [c4,eb4,a4]", // Adim
  AV: "[bb2,bb4] db4 f4 [db4,f4,bb4] ~ f2 ab2 [bb2,db4,f4,bb4], ~@3 bb2@2 ~@3, ~@4 [db4,f4,bb4]@3 ~", // Bb Bbm
  AW: "~ [bb1,eb4,ab4,c5] ~ [f4,ab4,db5] ~ [bb2,ab3,db4,f4]@3, ~@3 bb1@2 ~@3", // Ab Db Bbm7
  AX: "[db4,gb4] bb3 [db4,gb4] [eb1,eb2,bb3] [db4,gb4] bb3 [db4,gb4] bb3, [eb1,eb2]@3 ~ [eb1,eb2]@2 ~@2", // Gb5 Eb5 Gb5 Eb
  AY: "[f4,ab4] db4 [f4,ab4] [f1,f2,db4] [f4,ab4] db4 [f4,ab4] db4, [f1,f2]@3 ~ [f1,f2]@2 ~@2", // Fm Db Fm F
  AZ: "[gb2,bb3,eb4,g4,bb4]!4", BA: "[eb2,eb4,g4,bb4,eb5]!4",
  BB: "[ab1,ab2,gb4,db5,eb5,ab5]!7 [ab1,ab2,ab4,c5,eb5,ab5]", BC: "~@5 [ab1,ab2,db5,gb5,bb5,db6]@3",
  BD: "[db2,db5,db6]@2 [db5,db6]@2 ~ f2 ab2 eb2, ~@2 [db5,db6]!2", // Db
  BE: "[db5,db6]@2 [db5,db6]@2 ~ e2 f2 gb2, ~@2 [db5,db6]!2", // Db
  BF: "[db5,db6]@2 [db5,db6]@2 ~ gb2 ab2 a2, ~@2 [db5,db6]!2", // Db
  BG: "[bb2,ab3,db4,f4] [f2,ab3,db4,f4] bb2 [ab2,bb3,db4,gb4]@2 ab2 ab1 ab2, ~@5 [db4,gb4,bb4]@3", // Bbm7 Db Gb
  BH: "~ [gb1,gb2,e3,bb3,db4] ~ [gb1,gb2,e3,bb3,db4]", // Gb7
  BI: "~ [ab1,ab2,db4,gb4,ab4] ~ [ab1,ab2,db4,gb4,ab4] ~ [ab1,ab2,ab4,ab5] [ab1,ab2,bb4,bb5] [ab1,ab2,db5,db6]", // Dbsus4 Ab Absus2 Db5
  BJ: "[~@4 [ab3,db4,f4]@3 [ab3,db4,f4] f1@2 [ab1,ab3,db4,f4]@2 db2@2 f1@4 ~@2 [a3,c4,eb4]@3 [a3,c4,eb4] a1@2 [c2,a3,c4,eb4]@2 eb2@2 f2@2, db2@4 ~@3 [a3,c4,gb4]@3 ~@6, ~@9 f1@3 ~@4]/2", // Db Adim Gbdim
  BK: "~@4 [bb3,db4,gb4]@3 [bb3,db4,gb4] bb1@2 [db2,bb3,db4,gb4]@2 eb2@2 gb2@2, gb1 ~", // Gb
  BL: "[bb1,bb2,ab3,db4,f4] [bb1,bb2,ab3,db4,f4]@2 [ab1,ab2,ab3,c4,eb4]@2 [ab3,ab4] [bb3,bb4] [db4,db5], ~@5 [ab1,ab2]@3", // Bbm7 Ab Bb Db Ab
  BM: "[~@4 [ab3,db4,f4]@3 [ab3,db4,f4] f1@2 [ab1,ab3,db4,f4]@2 db2@2 [eb1,ab3,db4,f4]@4 eb1@5 eb1 g1@2 bb1@2 eb2@2 bb1@2, [f1,db2]@8 ~@10 [g3,bb3,eb4]@13 ~]/2", // Db Eb
  BN: "[[eb1,eb2,bb3,db4,gb4]@2 [f1,f2,db4,f4,ab4]@2 [gb1,gb2,bb3,db4,e4] [g1,g2,g3,bb3,eb4]@2 [ab1,ab2,gb3,bb3,db4]@2 [ab1,ab2,gb3,bb3,db4]!2 [ab1,ab2]!2 [a1,a2,a4,a5] [a1,a2,b4,b5] [a1,a2,d5,d6], ~@11 [gb3,bb3,db4]@2 ~@3]/2", // Ebm7 Db Gb7 Eb Gb Ab A Asus2 …
  BO: "[[d1,d5,a5,d6] [d2,d5,a5,d6] [gb1,d5,a5,d6] [gb2,d5,a5,d6] [a1,d5,a5,d6] [b1,d5,a5,d6] [d2,d5,a5,d6] [e5,bb5,e6] [e5,bb5,e6] [gb2,e5,bb5,e6] [gb1,e5,bb5,e6] [gb2,e5,bb5,e6] [gb1,e5,bb5,e6] [db2,e5,bb5,e6] bb1 gb1, ~@7 [gb1,gb2]@2 ~@5 [e5,bb5,e6]@2]/2", // D5 D D5 Bm7 D5 Edim Gb7 Bbdim …
  BP: "~@2 [g4,b4,d5,g5]@2 [b1,b4,d5,g5] [d2,g4] [e2,b4,d5,g5] [g2,g4], g1 ~", // G G5 Em7 G
  BQ: "[b1,b2,a4,b4,d5,gb5]!2 ~ [e4,a4,db5,e5]@2 [a4,a5] [b4,b5] [d5,d6], ~@6 [a1,a2]@9 ~", // Bm7 A B D A
  BR: "[[d2,d3,a5,d6]@2 [d2,d3,gb5,a5,d6]@2 [gb5,a5] d5 a4 [a3,d4,gb4]@2 [e2,e3]@2 e1 ab1 b1 e2 b1, ~@14 [e2,e3]@2 ~@2 [ab3,b3,e4]@13 ~]/2", // D5 D Gbm D E
  BS: "[e2 e1@2 e1 gb1 gb2 gb1 g1@3 g2 g1 gb1 gb2 gb1 [e1,e2]@3 b1 e2@2 b1 e1 [a1,a2,b3,d4,g4]@2 [a1,a2,b3,d4,g4]!3 [a1,a2,db4,e4,a4]!4, [b3,d4,g4]@8 [a3,d4,gb4]@6 [b3,d4,g4]@9 ~ [a3,d4,gb4]@6 [b3,d4,g4]@8 [b3,d4,g4]@8 ~@18]/4", // E G A G D G D G
  BT: "[a1,a2,g4,b4,d5]!4 [a1,a2,a4,db5,e5]!4", BU: "[d2,d5,a5,d6]@2 [d5,a5,d6]@2 ~ gb2 a2 e2, ~@2 [d5,a5,d6]!2",
  BV: "[[d5,ab5,d6]@2 [d5,ab5,d6]@2 ~ f2 gb2 ~@7 [d5,g5,d6]@2, ~@2 [d5,ab5,d6]!2 [d5,g5,d6]!3 ~, ~@7 [g1,g2]@2 [a1,a2]@2 [bb1,bb2]@2 [b1,b2]@3]/2", // Ddim G5 Ddim G5 G A Bb B
  BW: "[[e2,e3,g4,b4,d5,g5]@2 [gb2,gb3,a4,b4,d5,a5]@2 [g4,b4,d5,f5] e5 [a2,a3,g4,b4,d5] [d2,d3,gb4,a4,d5]@3 [d1,d2,d5,d6]@2 ~@4, ~@2 [g2,g3] ~@5]/2", // Em7 Bm7 G7 G D G
})).s("gm_piano").gain(0.3)

stack(piano)