Strudelify

If I Can't Have You

Christopher Bill

KeyE♭ majorTempo125 bpm
0:00/0:00
// If I Can't Have You — Christopher Bill
// 125 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 11 "Mellophone" french horn (copy of ch 6 "Mellophone" french horn)
// note: Transcription provider: pdmx. https://musescore.com/score/5878680; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  A B C B C B ~@26 A B C B C B D E ~@8 F G F H I G D E ~@8 A B C B C B D E J K ~@4 D E L M L M L M ~ N A B C B C B ~@2
>`.pickRestart({
  A: "eb5 ~@3 eb5@4 eb5 ~ c5 ~ eb5@4", B: "eb5 ~@3 eb5 c5@3 eb5 ~ f5 ~ g5@4", C: "f5 c5 ~@2 eb5@4 eb5 ~ c5 ~ eb5@4",
  D: "bb5 c6 g5 bb5 f5 g5 eb5 f5", E: "bb4@2 bb4@2 eb5@3 ~", F: "bb5@4 ~ eb5!3", G: "bb5@3 ab5@2 g5@3 f5@3 eb5@2 eb5@3",
  H: "bb5@3 ab5@2 g5@3 f5@3 eb5@2 eb5 [e5,f5,gb5,g5] [ab5,a5,bb5]", I: "c6@2 bb5 g5@2 ~ eb5!2, b5 ~@15", J: "eb5",
  K: "d5 eb5", L: "eb5@5 ~ eb5@2", M: "eb5 ~@3 eb5@4 eb5 ~ f5 ~ g5@4", N: "bb5@4 eb6@3 ~",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note(`<
  A B C B C B ~@26 A B C B C B ~@2 D E F G D E F H I J I J K J L M A B C B C B ~@2 A B C B C B ~@2 N O P@2 ~@4 Q R Q R Q
  R ~@2 A B C B C B ~@2
>`.pickRestart({
  A: "eb4 ~@3 eb4@4 eb4 ~ c4 ~ eb4@4", B: "eb4 ~@3 eb4 c4@3 eb4 ~ f4 ~ g4@4", C: "f4 c4 ~@2 eb4@4 eb4 ~ c4 ~ eb4@4",
  D: "~ eb5!2 f5 g5 f5 eb5 c5", E: "f5@4 f5@4 bb4 ~@3 eb5@2 c5@2", F: "f5@4 f5@4 bb4 ~ bb4 ~ eb5@2 c5@2",
  G: "f5@4 f5@4 bb4 ~@3 eb5@4", H: "f5@4 f5@4 bb4 ~@3 eb5@2 ~@2", I: "bb4@4 ~ eb4!3",
  J: "bb4@3 ab4@2 g4@3 f4@3 eb4@2 eb4@3", K: "c5@2 bb4 g4@2 ~ eb4!2", L: "bb4 c5 g4 bb4 f4 g4 eb4 f4",
  M: "bb3@2 bb3@2 eb4@3 ~", N: "ab4", O: "f4 ab4", P: "g4 bb4 g4 f4!2 eb4@3", Q: "bb4@5 ~ bb4@2",
  R: "bb4 ~@3 bb4@4 bb4 ~ c5 ~ eb5@4",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "Mellophone"
const french_horn = note(`<
  A@6 B C D E D E D E D F G H G I J H K L A@6 B C A@6 B C D E D E D E D F G H G I J H K L A@6 B C A@6 B C M@2 ~ N O P
  ~@10 A@6 ~@2
>`.pickRestart({
  A: "c4 ~@9 bb3@6", B: "c4 bb3", C: "c4@7 ~", D: "bb3", E: "ab3 bb3", F: "ab3@4 bb3@3 ~", G: "bb4@4 ~ eb4!3",
  H: "bb4@3 ab4@2 g4@3 f4@3 eb4@2 eb4@3", I: "bb4@3 ab4@2 g4@3 f4@3 eb4@2 eb4 [e4,f4,gb4,g4] [ab4,a4,bb4]",
  J: "c5@2 bb4 g4@2 ~ eb4!2, b4 ~@15", K: "bb4 c5 g4 bb4 f4 g4 eb4 f4", L: "bb3@2 bb3@2 eb4@3 ~",
  M: "eb4 ~ g4@2 f4@4 eb4 ~ g4@2 f4@4", N: "~@12 f4 g4 ab4 bb4", O: "c5", P: "bb4 c5",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Baritone Horn"
const french_horn_2 = note(`<
  A B A B A B C D E F G H E F G I J K J K L K M N A B A B A B C D A B A B A B C D O P Q R O P Q R J K J K L K M N A B A
  B A B C D A B A B A B C D ~@16 A B A B A B ~@2
