Strudelify

raindrops keep fallin on my head

Burt Bacharach

KeyB♭ majorTempo120 bpm
0:00/0:00
// raindrops keep fallin on my head — Burt Bacharach
// 120 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 50, 4/4 at bar 50, 2/4 at bar 51, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/37886; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · trumpet · "Bb Trumpet"
const trumpet = note(`<
  ~@10 A ~@8 B C@5 D E@3 ~ F G H I J K L M B N O P ~@8 Q R@2 S T U@2 V W X@2 ~ Y@2 Z AA ~ Y@2 AB AC AD AE AF AC AG AH
  AI@2 ~@8 B AJ O P
>`.pickRestart({
  A: "~ ab3!2 bb3", B: "~ ab4!2 bb4",
  C: "[c5@8 ~@4 eb5@3 bb4@7 ~@6 c5@3 db5@3 c5@4 bb4@6 ab4@3 c5@3 bb4@6 c5@4 db5@3 f5@3 eb5@6 ~@7 c5]/5",
  D: "f5@2 eb5@4 eb5@6 ~@3 c5", E: "[g5@2 f5@4 eb5@6 c5@3 bb4@5 ab4@3 c5@3 bb4@10 ~@12]/3",
  F: "c5@4 c5@3 c5 db5@3 c5 bb4@3 ab4", G: "c5@6 ~@9 eb4", H: "eb5@4 eb5@3 eb5 f5@3 eb5 db5@3 c5", I: "c5 db5 bb4 ab4",
  J: "g5@4 ~@4 f5@3 eb5 c5@3 g4", K: "g5@3 ~ f5@3 ~", L: "eb5@4 eb5@3 c5 db5@3 eb5 db5@3 c5",
  M: "eb5@4 eb5@3 c5 db5@2 eb5@6", N: "c5@3 ~", O: "~@4 ab4@3 ab4 f5@3 eb5 ab4@4", P: "c5 bb4 ab4@14",
  Q: "~@10 c4 d4 eb4 f4 gb4 g4", R: "[ab4 a4 bb4 b4 c5@4 c5@2 b4@2 c5@2 eb5@6 f5@4 e5@2 f5@4 d5@2]/2",
  S: "f5@2 g5@2 [ab5,bb5]!12", T: "[ab5,bb5]!4 ab4@4 eb5@3 d5 f5@2 eb5@2",
  U: "[c5@4 ~@4 c5@2 b4@2 c5@2 eb5@6 f5@4 e5@2 f5@4 eb5 db5]/2", V: "c5 bb4 ab4 g4 eb4@4 eb4@3 f4 g4 bb4 eb5@2",
  W: "eb5@10 eb5@2 f5 eb5 c5@2", X: "[eb4@4 eb4@3 f4 g4 bb4 eb5@2 eb5@12 ~@8]/2", Y: "[~@2 ab5@3 g5 f5 eb5]/2",
  Z: "db5 bb4 f4 g4", AA: "c5 bb4 c5 db5 eb5@2 ~@2", AB: "db5 bb4 f4 g4 bb4 ab4!2 ~", AC: "~@2 c5 b4 c5 eb5@3",
  AD: "f5@2 e5 f5@2 d5 f5 g5", AE: "[ab5,bb5]!16", AF: "ab4@4 eb5@3 d5 f5@2 eb5@2 c5@4",
  AG: "f5@4 e5@2 f5@4 eb5 db5 c5 bb4 ab4 g4", AH: "eb4@4 eb5@2 ~@5 eb4 c5@3 eb4",
  AI: "[ab4,c5]@8 ~@3 eb4 [ab4,c5]@3 eb4", AJ: "eb5 c5@7",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "Bb Trumpet" · soft notes
const trumpet_soft = note("<A B C D E F G H I J ~ C D E F G H I K ~@60 C D E F G H I J ~@4>".pickRestart({
  A: "c5@3 c5 c5@2 ~@2 bb4@3 bb4 bb4@2 ~@2", B: "db5@3 db5 db5@3 bb4@4 bb4 bb4@2 ~@2",
  C: "c4@4 c4@3 c4 db4@3 c4 bb3@3 ab3", D: "eb4@3 c4 eb4@3 eb4 eb4@3 c4 eb4@3 eb4", E: "~@3 c4 c4@4 c4@4 g3@4",
  F: "~@3 f4 ~@3 f4 ~@3 db4 ~@3 db4", G: "~@3 g3 bb3@4 a3@4 ~@4", H: "~@3 g3 eb4@3 g3 ~@3 f3 a3@4",
  I: "~@3 f4 ~@4 f4@4 f4@4", J: "~@3 f4 ~@4 f4@2 f4@5 f4", K: "~@3 f4 ~@4 f4@2 f4@6",
})).s("gm_trumpet").gain(0.2)

// other · french horn · "Horn"
const french_horn = note(`<
  ~@2 A B C D E F G H I ~@17 J@2 A K L M N O P Q I R S T U V W X Y Z AA@2 AB@3 AC AD AE@2 AF AG AH@2 AI AJ ~@2 AK AI AJ
  ~@2 Y Z W AL Y Z AM AN@2 A B C D E F G AO I R S T
>`.pickRestart({
  A: "c4@4 c4@3 c4 db4@3 c4 bb3@3 ab3", B: "c4@6 ~@9 eb3", C: "eb4@4 eb4@3 eb4 f4@3 eb4 db4@3 c4", D: "c4 db4 bb3 ab3",
  E: "g4@4 ~@4 f4@3 eb4 c4@3 g3", F: "g4@3 ~ f4@3 ~", G: "eb4@4 eb4@3 c4 db4@3 eb4 db4@3 c4",
  H: "eb4@4 eb4@3 c4 db4@2 eb4@6", I: "~ f3!2 g3", J: "~@3 ab3 f4@3 g4@9", K: "eb3@3 c3 eb3@3 eb3 eb3@3 c3 eb3@3 eb3",
  L: "~@3 c3 c3@4 c3@4 g3@4", M: "~@3 f3 ~@3 f3 ~@3 db3 ~@3 db3", N: "~@3 g3 bb3@4 a3@4 ~@4",
  O: "~@3 g3 eb4@3 g3 ~@3 f3 a3@4", P: "~@3 f3 ~@4 f3@4 f3@4", Q: "~@3 f3 ~@4 f3@2 f3@5 f3",
  R: "ab3@3 c4 ab3@3 c4 g3@3 c4 g3@3 c4", S: "db3@2 ab3!2", T: "c4 bb3 c4@14", U: "c4 ~ b3 ~ c4 ~ ab3@4 eb3@4 eb3 ~",
  V: "d3 ~ c4 ~ c4 ~ c4@6 ~@4", W: "db3 db4!2 db4@2 bb3 g3@2", X: "eb3@2 ~@2 eb4@3 d4 f4@2 eb4@2 c4@4",
  Y: "c4 b3 c4 ab3@2 eb3@2 eb3", Z: "d3 c4!2 c4@3 ~@2",
  AA: "[eb3@4 eb3@3 f3 g3 bb3 eb4@2 eb4@10 eb4@2 f4 eb4 c4@2 eb3@4]/2",
  AB: "[eb3@3 f3 g3 bb3 eb4@2 eb4@12 c4@2 b3@2 c4@2 ab3@4 eb3@4 eb3@2 d3@2 c4@2 c4@2 c4@6]/3",
  AC: "~@2 db3 db4!2 db4@2 bb3", AD: "g3@4 eb3@4 eb4@3 d4 f4@2 eb4@2",
  AE: "[c4@2 c4 b3 c4 ab3@2 eb3@2 eb3 d3 c4!2 c4@3]/2", AF: "~@4 eb3@4 eb3@3 f3 g3 bb3 eb4@2",
  AG: "eb4@10 eb4@2 f4 eb4 c4@2", AH: "[eb3@4 eb3@3 f3 g3 bb3 eb4@2 eb4@12 ~@2 c4@2 db4@2 eb4@2]/2",
  AI: "f4 eb4 f4@2 db4 c4 db4@2 bb3@2 f4@6", AJ: "eb4 d4 eb4@2 ab4@12", AK: "~@5 c4 db4 eb4",
  AL: "eb3@4 eb4@3 d4 f4@2 eb4@2 c4@4", AM: "eb3@4 eb4@2 ~@5 eb4 ab4@3 eb4", AN: "ab4@8 ~@3 eb4 ab4@3 eb4",
  AO: "eb4@4 eb4@3 c4 db4@2 db4@6",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Horn" · soft notes
const french_horn_soft = note("<A B ~@9 C D E F G H I J K L@5 M N@3 ~@34 O P Q ~@2 O Q ~@21>".pickRestart({
  A: "ab3@3 ab3 ab3@2 ~@2 g3@3 g3 g3@2 ~@2", B: "ab3@3 ab3 ab3@3 g3@4 g3 g3@2 ~@2",
  C: "ab3@3 eb3 ab3@3 ab3 ab3@4 eb3@4", D: "c4@15 ~", E: "~@3 gb3 gb3@4 gb3@4 eb3@4",
  F: "~@3 ab3 ~@3 ab3 ~@3 f3 ~@3 f3", G: "g3@4 eb4@4 f4@3 eb4 c4@3 g3", H: "g3@2 f3 eb3", I: "~@3 ab3 ~@4 ab3@4 ab3@4",
  J: "~@3 ab3 ~@4 ab3@2 ab3@6", K: "~ f3!2 g3",
  L: "[eb4@3 c4 eb4@3 ~@5 c4@3 g3@4 c4 g3@3 c4 ~@4 a3@3 ab3@3 ab3@4 db4@5 db4 ~@3 eb4@3 eb3@5 eb3 ~@3 eb3 ~@3 g3@3 g3@5 g3 ~@3 eb3 g3@3 ~]/5",
  M: "g3@2 g3@4 g3@5 eb3 g3@3 ~", N: "[a3@2 a3@4 a3@2 a3@3 a3 a3@3 ab3@4 ab3 ~@3 ab3@3 ab3@9 ~@13]/3",
  O: "~ c4 ~ c4 ~ c4 ~ c4", P: "~ eb3 ~ eb3 ~ eb3 ~ eb3", Q: "~ eb3 ~ eb3 ~@4",
})).s("gm_french_horn").gain(0.2)

// bass · tuba · "Bb Tuba"
const bass = note(`<
  ~ A B@3 C D E F G H B@3 C D E I F H J K L M N@2 O F P H B@3 C D E F G Q R S T U V W X Y Z AA@2 AB@2 AC AD AE AF AG AH
  AI AJ@2 AK AL ~@2 AM AK AL ~@2 U V W X Y Z AN ~@2 B@3 C D E F G H R S T
>`.pickRestart({
  A: "~@15 eb2", B: "ab2 ~ ab2 ~", C: "db3 ~ db3 ~", D: "c3@4 ~@3 c3 f2@4 ~@4", E: "c3@4 ~@4 f2@4 ~@3 f2",
  F: "bb2@4 ~@4 bb2@4 ~@3 bb2", G: "bb2 ~ bb2 ~", H: "eb2@12 ~@3 eb2", I: "bb2@4 ~@3 bb2 bb2@4 ~@3 bb2",
  J: "ab2@4 ~@3 ab2 eb2@4 ~@4", K: "eb2 ~ eb2 d2", L: "db2 ~ db2 ~", M: "eb2 ~ eb2 db2", N: "c2 ~ c2 ~", O: "f2 ~ f2!2",
  P: "eb2@12 ~@3 bb2", Q: "eb2@12 eb2@3 eb2", R: "ab2@4 ~@4 ab2@4 ~@3 ab2", S: "bb1@4 bb1@3 bb1 eb2@8", T: "ab2",
  U: "ab2 ~ eb3 ~ ab2 ~ eb3 ~", V: "bb2 ~ f3 ~ bb2 ~ f3 ~", W: "bb2 ~ bb2 ~ eb2 ~ eb2 ~", X: "ab2 ~ ab2 ~ ab2 ~ ab2 ~",
  Y: "ab2 ~ eb2 ~ ab2 ~ eb2 ~", Z: "bb2 ~ f3 ~ bb2 ~ bb2 ~",
  AA: "[eb2@4 eb2@3 f2 g2 bb2 eb3@2 eb3@10 eb3@2 f3 eb3 c3@2 eb2@4]/2",
  AB: "[eb2@3 f2 g2 bb2 eb3@2 eb3@12 ab2@2 ~@2 eb3@2 ~@2 ab2@2 ~@2]/2", AC: "eb3 ~ bb2 ~ f3 ~ bb2 ~",
  AD: "f3 ~ bb2 ~ bb2 ~ eb2 ~", AE: "eb2 ~ ab2 ~ ab2 ~ ab2 ~", AF: "ab2 ~ ab2 ~ eb2 ~ ab2 ~",
  AG: "eb2 ~ bb2 ~ f3 ~ bb2 ~", AH: "bb2@2 ~@2 eb2@4 eb2@3 f2 g2 bb2 eb3@2", AI: "eb3@10 eb3@2 f3 eb3 c3@2",
  AJ: "[eb2@4 eb2@3 f2 g2 bb2 eb3@2 eb3@12 ~@8]/2", AK: "bb2 ~ f2 ~ bb2 ~ bb2 ~", AL: "ab2 ~ eb2 ~ ab2 ~ ab2 ~",
  AM: "~@6 ab2 ~", AN: "eb2@2 eb3 ~@5",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Bb Tuba" · soft notes
const bass_soft = note(`<
  ~@63
  [ab2 ~ ab2 ~ ab2 ~ ab2 ~]
  [bb2 ~ f2 ~ bb2 ~ bb2 ~]
  [ab2 ~ eb2 ~ ab2 ~@3]
  ~@2
  [ab2 ~ ab2 ~ ab2 ~ ab2 ~]
  [bb2 ~ ab2 ~ ab2 ~ ab2 ~]
  ~@21
>`).s("gm_tuba").gain(0.2)

stack(trumpet, trumpet_soft, french_horn, french_horn_soft, bass, bass_soft)

More by Burt Bacharach