Strudelify

Attack On Titan OSTs

Jarod Mellus

KeyE♭ majorTempo180 bpm
0:00/0:00
// Attack On Titan OSTs — Jarod Mellus
// 180 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 13 "Sousaphone" tuba (copy of ch 5 "Baritone Saxophone" baritone sax)
// note: Transcription provider: pdmx. https://musescore.com/score/1187531; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 43 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/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 · clarinet · "Bb Clarinet"
const clarinet = note(`<
  A@2 B@2 C@2 D@2 E@2 F G@2 H@2 G@2 H@2 G@2 H@2 G@2 H@2 I J K L M N O P A@2 Q@2 A@2 R@2
>`.pickRestart({
  A: "[c5!2 eb5 d5@2 bb4@2 c5@2 c5 eb5 d5@2 bb4@2 ~]/2", B: "[g5@2 eb5 f5@2 d5@2 eb5@2 c5@2 d5@2 bb4@2 ~]/2",
  C: "[g5@2 eb5 f5@2 d5@2 eb5@2 d6@2 c6@2 bb5@2 ~]/2", D: "[bb5@2 gb5 ab5@2 f5@2 gb5@2 eb5@2 f5@2 db5@2 ~]/2",
  E: "[bb5@2 gb5 ab5@2 f5@2 gb5@2 f5@2 eb5@2 db5@2 ~]/2", F: "eb5 ab5 db6 gb5 d5 gb5 a5 b5",
  G: "[d5@2 bb4 c5@2 a4@2 bb4@2 g4@2 a4@2 f4@2 ~]/2", H: "[d5@2 bb4 c5@2 a4@2 bb4@2 a4@2 g4@2 f4@2 ~]/2",
  I: "g4@3 g4!3 a4 bb4", J: "a4 g4 gb4@4 d4!2", K: "g4@2 d4 g4 a4@2 f4 a4", L: "bb4@2 g4 bb4 b4@3 ~", M: "c5!2 g4 c5",
  N: "bb4!3 f4@2 bb4@2 ~", O: "c5@2 c5@2 c5 g4 c5@2", P: "c5@3 b4@4 ~", Q: "[c5!2 eb5 d5@2 c5 bb4 c5@2 g4 f4 g4@4 ~]/2",
  R: "[c5!2 eb5 d5@2 bb4!2 c5@2 g5@3 f5@2 ~@2]/2",
})).s("gm_clarinet").gain(0.45)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A@2 B@2 C@2 D@2 E@2 F G@2 H@2 G@2 H@2 G@2 H@2 G@2 H@2 I J K L M N O P A@2 Q@2 A@2 R@2
>`.pickRestart({
  A: "[c5!2 eb5 d5@2 bb4@2 c5@2 c5 eb5 d5@2 bb4@2 ~]/2", B: "[g4@2 eb4 f4@2 d4@2 eb4@2 c4@2 d4@2 bb3@2 ~]/2",
  C: "[g4@2 eb4 f4@2 d4@2 eb4@2 d4@2 c4@2 bb3@2 ~]/2", D: "[bb4@2 gb4 ab4@2 f4@2 gb4@2 eb4@2 f4@2 db4@2 ~]/2",
  E: "[bb4@2 gb4 ab4@2 f4@2 gb5@2 f5@2 eb5@2 db5@2 ~]/2", F: "eb3 ab3 db4 gb4 d4 gb4 a4 b4",
  G: "[d5@2 bb4 c5@2 a4@2 bb4@2 g4@2 a4@2 f4@2 ~]/2", H: "[d5@2 bb4 c5@2 a4@2 bb4@2 a4@2 g4@2 f4@2 ~]/2",
  I: "g3@3 g3!3 a3 bb3", J: "a3 g3 gb3@4 d3!2", K: "g3@2 d3 g3 a3@2 f3 a3", L: "bb3@2 g3 bb3 b3@3 ~", M: "c5!2 g4 c5",
  N: "bb4!3 f4@2 bb4@2 ~", O: "c5@2 c5@2 c5 g4 c5@2", P: "c5@3 b4@4 ~", Q: "[c5!2 eb5 d5@2 c5 bb4 c5@2 g4 f4 g4@4 ~]/2",
  R: "[c5!2 eb5 d5@2 bb4!2 c5@2 g5@3 f5@4]/2",
})).s("gm_alto_sax").gain(0.45)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  A@2 B@2 C@2 D@2 E@2 F G@2 H@2 G@2 H@2 G@2 H@2 G@2 H@2 I J K L M N O P A@2 Q@2 A@2 R@2
>`.pickRestart({
  A: "[c4!2 eb4 d4@2 bb3@2 c4@2 c4 eb4 d4@2 bb3@2 ~]/2", B: "[g3@2 eb3 f3@2 d3@2 eb3@2 c3@2 d3@2 bb2@2 ~]/2",
  C: "[g3@2 eb3 f3@2 d3@2 eb3@2 d3@2 c3@2 bb2@2 ~]/2", D: "[bb3@2 gb3 ab3@2 f3@2 gb3@2 eb3@2 f3@2 db3@2 ~]/2",
  E: "[bb3@2 gb3 ab3@2 f3@2 gb4@2 f4@2 eb4@2 db4@2 ~]/2", F: "eb3 ab3 db4 gb4 d4 gb4 a4 b4",
  G: "[d4@2 bb3 c4@2 a3@2 bb3@2 g3@2 a3@2 f3@2 ~]/2", H: "[d4@2 bb3 c4@2 a3@2 bb3@2 a3@2 g3@2 f3@2 ~]/2",
  I: "g3@3 g3!3 a3 bb3", J: "a3 g3 gb3@4 d3!2", K: "g3@2 d3 g3 a3@2 f3 a3", L: "bb3@2 g3 bb3 b3@3 ~", M: "c4!2 g3 c4",
  N: "bb3!3 f3@2 bb3@2 ~", O: "c4@2 c4@2 c4 g3 c4@2", P: "c4@3 b3@4 ~", Q: "[c4!2 eb4 d4@2 c4 bb3 c4@2 g3 f3 g3@4 ~]/2",
  R: "[c4!2 eb4 d4@2 bb3!2 c4@2 g3@3 f3@4]/2",
})).s("gm_tenor_sax").gain(0.4)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A@2 B@2 C@2 D@2 E@2 ~ F@2 G@2 F@2 G@2 F@2 G@2 F@2 G@2 H I J K L M@2 N O P Q R O P Q S
>`.pickRestart({
  A: "[c3!3 bb2@2 bb2@2 ab2@2 ab2!2 bb2@2 bb2@2 ~]/2", B: "c3!4", C: "ab2!4", D: "eb3!4", E: "b2!4",
  F: "[g2@3 g2@3 g2@5 g2@5]/2", G: "[eb2@3 eb2@3 eb2@5 eb2@5]/2", H: "~ g2!3", I: "gb2!4", J: "g2 f2", K: "eb2 d2",
  L: "~@3 d3 g3@2 f3@2", M: "[d3@3 bb2@6 ~@2 d3 g3@2 f3@2]/2", N: "eb3@3 d3@4 ~", O: "c3@3 c3@3 c3 ~",
  P: "ab2@3 ab2@3 ab2@2", Q: "bb2@3 bb2@3 bb2@2", R: "eb3@3 d3@2 bb2@3", S: "~ eb3@3 d3@4",
})).s("gm_baritone_sax").gain(0.3)

// other · trumpet · "Bb Trumpet"
const trumpet = note("<~@2 A@2 B@2 C@2 D@2 E ~@18 F G H I J K ~@8>".pickRestart({
  A: "[g5@2 g5 ~@3 f5@4 d5@4 eb5@4 c5@4 d5@4 bb4@4 ~@2]/2",
  B: "[g5@2 g5 ~ eb5@2 f5@4 d5@4 eb5@4 d5@4 c5@4 bb4@4 ~@2]/2",
  C: "[bb5@2 bb5 ~@3 ab5@4 f5@4 gb5@4 eb5@4 f5@4 db5@4 ~@2]/2",
  D: "[bb5@2 bb5 ~ gb5@2 ab5@4 f5@4 gb5@4 f5@4 eb5@4 db5@4 ~@2]/2", E: "eb4 ab4 db5 gb4 d4 gb4 a4 b4", F: "g4 ~ a4 ~",
  G: "bb4 ~ b4@2", H: "c5!2 g4 c5", I: "bb4!3 f4@2 bb4@2 ~", J: "c5@2 c5@2 c5 g4 c5@2", K: "c5@3 b4@4 ~",
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "B♭ Cornet"
const trumpet_2 = note("<A@2 B C D@2 E F G@2 H ~@16 I J K L M N@2 O ~@8>".pickRestart({
  A: "[c4!3 d4@2 d4@2 eb4@2 eb4!2 d4@2 d4@2 ~]/2", B: "~@2 eb4 ~@3 eb4 ~", C: "~@2 eb4 ~@2 eb4@2 ~",
  D: "[~@2 eb4 ~@3 eb4 eb4@2 d4@2 c4@2 bb3@2 ~]/2", E: "~@2 gb4 ~@3 gb4 ~", F: "~@2 gb4 ~@2 db4@2 ~",
  G: "[~@2 gb4 ~@3 gb4 gb4@2 f4@2 eb4@2 db4@2 ~]/2", H: "eb4 ab4 db5 gb5 d4 gb4 a4 b4", I: "~ d4 eb4 f4", J: "gb4 a4",
  K: "g4 a4", L: "bb4 b4", M: "~@3 d4 g4@2 f4@2", N: "[d4@3 bb3@6 ~@2 d4 g4@2 f4@2]/2", O: "eb4@3 d4@4 ~",
})).s("gm_trumpet").gain(0.45)

// other · trombone
const trombone = note(`<
  A@2 B C D@2 E F G@2 H I@2 J@2 I@2 J@2 I@2 J@2 I@2 J@2 K L M N O P@2 Q R S T U R S T V
