Strudelify

for baltimore

All Time Low

KeyE minorTempo120 bpm
0:00/0:00
// for baltimore — All Time Low
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/400521; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 130 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 · [...]/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 · trumpet · "Bb Trumpet"
const trumpet = note(`<
  ~@16 A ~ A ~ B C@2 D@2 ~ A E F G H I J K J L M N O P J K J L Q R S T ~ U V ~ A ~ A ~ B C@2 D@2 W@2 X F G H I J K J L M
  N O P J K J L Q R S T ~ U V U Y@2 ~@2 Z AA AB@2 AC AD@3 AE AA AB@2 AC AD@3 J K J L M N O P J K J L Q R S T ~ U Y@2 ~@2
>`.pickRestart({
  A: "~ b4 g4 ~", B: "~ e4!2 ~", C: "[c5!3 c5@2 c5 b4 c5@3 d5 c5@3 ~ b4]/2",
  D: "[b4@2 b4 d5@2 d5 e5 d5@2 ~ b4@2 g4@2 ~@2]/2", E: "~@6 b4!2", F: "~ g4 e4 ~", G: "b4!3 b4@2 c5@3", H: "b4",
  I: "~ b4!3 a4 g4@3", J: "c5@3 b4@3 b4 c5", K: "~ c5!3 c5@2 b4@2", L: "~ c5!3 c5@2 c5@2", M: "c5@2 ~ g5",
  N: "g5@2 f5 e5@2 f5@2 ~", O: "g5 f5 e5 f5", P: "g5@2 d5 g5@2 f5@2 e5", Q: "c5@2 ~ c5", R: "c5 f5@2 f5@3 g5!2",
  S: "f5 f5@4 ~@3", T: "g5!4 f5 e5@3", U: "~@4 e5!2 c5 f5", V: "e5", W: "[g4!3 g4@2 f4 e4 g4@2 ~ b4@2 g4@2 ~@2]/2",
  X: "g4!3 g4@3 b4!2", Y: "[e5@3 ~]/2", Z: "~@2 c4 a3", AA: "c4@2 c4 c4@2 f4@3", AB: "[g4@6 f4 f4@5 ~@2 c4@2]/2",
  AC: "d4@3 d4@3 c4@2", AD: "[d4@3 d4@3 a3 a3@2 b3@11 ~@4]/3", AE: "~@3 a3 c4@2 a3@2",
})).s("gm_trumpet").gain(0.25)

// other · french horn · "Horn"
const french_horn = note(`<
  A@2 B@2 C@2 D@2 A@2 B@2 C@2 E@2 F G H I J K L M F G H I J K N ~ O@2 P@2 Q@2 R@2 O@2 P@2 Q@2 S@2 T@4 F G H I J K L M F
  G H I J K N ~ O@2 P@2 Q@2 R@2 O@2 P@2 Q@2 S@2 T@8 A@2 B@2 C@2 D@2 A@2 B@2 C@2 U@2 O@2 P@2 Q@2 R@2 O@2 P@2 Q@2 S@2 T@2
  V@2 W ~
>`.pickRestart({
  A: "c4/2", B: "e4/2", C: "b3/2", D: "d4/2", E: "[d4@5 ~@3]/2", F: "e4@2 e4@2 ~@2 e4!2 e4@2 e4@2 ~@2 e4@2",
  G: "~ e4 ~ e4 ~ e4 e4@2", H: "c4@2 c4@2 ~@2 c4!2 c4@2 c4@2 ~@2 c4@2", I: "~ c4 ~ c4 ~ c4 c4@2",
  J: "b3@2 b3@2 ~@2 b3!2 b3@2 b3@2 ~@2 b3@2", K: "~ b3 ~ b3 ~ b3 b3@2", L: "d4@2 d4@2 ~@2 d4!2 d4@2 d4@2 ~@2 d4@2",
  M: "~ d4 ~ d4 ~ d4 d4@2", N: "d4", O: "[e4@2 e4@2 e4!3 e4@2 e4@2 d4 e4 f4 e4@2]/2",
  P: "[c4@2 c4@2 c4!3 c4@2 c4@2 c4 e4 f4 e4@2]/2", Q: "[b3@2 b3@2 b3!3 b3@2 b3@2 b3 d4 e4 d4@2]/2",
  R: "[d4@2 d4@2 d4!3 d4@2 d4@2 d4!3 d4@2]/2", S: "[d4@2 d4@2 d4!3 d4@2 d4@2 d4!5]/2",
  T: "[c4@3 f4@3 c4@3 f4@3 c4@2 b3@2]/2", U: "[d4@7 ~]/2", V: "[c4@3 f4@3 c4@3 f4@3 e4!2 d4!2]/2", W: "c4@3 ~",
})).s("gm_french_horn").gain(0.3)

