Strudelify

new york new york

Idean Labib

KeyF majorTempo120 bpm
0:00/0:00
// new york new york — Idean Labib
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/36559; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 44 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.

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A@2 B C D E D F G H I J D K D F G L M ~@2 N O P ~ Q R Q S T U V W X@2 Y@2 Z AA AB@4 ~
>`.pickRestart({
  A: "f4/2", B: "g4", C: "g4 ~@7", D: "c4", E: "~@4 f4@4 e4@3 f4@2 d4@3", F: "~ e4 f4 g4", G: "a4@2 ab4 a4@2 ab4 a4@2",
  H: "~ ab4 a4 ab4", I: "db4 bb3 b3 db4 gb3@4", J: "~ f4@2 d4", K: "~ f4@3", L: "~ c5 a4 c5", M: "d5",
  N: "~@5 g4 bb4@2", O: "e5 ~@7", P: "f4@3 eb4@2 db4@3 f4@8", Q: "db4", R: "gb3", S: "~ b3!3",
  T: "bb3@2 a3 bb3@2 a3 bb3@2", U: "~ db4 bb3 db4", V: "ab3", W: "~ db4 c4 bb3", X: "[gb3@5 b3!3]/2",
  Y: "[gb3@2 bb3 b3@2 bb3 b3 db4]/2", Z: "eb4 db4", AA: "eb4 gb4", AB: "gb4/4",
})).s("gm_alto_sax").gain(0.3)

// chords · piano
const piano = note(`<
  A@2 B C D E F G H I J K D E L M N O P Q R S T U V W X Y Z AA AB AC AD AE@2 AF@2 AG AH AI AJ@2 AK AL
