Strudelify
KeyB♭ majorTempo120 bpm
0:00/0:00
// Sonic Boom — Adapted for Marching Band
// 120 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "Bb Trumpet" trumpet (copy of ch 8 "B♭ Clarinet" clarinet); ch 5 "Bb Trumpet" trumpet (copy of ch 9 "Alto Saxophone" alto sax)
// note: Transcription provider: pdmx. https://musescore.com/score/2552351; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 29 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

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

// other · trumpet · "Bb Trumpet"
const trumpet = note("<A B C D E F G H E F G H E F G H E I J K E F G H E I J L M>".pickRestart({
  A: "ab4 bb4", B: "g4!2", C: "g4 f4", D: "f4 e4", E: "f4@16 f4@5 f4@5 ~ f4@5", F: "g4@20 g4@2 g4@3 ~ g4@2 g4@3 ~",
  G: "ab4@16 ab4@5 ab4@5 ~ ab4@5", H: "bb4@8 bb4@2 bb4@2 c5 bb4 ab4@2", I: "eb4@20 eb4@2 eb4@3 ~ eb4@2 eb4@3 ~",
  J: "db4@16 db4@5 db4@5 ~ db4@5", K: "c4@4 ~@4 bb4@2 bb4@2 c5 bb4 ab4@2", L: "c4@8 bb4@2 bb4@2 c5 bb4 ab4@2",
  M: "f4 ~@7",
})).s("gm_trumpet").gain(0.45)

// other · clarinet · "B♭ Clarinet"
const clarinet = note("<A B C D A B C D A E F G A B C D A B C H A B C D A B C D I>".pickRestart({
  A: "f4@16 f4@4 ~ f4@4 ~@2 f4@4 ~", B: "eb4@10 eb4!2 ~ eb4!2 ~", C: "db4@16 db4@4 ~ db4@4 ~@2 db4@4 ~",
  D: "c4@8 bb4@2 bb4@2 c5 bb4 ab4@2", E: "g4@10 g4!2 ~ g4!2 ~", F: "a4@16 a4@4 ~ a4@4 ~@2 a4@4 ~",
  G: "bb4@8 bb4@2 bb4@2 c5 bb4 ab4@2", H: "c4@4 ~@4 bb4@2 bb4@2 c5 bb4 ab4@2", I: "f4 ~@7",
})).s("gm_clarinet").gain(0.64)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<A B C D E F G H I J K L M N M O P Q R S P Q T U V W X Y Z>".pickRestart({
  A: "c5 db5", B: "c5 bb4", C: "bb4 ab4", D: "ab4 g4", E: "f4 c5 db5 c5", F: "eb4 c5 db5 c5", G: "f5 c5 db5 c5",
  H: "db5@4 c5@4 bb4@2 bb4@2 c5 bb4 ab4@2", I: "f4 c5 db5 c5 f4 c5 db5 c5", J: "eb4 c5 db5 c5 f5 c5 db5 c5",
  K: "db4 c5 db5 c5 db4 c5 db5 c5", L: "c4@2 c5@2 db5@2 c5@2 bb4@2 bb4@2 c5 bb4 ab4@2",
  M: "~@2 c5!2 db5 c5!3 ~@2 c5!2 db5 c5!3", N: "~@2 c5!2 db5 c5!3 f5!2 c5 db5@2 c5!3",
  O: "~@2 c5!2 db5 c5!3 bb4@2 bb4@2 c5 bb4 ab4@2", P: "f4 f5 eb5 db5", Q: "c5@4 bb4@4 ab4 bb4 ab4 g4 ab4@2 g4@2",
  R: "f4 [db5,f5] [eb5,g5] [f5,ab5]", S: "[eb5,ab5]@4 ~@4 bb4@2 bb4@2 c5 bb4 ab4@2", T: "f4 c5 bb4 ab4",
  U: "g4@4 f4@4 bb4@2 bb4@2 c5 bb4 ab4@2", V: "[ab4,c5] [ab4,db5]", W: "[g4,c5] [g4,bb4]", X: "[f4,bb4] [g4,bb4]",
  Y: "[f4,ab4] [e4,g4]", Z: "f4 ~@7",
})).s("gm_alto_sax").gain(0.72)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<A B C D E F G H E F G H E F G H E I J K E F G H E I J L M>".pickRestart({
  A: "ab3 bb3", B: "g3!2", C: "g3 f3", D: "f3 e3", E: "f3@16 f3@4 ~ f3@4 ~@2 f3@4 ~", F: "g3@10 g3!2 ~ g3!2 ~",
  G: "ab3@16 ab3@4 ~ ab3@4 ~@2 ab3@4 ~", H: "bb3@8 bb3@2 bb3@2 c4 bb3 ab3@2", I: "eb3@10 eb3!2 ~ eb3!2 ~",
  J: "db3@16 db3@4 ~ db3@4 ~@2 db3@4 ~", K: "c3@4 ~@4 bb3@2 bb3@2 c4 bb3 ab3@2", L: "c3@8 bb3@2 bb3@2 c4 bb3 ab3@2",
  M: "f3 ~@7",
})).s("gm_tenor_sax").gain(0.64)

