Strudelify

If Tomorrow Never Comes

Barry Manilow

KeyG majorTempo70 bpm
0:00/0:00
// If Tomorrow Never Comes — Barry Manilow
// 70 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "Bass" named as a bass, played on electric bass finger (its acoustic guitar nylon patch is not one)
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/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.

// bass · electric bass finger · "Bass"
const bass = note(`<
  A B C D E F G H I B J K E F L H F B M N O P Q R S T M U V W J D X B C D E F L H I B J K E F L H F B M N O P Q R S T M
  U V W J D X Y J K Z AA@3 ~
>`.pickRestart({
  A: "~@2 g2!2", B: "g2", C: "a2", D: "d3 d2", E: "g2@4 g2@3 d2", F: "g2!2", G: "f#3 a2", H: "d3 c3",
  I: "g2 d3 g3 d3 g2@4", J: "a2!2", K: "d3@2 d2 d3", L: "d3 a2", M: "c3@3 c3 g2@3 g2", N: "c2@2 c3 c2",
  O: "g2@3 g2 d2@3 d2", P: "g2@4 g2@2 b2 c3", Q: "d3@3 d3 a2@3 a2", R: "d2@3 d2 b1@2 c3@2", S: "g2@3 g2 d3@2 d2@2",
  T: "g2@3 g2 a2@2 b2@2", U: "c2@3 c2 c2@2 d2@2", V: "e2@3 e2 e2@2 b2@2", W: "e2", X: "g2@3 g2 g2@2 g2@2", Y: "[g2,d3]",
  Z: "c3@2 b2 a2", AA: "[g2,d3]/3",
})).s("gm_electric_bass_finger").gain(0.47)

