Strudelify
KeyA♭ majorTempo80 bpm
0:00/0:00
// bandit — Rickey C Battle jr
// 80 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 7 "Mellophone" french horn (copy of ch 3 "Alto Saxophone" alto sax); ch 8 "Horn in F" french horn (copy of ch 3 "Alto Saxophone" alto sax); ch 9 "Baritone Horn" french horn (copy of ch 4 "Tenor Saxophone" tenor sax)
// note: Transcription provider: pdmx. https://musescore.com/score/5845691; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 29 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · flute · F5
const flute = note(`<
  ~@4
  [~@4 c6!5 bb5!2 ab5 bb5@2 f5@2]!4
  [[c5,f5,f6] ~@3]
  ~@3
  [[c5,f5] ~@3]
  ~@11
  [~@4 c6!5 bb5!2 ab5 bb5@2 f5@2]!4
  [[c5,f5,f6] ~@3]
>`).s("gm_flute").gain(0.5)

// other · flute · soft notes
const flute_soft = note("<[ab4 f4]!2 ~@18 [~@4 c6!5 bb5!2 ab5 bb5@2 f5@2]!4 ~@5>").s("gm_flute").gain(0.2)

// other · clarinet · "B♭ Clarinet" · F5
const clarinet = note(`<
  ~@4
  [~@4 c5!5 bb4!2 ab4 bb4@2 f4@2]!4
  [[f4,c5,f5] ~@3]
  ~@3
  [[f4,c5,f5] ~@3]
  ~@11
  [~@4 c5!5 bb4!2 ab4 bb4@2 f4@2]!4
  [[f4,c5,f5] ~@3]
>`).s("gm_clarinet").gain(0.5)

// other · clarinet · "B♭ Clarinet" · soft notes
const clarinet_soft = note("<[ab4 f4]!2 ~@18 [~@4 c5!5 bb4!2 ab4 bb4@2 f4@2]!4 ~@5>").s("gm_clarinet").gain(0.2)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<~@4 A@2 B C D ~@3 D ~@11 A@2 B C D>".pickRestart({
  A: "ab4 f5", B: "g4 db5", C: "ab4@8 ~ bb4!2 ab4 bb4@2 c5@2", D: "[c5,f5] ~@3",
})).s("gm_alto_sax").gain(0.5)

// other · alto sax · "Alto Saxophone" · soft notes
const alto_sax_soft = note("<[ab4 f4]!2 [g4 ~] ~@17 [ab4 f4]!2 [g4 db5] [ab4@8 ~ bb4!2 ab4 bb4@2 c5@2] ~@5>")
  .s("gm_alto_sax").gain(0.2)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<~@4 A B C D E ~@3 E ~@11 A B C D E>".pickRestart({
  A: "~@4 c4!5 bb3!2 ab3 ~@4", B: "f4@4 ~@5 [bb3,bb4]!2 [ab3,ab4] [bb3,bb4]@2 f4@2", C: "~@9 bb4!2 ab4 bb4@2 f4@2",
  D: "~@4 c4!5 bb3!2 ab3 bb3@2 ~@2", E: "[f4,ab4] ~@3",
})).s("gm_tenor_sax").gain(0.5)

// other · tenor sax · "Tenor Saxophone" · soft notes
const tenor_sax_soft = note("<A B C ~@17 D E F G ~@5>".pickRestart({
  A: "~@4 c4!3 bb3 ~@4 bb3@2 f4@2", B: "~@4 c4!5 bb3!2 ab3 bb3@2 f4@2", C: "~@4 c4!5 bb3!2 ab3 bb3@2 f3@2",
  D: "~@4 c4!5 bb3!2 ab3 ~@4", E: "ab3@8 ~ bb3!2 ab3 bb3@2 f4@2", F: "~@9 bb3!2 ab3 bb3@2 f3@2",
  G: "~@4 c4!5 bb3!2 ab3 bb3@2 ~@2",
})).s("gm_tenor_sax").gain(0.2)

