Strudelify
KeyD♭ majorTempo70 bpm
0:00/0:00
// solar eclipse — YoungBoy Never Broke Again
// 70 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "Flute" flute (copy of ch 5 "B♭ Trumpet" trumpet); ch 7 "Horn in F" french horn (copy of ch 3 "Alto Saxophone" alto sax); ch 8 "Mellophone" french horn (copy of ch 3 "Alto Saxophone" alto sax); ch 11 "Baritone Horn" french horn (copy of ch 4 "Tenor Saxophone" tenor sax); ch 12 "Euphonium" tuba (copy of ch 4 "Tenor Saxophone" tenor sax)
// note: Transcription provider: pdmx. https://musescore.com/score/4890095; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 37 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/4)

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

// other · clarinet · "B♭ Clarinet"
const clarinet = note("<A B A C D E F G H I J K L ~@3 L ~@7 L ~@3 M N F G O P J Q L>".pickRestart({
  A: "~@4 bb4 f5 gb4@8 ~ [eb4,f4]", B: "gb4@4 f4@3 bb4", C: "gb4@4 f4@3 [bb4,db5]",
  D: "~@2 db5!3 ~ db5 f5 eb5 db5!2 bb4 ~@3 db5", E: "db5!7 bb4 db5!2 f5 db5 eb5@2 ~@2",
  F: "~@2 db5!5 f5 eb5 db5!2 bb4 ~@2 db5!2", G: "db5!4 db5@2 db5!3 bb4 f5 db5 eb5@2 ~@2",
  H: "~ db5!2 f5 f5@2 eb5 ~ eb5@2 db5@2 ~@4", I: "~ db5!2 eb5 f5!2 eb5!2 db5!3 bb4 f5@2 f5 eb5",
  J: "~ f5 eb5 db5 f5@2 eb5!2 db5@2 db5!2 eb5 db5!2 bb4", K: "~ [db5,f5] eb5 db5 f5@3 [c5,eb5] c5@4 [c5,a5]@2 ~@2",
  L: "[f5,bb5] ~@3", M: "~@2 db5!3 ~ f5 ~ gb5@2 ~@2 gb5@2 ~ [eb5,f5]", N: "gb5 ~ gb5 f5@2 ~ a5 bb5",
  O: "bb5@4 f5@2 eb5 ~ eb5@2 db5@2 db5@2 db5 bb4", P: "~ db5!2 eb5 f5!2 eb5!2 db5!3 bb4 db5@2 db5 bb4",
  Q: "~ [db5,f5] eb5 db5 f5@3 [c5,eb5] eb5@4 [eb5,a5]@2 ~@2", // Db Cm Ebdim
})).s("gm_clarinet").gain(0.5)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<A B A C D E F G H I J K L ~@3 L ~@7 L ~@3 M N F G O P Q R L>".pickRestart({
  A: "~@4 bb4 f5 gb4@8 ~ [eb4,f4]", B: "gb4@4 f4@3 bb4", C: "gb4@4 f4@3 [bb4,db5]",
  D: "~@2 db5!3 ~ db5 f5 eb5 db5!2 bb4 gb5@2 ~ [eb4,f4,eb5,f5]", E: "[gb4,gb5]@8 db5!2 f5 db5 eb5@2 bb4@2",
  F: "~@2 db5!5 f5 eb5 db5!2 bb4 ~@2 db5!2", G: "db5!4 db5@2 db5!3 bb4 f5 db5 eb5@2 ~@2",
  H: "~ db5!2 f5 f5@2 eb5 ~ eb5@2 db5@2 ~@4", I: "~ db5!2 eb5 f5!2 eb5!2 db5!3 bb4 f5@2 f5 eb5",
  J: "~ f5 eb5 db5 f5@2 eb5!2 db5@2 db5!2 eb5 db5!2 bb4",
  K: "~ [db5,f5,db6,f6] [eb5,eb6] [db5,db6] f5@3 [c5,eb5] [c5,f5]@4 [c5,a5]@2 ~@2", L: "[f5,bb5] ~@3",
  M: "bb4@6 db5 f5 eb5 db5!2 bb4 gb5@2 ~ [eb5,f5]", N: "gb5 ~ gb5 f5@2 ~ a5 bb5",
  O: "bb5@4 f5@2 eb5 ~ eb5@2 db5@2 db5@2 db5 bb4", P: "~ db5!2 eb5 f5@3 [eb5,f5] db5!3 bb4 db5@2 db5 bb4",
  Q: "~ f5 eb5 db5 f5@2 eb5 ~ eb5@2 db5@2 ~@4", R: "~ [db5,f5] eb5 db5 f5@3 [c5,eb5] eb5@4 [eb5,a5]@2 ~@2",
})).s("gm_alto_sax").gain(0.5)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<~@3 A B C D E F G H I J ~@3 J ~@7 J ~@3 K L M N O P H Q J>".pickRestart({
  A: "~@7 bb4", B: "~@2 db4!3 ~ f4 ~ gb4@2 ~@2 gb4@4", C: "~@3 gb4 f4@2 a4 bb4",
  D: "~ bb3 db4 f4 ~ bb3 db4 f4 ~ bb3 db4 f4 ~ bb3 db4 f4", E: "db4!4 db4@2 db4 bb3 ~@2 gb4@2 f4@2 bb4@2",
  F: "~ db4!2 f4 f4@2 ~@2 gb4@4 db4@2 db4 bb3", G: "~@4 ab4@3 [eb4,gb4] f4@3 ~ f4@4", H: "~@4 f4@4 ~@2 db4 ~ gb4@4",
  I: "~@4 gb4 f4 ~ eb4 f4@4 a4@2 ~@2", J: "bb4 ~@3", K: "~@2 db4!3 ~ f4 ~ gb4@2 ~@2 gb4@2 ~ [eb5,f5]",
  L: "~ gb4!2 f4 c5 ~ a4 bb4", M: "~@2 f4 ~ bb4 ~ bb4@2", N: "db4!4 db4@2 db4 bb3 ~@2 gb4@2 f4@2 eb4@2",
  O: "bb4@2 ~@2 [db4,gb4]@3 ~", P: "~@4 ab4@3 [eb4,gb4] f4@2 ~@2 f4@4", Q: "~@4 gb4 f4 ~ eb4 eb4@4 a4@2 ~@2",
})).s("gm_tenor_sax").gain(0.5)

