Strudelify
KeyE♭ majorTempo112 bpm
0:00/0:00
// Hot — Young Thug
// 112 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "B♭ Clarinet" clarinet (copy of ch 2 "Flute" flute); ch 13 "Euphonium (Treble Clef)" tuba (copy of ch 9 "Trombone" trombone)
// note: Transcription provider: pdmx. https://musescore.com/score/5845879; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 51 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/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 · piccolo
const piccolo = note("<A B A B C D A B A E A B C D A B A E ~@16 A B C D A B A E A B C D A B A E F>".pickRestart({
  A: "g5@12 g5 ~ ab5 ~", B: "bb5 ~ c6 ~ d6@12", C: "g5@12 g5@2 ab5 ~", D: "bb5 ~ c6 ~ ab5@12",
  E: "bb5 ~ c6 ~ ab5@4 d6@8", F: "c6 ~@3",
})).s("gm_piccolo").gain(0.3)

// other · flute
const flute = note("<~@2 A B C B A B C B A B C B A B C B ~@16 A B C B A B C B A B C B A B C B D>".pickRestart({
  A: "g4@13 ~@2 g5", B: "f5@3 eb5 d5@3 c5 bb4@8", C: "g4@8 ~@7 g5", D: "g4 ~@3",
})).s("gm_flute").gain(0.4)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<A B A B A B A C A D A B A B A C A D ~@16 A B A B A C A D A B A B A C A D E>".pickRestart({
  A: "c3@12 c3 ~ d3 ~", B: "eb3 ~ f3 ~ bb2@12", C: "eb3 ~ f3 ~ g3@12", D: "eb3 ~ f3 ~ bb2@4 g3@8", E: "c3 ~@3",
})).s("gm_tenor_sax").gain(0.25).pan(0.4)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note("<A B A B A B A B A B A B A B A B A B ~@16 A B A B A B A B A B A B A B A B C>".pickRestart({
  A: "c3@12 c3 ~ c3 ~", B: "c3 ~ c3 ~ bb2@12", C: "c3 ~@3",
})).s("gm_baritone_sax").gain(0.25)

// chords · trumpet · "B♭ Trumpet"
const trumpet = note("<A B A B A C A B A D A B A C A B A D ~@16 A B A C A B A D A B A C A B A D E>".pickRestart({
  A: "[eb4,g4]@12 [eb4,g4] ~ [f4,ab4] ~", B: "[g4,bb4] ~ [ab4,c5] ~ [bb4,d5]@12",
  C: "[g4,bb4] ~ [ab4,c5] ~ [f4,ab4]@12", D: "[g4,bb4] ~ [ab4,c5] ~ [f4,ab4]@4 [bb4,d5]@8", E: "[c4,eb4,g4] ~@3",
})).s("gm_trumpet").gain(0.25)

// other · french horn · "Mellophone"
const french_horn = note("<A B A C A B A C A D A C A B A C A D ~@16 A C A B A C A D A C A B A C A D E>".pickRestart({
  A: "eb4@12 eb4 ~ f4 ~", B: "eb4 ~ f4 ~ d4@12", C: "eb4 ~ f4 ~ g4@12", D: "eb4 ~ f4 ~ d4@4 g4@8", E: "eb4 ~@3",
})).s("gm_french_horn").gain(0.25)

// chords · trombone
const trombone = note("<A B C D C E C D C E C D C E C D C E ~@16 C D C E C D C E C D C E C D C E F>".pickRestart({
  A: "[c3,g3]@12 [c3,g3] ~ [d3,ab3] ~", B: "[eb3,bb3] ~ [f3,c4] ~ [bb2,d4]@12",
  C: "[c3,eb3,g3]@12 [c3,eb3,g3] ~ [d3,f3,ab3] ~", D: "[eb3,bb3] ~ [f3,c4] ~ [g3,d4]@12",
  E: "[eb3,bb3] ~ [f3,c4] ~ [bb2,d3,d4]@12", F: "[c3,eb3,g3] ~@3",
})).s("gm_trombone").gain(0.25)

// bass · tuba
const bass = note(`<
  ~@2 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C ~@8 A B A C A B A C D
>`.pickRestart({
  A: "c3@2 ~ c3 ~@2 c3@2", B: "~ g2 g3@2 ~ g3 ~ g3", C: "~@2 g2@2 ~ g2 ~ g2", D: "c3 ~@3",
})).s("gm_tuba").gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~ [~@6 x!3 ~@2 x ~ x ~@2] [~ x]!32 ~@8 [~ x]!8 x>").gain(0.48)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@2 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C ~@8 A B A C A B A C ~
>`.pickRestart({
  A: "x!4 ~ x!3", B: "x!3 ~ x ~ x ~@3 x ~ x ~ x ~", C: "x ~ x!5 ~@3 x ~ x ~ x ~",
})).gain(0.48)

// drums · guiro
const guiro = s("guiro:0").struct(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B C
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "~ x!2 ~@2 x ~ x", C: "x",
})).gain(15.21)

stack(piccolo, flute, tenor_sax, baritone_sax, trumpet, french_horn, trombone, bass, high_tom, ride_bell, guiro)