Strudelify

Don't Call Me Angel

Lydia Esh

KeyE♭ majorTempo103 bpm
0:00/0:00
// Don't Call Me Angel — Lydia Esh
// 103 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 23, 4/4 at bar 23) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5824953; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · "B♭ Trumpet 2"
const trumpet = note(`<
  A B@8 C@2 D E F G D H I J@3 K L@2 M@6 N ~@4 M@3 ~ O P Q R M@7 N@3 S T U V@2 W@2 X T U Y@2 ~ M@7 N M@4
>`.pickRestart({
  A: "~@8 eb4@2 eb4@2 eb4 d4 c4 d4", B: "eb4@2 eb4@2 f4@2 ~@2 eb4@2 eb4@2 eb4 d4 c4 d4",
  C: "[eb4@2 eb4@2 f4@2 ~@2 c4@16 eb4 ~ eb4 ~@3 eb4 ~]/2", D: "eb4 ~ eb4 ~@3 eb4 ~ c4 ~ c4 ~@3 c4 ~",
  E: "c4 ~ c4 ~@3 c4 ~ c4 ~ c4 ~@3 c4 ~", F: "c4 ~ c4 ~@3 c4 ~ c4 ~ c4 ~@3 eb4 f4",
  G: "g4@2 c4@4 c4@2 eb4 ~ eb4 ~@3 eb4 ~", H: "c4 ~ c4 ~@3 c4 ~ eb4 ~ eb4 ~@3 eb4 ~",
  I: "eb4 ~ eb4 ~@3 eb4 ~ eb4 ~ eb4 ~@3 eb4 ~", J: "[eb4 ~ eb4 ~ c4@2 ~@2 eb4@16 eb4@2 d4@10 d4@4 c4@6 c4@2]/3",
  K: "c4!4 d4@2 d4!2", L: "[d4@2 d4@2 d4@2 d4@2 d4@2 eb4@4 eb4@4 eb4@2 eb4 d4 c4 d4 eb4@2 eb4@2 f4@2 ~@2]/2",
  M: "eb4@2 eb4@2 eb4 d4 c4 d4 eb4@2 eb4@2 f4@2 ~@2", N: "c4", O: "eb4!2 ~ eb4@5", P: "c4!2 ~ c4@5", Q: "d4!2 ~ d4@5",
  R: "eb4@2 eb4@2 eb4!4", S: "d4", T: "d4@5 d4!3", U: "eb5 d5 c5 d5 eb5 d5 c5 d5",
  V: "[eb5@2 d5 eb5 d5 eb5 c5 d5@3 eb5@2 c5@4]/2", W: "ab3/2", X: "bb3",
  Y: "[eb5@2 d5 eb5 d5 eb5 c5 d5@3 eb5@2 c5@2 ~@2]/2",
})).s("gm_trumpet").gain(0.2)