// other · tenor sax · "Tenor Saxophone" · soft notes
const tenor_sax_soft = note("<[bb3@3 gb3@4 ~] [ab3@2 ~@2 c4 ~ bb3 db4] [db4@3 ~ gb4@2 ~@2] [gb3@3 ~ f3@2 ~@2] ~@33>")
  .s("gm_tenor_sax").gain(0.3)

// chords · trombone
const trombone = note("<~@3 A B C D C E C D F G ~@3 G ~@3 H I H I G ~@3 J K L M D C D N G>".pickRestart({
  A: "~@6 [a3,c4,eb4] ~ [a3,c4,eb4] ~ [a3,c4,eb4] ~ [bb3,db4,f4]@2 ~@2", B: "[bb3,db4,f4]@3 [gb3,bb3,db4]@4 ~",
  C: "[gb3,bb3,db4]@3 [ab3,c4,eb4]@3 ~ [bb3,db4,f4]", // Gb Ab Bbm
  D: "[bb3,db4,f4]@3 [bb3,db4,f4] ~@2 [gb3,bb3,db4]@4 ~@2 [gb3,bb3,db4]@2 ~@2", // Bbm Gb
  E: "[bb3,db4,f4]@3 [bb3,db4,f4] ~@2 [gb3,bb3,db4]@8 ~@2", F: "[gb3,bb3,db4]@3 [ab3,c4,eb4]@3 ~@2",
  G: "[bb3,db4,f4] ~@3", H: "[bb3,db4,f4]@3 [bb3,db4,f4] ~ [bb3,db4,f4] [gb3,bb3,eb4]@6 [gb3,bb3,eb4]@2 ~@2",
  I: "[gb3,bb3,eb4]@3 [bb3,db4,f4]@3 [a3,c4,eb4] ~", J: "[bb3,db4,f4]@3 ~", K: "[gb3,bb3,db4]@4 [a3,c4,eb4]@3 ~",
  L: "[bb3,db4,f4]@3 [bb3,db4,f4] ~@2 [bb3,db4,f4]@8 ~@2", // Bbm
  M: "~@2 [bb3,db4,gb4] ~ [bb3,db4,gb4] ~ [bb3,db4,gb4] ~ [a3,c4,eb4]@4 [a3,c4,eb4]@2 ~@2", // Gb Adim
  N: "[gb3,bb3,db4]@3 [ab3,c4,eb4]@3 [a3,c4,eb4]@2", // Gb Ab Adim
})).s("gm_trombone").gain(0.5)

