Strudelify
KeyB♭ majorTempo120 bpm
0:00/0:00
// a love like war — All Time Low ft. Vic Fuentes
// 120 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/467781; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 142 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 · "a, b" plays two voices at once · [...]/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(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 D@2 E F@2 G@2 H@2 G@2 F@2 G@2 H@2 G@2 I J@2 ~ I K@3 L@8 M@8 ~@2 N O@2
  P@2 Q R Q S O@2 P@2 Q R Q T U@2 V@2 U@2 W@2 X@2 Y@2 X@2 Z@2 AA@2 AB@2 AC AD AE AF F@2 G@2 H@2 AG@2 F@2 G@2 H@2 G@2 I
  J@2 ~ I AH@3 AI@4 AJ@2 AK@2
>`.pickRestart({
  A: "[d5!4 ~ eb5 ~ c5@6 g4 a4 bb4]/2", B: "[c5!4 ~ d5 ~ bb4@6 a4 bb4 c5]/2", C: "[c5!4 ~ d5 ~ bb4@5 c5@4]/2",
  D: "[d5@4 eb5@3 bb4@5 c5@4]/2", E: "d5 eb5", F: "d5/2", G: "bb4/2", H: "g4/2", I: "~ bb4!4 a4 g4 f4",
  J: "[eb4 ~ bb4 ~ a4@2 bb4 g4@2 ~@7]/2", K: "[eb4 ~ bb4 ~ bb4@2 bb4 a4@5 ~ bb4 a4 g4@7 ~@2]/3",
  L: "[~ d5@2 d5@2 d5 bb4 c5@2 c5@2 c5@2 c5 bb4 c5@2 c5@2 c5@2 d5@2 bb4@2 bb4 a4 bb4 ~ g4!2 d5@2 d5!2 d5@2 d5 bb4 c5@2 c5 bb4 c5@2 c5 bb4 c5@2 c5!2 c5@2 bb4 a4 g4@4 ~@2 bb4!2 c5]/8",
  M: "[~ c5!2 c5@2 c5!2 d5@2 d5 c5 d5@2 c5!2 d5@2 d5!2 d5@2 d5 eb5 d5@2 bb4 a4 g4 ~ bb4!2 d5@2 d5!2 d5@2 d5 c5 d5@2 d5 c5 d5 ~ d5!2 d5@2 d5!2 d5@2 eb5 d5 bb4@4 ~@5]/8",
  N: "~@2 g4!2", O: "[bb4@6 g4 g4@5 g4@2 g4@2]/2", P: "[bb4@6 g4 a4@3 a4@2 a4@2 a4@2]/2", Q: "bb4 a4 g4 f4 d4@2 bb4 a4",
  R: "g4 f4 d4@2 a4@2 a4@2", S: "g4 f4 d4@2 g4@2 g4@2", T: "g4 f4 d4@4 ~@2", U: "[g4!4 ~ g4 ~ a4@6 g4 d4 eb4]/2",
  V: "[f4!4 ~ a4 ~ g4@6 d4 eb4 f4]/2", W: "[f4@2 f4@2 f4@2 f4@2 ~@2 a4@2 ~@2 g4@12 bb4 a4 [g4,ab4] gb4 f4@2]/2",
  X: "[bb4!2 g4!2 bb4!2 g4 a4@2 a4 f4!2 a4!2 f4!2]/2", Y: "[a4!2 f4!2 a4!2 f4 bb4@2 bb4 g4!2 bb4!2 g4!2]/2",
  Z: "[eb4 f4 g4 a4 ~ d5 ~ bb4@7 ~@2]/2", AA: "[g5@7 f5]/2", AB: "[eb5@7 eb5]/2", AC: "d5@3 ~", AD: "~ f5!3",
  AE: "d5!5 ~ d5!2", AF: "d5!3 ~@5", AG: "[bb4@12 g4 a4 bb4 c5]/2", AH: "[eb4 ~ bb4 ~ bb4@2 bb4 a4@5 ~ bb4 a4 g4@9]/3",
  AI: "[g5@6 f5@17 eb5@9]/4", AJ: "[eb5@7 d5@9]/2", AK: "[g4 f4 g4 a4 ~ d5 ~ bb4@7 ~@2]/2",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "Bb Trumpet"
const trumpet_2 = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 D@2 E F@2 G@2 H@2 G@2 F@2 G@2 H@2 G@2 ~@2 I J ~ K@3 ~@2 L@8 M@6 ~@2 N
  O@2 P@2 Q R Q S O@2 P@2 Q R Q T U@2 V@2 U@2 W@2 X@2 Y@2 X@2 Z@2 AA@2 AB@2 AC AD AE AF F@2 G@2 H@2 AG@2 F@2 G@2 H@2
  AH@2 ~@2 I J ~ AI@3 AJ@4 AK@2 AL@2
>`.pickRestart({
  A: "[bb4!4 ~ a4 ~ a4@6 eb4 f4 g4]/2", B: "[a4!4 ~ g4 ~ g4@6 f4 g4 a4]/2", C: "[a4!4 ~ g4 ~ g4@5 a4@4]/2",
  D: "[bb4@4 c5@3 g4@5 a4@4]/2", E: "bb4 c5", F: "g4/2", G: "eb4/2", H: "d4/2", I: "~ c5!4 bb4 a4 g4",
  J: "f4 ~ c5 ~ d5@2 a4 g4", K: "[bb4 ~ d5 ~ d5@2 d5 c5@5 ~ d5 c5 bb4@7 ~@2]/3",
  L: "[~@5 bb4@2 g4@2 g4 f4 g4 ~ bb4!2 bb4@2 bb4!2 bb4@2 bb4 g4 a4@2 a4 g4 a4@2 a4 g4 eb5@2 eb5!2 eb5@2 d5 c5 bb4@4 ~@2 d5!2 g5@2 g5!2 g5@2 g5 eb5 f5@2 f5 eb5 f5@2 eb5!2 f5]/8",
  M: "[~ f5!2 f5@2 f5 a4 bb4@2 d5 c5 bb4 ~ d5!2 g5@2 g5!2 g5@2 g5 eb5 f5@2 f5 eb5 f5 ~ f5!2 a5@2 a5!2 a5@2 bb5 a5 g5@4 ~@5]/6",
  N: "~@2 bb4!2", O: "[d5@6 bb4 bb4@5 bb4@2 bb4@2]/2", P: "[d5@6 d5 c5@3 c5@2 c5@2 c5@2]/2",
  Q: "bb4 a4 g4 f4 d4@2 bb4 a4", R: "g4 f4 d4@2 c5@2 c5@2", S: "g4 f4 d4@2 bb4@2 bb4@2", T: "g4 f4 d4@4 ~@2",
  U: "[g4!4 ~ g4 ~ f4@6 c4 d4 eb4]/2", V: "[f4!4 ~ f4 ~ g4@6 d4 eb4 f4]/2", W: "[f4!4 ~ f4 ~ g4@9]/2",
  X: "[eb4!7 d4@2 d4!7]/2", Y: "[d4!7 eb4@2 eb4!7]/2", Z: "[c4 d4 eb4 f4 ~ g4 ~ g4@7 ~@2]/2", AA: "[eb5@7 d5]/2",
  AB: "[c5@7 c5]/2", AC: "bb4@3 ~", AD: "~ d5!3", AE: "bb4!5 ~ bb4!2", AF: "bb4!3 ~@5", AG: "[eb4@12 eb4 d4 eb4 f4]/2",
  AH: "[eb4@11 a4 g4 f4 d4@2]/2", AI: "[bb4 ~ d5 ~ d5@2 d5 c5@5 ~ d5 c5 bb4@9]/3", AJ: "[eb5@6 d5@17 c5@9]/4",
  AK: "[c5@7 bb4@9]/2", AL: "[eb4 d4 eb4 f4 ~ a4 ~ g4@7 ~@2]/2",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "Horn"
const french_horn = note(`<
  ~@15 A@8 B ~@2 C D@2 E@2 F G F H D@2 E@2 F G F I J@2 K@2 J@2 L@2 M@2 N@2 M@2 N@2 M@2 N@2 M@2 O@2 P@2 Q R@2 S@2 T@2 U@2
  R@2 S@2 T@2 V@2 W X@2 ~ W Y@3 ~@7 Z AA@2 AB@2 AC AD AE C D@2 E@2 F G F H D@2 E@2 F G F AF J@2 K@2 J@2 AG@2 AH@2 AI AJ
  AK@2 AL@2
>`.pickRestart({
  A: "[~@5 bb3!2 g4@2 g4!2 g4@2 g4 eb4 f4@2 f4 eb4 f4@2 eb4!2 f4@2 f4!2 f4@2 eb4 a3 bb3@2 d4 c4 bb3 ~ bb3!2 g4@2 g4!2 g4@2 g4 d4 f4@2 f4!2 f4@2 d4 a3 c4@2 c4!2 c4@2 d4 bb3 a3]/8",
  B: "g3 ~", C: "~@2 g4!2", D: "[bb4@6 g4 g4@3 ~@2 g4@2 g4@2]/2", E: "[bb4@6 g4 a4@2 ~ a4@2 a4@2 a4@2]/2",
  F: "bb4 a4 g4 f4 d4@2 bb4 a4", G: "g4 f4 d4@2 a4@2 a4@2", H: "g4 f4 d4@2 g4@2 g4@2", I: "g4 f4 d4@2 ~@4",
  J: "[g4!4 ~ g4 ~ a4@6 g4 d4 eb4]/2", K: "[f4!4 ~ a4 ~ g4@6 d4 eb4 f4]/2", L: "[f4!4 ~ a4 ~ g4@6 ~@3]/2",
  M: "[d4!4 ~ eb4 ~ c4@6 g3 a3 bb3]/2", N: "[c4!4 ~ d4 ~ bb3@6 a3 bb3 c4]/2", O: "[c4!4 ~ d4 ~ bb3@5 c4@4]/2",
  P: "[d4@4 eb4@3 bb3@5 c4@4]/2", Q: "d4 eb4", R: "[d4@14 d4 c4]/2", S: "[bb3@14 bb3 a3]/2", T: "[g3@14 g3 a3]/2",
  U: "[bb3@14 bb3 c4]/2", V: "bb3/2", W: "~ bb4!4 a4 g4 f4", X: "[eb4 ~ bb4 ~ a4@2 bb4 g4@2 ~@7]/2",
  Y: "[eb4 ~ bb4 ~ bb4@2 bb4 a4@5 ~ bb4 a4 g4@9]/3", Z: "~@2 eb4!2", AA: "[g4@6 eb4 eb4@4 ~ eb4@2 eb4@2]/2",
  AB: "[g4@6 eb4 f4@2 ~ f4@2 f4@2 f4@2]/2", AC: "d4@3 ~", AD: "~ f4!3", AE: "d4 ~", AF: "g4 f4 d4@4 ~@2",
  AG: "[f4!4 ~ a4 ~ g4@3 bb4@2 bb4@2 bb4@2]/2", AH: "[bb4@3 bb4@3 a4@8 ~@2]/2", AI: "~ d4!3", AJ: "g4 f4",
  AK: "[eb4@2 eb4 d4@5]/2", AL: "[c4 bb3 c4 d4 ~ f4 ~ g4@7 ~@2]/2",
})).s("gm_french_horn").gain(0.4)

// bass · tuba · "Bb Tuba"
const bass = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 D@2 E@2 D@2 F@5 G H I J K L I M G H I N K L I O P@2 Q@2 P@2 R@2 ~@3 S T@2 U@2 V@2 W@2
  V@2 F@5 G H I J K L I M G H I N K L I O P@2 Q@2 P@2 R@2 X@2 Q@2 Y@2 R@2 ~@4 Z@2 AA AB G H I J K L I M G H I N K L I O
  P@2 Q@2 P@2 R@2 AC@4 AD@2 AE@2
>`.pickRestart({
  A: "[d3!4 ~ c3 ~ c3@9]/2", B: "[c3!4 ~ bb2 ~ bb2@9]/2", C: "[c3!4 ~ bb2 ~ bb2@5 ~ d2 eb2 f2]/2",
  D: "[g2!4 ~ g2 ~ f2@9]/2", E: "[f2!4 ~ f2 ~ eb2@9]/2", F: "[f2!4 ~ f2 ~ g2@16 g2@13 bb2@2 bb2@2]/5", G: "f2!8",
  H: "f2!6 eb2!2", I: "d2!8", J: "d2!4 eb2!2 a1!2", K: "bb1!8", L: "bb1!6 c2!2", M: "d2!6 eb2!2", N: "a1!8",
  O: "d2@2 d2@2 d2@2 d2@2 d2@2 d2@2 [a2,bb2] [f2,gb2,g2,ab2] [eb2,e2] ~, ~@7 d2", P: "[g2!4 ~ g2 ~ a2@6 c2 d2 eb2]/2",
  Q: "[f2!4 ~ a2 ~ g2@6 d2 eb2 f2]/2", R: "[f2!4 ~ a2 ~ g2@9]/2", S: "~@12 [a2,bb2] [f2,gb2,g2,ab2] [eb2,e2] ~, ~@7 d2",
  T: "[g2!4 ~ a2 ~ f2@6 c2 d2 eb2]/2", U: "[f2!3 f2@2 g2 f2 eb2@6 d2 eb2 f2]/2", V: "[g2!4 ~ eb2 ~ f2@6 c2 d2 eb2]/2",
  W: "[f2!4 ~ eb2 ~ bb1@2 d2 c2 bb1 ~ d2 eb2 f2]/2", X: "[g2!4 ~ g2 ~ f2@6 bb2 d2 eb2]/2",
  Y: "[g2!4 ~ g2 ~ f2@6 c2 d2 eb2]/2", Z: "g2/2", AA: "g2!5 ~ g2!2", AB: "g2!3 ~@5",
  AC: "[bb2@6 a2@17 g2@5 bb2 a2 g2 f2]/4", AD: "[eb2@7 d2@7 c2 d2]/2", AE: "[eb2 d2 eb2 f2 ~ f2 ~ g2@7 ~@2]/2",
})).s("gm_tuba").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A B A B A B A B C B D E@3 F E@3 F E@7 G A H G I G@3 ~@4 B A B A B A B A B A B A B C B D E@3 F E@3 F E@7 G A H G I
  G@3 J A B A B A B A K ~@4 E@2 L M N O N P Q R Q S C T C U Q R Q I A H G I G@3 J A B A B A B V ~
>`.pickRestart({
  A: "x ~@2 x ~ x ~ x", B: "~@3 x ~ x ~ x", C: "~ x ~ x ~ x ~ x", D: "~ x ~ x!2 ~ x ~", E: "x!4",
  F: "x ~@3 x ~@4 x ~@2 x ~@3", G: "x ~ x!2 ~ x ~ x", H: "~ x!3 ~ x ~ x", I: "~@2 x!2 ~ x ~ x", J: "~@3 x ~ x ~@2",
  K: "~ x!7", L: "x!5 ~ x!2", M: "x!3 ~@5", N: "x ~@3 x!2 ~ x", O: "~ x ~@2 x!2 ~ x", P: "~ x ~@2 x ~ x ~",
  Q: "x!2 ~ x!2 ~ x!2", R: "x!3 ~ x ~ x ~", S: "x ~ x ~ x ~ x!2 ~@2 x!2 ~@2 x!2", T: "~@2 x ~@3 x ~@3 x ~@3 x!2",
  U: "~@2 x ~@3 x!2 ~@2 x!2 ~@2 x!2", V: "x ~@2 x ~ x ~@2",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@8 [x!4]!7 [x!3 ~] ~@126>").gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A@7 B C B D E A F G F A F H I ~ J ~ J ~@2 C A@2 K L K A K ~@4 A@12 B C B D E A F G F A F H I ~ J ~ J ~@2 C A@2 K
  L K A K B A@6 M N ~@4 O P Q R S@3 T S T S U I V I U S T S C A@2 K L K A K B A@3 B A@2 M ~
>`.pickRestart({
  A: "~@2 x!2", B: "~ x", C: "x ~ x!2", D: "x ~@7 x!5 ~@3", E: "x ~@5 x!3 ~@5 x ~", F: "~@6 x!3 ~@5 x ~",
  G: "~@2 x ~@3 x!5 ~ x!4", H: "~@2 x ~@3 x!5 ~@5", I: "x!4", J: "x!3 ~", K: "~@2 x!2 ~@4 x ~@3 x ~@3",
  L: "~@2 x!2 ~@2 x ~@5 x ~@3", M: "~ x!2 ~ x ~ x ~", N: "~ x!7", O: "~@4 x!12", P: "x!16", Q: "x!5 ~ x!2",
  R: "x!3 ~@5", S: "~ x ~ x", T: "~ x ~@2", U: "~@4 x ~@3 x!2 ~@2 x!2 ~@2", V: "~ x!3",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@23 A B A B ~@7 C D E F E F E F B ~@3 G ~@7 B ~@11 A B A B ~@7 C D E F E F E F B ~@3 G ~@3 H ~@14 I E ~@15 B ~@3 G
  ~@3 H ~@3 C ~@4
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~@15 x", D: "~@2 x ~ x ~ x!2", E: "x!3 ~@5", F: "x ~ x ~ x ~ x!2", G: "~@5 x ~@2",
  H: "~@6 x ~@8 x", I: "~@6 x!2",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@50 [~@2 x!2] [x!4]!3 ~@55 [~@4 x!3 ~] ~@32>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@16 A B A B A B A C D C D ~@7 E ~ F G F G F@2 H ~ B ~ I ~ B ~@5 H A B A B A B A B A B A C D C D ~@7 E ~ F G F G F@2 H
  ~ B ~ I ~ B ~ J A B A B A B K L ~@4 M ~ N ~@4 O ~ O ~@7 O ~ H ~ B ~ I ~ B ~ J A B A P A B K ~
>`.pickRestart({
  A: "~@2 x!3 ~@11", B: "~@2 x!2 ~@4", C: "~@3 x!2 ~ x ~@3 x ~ x ~@3", D: "~ x!2 ~@5", E: "~@13 x!2 ~", F: "x!4",
  G: "~@3 x", H: "~@3 x!2 ~@11", I: "~@8 x!2 ~@4 x!2", J: "~@3 x!2 ~@5 x ~@2 x!2 ~", K: "x ~@2 x ~ x ~@2", L: "~ x!7",
  M: "x", N: "x!5 ~@3", O: "~@2 x!2", P: "~@4 x ~ x ~@6 x!2 ~",
})).gain(0.3)

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

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@16 A B ~ B A B ~ B ~ B ~@8 C ~@7 B ~ B ~ D ~ B ~@5 B A B ~ B A B ~ B A B ~ B ~ B ~@8 C ~@7 B ~ B ~ D ~ B ~ E A B ~ B
  A B ~@25 B ~ B ~ D ~ B ~ E A B ~ E A B ~@2
>`.pickRestart({
  A: "x", B: "~ x ~@6", C: "~@3 x", D: "~@13 x ~@2", E: "~ x ~@4 x ~",
})).gain(0.3)

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