>`.pickRestart({
  A: "[eb3!3 d3@2 d3@2 eb3@2 eb3!2 f3@2 f3@2 ~]/2", B: "~@2 eb3 ~@3 eb3 ~", C: "~@2 eb3 ~@2 eb3@2 ~",
  D: "[~@2 eb3 ~@3 eb3 eb3@2 d3@2 c3@2 bb2@2 ~]/2", E: "~@2 gb3 ~@3 gb3 ~", F: "~@2 gb3 ~@2 db3@2 ~",
  G: "[~@2 gb3 ~@3 gb3 gb3@2 f3@2 eb3@2 db3@2 ~]/2", H: "eb2 ab2 db3 gb3 d2 gb2 a2 b2", I: "[g2@3 g2@3 g2@5 g2@5]/2",
  J: "[eb2@3 eb2@3 eb2@5 eb2@5]/2", K: "~ d3 eb3 f3", L: "gb3 a3", M: "g3 a3", N: "bb3 b3", O: "~@3 d3 g3@2 f3@2",
  P: "[d3@3 bb2@6 ~@2 d3 g3@2 f3@2]/2", Q: "eb3@3 d3@4 ~", R: "c3@3 c3@3 c3@2", S: "ab2@3 ab2@3 ab2@2",
  T: "bb2@3 bb2@3 bb2@2", U: "eb3@3 d3@2 bb2@3", V: "~ eb3@3 d3@4",
})).s("gm_trombone").gain(0.45)

// other · french horn · "Baritone Horn"
const french_horn = note(`<
  A@2 B C D@2 E F G@2 H I@2 J@2 I@2 J@2 I@2 J@2 I@2 J@2 K L M N O P@2 Q R S T U R S T V