// chords · piano · "Grand PIano"
const piano = note(`<
  A B C D E F G H@2 I J K E L M@2 N O P Q R S T@2 U V W X Y Z AA AB AC AD C A AE L G H@2 I J K E L M@2 N O P Q R S T@2 U
  V W X Y Z AA AF AG AD AH AI AJ AK@3 ~
>`.pickRestart({
  A: "g2@2 d3@2 g3@2 d3 e3 [f#3,a3,d4]@4 [e3,g3,c4]@4, b3 ~", B: "[g3,b3] d4, d3", C: "c4@8 g3@2 c4@2 d4@2 e4 f#4",
  D: "f#3 d3 d4 [a3,e4] f#3 d3 d4 [a3,e4], a3@3 ~@5, d4 ~@3", // A5
  E: "~ a3 a4 [b3,e4,b4] b3 g3 g4 [d4,a4], [g3,c4,e4]@2 ~ d4@4 ~, ~@3 g3@2 ~@3", F: "a3 c4 g4 a3 b3 g3 g4 [d4,a4]",
  G: "f#3 d3 d4 [a3,e4] a3 c4 ~ a3, a4 ~, d4 ~ [e4,a4] [c4,g4]", // A5 C5
  H: "[f#3@2 d3@2 d4@2 [a3,e4]@2 ~@2 c3@2 [g3,c4,e4]@2 b3@2 b3@2 g3@2 g4@2 [d4,a4]@2 c4@2 a3@2 a4@2 [e4,b4] [f#4,c5], g4@8 ~ [c4,e4,g4]@3 ~@2 d4@8 ~@10, a3@3 ~ e3 ~@2 g3@2 ~@7]/2", // A5 C D5 E5 F#dim C
  I: "[g3,b3] [d4,b4], d3", J: "~ e3 g3 c4 e4 g3 c4 [b3,g4]",
  K: "f#3 d3 ~ [a3,e4] [a3,g4] d4 a3 ~, [a3,f#4] [d4,f#4] ~@2", L: "a3@2 c4@2 g4@2 a3@2 b3@2 g3@2 g4@2 a4 b4",
  M: "[f#3@2 d3@2 ~@2 [a3,e4]@2 a3@2 c4@2 [c4,g4]@2 ~@2 f#3@2 ~ d4 d4@2 e4 ~ e3@2 ~ c4 c4@2 [g3,c4,d4,e4,g4]@2, [d4,a4]@4 [d4,a4]@4 [e4,a4]@4 ~@2 a3@2 ~@2 d3@2 ~@3 [g3,c4,e4]@3 c3@2 ~@4, ~@15 [d4,g4]@3 ~ [a3,f#4]@3 a3@2 ~@3 e4@3 ~@2]/2", // A5 C5 C D5 A5 C G5 D
  N: "a3@2 g3@2 g4@2 [d4,a4] [e4,b4] c4@2 [g3,a3]@2 [c4,a4]@2 [e4,b4] [f#4,c5], b3 ~, d4@3 ~@4 g4", // D5 E5 Gsus2 F E5 F#dim
  O: "[b3,d4,g4]@6 ~ [d4,g4,b4]@3 [g4,b4,d5]@4 c5!2, ~@7 [d4,g4]", // G G5
  P: "e3@2 c3@2 c4@2 [g3,d4]@2 e3@2 c3@2 c4@2 [g3,d4] e4, e4@2 ~ [e4,g4,c5], c4 ~ [c4,e4,g4] ~", // G5 C
  Q: "e3 c3 c4 [g3,d4] e3 c3 ~ [g3,d4], [g4,c5,e5]@4 [e4,g4,c5]@2 c4 ~, ~@13 [g4,c5,d5]@3", // G5 C Gsus4
  R: "b3@2 g3@2 g4@2 [d4,a4]@2 ~@2 g3@2 g4@2 a4 b4, [b4,d5]@4 d4@3 d4, g4 ~ b3@2, ~@2 g4 ~", // D5 Bm
  S: "g3!2 g4 [d4,a4] b3 g3 [d4,g4,a4] [d4,a4], [b3,d4]@7 ~ [d4,g4,c5]@4 b3@4", // D5 Dsus4 D5 Bm Csus2
  T: "[f#3 d3 d4 [a3,e4] a3 c4 [c4,e4,g4,a4] ~ f#3 d3 ~ [a3,e4] e3 c3 [c4,e4,g4,c5] [g3,d4,g4,b4], [f#4,a4]@7 ~ [e4,g4,c5]@4 ~@3 [d4,f#4,a4]@5 [d4,f#4,a4]@4 [e4,g4,c5]@4 ~@4, d4@2 ~@5 a3 ~@8]/2", // A5 Am7 A5 C G F#m C D …
  U: "b3 ~ g3@2 g4@2 a4@2 b3@2 g3@2 g4@2 a4 b4, ~ [b3,d4,g4]@4 ~ [d4,b4]@9 ~, ~@3 g4@3 ~ d4", // G
  V: "~@2 g3@2 g4 [d4,a4] [d4,a4]@2 a3@2 c4@2 ~@2 a3@2, [b3,d4,g4]@4 ~ g4@3 [d4,g4,b4]@4 [d4,g4,c5]@4", // D5 G Csus2
  W: "e3 c3 c4 [g3,d4] e3 c3 c4 [g3,d4], e4@2 [c4,e4,g4] [e4,g4,c5], g3@3 ~@5", // G5 C
  X: "e3 c3 c4 ~ e3 c3 c4 [g3,d4], [g4,c5,e5]@3 [g3,d4] ~@4, ~@7 [e4,g4,c5]@5 [f#4,a4,d5]@4", // G5 C G5 C D
  Y: "[e4,g4,b4,d5]@2 ~@2 d5@2 e4 d4 b3@2 d4@2 ~@2 b3@2, ~ [g4,b4]@5 ~@2, ~@2 d4@5 ~@5 [d4,f#4,a4]@4", Z: "[b3,e4,g4]",
  AA: "~@2 e3@2 g3@2 c4@2 [a3,e4,c5]@2 [c4,d4,b4] ~ g4@2 [a3,d4,a4]@2, ~@11 [c4,a4]@2 ~@3", // Am G D5 F
  AB: "f#3 d3 d4 [a3,e4] f#3 d3 d4 [a3,e4], a4 f#4, d4 ~ d4 ~", // A5
  AC: "~@2 g3@2 g4@2 a4 b4 ~@2 b3@2 a4@2 b4 c5, b3@2 [a3,d4] [g3,c4], d4@3 d4 ~@3 e4", AD: "[d3,g3,b3]",
  AE: "c4 a3 a4 [e4,b4] b3 g3 g4 [d4,a4], [g3,b3]@4 d4@3 ~", // E5 D5 G
  AF: "~@2 g3@2 g4@2 [d4,a4]@2 b3@2 g3@2 g4@2 a4 b4, e4, b3@4 ~@3 d4, g4 ~@3", // D5
  AG: "g3@2 e3@2 g3@2 c4@2 [a3,e4,c5]@2 [c4,d4,b4] ~ g4@2 [a3,d4,a4]@2, ~@11 [c4,a4]@2 ~@3", // Am G D5 F
  AH: "~ e3 g3 c4 a3 c4 g4 a3, ~@2 [e4,c5] [c4,a4]", AI: "e3 c3 c4 [g3,d4] e3 c3 c4 [g3,d4], a4 f#4, d4@3 ~ d4@3 ~",
  AJ: "e3@2 c3@2 c4@2 d4 e4 a3@2 c4@2 g4@2 a3@2, e4@7 ~@9, c4@2 ~ g3 [g3,d4]@2 [g3,c4]@2", AK: "[g3,b3,g4]/3",
})).s("gm_piano").gain(0.26)

// drums · kick
const kick = s("bd").struct("<~@10 A@7 B A@11 B A@3 B A@7 B A@7 B A@11 B A@3 B A@3 B ~@3>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x",
})).gain(0.38)

// drums · rim
const rim = s("rim").struct("<~@9 A B@7 C ~@15 A B@7 A B@7 C ~@15 A B@3 ~@4>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x",
})).gain(0.38)

// drums · snare
const snare = s("sd").struct("<~@18 A@7 B A@3 ~ A@3 ~@17 A@7 B A@3 ~ A@3 ~@8>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~@2 x",
})).gain(0.38)

// drums · mid tom
const mid_tom = s("mt").struct("<~@17 [~@14 x!2] ~@31 [~@14 x!2] ~@23>").gain(0.57)

// drums · tambourine
const tambourine = s("tb").struct("<~@18 A B@6 C D B@2 E B@3 E ~@16 A B@6 C D B@2 E B@3 E ~@7>".pickRestart({
  A: "x ~@2 x", B: "~ x ~ x", C: "~@4 x ~@7 x ~@2 x", D: "x!2 ~ x", E: "x",
})).gain(0.38)

// drums · ride
const ride = s("rd").struct("<~@69 x ~@3>").gain(0.38)

stack(bass, piano, kick, rim, snare, mid_tom, tambourine, ride)

More by Barry Manilow