Strudelify

Happy Birthday to You

Misc Traditional

KeyE majorTempo210 bpm
0:00/0:00
// Happy Birthday to You — Misc Traditional
// 210 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 47) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 11 "Trumpet 3" named as a brass, played on trumpet (its acoustic bass patch is not one); ch 15 "Trombone 1" named as a brass, played on trombone (its slap bass 2 patch is not one)
// note: duplicate parts dropped: ch 8 "Trumpet 2" trumpet (copy of ch 6 trumpet)
// note: Transcription provider: pdmx. https://musescore.com/score/5911124; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 53 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(210/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 · trombone · "Alto Sax 1"
const trombone = note("<~@15 A B C@2 D E@2 F G H I J K L M N O P Q R S T U V W X Y@5 ~ Z@2 AA@4>".pickRestart({
  A: "~ d#4 e4 f#4 g4 g#4 a4 a#4", B: "d2 ~@3 b4 g4 a4 b4, ~@2 d2@3 d2@3",
  C: "[d2@3 e5 ~ d5 d2 ~ f2 ~ f2@3 f4 g4 a4, ~@3 d2@3 ~ a4@6 f2@3]/2", D: "f2@3 ~ f#4 g4 [f2,a4] a#4, ~@3 f2@3 ~@2",
  E: "[d2 ~@2 b4@2 a#4 a4 ~ g#2@8, b4@3 ~@4 g#4@9, ~@2 d2@3 d2@3 ~@8]/2", F: "~@6 d4@2 e4@2 g4 ~@3 d4@2",
  G: "e4 ~@3 d4 ~@3 g4 ~@3 g4 ~@3", H: "g4 f#4 ~@5 c4", I: "d4 ~@3 d4 ~@3 f#4 ~@3 d4 ~@3", J: "d4 f#4 ~@5 c4",
  K: "c#4 ~@3 d4 ~@3 f#4 ~@3 e4 ~@3", L: "d4@2 g4@2 ~@6 g4@2 a4 ~@3", M: "b4@2 a4 b4 ~@4", N: "g4!2 a4 a#4",
  O: "b4 ~ g4@2", P: "f#4 e4", Q: "~ [a#2,g#4]", R: "[a2,g4]", S: "[b2,a4]", T: "[c3,b4]", U: "[d3,c5]", V: "[a2,d5]",
  W: "[b2,e5]", X: "[c3,f#5]", Y: "[[d3,c5]@7 [f2,b4]@16 [f2,c5]@17]/5", Z: "[~@6 [d2,a4]@3 ~@3 [d2,a4]@3 ~]/2",
  AA: "[~ [d3,d5]@14 ~]/4", // D
})).s("gm_trombone").gain(0.3)

// other · tenor sax · "Tenor Sax 1"
const tenor_sax = note("<~@15 A B C@2 D E@2 F G H I J K L M N O P Q R S T U R S T V@5 ~ W@2 X@4>".pickRestart({
  A: "~ d#3 e3 f#3 g3 g#3 a3 a#3", B: "b3@5 g3 a3 b3", C: "[~@3 d4 ~ d4 ~ a3@6 f3 g3 a3]/2", D: "~@4 f#3 g3 a3 a#3",
  E: "[b3@3 b3@2 a#3 a3 g#3@9]/2", F: "~@6 d3@2 e3@2 g3 ~@3 d3@2", G: "e3 ~@3 d3 ~@3 g3 ~@3 e3 ~@3", H: "e3 d3 ~@5 c3",
  I: "c#3 ~@3 d3 ~@3 f#3 ~@3 d3 ~@3", J: "d3 f#3 ~@5 c3", K: "c#3 ~@3 d3 ~@3 f#3 ~@3 e3 ~@3",
  L: "d3@2 g3@2 ~@6 g3@2 a3 ~@3", M: "b3@2 a3 g3 ~@4", N: "d3!2 e3 f#3", O: "g3 ~ d3@2", P: "d#3 e3", Q: "~ g#3",
  R: "g3", S: "a3", T: "b3", U: "c4", V: "[c4@7 b3@16 a3@17]/5", W: "[~@6 g#3@3 ~@3 g#3@3 ~]/2", X: "[~ b4@14 ~]/4",
})).s("gm_tenor_sax").gain(0.3)

