Strudelify

The Box

AyoJay

KeyD♭ majorTempo120 bpm
0:00/0:00
// The Box — AyoJay
// 120 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5949940; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 50 bars on a 16-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 · [...]/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 · piccolo
const piccolo = note(`<
  A B@4 C@2 D E F G H@2 I ~ I J K L K L K M K N O ~@3 O ~@3 B@4 C@2 D E K M K M K M K P Q
>`.pickRestart({
  A: "~@6 f6 ab6", B: "bb6/2", C: "[~ f7@3]/2", D: "eb7", E: "db7 c7", F: "~@6 db7 ~", G: "c7 ~@5 db7 ~",
  H: "[c7@3 ab6!2 gb6 ab6@4 ab6@4 ab6@2]/2", I: "db7 db7@2 db7 eb7@2 db7@2 c7@2 ~@2 db7!2 db7@2", J: "eb7 f7 db7 ab6",
  K: "bb6 ab6 bb6 ab6 bb6@4", L: "~@4 bb6 ~ ab6 ~", M: "~@2 bb6 ab6", N: "~@4 bb6 ~ a6 ~", O: "f7 ~@3", P: "~@2 bb6 a6",
  Q: "bb6 ~@3",
})).s("gm_piccolo").gain(0.31)

// chords · clarinet · "B♭ Clarinet"
const clarinet = note("<A B@2 C@2 D@2 E F G H I@2 G H I@2 J@6 K@2 L ~@3 L ~@3 B@2 C@2 D@2 E F M@6 K@2 L>".pickRestart({
  A: "~@6 f5 ab5", B: "[db5,f5]/2", C: "[gb5,bb5]/2", D: "[~ [db5,f5]@3]/2", E: "[eb5,gb5]", F: "[gb5,bb5] [f5,a5]",
  G: "[db5,f5]@6 [c5,eb5] [db5,f5]", H: "~ [db5,f5]@3", I: "[[eb5,gb5]@3 [db5,f5]@2 [db5,f5]@2 ~]/2",
  J: "[[f5,bb5]@3 [f5,bb5] ~@2 [f5,bb5]@6 [f5,bb5]@2 [f5,ab5]@2]/2", // Bb5 Fm
  K: "[[f5,bb5]@3 [f5,bb5]@2 ~ [f5,bb5]@3 [f5,bb5] ~@2 [f5,bb5]@2 [f5,a5]@2]/2", L: "[f5,bb5] ~@3",
  M: "[[f5,bb5]@3 [f5,bb5] ~@2 [f5,bb5]@3 [f5,bb5] ~@2 [f5,bb5]@2 [f5,ab5]@2]/2", // Bb5 Fm
})).s("gm_clarinet").gain(0.27)

// chords · alto sax · "Alto Saxophone"
const alto_sax = note("<A B@2 C@2 D@2 E F G ~ H I J K J L M@8 N ~@3 N ~@3 B@2 C@2 D@2 E O P@8 N>".pickRestart({
  A: "~@6 f4 ab4", B: "[f4,bb4]/2", C: "[~@6 f4 ab4 bb4@24]/2", D: "[~ [f4,bb4]@3]/2", E: "[gb4,bb4]",
  F: "[gb4,bb4]@8 [f4,a4]@4 bb4!2 ab4!2", G: "bb4@2 ab4!2 bb4@2 ~@2 bb4!2 ab4@2 bb4@2 ab4@2",
  H: "bb4!4 db5@2 c5!2 c5@2 ~@2 bb4!4", I: "db5@2 c5!2 c5@2 ~@10", J: "db4 db4@2 db4 eb4@2 db4@2 c4@2 ~@2 db4!2 db4@2",
  K: "eb4 f4 c4 ~", L: "eb4 f4 c4 [c4,eb4]",
  M: "[[db4,f4]@3 [db4,f4] ~@2 [db4,f4]@3 f4 gb4 f4 [db4,f4]@2 [c4,eb4]@2]/2", N: "[db4,f4] ~@3",
  O: "[gb4,bb4] [f4,a4]", P: "[[db4,f4]@3 [db4,f4] ~@2 [db4,f4]@3 [db4,f4] ~@2 [db4,f4]@2 [c4,eb4]@2]/2",
})).s("gm_alto_sax").gain(0.31)

