Strudelify

Not About Angels

Birdy

KeyB♭ majorTempo120 bpm
0:00/0:00
// Not About Angels — Birdy
// 120 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/4398886; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 102 bars on a 24-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 · "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 · "B♭ Trumpet"
const trumpet = note(`<
  ~@3 A@3 ~ B@3 ~@2 C D E F@5 G@2 H I J K L@2 ~@3 M N@2 ~ O@5 ~@17 P Q@2 R ~@3 S T ~ U V ~@2 U W@4 X Y@2 Z AA AB@5 AC@4
  ~@3 AD@3 AE AF@2 ~@3
>`.pickRestart({
  A: "[~@5 bb4@7 a4@7 g4@6 f4@7 bb3@6 c4@7 d4@16 ~@11]/3",
  B: "[~@14 bb3@3 bb4@3 ~ a4@6 g4@10 f4@3 bb3@7 c4@6 d4@16 ~@3]/3", C: "~@2 bb4@3 a4@7 g4@10 f4@2",
  D: "~ bb3@7 c4@6 d4@7 eb4 d4 c4", E: "d4@5 ~",
  F: "[~@9 bb3@6 c4@7 d4@6 eb4@3 ~ d4@9 eb4@3 ~ d4@10 eb4@3 d4@10 bb3@3 bb3@29 ~@20]/5",
  G: "[~@7 a4@3 f5@3 a4@3 f5@3 ~ a4@3 f5@3 a4@3 f5@3 ~ bb4@3 g5@3 bb4@3 ~ g5@3 bb4@2]/2",
  H: "~ g5@3 bb4@3 ~ g5@3 bb4@3 g5@3 bb4@3 ~ g5@3", I: "bb4@3 g5@3 ~ bb4@3 g5@3 d5@3 ~@8", J: "~@15 a4@3 ~ f5@3 a4@2",
  K: "~ f5@3 a4@3 ~ f5@3 a4@3 f5@3 bb4@3 ~ g5@3",
  L: "[bb4@3 g5@3 ~ bb4@3 g5@3 bb4@3 g5@3 ~ bb4@3 g5@3 bb4@3 g5@3 ~ bb4@3 g5@3 bb4@3 ~ g5@3 d5@2]/2",
  M: "~@14 bb4@3 bb4@3 ~ c5@3", N: "[d5@3 eb5@3 ~ d5@9 f4@3 ~ f4@13 ~@15]/2",
  O: "[~@23 bb4@3 bb4@3 c5@3 ~ d5@3 eb5@3 d5@39 ~@7 f5@3 f5@16 ~@16]/5", P: "~@3 bb3 f4 g4 f4@2",
  Q: "[f4 g4 f4@2 f4@2 d4@3 c4 bb3@3 c4 d4 eb4]/2", R: "d4 ~", S: "d5 f5 d5 f5 d5 f5 d5 f5", T: "a4 ~@7",
  U: "~@3 [bb4,bb5]!2 [c5,c6] [d5,d6] [eb5,eb6]", V: "[d5,d6]@3 f5 f5@4", W: "[[d5,d6]@12 ~@2 [f5,f6] [f5,f6]@17]/4",
  X: "~@3 bb4 f5 g5 f5@2", Y: "[f5 g5 f5@2 f5@2 d5@3 c5 bb4@3 c5 d5 eb5]/2", Z: "d5", AA: "~@4 f5 g5 f5@2",
  AB: "[f5 g5 f5@2 f5@2 d5@6 f5@3 g5@25]/5", AC: "f5/4",
  AD: "[~@11 bb3@3 f4@4 g4@4 f4@7 f4@3 g4@4 f4@7 f4@7 d4@14 ~@8]/3", AE: "bb3@4 c4@3 d4@4 eb4@3 d4@10",
  AF: "[~@5 c4@7 ~@4 bb3@32]/2",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note(`<
  ~@2 A@2 B C ~ D E@2 ~ F@2 G ~ H B I J K L ~@8 M@2 N O@2 ~ P@5 ~ Q@2 C ~ Q@2 C ~ Q@2 C ~ Q R C ~@6 S@2 T ~@2 U V ~@2 U
  W@4 X Y@2 Z AA AB@5 AC@4 ~@12
>`.pickRestart({
  A: "[~@20 g4@3 bb4@3 g4@3 bb4@3 ~ g4@3 bb4@3 g4@3 ~ bb4@3 g4@2]/2", B: "~ bb4@3 g4@3 ~ bb4@3 g4@3 bb4@3 g4@3 ~ bb4@3",
  C: "f4 ~@7", D: "~@4 g4@3 ~ bb4@3 g4@3 bb4@3 g4@3 ~ bb4@3",
  E: "[g4@3 bb4@3 ~ g4@3 bb4@3 g4@3 bb4@3 ~ g4@3 bb4@3 g4@3 bb4@3 ~ f4@3 ~@12]/2",
  F: "[~@13 g4@3 bb4@3 ~ g4@3 bb4@3 g4@3 bb4@3 ~ g4@3 bb4@3 g4@3 ~ bb4@3 g4@2]/2",
  G: "~ bb4@3 g4@3 ~ bb4@3 g4@3 bb4@3 f4@3 ~@4", H: "~@11 g4", I: "a4 ~@7",
  J: "~@2 f4@3 bb4@3 ~ f4@3 bb4@3 f4@3 ~ bb4@3 f4@2", K: "~ bb4@3 f4@3 ~ bb4@3 f4@3 bb4@3 f4@3 ~ bb4@3",
  L: "f4@3 bb4@3 ~ a4@3 ~@14",
  M: "[a4@3 f4@3 ~ a4@3 f4@3 a4@3 f4@3 ~ a4@3 f4@3 a4@3 f4@3 ~ a4@3 f4@3 a4@3 ~ f4@3 a4@2]/2",
  N: "~ f4@3 bb4@3 ~@7 bb3@3 bb3@3 ~ c4@3", O: "[d4@3 eb4@3 ~ d4@9 f3@3 ~ f3@13 ~@15]/2",
  P: "[~@23 bb3@3 bb3@3 c4@3 ~ d4@3 eb4@3 d4@39 ~@7 f3@3 f3@16 ~@16]/5", Q: "g4 bb4 g4 bb4 g4 bb4 g4 bb4",
  R: "a4 c5 a4 c5 a4 c5 a4 c5", S: "bb4 g4 bb4 g4 bb4 g4 bb4 g4", T: "d5 ~@7", U: "~@3 bb3!2 c4 d4 eb4",
  V: "d4@3 f4 f4@4", W: "[d4@12 ~@2 [d4,f4] [d4,f4]@17]/4", X: "~@3 bb3 f4 g4 f4@2",
  Y: "[f4 g4 f4@2 f4@2 d4@3 c4 bb3@3 c4 d4 eb4]/2", Z: "d4", AA: "~@4 f4 g4 f4@2",
  AB: "[f4 g4 f4@2 f4@2 d4@6 f4@3 g4@25]/5", AC: "f4/4",
})).s("gm_trumpet").gain(0.25)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft = note("<~@57 A B@2 C ~@41>".pickRestart({
  A: "~@3 bb3 d4 eb4 d4@2", B: "[d4 eb4 d4@2 d4@2 bb3@3 a3 f3@3 g3 bb3 c4]/2", C: "bb3 ~",
})).s("gm_trumpet").gain(0.15)

// other · french horn · "Mellophone"
const french_horn = note(`<
  A ~ B@3 C ~ D E F ~ G H I ~ J@2 K L ~ M@3 N@2 O P@3 Q ~ R S@2 ~ T@5 ~@12 U ~@4 V W@2 V X Y@2 Z AA ~ W@2 AB@2 W AB@4
  ~@3 AC@3 AD AE@3 AF@4 ~@6 AG AH@5
>`.pickRestart({
  A: "~@15 d4@7 ~@2", B: "[~@20 d4@7 ~@19 eb4@7 ~@19]/3", C: "d4@7 ~@17", D: "~@4 d4@7 ~@13", E: "~@7 eb4@7 ~@10",
  F: "~@9 d4@7 ~@8", G: "~@13 d4@7 ~@4", H: "~@15 eb4@7 ~@2", I: "~@17 d4@7", J: "[~@22 eb4@7 ~@19]/2", K: "f4@7 ~@17",
  L: "~@2 d4@7 ~@15", M: "[~@16 bb3@3 ~ f4@3 g4@3 f4@7 f4@3 g4@3 f4@7 f4@6 d4@10 c4@3 bb3@7]/3",
  N: "[bb3@3 c4@3 ~ d4@3 eb4@3 d4@26 ~@9]/2", O: "~@4 f4@3 ~ g4@3 f4@6 f4@3 ~ g4@3",
  P: "[f4@7 f4@6 d4@20 bb3@3 c4@3 d4@3 ~ eb4@3 d4@13 d4@3 eb4@2 ~ c4@3 ~ d4@3, ~@32 d4 ~@3]/3", Q: "c4@5 a3@5 ~@2",
  R: "~@14 bb3@3 bb3@3 ~ c4@3", S: "[d4@3 eb4@3 ~ d4@9 f4@3 ~ f4@13 ~@15]/2",
  T: "[~@23 bb3@3 bb3@3 c4@3 ~ d4@3 eb4@3 d4@39 ~@7 f4@3 f4@16 ~@16]/5", U: "~ g4@2 f4 eb4 d4@3", V: "f4", W: "g4",
  X: "~@4 f4 g4 f4@2", Y: "[f4 g4 f4@2 f4@2 d4@6 bb3 c4 d4 eb4]/2", Z: "d4@12 d4@3 eb4 d4 ~ c4@3 d4@3",
  AA: "c4@3 a3@3 ~@2", AB: "f4/2", AC: "[~@2 f5@3 d5@6 ~]/3", AD: "~ bb4 d5 eb5", AE: "[d5,f5]/3", AF: "[c5,f5]/4",
  AG: "d4@4 eb4@3 f4@4 g4@3 f4@10", AH: "[~@5 eb4@7 ~@4 d4@90 ~@14]/5",
})).s("gm_french_horn").gain(0.48)

// other · french horn · "Mellophone"
const french_horn_2 = note(`<
  ~@20 A@3 B@2 C D@3 E ~ F G@2 ~ H@5 ~@12 I ~@4 J@2 K J L M@2 N O ~ J K P@2 J Q@2 R@2 ~@3 S@3 ~ T U@2 V@4 ~@6 W X@5
>`.pickRestart({
  A: "[~@16 bb3@3 ~ f4@3 g4@3 f4@7 f4@3 g4@3 f4@7 f4@6 d4@10 c4@3 bb3@7]/3", B: "[bb3@3 c4@3 ~ d4@3 eb4@3 d4@26 ~@9]/2",
  C: "~@4 f4@3 ~ g4@3 f4@6 f4@3 ~ g4@3",
  D: "[f4@7 f4@6 d4@20 bb3@3 c4@3 d4@3 ~ eb4@3 d4@13 d4@3 eb4@2 ~ c4@3 ~ d4@3, ~@32 d4 ~@3]/3", E: "c4@5 a3@5 ~@2",
  F: "~@14 bb3@3 bb3@3 ~ c4@3", G: "[d4@3 eb4@3 ~ d4@9 f3@3 ~ f3@13 ~@15]/2",
  H: "[~@23 bb3@3 bb3@3 c4@3 ~ d4@3 eb4@3 d4@39 ~@7 f3@3 f3@16 ~@16]/5", I: "~ eb4@2 d4 c4 bb3@3", J: "d4", K: "eb4",
  L: "~@4 d4 eb4 d4@2", M: "[d4 eb4 d4@2 d4@2 bb3@6 f3 g3 bb3 c4]/2", N: "bb3@12 bb3@3 c4 bb3 ~ a3@3 bb3@3",
  O: "a3@3 f3@3 ~@2", P: "d4/2", Q: "eb4/2", R: "c4/2", S: "[~@2 d5@3 d5@6 ~]/3", T: "~ bb4", U: "g4/2", V: "a4/4",
  W: "bb3@4 c4@3 d4@4 eb4@3 d4@10", X: "[~@5 c4@7 ~@4 bb3@90 ~@14]/5",
})).s("gm_french_horn").gain(0.48)

// bass · tuba · "Baritone Horn"
const bass = note(`<
  ~@38 A@3 B@3 ~ C@3 ~ D@3 E F@3 ~ G H@3 G H@3 I@2 J@2 K@2 J K@2 L@2 M N O P H Q ~@2 R@2 S@4 ~@12
>`.pickRestart({
  A: "[~@20 f3@26 f3@13 f3@13]/3", B: "[~@3 bb3@2 a3@2 g3@2 f3@2 bb2@2 c3@2 d3@9]/3",
  C: "[~@2 bb2@2 bb3 a3@2 g3@3 f3 bb2@2 c3@2 d3@9]/3",
  D: "[~@9 bb2@3 bb3@3 a3@6 g3@9 f3@3 bb2@6 c3@6 d3@6 eb3 d3 c3 d3@18]/3", E: "~@6 bb2 c3",
  F: "[d3@2 eb3 d3@3 eb3 d3@3 eb3 d3@2 bb2@2 bb2@9]/3", G: "a3", H: "bb3", I: "f3", J: "g3", K: "f3/2", L: "eb3/2",
  M: "~ bb3@3", N: "~ c4@3", O: "d4 c4", P: "d4 a3", Q: "c4@3 ~", R: "bb3/2", S: "c4/4",
})).s("gm_tuba").gain(0.45)

// bass · tuba · "Baritone Horn" · soft notes
const bass_soft = note("<~@20 A@4 B@5 C@2 D@8 ~@54 E@3 ~ F@5>".pickRestart({
  A: "[~@7 f3@26 g3@26 g3@26 f3@11]/4", B: "[~@2 f3@13 f3@26 g3@26 ~ g3@26 f3@13 f3@13]/5", C: "f3/2",
  D: "[~@4 g3@52 ~ f3@52 g3@79 ~@4]/8", E: "[eb3@29 f3@36 ~@7]/3", F: "[~@19 [f3,bb3]@86 ~@15]/5",
})).s("gm_tuba").gain(0.2)

// bass · tuba · "Baritone Horn"
const bass_2 = note(`<
  ~@31 A B C@8 D E F G D E F G D E H I J K L@2 M N O N M N O N P N@2 Q R@2 N S@2 T@2 U V W X Y Z ~@2 S@2 AA@4 ~@3 AB@3 ~
  AC@5
>`.pickRestart({
  A: "~ g3@5", B: "~@7 eb3@17", C: "[~@9 d3@52 g3@26 eb3@52 ~ d3@26 d3@13 d3@13]/8", D: "[bb2,g3]", E: "[bb2,eb3]",
  F: "bb2", G: "bb2 [a2,bb2]", H: "[bb2,d3]", I: "[d3,f3] [c3,f3]", J: "[eb3,g3]", K: "[f3,a3]", L: "f3/2", M: "a2 d3",
  N: "d3", O: "bb2 eb3", P: "c3 d3", Q: "eb3@7 eb3", R: "d3/2", S: "eb3/2", T: "[c3@15 bb2]/2", U: "~ eb3@3",
  V: "~ f3@3", W: "g3 f3", X: "g3 d3", Y: "eb3", Z: "f3@3 ~", AA: "f3/4", AB: "[bb2@29 c3@36 ~@7]/3",
  AC: "[~@19 d3@86 ~@15]/5",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Baritone Horn" · soft notes
const bass_soft_2 = note("<~@20 A@4 B@5 C@3 ~@70>".pickRestart({
  A: "[~@7 d3@26 g3@26 eb3@26 bb2@11]/4", B: "[~@2 f3@13 d3@26 g3@26 ~ eb3@26 bb2@13 f3@13]/5", C: "[d3@13 ~@5]/3",
})).s("gm_tuba").gain(0.2)

// bass · tuba · "Euphonium"
const bass_3 = note(`<
  ~@31 A@2 B@8 C D C E C D C E C F C G F H I@2 J F@3 J F@3 J@2 F@2 K@2 F L@2 M@2 N O E P F Q ~@2 L@2 R@4 ~@3 S@3 ~ T@5
>`.pickRestart({
  A: "[~ bb2@11]/2", B: "[~@9 a2@52 bb2@79 bb2@26 bb2@13 a2@10 d3@3]/8", C: "d3", D: "bb2 eb3", E: "d3 c3", F: "bb2",
  G: "bb2 [a2,bb2]", H: "c3", I: "[d3@15 a2]/2", J: "a2", K: "a2/2", L: "bb2/2", M: "[a2@15 bb2]/2", N: "~ bb2@7",
  O: "~ c3@7", P: "d3 a2", Q: "c3@3 ~", R: "c3/4", S: "[g2@29 a2@36 ~@7]/3", T: "[~@19 bb2@86 ~@15]/5",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Euphonium" · soft notes
const bass_soft_3 = note("<~@20 A@4 B@5 C@3 ~@70>".pickRestart({
  A: "[~@7 a2@26 bb2@26 bb2@26 d3@11]/4", B: "[~@2 d3@13 a2@26 bb2@26 ~ bb2@26 d3@13 d3@13]/5", C: "[a2@13 ~@5]/3",
})).s("gm_tuba").gain(0.2)

// bass · tuba
const bass_4 = note(`<
  ~@31 A B C@8 D E F G D E F G D E F G E H I@2 J D E K J D E K J@2 D L M@2 D N@2 O@2 E H P Q E R ~@2 N@2 S@4 ~@3 T@3 ~@3
  U@3
>`.pickRestart({
  A: "~ g2@5", B: "~@7 eb2@17", C: "[~@9 d2@52 g2@26 eb2@52 ~ [bb1,f2]@26 [bb1,d2]@13 [a1,c2]@10 d2@3]/8", D: "g2",
  E: "eb2", F: "[bb1,bb2]", G: "[bb1,bb2] [a1,a2]", H: "f2", I: "[[bb1,bb2]@15 [a1,a2]]/2", J: "d2", K: "bb1",
  L: "eb2@7 eb2", M: "d2/2", N: "eb2/2", O: "[f2@15 bb1]/2", P: "g2 f2", Q: "g2 d2", R: "f2@3 ~", S: "f2/4",
  T: "[eb2@29 f2@36 ~@7]/3", U: "[bb1@29 ~@7]/3",
})).s("gm_tuba").gain(0.3)

// bass · tuba · soft notes
const bass_soft_4 = note("<~@20 A@4 B@5 C@3 ~@70>".pickRestart({
  A: "[~@7 d2@26 g2@26 eb2@26 bb1@11]/4", B: "[~@2 f2@13 d2@26 g2@26 ~ eb2@26 bb1@13 f2@13]/5", C: "[d2@13 ~@5]/3",
})).s("gm_tuba").gain(0.2)

stack(
  trumpet, trumpet_2, trumpet_soft, french_horn, french_horn_2, bass, bass_soft, bass_2, bass_soft_2, bass_3,
  bass_soft_3, bass_4, bass_soft_4
)