// bass · tuba
const bass = note("<A B C D A B C D A E F G A B C D H I H I H I H I A B C D J>".pickRestart({
  A: "f2@16 f2@4 ~ f2@4 ~@2 f2@4 ~", B: "eb2@16 eb2@4 ~ eb2@4 ~@2 eb2@4 ~", C: "db2@16 db2@4 ~ db2@4 ~@2 db2@4 ~",
  D: "c2", E: "g2@16 g2@4 ~ g2@4 ~@2 g2@4 ~", F: "ab2@16 ab2@4 ~ ab2@4 ~@2 ab2@4 ~", G: "bb2", H: "bb1 bb2 ab2 g2",
  I: "f2 eb2 db2 c2", J: "c2 ~@7",
})).s("gm_tuba").gain(0.48)

// other · tuba · "Euphonium"
const tuba = note("<A B C D A E F G A B A H A E F G A B C D A E F G A B C D I>".pickRestart({
  A: "f3@16 f3@4 ~ f3@4 ~@2 f3@4 ~", B: "eb3@10 eb3!2 ~ eb3!2 ~", C: "db3@16 db3@4 ~ db3@4 ~@2 db3@4 ~",
  D: "c3@8 bb3@2 bb3@2 c4 bb3 ab3@2", E: "g3@8 g3@2 [eb3,g3]!2 ~ [eb3,g3]!2 ~, eb3@5 ~@3",
  F: "[db3,ab3]@16 [db3,ab3]@4 ~ [db3,ab3]@4 ~@2 [db3,ab3]@4 ~", G: "[c3,bb3]@8 bb3@2 bb3@2 c4 bb3 ab3@2",
  H: "g3@8 bb3@2 bb3@2 c4 bb3 ab3@2", I: "f3 ~@7",
})).s("gm_tuba").gain(0.4)

// chords · tuba · "Euphonium"
const tuba_2 = note("<~@4 A B C D E F G H I J K L M N O P Q R S T U V Q W X>".pickRestart({
  A: "f3 g3 ab3 ~", B: "[eb3,g3] [g3,bb3] [db3,ab3] [eb3,g3]", C: "[db3,f3,ab3] [bb2,f3,ab3] [ab3,c4] [f3,ab3]",
  D: "[c3,f3,bb3] [c3,g3] [g3,bb3] [bb2,f3]", E: "bb2 c3 db3 eb3 f3 eb3 db3 c3", F: "bb2 db3 eb3 f3 ab3 g3 eb3 f3",
  G: "bb2 c3 db3 eb3!2 db3 c3 db3", H: "bb2 c3 db3 eb3 ab3 g3 eb3 f3", I: "f3!8", J: "[eb3,g3]!8", K: "[db3,f3,ab3]!8",
  L: "[c3,f3,bb3]@8 f3@2 f3@2 db3 eb3 f3@2", M: "[bb2,f3,bb3]", N: "[c3,f3,c4]", O: "[eb3,ab3,db4]", P: "[c3,ab3,c4]",
  Q: "[db3,f3,ab3]", R: "[eb3,g3,bb3]", S: "[db3,f3,bb3]", T: "[c3,g3,bb3]", U: "f3", V: "[eb3,g3]",
  W: "[c3,f3,bb3]@8 [c3,f3,bb3]@2 [c3,f3,bb3]@2 [db3,g3,c4] [eb3,g3,bb3] [db3,f3,ab3]@2", X: "[bb2,db3,f3] ~@7",
})).s("gm_tuba").gain(0.72)

// drums · kick
const kick = s("bd").struct("<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 C>".pickRestart({
  A: "x ~@7 x ~@7 x ~@4 x ~@5 x ~@4", B: "x!4", C: "x",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<A@3 B A@3 B C D@2 E F@3 G A H A B A H A B A@3 B I>".pickRestart({
  A: "x!2", B: "x ~@7 x ~ x ~ x!3 ~", C: "x!8", D: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~", E: "x!9 ~ x ~ x!3 ~",
  F: "x!5 ~ x ~ x!5 ~ x ~", G: "x!5 ~ x ~ x ~ x ~ x!3 ~", H: "x ~@7 x ~ x!3 ~ x ~", I: "x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<A@8 B@4 A@6 C A D E F G H@3 A@2>".pickRestart({
  A: "x", B: "x!3 ~ x!3 ~", C: "x!4", D: "x ~ x!2", E: "x!3 ~", F: "~ x!3", G: "x!2 ~@2", H: "x!2",
})).gain(0.48)

stack(trumpet, clarinet, alto_sax, tenor_sax, bass, tuba, tuba_2, kick, rim, crash)