Strudelify
KeyF minorTempo76 bpm
0:00/0:00
// Ships — Barry Manilow
// 76 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(76/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@2 B C D E@2 F G H@2 I J K L@2 M@3 N O P Q R S T U V D E@2 F G H@2 I J K L@2 M@3 N O P Q W X Y@2 Z@2 AA@2 AB@2 AC AD
  Z@2 AA@2 AB@2 AE@2
>`.pickRestart({
  A: "[bb3,eb4,g4]@2 [c4,eb4,ab4]@2 [c4,eb4,ab4]@2 [c4,eb4,ab4]@4 [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2", // Eb Ab
  B: "[eb4,g4,bb4]@2 [eb4,ab4,c5]@2 [eb4,ab4,c5]@2 [eb4,ab4,c5]@4 [eb4,ab4,c5]@3 ~ [eb4,ab4,c5]@2", // Eb Ab
  C: "[eb4,ab4,c5]@2 [f4,ab4,db5]@2 [f4,ab4,db5]@2 [f4,ab4,db5]@4 [f4,ab4,db5]@3 ~ [db4,f4,ab4]@2", // Ab Db
  D: "c5@3 ~ c5@2 c5 c5@4 ~ bb4@2 ab4@2",
  E: "[bb4@3 ~ bb4@2 bb4 bb4@4 ~ db5@2 c5 ab4@4 ~ bb4@2 c5 c5@4 ~ bb4@2 c5 ab4]/2", F: "eb4 f4@6 ~@5 ab4@2 bb4@2",
  G: "[eb4,ab4,c5]@3 ~ c5@2 c5 c5@4 ~ bb4@2 ab4@2", // Ab
  H: "[bb4@3 ~ bb4@2 bb4 bb4@4 ~ db5@2 c5 ab4@4 ~ bb4 c5@2 c5@4 ~ bb4@2 ab4@2]/2",
  I: "[f4,ab4,c5,f5]@10 ~@2 [eb4,g4,bb4,eb5]@3 ~", J: "~@3 c5 c5@2 db5@2 eb5@2 db5@2 ab4 gb4@2 ~",
  K: "gb4@2 f4@2 [f4,ab4,db5]@6 ~@2 [ab3,db4,f4]@3 ~", // Db
  L: "[[f3,bb3,db4]@2 ~ bb4 bb4@2 c5 db5@3 c5 bb4@2 ab4@2 g4@4 ~@9 ab4@2 bb4@2]/2", // Bbm
  M: "[b4@2 ~@4 b4 bb4@6 b4 db5 ab4@4 ~@9 ab4 bb4@2 b4@6 db5 b4 bb4@4 ~ b4 db5@2 ~]/3", N: "ab4 ~@5 ab4 bb4",
  O: "b4@3 ~ [gb4,b4,eb5,gb5]!3 [gb4,bb4,db5,gb5]@6 e5 eb5 b4", // B Gb
  P: "gb4 ab4@6 ~ eb5 db5 eb5@2 [b3,e4,ab4]@2 [db4,gb4,bb4]@2", // E Gb
  Q: "[eb4,ab4,b4]@5 ~ [eb4,ab4,b4]@2 [gb4,bb4,db5]@5 b4 ~ gb5", R: "eb5@10 ~@2 db5@3 ~", S: "c5@13 ~@3",
  T: "~@4 ab4 c5 f5 c5", U: "eb5@11 ~@3 f5@2", V: "ab4@3 ~@3 ab4 bb4", W: "[e4,ab4,b4,eb5]@3 ~ eb5 b4 db5 bb4",
  X: "[b3,e4,b4]@2 ab4@2 db5@2 bb4@2 [d4,g4,b4,d5]@3 ~ [e4,a4,db5,e5]@3 ~", // E5 G A
  Y: "[[f4,a4,c5,f5]@3 ~@2 [f4,a4,c5,f5]@2 [e4,g4,c5,e5]@6 [c4,c5] [a3,a4] [d4,f4,bb4,d5]@7 ~@6 [d4,f4,bb4,d5]@2 [e4,e5]@2]/2", // F C A Bb E
  Z: "[[f4,a4,c5,f5]@5 [g4,g5] ~ [f4,f5] [e4,g4,c5,e5]@3 ~ [f4,f5]@2 [g4,g5]@4 [d4,f4,bb4,d5]@5 ~ [d4,f4,bb4,d5]@3 ~ [d4,d5]@2 [e4,e5]@2]/2", // F G F C F G Bb D …
  AA: "[[f4,a4,c5,f5]@2 ~@2 [f4,a4,c5,f5]!3 [e4,g4,c5,e5]@6 [g4,g5] [e4,e5] [f4,bb4,d5,f5]@2 [e4,e5] [d4,f4,bb4,d5]@8 ~@2 [d4,f4,bb4,d5]@2 [e4,g4,bb4,e5]@2]/2", // F C G E Bb E Bb Edim
  AB: "[[f4,a4,d5,f5]@3 ~@3 [f4,a4,d5,f5]@2 [g4,c5,e5,g5]@5 [g4,c5,e5,g5]!2 [f4,bb4,d5,f5]@7 ~@2 [e4,g4,c5,e5]@6 ~@2]/2", // Dm C Bb C
  AC: "~@2 [f4,a4,c5,f5]@2 [f4,a4,c5,f5]@2 [f4,a4,c5,f5]@2 [e4,g4,c5,e5]@2 [e4,g4,c5,e5]@2 [e4,g4,c5,e5] [f4,f5] ~ [g4,g5]", // F C F G
  AD: "[d4,f4,bb4,d5]@3 ~@3 [d4,f4,bb4,d5] [e4,e5]", AE: "[[f3,c4,a4,c5,f5]@29 ~@3, f4@13 ~@19]/2",
})).s("gm_piano").gain(0.3).pan(0.9)

// chords · piano
const piano_2 = note("<~@15 A ~@7 B C D E F ~@11 A ~@7 G H ~@18>".pickRestart({
  A: "[g3,bb3,eb4] bb3 g4 db4 f4 bb3 [db4,f4] [bb3,eb4]", B: "[e4,ab4,b4]@3 ~ [db4,gb4,bb4]@3 ~",
  C: "[bb3,eb4,g4]@2 [c4,eb4,ab4]@2 [c4,eb4,ab4]@2 [c4,eb4,ab4]@4 [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2", // Eb Ab
  D: "[bb3,eb4,g4]@2 [c4,f4,ab4]@2 [c4,f4,ab4]@2 [c4,f4,ab4]@4 [c4,f4,ab4]@3 ~ [c4,f4,ab4]@2", // Eb Fm
  E: "[eb4,g4,bb4]@2 [eb4,ab4,c5]@2 [eb4,ab4,c5]@2 [eb4,ab4,c5]@4 [eb4,ab4,c5]@3 ~ [eb4,ab4,c5]@2", // Eb Ab
  F: "[eb4,ab4,c5]@2 [f4,ab4,db5]@2 [f4,ab4,db5]@2 [f4,ab4,db5]@4 [eb4,ab4,eb5]@5 ~", // Ab Db Ab5
  G: "~@8 [eb4,ab4]@3 ~ [db4,gb4]@3 ~", H: "~@4 [db4,gb4]@3 ~@9",
})).s("gm_piano").gain(0.43).pan(0.9)

// other · piano
const piano_3 = note(`<
  A B A B C D E F C D E G H I J K L M L M N O P Q R S R S C D E F C D E G H I J K L M L M N O P T U V W X Y Z AA AB AC
  AD W X Y Z AA AB AC AE@2