>`.pickRestart({
  A: "[eb3!3 d3@2 d3@2 eb3@2 eb3!2 f3@2 f3@2 ~]/2", B: "~@2 c4 ~@3 c4 ~", C: "~@2 c4 ~@2 bb3@2 ~",
  D: "[~@2 c4 ~@3 c4 eb4@2 d4@2 c4@2 bb3@2 ~]/2", E: "~@2 eb4 ~@3 eb4 ~", F: "~@2 eb4 ~@2 db4@2 ~",
  G: "[~@2 eb4 ~@3 gb3 gb3@2 f3@2 eb3@2 db3@2 ~]/2", H: "eb3 ab3 db4 gb4 d3 gb3 a3 b3", I: "[d3@3 d3@3 d3@5 d3@5]/2",
  J: "[bb2@3 bb2@3 bb2@5 bb2@5]/2", K: "~ d3 eb3 f3", L: "gb3 a3", M: "g3 a3", N: "bb3 b3", O: "~@3 d3 g3@2 f3@2",
  P: "[d3@3 bb2@6 ~@2 d3 g3@2 f3@2]/2", Q: "eb3@3 d3@4 ~", R: "c3@3 c3@3 c3@2", S: "ab2@3 ab2@3 ab2@2",
  T: "bb2@3 bb2@3 bb2@2", U: "eb3@3 d3@2 bb2@3", V: "~ eb3@3 d3@4",
})).s("gm_french_horn").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  [x ~@3 x!4]
  [x!8]
  [x!4]!8
  [x ~@3 x!4]
  [x!4]!21
  [x ~ x!2 ~ x ~ x]
  [x!4]!9
  [x!2 ~@2 x ~@3]
>`).gain(0.71)

// drums · rim
const rim = s("rim").struct("<~@2 [x!4]!3 [x!3 ~] ~@37>").gain(0.47)

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

// drums · hihat
const hihat = s("hh").struct("<~@14 [~@8 x!8] ~@7 [~@8 x!8] ~@20>").gain(0.55)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A B C B A B C B D ~@16 A@2 ~@2 E F A G ~@8>".pickRestart({
  A: "~ x!3", B: "x!2 ~ x", C: "x!4", D: "~ x", E: "x ~ x!2", F: "x ~ x!2 ~ x ~@2", G: "x!3 ~",
})).gain(0.47)

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

// drums · ride
const ride = s("rd").struct("<~@35 [x ~ x!2] [x!4]!2 [x ~ x!2]!2 [x!4]!2 x>").gain(0.55)

stack(
  clarinet, alto_sax, tenor_sax, baritone_sax, trumpet, trumpet_2, trombone, french_horn, kick, rim, snare, hihat,
  open_hat, crash, ride
)