// other · baritone sax · "Bari Sax"
const baritone_sax = note(`<
  ~@8 A B A C A B D ~ E F G H E I J K L M N M O P Q R S T U V W X U V W Y@5 ~ Z@2 AA@4
>`.pickRestart({
  A: "e2@3 ~@3 g2@6 e2@4", B: "a2@3 ~@3 b2@6 d2@4", C: "a2@4 a#2@2 b2@2 ~@2 f#2 g2@5", D: "e2@2 g2@2 a#2 b2 d2 e2",
  E: "d2 ~ d2@3 d2@3", F: "d2@3 d2@3 d2 ~", G: "f2 ~ f2@3 f2@3", H: "f2@3 f2@3 f2 ~", I: "g#2",
  J: "~@6 a#3@2 b3@2 b3 ~@3 a#3@2", K: "b3 ~@3 b3 ~@3 b3 ~@3 b3 ~@3", L: "b3 a3 ~@5 g3",
  M: "a3 ~@3 a3 ~@3 a3 ~@3 a3 ~@3", N: "a3!2 ~@5 a3", O: "g3@2 g3@2 ~@6 g3@2 a3 ~@3", P: "b3@2 a3 b3 ~@4",
  Q: "d3 ~ d3 ~", R: "b2 ~ d2@2", S: "d#2 e2", T: "~ a#2", U: "a2", V: "b2", W: "c3", X: "d3",
  Y: "[d3@7 f2@16 f2@17]/5", Z: "[~@6 d2@3 ~@3 d2@3 ~]/2", AA: "[~ d3@14 ~]/4",
})).s("gm_baritone_sax").gain(0.25)

// other · trumpet
const trumpet = note("<~@16 A B@2 C D@2 E F G H I J K L M N O P Q@3 P R@3 S@5 ~ T@2 U@4>".pickRestart({
  A: "d6@5 b5 c6 d6", B: "[~@3 e6 ~ d6 ~ d6@6 b5 c6 d6]/2", C: "~@4 b5 a5 b5 c6", D: "[d6@3 d6@2 c#6 c6 b5@9]/2",
  E: "~@6 a#4@2 b4@2 e5 ~@3 a4@2", F: "a#4 ~@3 b4 ~@3 e5 ~@3 b4 ~@3", G: "b4 d5 ~@5 g#4",
  H: "a4 ~@3 b4 ~@3 d5 ~@3 g#4 ~@3", I: "a4 d5 ~@5 g#4", J: "a4 ~@3 b4 ~@3 d5 ~@3 c5 ~@3",
  K: "b4@2 g5@2 ~@6 d5@2 e5 ~@3", L: "g5@2 e5 g5 ~@4", M: "g5!2 a5 a#5", N: "b5 ~ g5@2", O: "f#5 e5", P: "~ c6",
  Q: "[b5 g5@5]/3", R: "[b5 g5@4 ~]/3", S: "[a5@7 g5@16 a5@17]/5", T: "[~@6 d5@3 ~@3 d5@3 ~]/2", U: "[~ d6@14 ~]/4",
})).s("gm_trumpet").gain(0.3)

// other · muted trumpet
const muted_trumpet = note("<~@13 A@2 ~@38>".pickRestart({
  A: "[~@2 e5 ~ g5 a5 ~ a#5@2 b5 a#5 g5 e5 a#4 d#5 e5]/2",
})).s("gm_muted_trumpet").gain(0.4)

// chords · trumpet · "Trumpet 3"
const trumpet_2 = note("<~@16 A B@2 C D@2 E F G H I J K L M N O P Q@3 R S@3 T@5 ~ U@2 V@4>".pickRestart({
  A: "d2 ~ d2@3 b4 c5 d5, d5@5 d2@3", B: "[d2@3 e5 ~ d5 d2 ~ f2 ~ f2@3 b4 c5 d5, ~@3 d2@3 ~ d5@6 f2@3]/2",
  C: "f2@3 ~ b4 a4 [f2,b4] c5, ~@3 f2@3 ~@2", D: "[d2 ~@2 d5@2 c#5 c5 ~ g#2@8, d5@3 ~@4 b4@9, ~@2 d2@3 d2@3 ~@8]/2",
  E: "g1@4 ~@2 a#3@2 b3@2 e4 ~@3 a3@2, ~ b1 c2 c#2", F: "d2 c2 b1 c2, a#3 ~@3 b3 ~@3 e4 ~@3 b3 ~@3",
  G: "b3 d4 f2@2 f#2@2 ~ g#3, d2 ~@2 g2", H: "a2 g2 f#2 e2, a3 ~@3 b3 ~@3 d4 ~@3 g#3 ~@3",
  I: "a3 d4 a1@2 d2@2 ~ g#3, d2 ~@2 e2", J: "f#2 e2 d2 c2, a3 ~@3 b3 ~@3 d4 ~@3 c4 ~@3",
  K: "b3 g4 b1@2 ~ d4 g2@2, g1@4 ~@4 d2@4 e4 ~@3", L: "[g2,g4]@2 e4 g4 b2@2 g2@2, ~ a2 ~@2",
  M: "[d3,g4] g4 [d3,a4] a#4", N: "[b2,b4] ~ [d2,g4]@2", O: "[d#2,f#4] [e2,e4]", P: "~ [a#2,c5]",
  Q: "[a2 e2 c2 a2 b2 f#2 b2!2 c3 g2 c2 c3, b4 g4@5]/3", R: "b2 g2 d2 a#2, ~ c5",
  S: "[a2 e2 c2 a2 b2 f#2 b2!2 c3 g2 c3!2, b4 g4@4 ~]/3",
  T: "[d3@2 d3@2 d3@2 d3 f2@3 f2@2 f2@2 f2@2 f2@2 f2@2 c2@2 g2 f2@2 f2 f2@2 f2@2 f2@2 f2@8, a4@7 g4@16 a4@17]/5",
  U: "[~@6 [d2,c#5]@3 ~@3 [d2,c#5]@3 ~]/2", V: "[~ [d2,d6]@14 ~]/4",
})).s("gm_trumpet").gain(0.3)