// other · trombone
const trombone = note(`<
  A B@2 C D C E@2 F G H I J K L I M N O P Q R S T U B U V W X Y Z AA@2 AB Z AC@2 AB AD AE@2 AF B U B U V W X AG AH@2 AI
  AJ AK AL@2 AM AN AO AJ AK AP@2 AQ AR AS AT AU AV W AW AX AW AY AW AY
>`.pickRestart({
  A: "~@8 eb3 ~ eb3 ~ eb3 ~ eb3 ~", B: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~",
  C: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ c3 ~ c3 ~ c3 ~ c3 ~", D: "c3 ~ c3 ~ c3 ~ c3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~",
  E: "[c3 ~ c3 ~ c3 ~ c3 ~ c3@4 g3@2 f3@4 eb3@4 d3@2 bb2@8]/2", F: "~@10 c3!2 c3@2 c3@2", G: "g3!4 g3@2 c3@2 d3@6 g3@2",
  H: "g3 eb3 f3 c3 ~ c3 g3 f3", I: "f3@2 f3@2 f3 eb3@2 f3!2 c3 c3@2 g3@2 f3@2",
  J: "f3@2 f3@2 f3 eb3 f3 eb3 f3 c3@2 ~@5", K: "~ bb3@2 c4 f3@3 ~", L: "~@5 c3 g3 f3",
  M: "f3@2 f3 eb3 f3 eb3 f3@2 f3 c3 ~@4 eb3 f3", N: "g3@2 f3@2 f3@4 f3@2 ~@4 c3 d3", O: "eb3@2 c3@4 c3@2 ~@2 eb3!6",
  P: "eb3@2 d3@6 ~@4 eb3!4", Q: "eb3!2 eb3@2 d3@4 ~@4 eb3!4", R: "eb3!2 eb3@2 d3@4 d3@2 eb3@2 d3@2 bb2@2",
  S: "bb2 bb2@2 d3@2 c3@2 eb3", T: "~@2 eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~",
  U: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", V: "c3@2 g3 f3@2 eb3@2 d3", W: "bb2 ~",
  X: "~@2 c3!2 c3@2 c3@2 g3!4 g3@2 c3@2", Y: "g3@3 g3!2 eb3 f3 c3", Z: "eb3!2 ~ c3@5", AA: "eb3!2 ~ eb3@5", AB: "c3 ~",
  AC: "[eb3@2 eb3@2 ~@2 eb3@6 ~@3 d3@3 d3@2 c3@4 eb3@8]/2", AD: "~@8 c3 c3@2 c3 g3@2 c3@2",
  AE: "d3@8 c3 c3@2 c3 g3@2 c3@2", AF: "d3@4 eb3 d3 c3 g2 d3@4 eb3@4", AG: "d3@3 g3!2 eb3 f3 c3", AH: "ab2", AI: "bb2",
  AJ: "b2@5 d3!3", AK: "eb3 d3 c3 d3 eb3 d3 c3 d3", AL: "[eb3@2 d3 eb3 d3 eb3 c3 d3@3 eb3@2 c3@4]/2", AM: "eb3!8",
  AN: "eb3!3 bb3!2 f3!3", AO: "f3!8", AP: "[eb3@4 d3@2 eb3@2 d3@2 eb3@2 c3@2 d3@6 eb3@4 eb3!3 ~ eb3!3 ~]/2",
  AQ: "eb3!3 ~ eb3!3 ~ c3@2 c3@2 c3@2 c3@2", AR: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ c4 ~",
  AS: "g3@8 g3 ~ g3 ~ ab3 ~ ab3 ~", AT: "g3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ c4 ~",
  AU: "g3 ~ g3 ~ g3 ab3 g3 f3 g3 ~ g3 ~ ab3 ~ ab3 ~", AV: "g3 ~ c3@2 g3@2 f3@4 eb3@4 d3@2",
  AW: "~@2 c4!2 c4@2 c4@2 ~@8", AX: "c4!2 c4@2 c4@2 g3@2 g3@2 eb3@2 f3@2 c3@2", AY: "~@3 g3!2 eb3 f3 c3",
})).s("gm_trombone").gain(0.2)

// bass · tuba
const bass = note(`<
  A B@2 C D C E@5 F G H I F J K L@3 M N O P B P Q R S T U V@2 W U V@2 W V X Y Z B P B P Q R S T AA AB AC AD AE AF@2 AA
  AB AC AD AE AG@2 AH B P B P Q R S T B P B P
>`.pickRestart({
  A: "~@8 c3 ~ c3 ~ c3 ~ c3 ~", B: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~",
  C: "c3 ~ c3 ~ c3 ~ c3 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", D: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ c3 ~ c3 ~ c3 ~ c3 ~",
  E: "[ab2 ~ ab2 ~ ab2 ~ ab2 ~ c3@16 bb2@16 ab2@16 f2@16 c3 ~ c3 ~@3 c3 ~]/5",
  F: "c3 ~ c3 ~@3 c3 ~ ab2 ~ ab2 ~@3 ab2 ~", G: "ab2 ~ ab2 ~@3 ab2 ~ ab2 ~ ab2 ~@3 ab2 ~",
  H: "ab2 ~ ab2 ~@3 ab2 ~ ab2 ~ ab2 ~@3 eb2 f2", I: "g2@2 c2@4 c2@2 c3 ~ c3 ~@3 c3 ~",
  J: "ab2 ~ ab2 ~@3 ab2 ~ c3 ~ c3 ~@3 c3 ~", K: "c3 ~ c3 ~@3 c3 ~ c3 ~ c3 ~@3 c3 ~",
  L: "[c3 ~ c3 ~@5 c3@16 c3@2 bb2@10 bb2@4 ab2@6 ab2@2]/3", M: "ab2!4 bb2@2 bb2!2", N: "bb2!5 c3@2 c3",
  O: "~@2 c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", P: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", Q: "c3", R: "bb2",
  S: "ab2", T: "f2", U: "c3!2 ~ ab2@5", V: "c3!2 ~ c3@5", W: "ab2 ~", X: "ab2!2 ~ ab2@5", Y: "bb2!2 ~ bb2@5",
  Z: "c3@2 c3@2 c3!4", AA: "c3!8", AB: "c3!5 bb2!3", AC: "bb2!8", AD: "bb2!5 b2!3", AE: "b2!8",
  AF: "[c3@2 d3 eb3 d3 c3 d3 d3@3 eb3@2 c3@4]/2", AG: "[c3@4 d3@2 eb3@2 d3@2 c3@2 d3@2 d3@6 eb2@4 eb2!3 ~ eb2!3 ~]/2",
  AH: "eb2!3 ~ eb2!3 ~@9",
})).s("gm_tuba").gain(0.2)

stack(trumpet, trombone, bass)