Strudelify

Birthday Suit for Flute Choir

Cosmo Sheldrake

KeyE♭ majorTempo188 bpm
0:00/0:00
// Birthday Suit for Flute Choir — Cosmo Sheldrake
// 187.5 bpm, 6/8, key Eb 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/5939999; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(187.5/3)

// 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 · flute
const flute = note(`<
  ~@4 A@2 B ~ C D E@2 F ~@3 A@2 B ~ G@4 H ~@2 I J ~@2 K L@2 M N O@2 F P Q R S@2 T U@5 V@2 ~@2 W@3 ~ W@3 ~@2 X@4 Y@4 ~@5
>`.pickRestart({
  A: "[g5@3 ~@2 g5@23 ~ g5@3]/2", B: "f5@5 eb5@3 ~@8", C: "c6@15 ~", D: "bb5@15 ~", E: "ab5@15 ~", F: "g5@5 ~@11",
  G: "[~@8 c6@5 c6@10 ~ c6@5 bb5@28 ~@2 c6@2 bb5@3]/4", H: "ab5@5 ~@3", I: "f5!2", J: "e5@5 ~@11", K: "~ d6",
  L: "[c6@15 ~]/2", M: "bb5@8 bb5@5 bb5@3", N: "bb5!2", O: "[c6@28 ~ ab5@3]/2", P: "~ g5", Q: "g5 ab5", R: "c6@13 c6@3",
  S: "[c5@5 eb5@25 ~@2]/2", T: "db6", U: "[~@2 db6@17 ~ c6@58 ~@2]/5", V: "[~@3 bb5@6 ~ ab5@3 g5@15 ~@4]/2",
  W: "[~@5 bb5@5 ab5@3 g5@20 ~@15]/3", X: "[~@5 ab5@8 c6@32 ~ c6@9 c6@9]/4", Y: "[c5@53 ~@11]/4",
})).s("gm_flute").gain(0.4)

// other · flute
const flute_2 = note(`<
  ~@8 A B C@2 D ~@7 E@4 F ~@2 G H ~@2 I J@2 K L M@2 N O P@2 Q@2 R S@5 T@2 ~@2 U@3 ~ U@3 ~@2 V@4 W@4 ~@5
>`.pickRestart({
  A: "g5@15 ~", B: "f5@15 ~", C: "eb5@15 ~", D: "d5@5 ~@11", E: "[~@8 f5@5 f5@10 ~ g5@5 eb5@28 ~@2 f5@2 eb5@3]/4",
  F: "db5@5 ~@3", G: "f4!2", H: "c5@5 ~@11", I: "~ bb5", J: "[ab5@15 ~]/2", K: "f5@8 f5@5 f5@3", L: "f5!2",
  M: "[c5@28 ~ ab4@3]/2", N: "g4@5 ~@11", O: "~ c5", P: "[c6@28 ~ c6@3]/2", Q: "[g5@5 eb5@25 ~@2]/2", R: "f5",
  S: "[~@2 f5@17 ~ e5@58 ~@2]/5", T: "[~@3 g5@6 ~ f5@3 eb5@15 ~@4]/2", U: "[~@5 g5@5 f5@3 eb5@20 ~@15]/3",
  V: "[~@5 f5@8 ab5@32 ~ ab5@9 ab5@9]/4", W: "[g5@53 ~@11]/4",
})).s("gm_flute").gain(0.4)

// other · flute · "Alto Flute"
const flute_3 = note(`<
  ~@8 A B C@2 D ~@7 E@4 F G ~ H D ~@2 I J@2 K L M@2 N O P Q R@2 S@6 T@6 U@4 V@7 W@4 ~@5
>`.pickRestart({
  A: "c4@11 db4@2 c4@3", B: "bb3", C: "ab3", D: "g4@5 ~@11", E: "[~@8 ab4@5 ab4@11 bb4@5 g4@29 ~ ab4@2 g4@3]/4",
  F: "f4@5 ~@3 f4@5 eb4 ~@2", G: "f4@5 eb4 ~@2 f4@5 eb4 ~@2", H: "f4!2", I: "~ g5", J: "f5/2", K: "db5@8 db5@5 db5@3",
  L: "db5 db4", M: "[g5@29 f5@3]/2", N: "e4@5 ~@11", O: "~ c5", P: "c5 db5", Q: "eb5@13 eb5@3", R: "[g5@5 c5@27]/2",
  S: "[db5@3 db5@3 c5@10]/6", T: "[~@3 g5@6 ~ f5@3 eb5@21 eb5@3 c6@5 c6@3 g5@5 eb5@19 g5@5 f5@3 eb5@19]/6",
  U: "[~@2 eb5@3 c6@5 c6@3 g5@8 eb5@8 c5@8 g5@5 f5@3 eb5@19]/4",
  V: "[~@2 eb5@3 c6@5 c6@3 g5@8 eb5@8 c5@8 eb5@8 c5@8 db5@8 f5@33 f5@9 f5@9]/7", W: "[e5@7 ~]/4",
})).s("gm_flute").gain(0.4)