>`.pickRestart({
  A: "ab2@13 ~@3", B: "db3@13 ~@3", C: "ab2 eb3 eb4 ab4 db3 ab3 db4 f4", D: "eb3 bb3 eb4 g4 e3 bb3 c4 e4",
  E: "[f3,ab3,c4] f2 f3 ab3 eb2 eb3 ab3 c4", F: "db2 f3 ab3 c4 db4 f3 [db2,db3,ab3] [eb2,eb3,bb3]",
  G: "db2 db3 f3 ab3 eb2 eb3 g3 bb3",
  H: "[ab1,ab2]@3 ~ [eb3,gb3,ab3,c4]@3 ~ [eb3,gb3,ab3,c4]@3 ~ [bb1,bb2]@2 [c2,c3]@2", // Ab Ab7 Bb C
  I: "[db2,db3]@3 ~ [f3,ab3,db4]@3 ~ [f3,ab3,db4]@3 ~ [c2,c3]@3 ~", // Db C
  J: "[bb1,bb2]@3 ~ [f3,bb3,db4]@3 ~ [f3,a3,db4]@3 ~ [f3,ab3,db4]@3 ~", K: "[g3,g4]@3 ~ [eb3,eb4]@3 ~",
  L: "b1 b2 eb3 gb3 b3 gb3 eb3 b2 eb2 eb3 gb3 bb3 eb4 bb3 gb3 eb3",
  M: "e2 b2 e3 ab3 b3 ab3 e3 b2 gb2 b2 e3 ab3 b3 ab3 e3 b2",
  N: "[eb3,gb3,b3]@2 [b1,b2]@2 [b1,b2]!2 [db2,db3] [eb2,eb3]@4 ~ [eb3,gb3,bb3,db4]@3 ~", // B Db Eb Ebm7
  O: "[e2,e3]@3 ~ [e3,ab3,b3,eb4]@3 ~ [e3,ab3,b3]@3 ~ [e2,e3] [gb2,gb3]@2 ~", // E Emaj7 E Gb
  P: "[ab3,ab4]@3 ~ [eb3,ab3,b3]@3 ~ [gb3,gb4]@3 ~ [db3,gb3,bb3]@3 ~", Q: "[e3,e4]@3 ~ [e3,ab3,b3]@3 ~ [gb3,gb4]@6 ~@2",
  R: "[ab1,ab2]@13 ~@3", S: "[db2,db3]@13 ~@3", T: "[e3,e4]@3 ~ [e3,ab3,b3]@2 [b1,b2]@2 [e2,e3]@3 ~ [eb2,eb3]@3 ~",
  U: "[db2,db3]@3 ~ [eb2,eb3]@3 ~ [e2,e3]@3 ~ [a1,a2]@3 ~", V: "[f2,f3]@3 ~ [f3,a3,c4]@3 ~ [a1,a2]@3 ~ [e3,g3,c4]@3 ~",
  W: "[bb1,bb2]@3 ~ [d3,f3,bb3]@3 ~ [c2,c3]@3 ~ [d3,f3,bb3]@3 ~", // Bb C Bb
  X: "[d2,d3]@3 ~ [d3,f3,a3]@3 ~ [a1,a2]@3 ~ [e3,g3,c4]@3 ~", // D Dm A C
  Y: "[bb1,bb2]@3 ~ [d3,f3,bb3]@3 ~ [c2,c3]@3 ~@3 [e2,e3]@2", Z: "~@2 [f2,f3]@2 [f3,f4]!3 [a3,a4]@4 ~ [e3,g3,c4]@3 ~",
  AA: "[bb1,bb2]@3 ~ [d3,f3,bb3]@2 [bb1,bb2]@2 [c2,c3]@3 ~ [c2,c3]@2 [db2,db3]@2", // Bb C Db
  AB: "[d2,d3]@3 ~ [f3,a3,d4]@2 [d2,d3]@2 [c2,c3]@3 ~ [e3,g3,c4]@2 [c2,c3]@2", AC: "[bb1,bb2]!4 [c2,c3]!4",
  AD: "[f2,f3]@3 ~ [f3,a3,c4]@2 [f2,f3]@2 [a1,a2]@3 ~ [e3,g3,c4]@3 ~", AE: "[[f2,f3]@29 ~@3]/2",
})).s("gm_piano").gain(0.3).pan(0.2)

stack(piano, piano_2, piano_3)

More by Barry Manilow