Strudelify

Happy Birthday to You

Robert Zeilinger

KeyF majorTempo90 bpm
0:00/0:00
// Happy Birthday to You — Robert Zeilinger
// 90 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 3/4 at bar 2, 4/4 at bar 8) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/2320461; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 14 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 · trumpet · "Trumpet 1"
const trumpet = note("<A B@2 C D@2 E ~@2 F ~ G@3>".pickRestart({
  A: "~@6 bb4!2", B: "[c5@2 bb4@2 eb5@2 d5@4 bb4!2 c5@2 bb4@2]/2", C: "f5@4 eb5@8 bb4@3 bb4",
  D: "[bb5@3 g5@2 eb5 d5@2]/2", E: "c5 eb5@3", F: "eb5", G: "[~@2 d6, [g5,bb5]]/3",
})).s("gm_trumpet").gain(0.06)

// other · trumpet · "Trumpet 2"
const trumpet_2 = note("<A B@2 C D@2 E ~ F@2 ~ G@3>".pickRestart({
  A: "~@6 bb4!2", B: "[bb4!3 bb4@2 g4 f4@2]/2", C: "a4 bb4@2 bb4", D: "[eb5@3 d5@2 d5 bb4@2]/2", E: "c5 c5@3",
  F: "bb4/2", G: "[bb4,eb5]/3",
})).s("gm_trumpet").gain(0.07)

// other · french horn · "F Horn 1"
const french_horn = note("<A B@2 C D@3 E F G ~ H@3>".pickRestart({
  A: "~@6 eb4!2", B: "[f4@3 f4@2 f4 g4@2]/2", C: "a4@4 bb4@8 bb4 c5 ~ d5", D: "[eb5@3 bb4@2 bb4 c5@3 ab4@3]/3",
  E: "~@2 ab4!2 g4@2 eb4@2", F: "f4@12 f4 g4 ab4 bb4", G: "c5", H: "bb4/3",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "F Horn 2"
const french_horn_2 = note("<A B@2 C D@2 E F G H ~ I@3>".pickRestart({
  A: "~@6 eb4!2", B: "[eb4@3 d4@2 d4 d4@2]/2", C: "d4@2 f4@2 eb4@8 eb4 f4 ~ g4", D: "[bb4@3 g4@2 eb4 f4@2]/2",
  E: "f4 f4@3", F: "~@2 ab4!2 g4@2 eb4@2", G: "f4@12 f4 g4 ab4 g4", H: "f4", I: "g4/3",
})).s("gm_french_horn").gain(0.3)

// other · tuba · "Baritone 2"
const tuba = note("<A B@2 C D@2 E ~ F@2 ~ G@3>".pickRestart({
  A: "~@6 g3!2", B: "[g3@3 g3@2 g3 f3 eb3]/2", C: "d3@4 eb3@8 eb3!2 ~ f3", D: "[bb3@3 g3@2 g3 f3@2]/2", E: "f3 c4@3",
  F: "g3/2", G: "[g3,bb3]/3",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Baritone 3"
const bass = note("<A B@3 C@2 D ~ E@2 ~ F@3>".pickRestart({
  A: "~@6 eb3!2", B: "[f3@12 eb3@12 f3@12 bb2@8 bb2 c3 ~ d3]/3", C: "[eb3@3 g3@2 eb3 d3@2]/2", D: "f3 ab3@3",
  E: "eb3/2", F: "eb3/3",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Contra"
const bass_2 = note("<A B@3 C D E ~ F@2 ~ G@3>".pickRestart({
  A: "~@6 eb2!2", B: "[eb2 [bb1,f2] [bb1,f2] eb2]/3", C: "bb1@6 c2 d2", D: "eb2 f2 g2 f2 d2@4", E: "c2 f2@3",
  F: "eb2/2", G: "[eb2,bb2]/3",
})).s("gm_tuba").gain(0.48)

stack(trumpet, trumpet_2, french_horn, french_horn_2, tuba, bass, bass_2)