>`.pickRestart({
  A: "c4 ~@9 bb3@6", B: "ab3 ~@9 bb3@6", C: "c4 bb3", D: "ab3@7 ~", E: "~ eb3!2 f3 g3 f3 eb3 c3",
  F: "f3@4 f3@4 bb2 ~@3 eb3@2 c3@2", G: "f3@4 f3@4 bb2 ~ bb2 ~ eb3@2 c3@2", H: "f3@4 f3@4 bb2 ~@3 eb3@4",
  I: "f3@4 f3@4 bb2 ~@3 eb3@2 ~@2", J: "bb3@4 ~ eb3!3", K: "bb3@3 ab3@2 g3@3 f3@3 eb3@2 eb3@3",
  L: "c4@2 bb3 g3@2 ~ eb3!2", M: "bb3 c4 g3 bb3 f3 g3 eb3 f3", N: "bb2@2 bb2@2 eb3@3 ~", O: "eb4", P: "bb3 d4", Q: "c4",
  R: "c4 d4",
})).s("gm_french_horn").gain(0.4)

// other · french horn · "Baritone Horn" · soft notes
const french_horn_soft = note("<~@72 A B C D A B A E ~@16>".pickRestart({
  A: "c4", B: "bb3 c4", C: "ab3", D: "g3 ab3", E: "c4@3 c4@4 ~",
})).s("gm_french_horn").gain(0.2)

// other · french horn · "Baritone Horn"
const french_horn_3 = note(`<
  A B A B A B C D E F G H E F G I J K J K J K ~@2 A B A B A B C D A B A B A B C D E F G H E F G I L M L M N M O P A B A
  B A B C D A B A B A B C D ~@24
>`.pickRestart({
  A: "ab3 ~@9 g3@6", B: "f3 ~@9 g3@6", C: "ab3 g3", D: "f3@7 ~", E: "c4", F: "bb3 g3", G: "ab3", H: "ab3 bb3",
  I: "ab3@4 bb3@3 ~", J: "d4", K: "c4 ab3", L: "bb3@4 ~ eb3!3", M: "bb3@3 ab3@2 g3@3 f3@3 eb3@2 eb3@3",
  N: "c4@2 bb3 g3@2 ~ eb3!2", O: "bb3 c4 g3 bb3 f3 g3 eb3 f3", P: "bb2@2 bb2@2 eb3@3 ~",
})).s("gm_french_horn").gain(0.4)

// other · french horn · "Baritone Horn" · soft notes
const french_horn_soft_2 = note("<~@72 A B C D A B C E ~@8 F G F G F G ~@2>".pickRestart({
  A: "c4", B: "bb3 c4", C: "ab3", D: "g3 ab3", E: "ab3@3 ab3@4 ~", F: "ab3 ~@9 g3@6", G: "f3 ~@9 g3@6",
})).s("gm_french_horn").gain(0.2)

// bass · tuba
const bass = note(`<
  A B A B A B C D E F G H E F G I J K J K J K ~@2 A B A B A B C D A B A B A B C D L M N O L M N O J K J K J K ~@2 A B A
  B A B C D A B A B A B C D ~@22 P Q
>`.pickRestart({
  A: "ab2 ~@9 g2@6", B: "f2 ~@9 g2@6", C: "ab2 g2", D: "f2@7 ~", E: "ab2", F: "g2 eb2", G: "f2", H: "f2 g2",
  I: "f2@4 g2@3 ~", J: "bb2", K: "ab2 f2", L: "g2 ~ g2 ~ g2 ~ g2 ~", M: "f2 ~ f2 ~ c2 ~ c2 ~",
  N: "eb2 ~ eb2 ~ eb2 ~ eb2 ~", O: "eb2 ~ eb2 ~ f2 ~ f2 ~", P: "bb2@2 c3@2 g2 ~ bb2 ~ f2@2 g2@2 eb2 ~ f2 ~",
  Q: "bb1!2 [eb1,eb2,eb3]@2", // Eb
})).s("gm_tuba").gain(0.4)

// bass · tuba · soft notes
const bass_soft = note("<~@72 A B C D A B A E ~@8 F G F G F G ~@2>".pickRestart({
  A: "c3", B: "bb2 c3", C: "ab2", D: "g2 ab2", E: "c3@3 c3@4 ~", F: "ab2 ~@9 g2@6", G: "f2 ~@9 g2@6",
})).s("gm_tuba").gain(0.2)

stack(
  trumpet, trumpet_2, french_horn, french_horn_2, french_horn_soft, french_horn_3, french_horn_soft_2, bass, bass_soft
)