// other · trombone · "Trombone 1"
const trombone_2 = note("<~@10 A B@2 ~@3 C D@2 E F@2 ~@8 G H I ~@2 J K@2 L M N O@5 ~ P@2 Q@4>".pickRestart({
  A: "e4 g4 a#4 b4 c5 a#4 b4 a#4", B: "[c5 a#4 b4 a#4 e4 b3@11]/2", C: "b3@5 g3 a3 b3",
  D: "[~@3 e4 ~ d4 ~ a3@6 f3 g3 a3]/2", E: "~@4 f#3 g3 a3 a#3", F: "[b3@3 b3@2 a#3 a3 g#3@9]/2", G: "d4!2 e4 f#4",
  H: "g4 ~ d4@2", I: "d#4 e4", J: "~ c5", K: "[b4 g4@2 ~]/2", L: "e3", M: "f#3", N: "g3", O: "[f#3@7 g3@16 a3@17]/5",
  P: "[~@6 g#3@3 ~@3 g#3@3 ~]/2", Q: "[~ d4@14 ~]/4",
})).s("gm_trombone").gain(0.4)

// other · trombone · "Trombone 2"
const trombone_3 = note("<~@16 A B@2 C D@2 ~@8 E F G H I J K L I J K M@5 ~ N@2 O@4>".pickRestart({
  A: "g3@5 e3 f#3 g3", B: "[~@3 b3 ~ b3 ~ f3@6 d3 e3 f3]/2", C: "~@4 d3 e3 f3 f#3", D: "[g3@3 g3@2 e3 f3 f#3@9]/2",
  E: "g3!2 a3 a#3", F: "b3 ~ d3@2", G: "d#3 e3", H: "~ g#3", I: "g3", J: "a3", K: "b3", L: "c4",
  M: "[c4@7 b3@16 c4@17]/5", N: "[~@6 d4@3 ~@3 d4@3 ~]/2", O: "[~ d4@14 ~]/4",
})).s("gm_trombone").gain(0.4)

// other · piano
const piano = note("<~@21 A B C@2 D E F G ~@24>".pickRestart({
  A: "~@2 d4!2", B: "d#4 e4@5 d4@5 ~@5", C: "[d#4 e4@5 d4@4 f#4 g4@3 f#4 g4@7 f#4@9 ~]/2", D: "~@3 d4 ~ d4 ~ d4",
  E: "d#4 e4@5 d4@5 ~@3 d4 d#4", F: "e4@2 d4@2 e4@2 g4@2 a#4 b4@3 c5@2 a#4@2", G: "b4@2 g4@13 ~",
})).s("gm_piano").gain(0.4)

// drums · kick
const kick = s("bd").struct("<A@15 ~ A@14 ~@4 A@12 ~ B C D ~@3>".pickRestart({
  A: "x!4", B: "~@3 x", C: "~ x", D: "~ x ~@2",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@15 A ~@15 B ~ C ~@13 B ~@5>".pickRestart({
  A: "x ~@7 x!2 ~ x!3 ~ x", B: "x", C: "x!2 ~@14",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct(`<
  A B A C D B A B A B A B A B A ~ A B A B A C ~@12 A B A B A B A B A B A ~ E ~@6
>`.pickRestart({
  A: "x ~ x ~ x!4", B: "x!4 ~ x!3", C: "x ~ x ~ x ~ x ~ x!2 ~ x!3 ~ x", D: "~ x!7",
  E: "x!2 ~ x!2 ~ x ~ x!2 ~ x!2 ~ x ~",
})).gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x]!22 [~@2 x!2 ~@2 x!2]!8 ~@4 [~ x ~ x]!12 ~@7>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 [~@3 x ~@4] ~@22 [x!2 ~ x!2 ~@3 x!2 ~ x!2 ~@3] ~@22>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@22 [~ x] [x!2]!7 ~@23>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<A ~@3 A ~@11 A ~@3 A ~ A ~@8 B C B ~@7 D ~ D ~ E ~ F B G ~@3>".pickRestart({
  A: "x", B: "~ x", C: "x!2", D: "~@7 x", E: "x!4", F: "~@3 x", G: "~ x ~@2",
})).gain(0.35)

stack(
  trombone, tenor_sax, baritone_sax, trumpet, muted_trumpet, trumpet_2, trombone_2, trombone_3, piano, kick, snare,
  low_tom, hihat, mid_tom, open_hat, crash
)

More by Misc Traditional