Strudelify

Feathers Across the Seasons

Alyssa Wynn

KeyB♭ majorTempo120 bpm
0:00/0:00
// Feathers Across the Seasons — Alyssa Wynn
// 120 bpm, 3/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 3/4 at bar 2) are rendered on a constant 3/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 4 "Alto Saxophone" alto sax (copy of ch 3 "B♭ Clarinet" clarinet); ch 15 "Tuba" tuba (copy of ch 13 "Trombone" trombone)
// note: Transcription provider: pdmx. https://musescore.com/score/3917551; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 41 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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("<~@8 A B C B C B D E F G H I J@2 K L M N O N O N P Q R G H I S T U V W>".pickRestart({
  A: "~@11 c5@5", B: "g5@10 ~ f5@2 g5@3", C: "bb5@10 ~ c5@5", D: "bb5@10 ~ f5@2 eb5@3", E: "d5@10 ~ d5@2 eb5@3",
  F: "bb4@10 ~ bb4@2 bb4@3", G: "c5@8 bb4@3 c5@2 d5@3", H: "eb5@5 f5@5 ~ g5@5", I: "c5@10 ~ bb4@5",
  J: "c5@10 ~ f5@2 g5@3", K: "c5@8 c5@3 f5@2 eb5@3", L: "eb5@8 d5@3 d5@2 eb5@3", M: "d5@10 ~ c5@5",
  N: "eb5@10 ~ d5@2 eb5@3", O: "g5@10 ~ c5@5", P: "bb5@5 eb6@5 ~ d6@2 bb5@3", Q: "g5@10 ~ d5@2 eb5@3",
  R: "eb5@10 ~ bb4@2 bb4@3", S: "c5@8 c5@3 bb4@2 c5@3", T: "eb5@5 ~@3 c5@3 c5@2 eb5@3", U: "f5@5 eb5@5 ~ f5@2 g5@3",
  V: "c6@10 ~ bb5@5", W: "c6@5 ~@3",
})).s("gm_flute").gain(0.4)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A B C D E F G H@2 I J I J I K L M N E O P@2 Q R S I J I J I T I U V W X Y Z AA X AB
>`.pickRestart({
  A: "~@11 g4@2 bb4@3", B: "c5@5 g4@5 ~ f4@5", C: "g4@11 c4@5", D: "eb4", E: "eb4@5 f4@5 ~ g4@5", F: "f4@11 c4@2 eb4@3",
  G: "f4@11 c4@5", H: "[g4@27 c4@5]/2", I: "g4@11 f4@2 g4@3", J: "bb4@11 c4@5", K: "bb4@11 f4@2 eb4@3",
  L: "d4@11 d4@2 eb4@3", M: "bb3@11 bb3@2 bb3@3", N: "c4@8 bb3@3 c4@2 d4@3", O: "c4@11 bb3@5", P: "c4@11 f4@2 g4@3",
  Q: "c4@8 c4@3 f4@2 eb4@3", R: "eb4@8 d4@3 d4@2 eb4@3", S: "d4@11 c4@5", T: "bb4@5 eb5@5 ~ d5@2 bb4@3",
  U: "g4@11 d4@2 d4@3", V: "eb4@8 d4@3 eb4@2 f4@3", W: "g4@5 bb4@5 ~ c5@5", X: "g4@11 f4@5", Y: "g4@8 eb4@3 d4@2 eb4@3",
  Z: "g4@5 ~@3 eb4@3 eb4@2 g4@3", AA: "ab4@5 g4@5 ~ d4@2 eb4@3", AB: "g4@11 ~@5",
})).s("gm_clarinet").gain(0.4)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<~@9 A@2 B@2 C@2 ~@2 C D A@4 E D F G H I J@2 H K L M N O P Q R S>".pickRestart({
  A: "c3@5 g3@3 ~@8", B: "bb2@5 g3@3 ~@8", C: "ab2@5 g3@3 ~@8", D: "bb2@5 bb3@3 ~@8", E: "ab2@5 eb3@3 ~@8",
  F: "c3@3 g3@2 c4@3 g3@3 c3@2 bb2@3", G: "c3@3 g3@2 c4@3 g3@3 c3@5", H: "bb2@3 f3@2 bb3@3 f3@3 bb2@2 ab2@3",
  I: "bb2@3 f3@2 bb3@3 f3@3 bb2@5", J: "ab2@3 eb3@2 ab3@3 eb3@3 ab2@5", K: "f3@11 ~@5", L: "c3@3 g3@2 c4@5 ~ bb2@5",
  M: "c3@3 g3@2 eb4@5 ~ ab3@5", N: "g3@3 f3@2 eb3@3 d3@3 c3@2 bb2@3", O: "c3@8 g3@3 f3@2 d3@3",
  P: "eb3@5 ~@3 c3@3 d3@2 eb3@3", Q: "d3@3 c3@2 bb2@3 ab2@3 d3@2 eb3@3", R: "g3@5 eb4@3 d4@3 c4@2 bb3@3",
  S: "c4@11 ~@5",
})).s("gm_tenor_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone" · soft notes
const tenor_sax_soft = note("<~ A B C D E F G H ~@32>".pickRestart({
  A: "eb3", B: "d3@11 g3@5", C: "c3", D: "c3@11 ~@5", E: "f3", F: "f3@11 ~@5", G: "g3@3 a3@2 bb3@3 g3@3 a3@2 bb3@3",
  H: "d4@11 ~@5",
})).s("gm_tenor_sax").gain(0.2)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note("<~@7 A B C@2 D@2 E@2 F@2 E G C@4 H G I J K L M@2 K N O P Q R S T U V>".pickRestart({
  A: "g2@3 a2@2 bb2@3 g2@3 a2@2 bb2@3", B: "d3@11 ~@5", C: "c3@5 g3@3 ~@8", D: "bb2@5 g3@3 ~@8", E: "ab2@5 g3@3 ~@8",
  F: "g2@5 g3@3 ~@8", G: "bb2@5 bb3@3 ~@8", H: "ab2@5 eb3@3 ~@8", I: "c3@3 g3@2 c4@3 g3@3 c3@2 bb2@3",
  J: "c3@3 g3@2 c4@3 g3@3 c3@5", K: "bb2@3 f3@2 bb3@3 f3@3 bb2@2 ab2@3", L: "bb2@3 f3@2 bb3@3 f3@3 bb2@5",
  M: "ab2@3 eb3@2 ab3@3 eb3@3 ab2@5", N: "f3@11 ~@5", O: "c3@3 g3@2 c4@5 ~ bb2@5", P: "c3@3 g3@2 eb4@5 ~ ab3@5",
  Q: "g3@3 f3@2 eb3@3 d3@3 c3@2 bb2@3", R: "c3@8 g3@3 f3@2 d3@3", S: "eb3@5 ~@3 c3@3 d3@2 eb3@3",
  T: "d3@3 c3@2 bb2@3 ab2@3 d3@2 eb3@3", U: "g3@5 eb3@3 d3@3 c3@2 bb2@3", V: "c3@11 ~@5",
})).s("gm_baritone_sax").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet = note("<~@17 A B C D A E C F ~@7 G H I J K L M J N>".pickRestart({
  A: "c4", B: "d4", C: "eb4", D: "eb4@11 ~@5", E: "eb4@5 d4@5 ~ c4@5", F: "d4@3 c4@2 bb3@3 c4@3 d4@5",
  G: "~@11 bb4@2 bb4@3", H: "c5@8 bb4@3 c5@2 d5@3", I: "eb5@5 f5@5 ~ g5@5", J: "c5@11 bb4@5", K: "c5@8 c5@3 bb4@2 c5@3",
  L: "eb5@5 ~@3 c5@3 c5@2 eb5@3", M: "f4@5 eb4@5 ~ f4@2 g4@3", N: "c5@11 ~@5",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft = note("<~ A B C D E F G H ~@32>".pickRestart({
  A: "eb4", B: "d4@11 g3@5", C: "c4", D: "c4@11 ~@5", E: "f4", F: "f4@11 ~@5", G: "g3@3 a3@2 bb3@3 g4@3 a4@2 bb4@3",
  H: "d5@11 ~@5",
})).s("gm_trumpet").gain(0.2)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note("<~@17 A B C D A E C B ~@7 F G H I J K L I M>".pickRestart({
  A: "c4", B: "d4", C: "eb4", D: "eb4@11 ~@5", E: "eb4@5 d4@5 ~ c4@5", F: "~@11 d4@2 d4@3", G: "eb4@8 d4@3 eb4@2 f4@3",
  H: "g4@5 bb4@5 ~ c5@5", I: "g4@11 f4@5", J: "g4@8 eb4@3 d4@2 eb4@3", K: "g4@5 ~@3 eb4@3 eb4@2 g4@3",
  L: "ab4@5 g4@5 ~ d4@2 eb4@3", M: "g4@11 ~@5",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft_2 = note("<~ A B C D E F G H ~@32>".pickRestart({
  A: "eb4", B: "d4@11 g3@5", C: "c4", D: "c4@11 ~@5", E: "f4", F: "f4@11 ~@5", G: "g3@3 a3@2 bb3@3 g4@3 a4@2 bb4@3",
  H: "d5@11 ~@5",
})).s("gm_trumpet").gain(0.2)

// other · french horn · "Horn in F"
const french_horn = note("<~@6 A B C ~@8 D E F G D H I J ~@7 K L M N O P Q N R>".pickRestart({
  A: "ab3", B: "~@5 bb3@3 d4@3 eb4@5", C: "d4@11 ~@5", D: "c4", E: "d4", F: "eb4@11 d4@5", G: "eb4@11 ~@5",
  H: "eb4@5 d4@5 ~ c4@5", I: "eb4", J: "d4@3 c4@2 bb3@3 c4@3 d4@5", K: "~@11 d4@2 d4@3", L: "eb4@8 d4@3 eb4@2 f4@3",
  M: "g4@5 c4@5 ~ d4@5", N: "g4@11 f4@5", O: "g4@8 eb4@3 d4@2 eb4@3", P: "g4@5 ~@3 eb4@3 eb4@2 g4@3",
  Q: "ab4@5 g4@5 ~ d4@2 eb4@3", R: "g4@11 ~@5",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Horn in F" · soft notes
const french_horn_soft = note("<~ eb4 [d4@11 g3@5] c4 [c4@11 ~@5] f4 ~@35>").s("gm_french_horn").gain(0.2)

// other · trombone
const trombone = note("<~ A B C D B E F@2 G@2 H@2 I@2 J@2 I K G@4 L K M@2 N O P@2 Q R S T U V W X Y Z>".pickRestart({
  A: "~@5 c3@5 ~ g2@5", B: "bb2", C: "c3", D: "g2@3 bb2@2 c3@5 ~ d3@2 eb3@3", E: "ab2", F: "[d3@27 ~@5]/2",
  G: "c3@5 g3@3 ~@8", H: "bb2@5 g3@3 ~@8", I: "ab2@5 g3@3 ~@8", J: "g2@5 g3@3 ~@8", K: "bb2@5 bb3@3 ~@8",
  L: "ab2@5 eb3@3 ~@8", M: "c3@3 c3@3 ~@2 c3@3 c3@5", N: "d3@3 d3@3 ~@2 d3@3 d3@5", O: "d3@3 d3@3 ~@2 d3@3 f3@2 d3@3",
  P: "eb3@3 eb3@3 ~@2 eb3@3 eb3@5", Q: "f3@3 f3@3 ~@2 f3@3 f3@2 eb3@3", R: "d3@11 ~@5", S: "c3@3 g3@2 c3@5 ~ bb2@5",
  T: "c3@3 g3@2 c3@5 ~ ab3@5", U: "g3@3 f3@2 eb3@3 d3@3 c3@2 bb2@3", V: "c3@8 g3@3 f3@2 d3@3",
  W: "eb3@5 ~@3 c3@3 d3@2 eb3@3", X: "d3@3 c3@2 bb2@3 ab2@3 d3@2 eb3@3", Y: "g3@5 eb3@3 d3@3 c3@2 bb2@3",
  Z: "c3@11 ~@5",
})).s("gm_trombone").gain(0.25)

// bass · tuba · "Euphonium"
const bass = note("<~ A B C D B E F@2 ~@16 G@2 H I J@2 K L M N O P Q R S T>".pickRestart({
  A: "~@5 c3@5 ~ g2@5", B: "bb2", C: "c3", D: "g2@3 bb2@2 c3@5 ~ d3@2 eb3@3", E: "ab2", F: "[d3@27 ~@5]/2",
  G: "c3@3 c3@3 ~@2 c3@3 c3@5", H: "d3@3 d3@3 ~@2 d3@3 d3@5", I: "d3@3 d3@3 ~@2 d3@3 f3@2 d3@3",
  J: "eb3@3 eb3@3 ~@2 eb3@3 eb3@5", K: "f3@3 f3@3 ~@2 f3@3 f3@2 eb3@3", L: "d3@11 ~@5", M: "c3@3 g3@2 c3@5 ~ bb2@5",
  N: "c3@3 g3@2 c3@5 ~ ab3@5", O: "g3@3 f3@2 eb3@3 d3@3 c3@2 bb2@3", P: "c3@8 g3@3 f3@2 d3@3",
  Q: "eb3@5 ~@3 c3@3 d3@2 eb3@3", R: "d3@3 c3@2 bb2@3 ab2@3 d3@2 eb3@3", S: "g3@5 eb3@3 d3@3 c3@2 bb2@3",
  T: "c3@11 ~@5",
})).s("gm_tuba").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~ A ~ A ~ A ~ A ~@33>".pickRestart({
  A: "x",
})).gain(0.4)

stack(
  flute, clarinet, tenor_sax, tenor_sax_soft, baritone_sax, trumpet, trumpet_soft, trumpet_2, trumpet_soft_2,
  french_horn, french_horn_soft, trombone, bass, kick
)