// chords · trombone · soft notes · Bbm Gb Ab Bbm Gb
const trombone_soft = note(`<
  [[bb3,db4,f4]@3 [gb3,bb3,db4]@4 ~]
  [[gb3,bb3,db4]@3 [ab3,c4,eb4]@3 ~ [bb3,db4,f4]]
  [[bb3,db4,f4]@3 [gb3,bb3,db4]@4 ~]
  [[gb3,bb3,db4]@3 ~@5]
  ~@33
>`).s("gm_trombone").gain(0.3)

// bass · tuba · "B♭ Tuba"
const bass = note("<A B A C D E D E D E D E F E G H G I J H G I J H G I J H K L M N O P Q R S>".pickRestart({
  A: "bb2@3 eb2@4 ~", B: "eb2@3 f2@3 a2@2", C: "eb2@4 ~@2 a2@2 a2@2 a2@2 [ab3,bb3] [bb2,c3,db3,eb3,f3,gb3] ~@2",
  D: "bb2@2 ~ bb2 ~ f2 eb2@2 ~@2 eb2@2 ~ eb2 ~ bb2", E: "eb2@2 ~ eb2 ~ eb2 f2@2 ~@2 f2@2 a2@2 f2@2",
  F: "bb2@2 ~ bb3@2 bb3 ~ bb3 bb3@2 ~@2 bb2 ab2 gb2 f2", G: "bb2@2 ~ bb2 ~ f2 eb2@2 ~@2 eb3@2 ~ eb3 ~ bb2",
  H: "eb2@2 ~ eb2 ~ eb2 f2@2 ~@2 f2@2 ~@2 f2 [gb2,a2]", I: "eb2@2 ~ eb2 ~ eb2 f2@2 ~@2 f2@2 a2@2 f2 [gb2,a2]",
  J: "bb2@2 ~ bb2 ~ f2 eb2@2 ~@2 eb3@2 ~ eb2 eb3 bb2", K: "bb2 ~@3",
  L: "[gb2,gb3]@2 [gb2,gb3] [f2,f3] [c2,c3]@2 [a2,a3] [bb2,bb3]", M: "~@2 [bb2,bb3] [f2,f3] [bb1,bb2]@2 ~@2",
  N: "~@2 gb3 ~ gb3 ~ f3 ~ c3@2 ~@2 a3@2 ~@2", O: "bb3@2 ~ bb3 ~ f3 eb3@2 ~@2 eb3@2 ~ eb3 ~ bb2",
  P: "eb3@2 ~ eb3 ~ eb3 f3@2 ~@2 f3@2 a3@2 f2 [gb2,a2]", Q: "bb2@2 ~ bb2 ~ f2 eb2@2 ~@2 eb3@2 ~ bb2 eb3 bb2",
  R: "eb3@2 ~ eb3 ~ eb3 f3@2 ~@2 f3@2 ~@2 f3 [gb3,a3]", S: "[bb2,bb3] ~@3",
})).s("gm_tuba").gain(0.5)

stack(clarinet, alto_sax, tenor_sax, tenor_sax_soft, trombone, trombone_soft, bass)