// chords · trombone
const trombone = note("<~@4 A@2 B C D ~@3 D ~@3 E@2 F G ~@4 A@2 H C D>".pickRestart({
  A: "[ab3,c4,f4]", B: "[f3,bb3,db4]", C: "[f3,ab3,db4] ~", D: "[ab3,c4,f4] ~@3",
  E: "~@2 [ab3,c4,f4] ~ [ab3,c4,f4] ~ [ab3,c4,f4] ~ [ab3,c4,f4] ~ [ab3,c4,f4] ~ [ab3,c4,f4] ~ [ab3,c4,f4] ~", // Fm
  F: "[f3,ab3,db4]@3 [g3,bb3,eb4]", G: "[f3,ab3,db4]@3 ~", H: "[bb3,db4,f4]",
})).s("gm_trombone").gain(0.5)

// chords · trombone · soft notes · Fm Db Bbm Fm Bbm Db
const trombone_soft = note(`<
  [[f3,ab3,c4]]!2
  [[f3,ab3,db4]]
  [[f3,bb3,db4] ~@7]
  ~@16
  [[ab3,c4,f4]]!2
  [[f3,bb3,db4]]
  [[f3,ab3,db4] ~]
  ~@5
>`).s("gm_trombone").gain(0.2)

// bass · tuba
const bass = note("<~@3 A B C D E B C D F G H D F ~@7 I B H D J K>".pickRestart({
  A: "~@12 c3 bb2 ab2@2", B: "f2@2 ~ f2@2 ~ f2@2 ~@2 c3@2 ~ c3@2 ~", C: "f2@2 ~ f2@2 ~ f2@2 ~@2 ab2@2 ~ ab2 c3 ~",
  D: "db3@2 ~ db3@2 ~ db3@2 ~@2 db3@2 ~ db3@2 ~", E: "db3@2 ~ db3@2 ~ eb3@2 ~@2 c3@2 ~ c3@2 ~",
  F: "db3@2 ~ db3@2 ~ eb3@2 ~@2 c3@2 ~ c3!2 ~", G: "f3@2 ~ f3@2 ~ f3@2 ~@2 c3@2 ~ c3@2 ~",
  H: "f3@2 ~ f3@2 ~ f3@2 ~@2 ab2@2 ~ ab2 c3 ~", I: "~@12 f3 [db3,eb3] [g2,ab2,bb2,c3] f2",
  J: "db3@2 ~ db3@2 ~ eb3@2 ~@2 c3@2 ~ eb3@2 ~", K: "f3 ~@3",
})).s("gm_tuba").gain(0.5)

// bass · tuba · soft notes
const bass_soft = note("<A@2 B C ~@12 D E F G ~@9>".pickRestart({
  A: "[f1,f2]", B: "[db1,db2]", C: "db3 ~@7", D: "f2@2 ~ f2@2 ~ f2@2 ~@2 c3@2 ~ c3@2 ~",
  E: "f2@2 ~ f2@2 ~ f2@2 ~@2 ab2@2 ~ ab2 c3 ~", F: "db3@2 ~ db3@2 ~ db3@2 ~@2 db3@2 ~ db3@2 ~",
  G: "db3@2 ~ db3@2 ~ eb3@2 ~@2 c3@2 ~ c3!2 ~",
})).s("gm_tuba").gain(0.2)

// drums · kick
const kick = s("bd").struct("<~@3 A B C B@3 C B C B C B C ~@8 B C B@2 D>".pickRestart({
  A: "~@12 x!3 ~", B: "x ~@2 x ~@2 x ~@3 x ~@2 x ~@2", C: "x ~@2 x ~@2 x ~@3 x ~@2 x!2 ~", D: "x",
})).gain(0.5)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  x!4
  ~@12
  [x ~@2 x ~@2 x ~@3 x ~@2 x ~@2]
  [x ~@2 x ~@2 x ~@3 x ~@2 x!2 ~]
  [x ~@2 x ~@2 x ~@3 x ~@2 x ~@2]
  [x ~@2 x ~@2 x ~@3 x ~@2 x!2 ~]
  ~@9
>`).gain(0.2)

stack(
  flute, flute_soft, clarinet, clarinet_soft, alto_sax, alto_sax_soft, tenor_sax, tenor_sax_soft, trombone,
  trombone_soft, bass, bass_soft, kick, kick_soft
)

More by Rickey C Battle jr