// other · trombone
const trombone = note(`<
  A@6 B@2 A@6 C@2 D E F G F G H I D E F G F G J ~ K@2 L@4 M@2 K@2 L@4 N@2 O@4 D E F G F G H I D E F G F G J ~ K@2 L@4
  M@2 K@2 L@4 N@2 O@8 A@6 B@2 A@6 P@2 K@2 L@4 M@2 K@2 L@4 N@2 O@2 Q@2 R ~
>`.pickRestart({
  A: "[e3@11 d3 e3 f3 e3@2]/2", B: "d3/2", C: "[d3@5 ~@3]/2", D: "g3@2 g3@2 ~@2 g3!2 g3@2 g3@2 ~@2 g3@2",
  E: "~ g3 ~ g3 ~ g3 g3@2", F: "e3@2 e3@2 ~@2 e3!2 e3@2 e3@2 ~@2 e3@2", G: "~ e3 ~ e3 ~ e3 e3@2",
  H: "b3@2 b3@2 ~@2 b3!2 b3@2 b3@2 ~@2 b3@2", I: "~ b3 ~ b3 ~ b3 b3@2", J: "d3",
  K: "[g3@2 g3@2 g3!3 g3@2 g3@2 g3!3 g3@2]/2", L: "[e3@2 e3@2 e3!3 e3@2 e3@2 e3!3 e3@2]/2",
  M: "[d3@2 d3@2 d3!3 f3@2 f3@2 f3!3 f3@2]/2", N: "[d3@2 d3@2 d3!3 d3@2 d3@2 d3!5]/2",
  O: "[g3@3 g3@3 g3@3 g3@3 b2@2 a2@2]/2", P: "[d3@7 ~]/2", Q: "[g3@3 g3@3 g3@3 g3@3 e3!2 d3!2]/2", R: "c3@3 ~",
})).s("gm_trombone").gain(0.3)

// bass · tuba · "Bb Tuba"
const bass = note(`<
  A@2 B@2 C@2 D@2 A@2 B@2 C@2 E@2 F G H I J K L M F G H I J K N ~ O@2 P@2 Q@2 R@2 O@2 P@2 Q@2 S@2 T@4 F G H I J K L M F
  G H I J K N ~ O@2 P@2 Q@2 R@2 O@2 P@2 Q@2 S@2 T@8 A@2 B@2 C@2 D@2 A@2 B@2 C@2 U@2 O@2 P@2 Q@2 R@2 O@2 P@2 Q@2 S@2 T@4
  V ~
>`.pickRestart({
  A: "c3/2", B: "a2/2", C: "e2/2", D: "g2/2", E: "[g2@5 ~@3]/2", F: "c3!4 ~ c3 ~ c3", G: "~ c3 ~ c3 ~ c3 c3@2",
  H: "a2!4 ~ a2 ~ a2", I: "~ a2 ~ a2 ~ a2 a2@2", J: "e2!4 ~ e2 ~ e2", K: "~ e2 ~ e2 ~ e2 e2@2", L: "g2!4 ~ g2 ~ g2",
  M: "~ g2 ~ g2 ~ g2 g2@2", N: "g2", O: "[c3@4 c3!3 c3@4 c3!3 c3@2]/2", P: "[a2@4 a2!3 a2@4 a2!3 a2@2]/2",
  Q: "[e2@4 e2!3 e2@4 e2!3 e2@2]/2", R: "[g2@4 g2!3 d3@4 d3!3 d3@2]/2", S: "[g2@4 g2!3 g2@4 g2!5]/2",
  T: "[c2@3 f2@3 c2@3 f2@3 c2@2 b1@2]/2", U: "[g2@7 ~]/2", V: "c2@3 ~",
})).s("gm_tuba").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A B C B C B C B A B C B C B ~@2 D B D B D B D E D B D E D B D F G H G H A B C B C B C B A B C B C B ~@2 D B D B D
  B D E D B D E D B D F G H G H I H J K L ~@15 D B D B D B D E D B D E D B D F G H J K L ~