// other · flute · "Bass Flute"
const flute_4 = note(`<
  ~@8 A B C@2 D ~@7 E@4 F ~@2 G D ~@2 H I@2 J K L@2 D M N O P@2 Q@6 R@6 S@4 T@7 U@8 ~
>`.pickRestart({
  A: "c4", B: "bb3", C: "ab3", D: "g3@5 ~@11", E: "[~@8 ab3@5 ab3@11 bb3@5 g3@29 ~ ab3@2 g3@3]/4", F: "f3@11 ~@5",
  G: "f3!2", H: "~ g3", I: "f3/2", J: "db4@8 db4@5 db4@3", K: "db4 bb3", L: "[c4@29 ab3@3]/2", M: "~ c4", N: "g4 ab4",
  O: "eb4@13 eb4@3", P: "[f4@5 eb4@27]/2", Q: "[ab4@3 ab4@3 g4@10]/6",
  R: "[~@3 g4@6 ~ f4@3 eb4@21 eb4@3 c5@5 c5@3 g4@5 eb4@19 g4@5 f4@3 eb4@19]/6",
  S: "[~@2 eb4@3 c5@5 c5@3 g4@8 eb4@8 c4@8 g4@5 f4@3 eb4@19]/4",
  T: "[~@2 eb4@3 c5@5 c5@3 g4@8 eb4@8 c4@8 eb4@8 c4@8 db4@8 f4@33 f4@9 f4@9]/7", U: "[e4@56 ~ eb4@71]/8",
})).s("gm_flute").gain(0.4)

// other · flute · "Bass Flute"
const flute_5 = note(`<
  ~@12 A@5 B A@2 C D E F G ~@3 A@4 ~@4 A@4 H ~ E@2 I ~@5 J K L M N K L M N K L M O P Q R S T@8 ~
>`.pickRestart({
  A: "c3@3 ~@5 c4@3 ~@5", B: "c3@3 ~@5 c4@3 bb3@2 c4@3", C: "f3@3 ~@5 f4@3 ~@5", D: "ab4@3 ~@5 f4@3 eb4@2 f4@3",
  E: "eb3@3 ~@5 eb4@3 ~@5", F: "eb3@3 ~@5 eb4@3 db4@2 eb4@3", G: "db3@5 ~@11", H: "db4@5 ~@11", I: "db3@3 ~@5",
  J: "~@13 ab3@3", K: "~@5 ab4@3 ~@5 ab3@3", L: "~@5 ab4@3 ~@5 g3@3", M: "~@5 g4@3 ~@5 g3@3", N: "~@5 g4@3 ~@5 ab3@3",
  O: "~@5 g4@3 ~@5 db3@3", P: "~@5 db4@3 ~@5 db3@3", Q: "~@13 db3@3", R: "~@5 f3@3 ~@6 db4@2", S: "~@7 f4@3 ~@6",
  T: "[c4@56 ~ c4@71]/8",
})).s("gm_flute").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@28 A@4 ~@4 A@4 ~@2 A@2 ~@6 B C@14 D E ~@9>".pickRestart({
  A: "x!2", B: "~@13 x ~@2", C: "~@5 x ~@7 x ~@2", D: "~@5 x ~@8 x ~", E: "~@7 x ~@8",
})).gain(0.3)

// drums · clap
const clap = s("cp").struct("<~@51 A ~ A ~ A ~ A ~ A ~ A ~@14>".pickRestart({
  A: "~@13 x ~@2",
})).gain(0.3)

// drums · claves
const claves = s("clave:2").struct("<~@28 A@4 ~@4 A@4 ~@2 A@2 ~@6 B C@14 D E ~@9>".pickRestart({
  A: "~@3 x ~ x ~@5 x ~ x ~@2", B: "~@15 x", C: "~@2 x ~@4 x ~@2 x ~@4 x", D: "~@2 x ~@5 x ~@2 x ~@4",
  E: "~ x ~@2 x ~@5 x ~@2 x ~@2",
})).gain(1.46)

stack(flute, flute_2, flute_3, flute_4, flute_5, kick, clap, claves)

More by Cosmo Sheldrake