// chords · trumpet · "B♭ Trumpet"
const trumpet = note("<A B@2 C@2 D@2 E@2 F G H I J ~ J K L@6 M@2 N ~@3 N ~@3 B@2 C@2 D@2 E@2 O@6 P@2 N>".pickRestart({
  A: "~@6 f5 ab5", B: "[db5,f5,bb5]/2", C: "[~@6 f5 ab5 bb5@24]/2", D: "[~ [f5,bb5]@3]/2", E: "[~ [db5,f5,bb5]@3]/2",
  F: "~@6 db5 ~", G: "c5 ~@5 db5 ~", H: "bb4!4 db5@2 c5!2 c5@2 ~@2 bb4!4", I: "db5@2 c5!2 c5@2 ~@10",
  J: "db5 db5@2 db5 eb5@2 db5@2 c5@2 ~@2 db5!2 db5@2", K: "eb5 f5 c5 [f5,ab5]",
  L: "[[f5,bb5]@3 [f5,bb5] ~@2 [f5,bb5]@3 f5 gb5 f5 [f5,bb5]@2 [f5,ab5]@2]/2", // Bb5 Fm
  M: "[[f5,bb5]@3 [f5,bb5] ~@2 [f5,bb5]@3 f5 gb5 f5 [f5,bb5]@2 [f5,a5]@2]/2", N: "[f5,bb5] ~@3",
  O: "[[f5,bb5]@3 [f5,bb5] ~@2 [f5,bb5]@3 [f5,bb5] ~@2 [f5,bb5]@2 [f5,ab5]@2]/2", // Bb5 Fm
  P: "[[f5,bb5]@3 [f5,bb5] ~@2 [f5,bb5]@3 [f5,bb5] ~@2 [f5,bb5]@2 [f5,a5]@2]/2", // Bb5 F
})).s("gm_trumpet").gain(0.31)

// other · french horn · "Horn in F"
const french_horn = note(`<
  A B@2 C@2 D@2 E F G H I J K ~ K L M N M N O N O P Q ~@3 Q ~@3 B@2 C@2 D@2 E F M N M N O N O P Q
>`.pickRestart({
  A: "~@6 f4 ab4", B: "bb4/2", C: "[~ [bb4,db5]@3]/2", D: "[~ [bb4,f5]@3]/2", E: "~ [c5,f5]", F: "db5 c5",
  G: "~@6 db5 ~", H: "c5 ~@5 db5 ~", I: "bb4!4 db5@2 c5!2 c5@2 ~@2 bb4!4", J: "db5@2 c5!2 c5@2 ~@10",
  K: "db5 db5@2 db5 eb5@2 db5@2 c5@2 ~@2 db5!2 db5@2", L: "eb5 f5 c5 ab4", M: "bb4 ab4 bb4 ab4 bb4@4",
  N: "~ f4 gb4 f4 bb4@2 ab4@2", O: "[bb4,db5] [ab4,c5] [bb4,db5] [ab4,c5] [bb4,db5]@4", P: "~ f4 gb4 f4 bb4@2 a4@2",
  Q: "bb4 ~@3",
})).s("gm_french_horn").gain(0.31)

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

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

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

// drums · crash
const crash = s("cr").struct("<~@5 [~@4 x!2 ~@2 x ~@7] ~@44>").gain(0.48)

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

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~@9 A B A B A B A B A B A B A B A B A B A C A B A ~@9 B A B A B A B A ~
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "x!3 ~@5 x!3 ~@5", C: "x!2 ~ x ~@4 x!2 ~ x ~@4",
})).gain(1.26)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@5 [~@2 x!2 ~@12] ~@44>").gain(1.26)

// drums · whistle
const whistle = s("ballwhistle:0").struct("<~@5 [~ x] ~@44>").gain(0.62)

// drums · guiro
const guiro = s("guiro:0").struct("<~@5 [x!2 ~@14] ~@44>").gain(10.14)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~ A@4 ~ A@2 B C D C E C D C E A@8 C D C E C D C ~@9 F@4 ~@5>".pickRestart({
  A: "~ x", B: "~@4 x ~ x!2", C: "x!3 ~ x ~@3 x ~@3 x ~ x ~", D: "x!3 ~ x ~@7 x ~ x ~", E: "x!3 ~ x ~@11", F: "x!4",
})).gain(0.7)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<~@9 A B A B A B A B ~@8 A B A B A B A ~@9 C@4 ~@5>".pickRestart({
  A: "~@3 x ~ x ~@2", B: "~@3 x ~@4", C: "~ x ~ x ~ x ~ x",
})).gain(0.7)

stack(
  piccolo, clarinet, alto_sax, trumpet, french_horn, trombone, bass, rim, crash, high_tom, bongos, bongos_2, whistle,
  guiro, woodblocks, woodblocks_2
)