>`.pickRestart({
  A: "[f2,f5,a5]@2 [f5,a5]@2 [e5,a5] f5 d5@2, ~@2 c2 ~", // F A5
  B: "[g2,f5,g5,bb5]@2 [f5,g5,bb5]@2 [e5,g5,bb5] f5 d5@2, ~@2 g2 ~", C: "[c2,f5,g5,bb5]@4 f4@4 e4@3 f4@2 d4@3",
  D: "[f2,f4,a4]@2 [f4,a4]@2 [e4,a4] f4 d4@2, c4, ~@2 c2 ~", E: "[f2,f4,a4]@4 f4@4 [c2,e4]@3 f4@2 d4@3, ~ a4",
  F: "[g2,f4,bb4]@2 [f4,bb4]@2 [e4,bb4] f4 d4@2, c4, ~@2 c2 ~", // Gm7 Bb5 Edim
  G: "[g2,c4] [g3,bb3,c4,e4] [c2,g3,bb3,d4,f4] [bb3,e4,g4]", // C5 C7 Gm7 Edim
  H: "[f2,c4,f4,a4]@2 ab4 ~@2 ab4 [c4,f4,a4]@2, c3, ~@3 [c4,f4,a4]@2 ~@3, ~@2 c2 ~", // F
  I: "f2 ab4 [c2,a4] ab4, d3, ~ [c4,f4]@2 ~", J: "f4@2 f4@2 e4 f4 [f3,d4]@2, [g2,bb3,g4], d3@2 e3 ~",
  K: "[c3,c4]@4 f4@4 e4@3 f4@2 d4@3, ~ [g3,bb3]@3, ~ c2", L: "[f2,f4,bb4]@2 [f4,bb4]@2 [e4,bb4] f4 d4@2, c4, ~@2 c2 ~",
  M: "[f2,c4] [g3,bb3,c4,e4] [c2,g3,bb3,d4,f4] [bb3,e4,g4]", // F5 C7 Gm7 Edim
  N: "[f2,c4,f4,a4]@2 ab4 ~@2 ab4 [c4,f4,a4]@2, ~@3 [c4,f4,a4]@2 ~@3, ~@2 c2 ~", // F
  O: "f2 [e4,a4,c5] [c2,c4,e4,a4] [e4,a4,c5]", P: "f2!2 c2!2, [c4,eb4,a4]",
  Q: "[c2,f5,g5,bb5]@2 [g3,bb3,c4,e4]!2 [g3,bb3,d4,f4]!2 [bb3,e4,g4]@2, ~@2 c2 ~", // Csus4 C7 Gm7 Edim
  R: "e5@3 d5@2 c5@3 [e2,g4,a4,c5,e5]@4 a2@4, [a2,g4,a4] ~", // Am7 A7
  S: "e5@3 d5@2 c5@3 [a2,gb4,a4,c5,e5]@4 d2@4, [d2,gb4,a4] ~", // Gbm7b5 D
  T: "f5@3 eb5@2 db5@3 f5@3 eb5@2 db5@3, [bb2,f3,db4,f4,ab4]!2", // Bbm7
  U: "f5@3 eb5@2 db5@3 [db3,ab3,db4]@4 ab2@4, [db3,ab3,db4,f4,b4] [f4,b4,f5]", V: "db2 ~@3",
  W: "[gb2,gb4,bb4]@2 [gb4,bb4]@2 [f4,bb4] gb4 eb4@2, db4, ~@2 db2 ~", // Gb Bb5
  X: "[gb2,gb4,bb4]@4 gb4@4 [db2,f4]@3 gb4@2 eb4@3, ~ bb4", // Gb Db
  Y: "[ab2,gb4,b4]@2 [gb4,b4]@2 [f4,bb4] gb4 eb4@2, db4, ~@2 db2 ~", // Abm7 B5 Bb5
  Z: "[ab2,db4] [db2,db4,f4,ab4,db5] [eb2,c4,gb4,a4,c5] [f2,b3,eb4,ab4,b4]", // Db5 Db Ebdim Fm7b5
  AA: "[gb2,db3,db4,gb4,bb4]@2 a4 ~@2 a4 [db4,gb4,bb4]@2, ~@3 [db4,gb4,bb4]@2 ~@3, ~@2 [db2,db3] ~", // Gb Db
  AB: "[gb2,db3] [f4,bb4,db5] [gb2,db3,db4,f4,bb4] [f4,bb4,db5]", AC: "[db2,db3]@3 ab2@2 ab2 db2@2, [e4,ab4,b4,eb5]",
  AD: "gb2 [gb2,db5] [ab2,e4,ab4,b4] [bb2,e4,gb4,bb4], [e4,gb4,bb4] ~", // Gb5 E Gb7
  AE: "[[b2,gb4,b4,eb5,gb5]@2 [gb4,b4,eb5] ~@2 [d4,gb4,b4] [d4,gb4,bb4] [d4,gb4,ab4], ~ gb2 b2 b1, ~@3 [d4,gb4,ab4,db5]@2 ~@3]/2", // B Bm Daug Abm7b5 Dmaj7
  AF: "[[db2,gb4,bb4,db5,gb5]@2 [bb1,bb2,db4,gb4,db5] [eb2,eb3,db4,g4,b4]@2 [eb2,eb3,db4,g4,bb4] [f2,f3,db4,ab4,b4] [g2,g3,eb4,bb4,db5]]/2", // Gb Ebaug Eb7 Db7 Eb7
  AG: "~ [ab1,ab2] ~ [bb1,bb2], [eb4,gb4,b4,eb5] [db4,f4,ab4,db5]", // Ab Bb B Db
  AH: "~ [b1,b2] ~ [db2,db3], [eb4,gb4,ab4,b4,eb5] [gb4,b4,eb5,gb5]", // B Db Abm7 B
  AI: "[gb2,gb4,bb4,db5,gb5]@2 [bb4,gb5,bb5]@2 [bb4,f5,bb5] gb5 [bb4,eb5,bb5]@2, ~@2 [db2,db3] ~", // Gb Ebm Bb5 Eb5 Db
  AJ: "[gb2,bb4,gb5,bb5]@2 [bb4,gb5,bb5]@2 [bb4,f5,bb5] gb5 [bb4,eb5,bb5]@2, ~@2 [db2,db3] ~", AK: "[gb2,bb4,gb5,bb5]",
  AL: "gb1 ~@3",
})).s("gm_piano").gain(0.4)

stack(alto_sax, piano)