>`.pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "~ x ~ x ~ x ~@2", C: "x!2 ~@2 x!2 ~ x", D: "x ~@3 x!2 ~ x", E: "~ x ~ x ~@4",
  F: "x ~@2 x!2 ~@3", G: "x ~ x ~@2 x!2 ~", H: "x ~@2 x!2 ~ x ~", I: "x ~ x!2 ~ x!2 ~", J: "~ x ~ x ~ x ~ x",
  K: "~ x ~ x ~@2 x ~", L: "x",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<A@14 ~@16 A B ~@34 A B ~@39 B ~@22>".pickRestart({
  A: "x!4", B: "~@5 x!3",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A@14 ~@2 A@3 B A@3 C A@3 C A@3 D E F E G A@14 ~@2 A@3 B A@3 C A@3 C A@3 D E F E G E F H I ~@16 A@3 B A@3 C A@3 C
  A@3 D E J H K ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~ x!3", D: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", E: "x ~@2 x ~@2 x ~",
  F: "~ x ~@2 x ~ x ~", G: "~ x ~@2 x ~@3", H: "x!4", I: "x!3 ~", J: "~@2 x ~@5 x ~@3 x ~ x!2", K: "x!2 ~@2",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@16 A B A B C B D B A B A B C B ~@9 E ~@3 E ~@7 F A B A B C B D B A B A B C B ~@9 E ~@3 E ~@7 F ~@27 E ~@3 E ~@8 F ~
>`.pickRestart({
  A: "~@7 x", B: "~ x ~ x ~ x ~@2", C: "x!2 ~@5 x", D: "~@4 x!2 ~ x", E: "~@10 x ~@4 x", F: "~@15 x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@7 [x ~ x!2 ~ x!2 ~] x ~@121>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@16 A ~ A B A B C B A ~ A B A B ~@9 D ~@3 D ~@7 E A ~ A B A B C B A ~ A B A B ~@9 D ~@3 D ~@7 E ~@27 D ~@3 D ~@8 D ~
>`.pickRestart({
  A: "~@6 x!3 ~ x ~@5", B: "~@14 x!2", C: "x ~ x ~@3 x!2 ~@8", D: "~@13 x!2 ~", E: "~@7 x",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@32 A@7 B A@3 B A@3 ~@21 A@7 B A@3 B A@3 ~@25 A@7 B A@3 B A@3 ~@7>".pickRestart({
  A: "x!4", B: "x!2 ~@2",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@16 A ~ A B ~@3 B A ~ A B ~@23 C A ~ A B ~@3 B A ~ A B ~@23 C ~@40 C ~
>`.pickRestart({
  A: "x!2 ~@6", B: "~@13 x ~@2", C: "~@3 x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@15 A ~@14 B@2 ~@16 C D C E ~@14 B@2 ~@16 C D C E C D F@2 B ~@31 C D F@2 B@2
>`.pickRestart({
  A: "~@3 x", B: "x", C: "x ~@2 x ~@2 x ~", D: "~ x ~@2 x ~ x ~", E: "~ x ~@2 x ~@3", F: "x!4",
})).gain(0.4)

stack(trumpet, french_horn, trombone, bass, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash)