Strudelify

Cowboys From Hell

Pantera

KeyE minorTempo116 bpm
0:00/0:00
// Cowboys From Hell — Pantera
// 116 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 1 "Rhythm Guitar" overdriven guitar (copy of ch 5 "Rhythm Guitar" distortion guitar); ch 11 "Lead Guitar" distortion guitar (copy of ch 3 "Lead Guitar" distortion guitar, 0.065 beats late)
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar Fills.
setcpm(116/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 · distortion guitar · "Rhythm Guitar"
const distortion_guitar = note(`<
  A B@7 C@3 D C@3 D ~ E@2 F E G E G H E H G H E H G I J H K C@3 D C@3 D ~ F E G E G H E H G H E H G I J H K C@3 D C@3 L
  M N O P Q R S T M N O U Q R S V W X Y ~ W X Z ~@5 C@3 D C@3 D C D AA@2 AB ~ AA@2 AC ~ AD
>`.pickRestart({
  A: "~@11 e2!5", B: "e2!16", C: "e2 g2 e2 g2 [a2,e3] g2 [a2,e3] g2 a#2 g2 a2 g2 a#2@2 d3@2",
  D: "e2 g2 e2 g2 [a2,e3] g2 [a2,e3] g2 a#2 a2 g2 e2 ~@4", E: "e2!2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 a2@3 d3",
  F: "e2!2 ~ e2 ~ e2 ~ e2 a2@3 d3 a2@3 d3", G: "e2!2 ~ e2 ~ e2 ~ e2 a2@2 g2!2 a2@2 g2 f2",
  H: "e2!2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2!5", I: "[g2,d3,g3]!10 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@4",
  J: "[g2,d3,g3]!8 ~ [a#2,f3,a#3]@3 [a2,e3,a3]@2 [g#2,d#3,g#3]@2", K: "e2!2 ~ e2 ~ e2 ~ e2 a#2 a2 g2 e2 ~@4",
  L: "e2 g2 e2 g2 [a2,e3] g2 [a2,e3] g2 ~ [g2,d3,g3]@3 [f#2,c#3,f#3]@2 [f2,c3,f3]@2", M: "e2 ~ e2 ~ [e2,b2,e3]@12",
  N: "c3 ~ c3 ~ [c3,g3,c4]@12", O: "c#3 ~ c#3 ~ [c#3,g#3,c#4]@12",
  P: "d3 ~ d3 ~ [d3,a3,d4]@5 [a#2,f3,a#3]@3 [a2,e3,a3]@2 g2@2", Q: "e2 ~ [e2,b2,e3]@14", R: "~ [c3,g3,c4]@7",
  S: "~ [c#3,g#3,c#4]@7", T: "~@2 [d3,a3,d4]@7 [a#2,f3,a#3]@3 [a2,e3,a3]@2 g2@2",
  U: "d3 ~ d3 ~ [d3,a3,d4]@5 [a#2,f3,a#3]@3 [a2,e3,a3]@4", V: "~@2 [d3,a3,d4]@7 [a#2,f3,a#3]@3 [a2,e3,a3]@3 ~",
  W: "e3@2 e2!2 e3@2 e2!2 e3@2 g3 ~@3 e2!2", X: "e3@2 e2!2 e3@2 e2!2 e3@2 a3 ~@3 e2!2",
  Y: "e3@2 e2!2 e3@2 e2!2 e3@2 g3 ~@3 d4!2", Z: "e3@2 e2!2 e3@2 e2!2 e3@2 g3 ~@3 e5!2",
  AA: "e3@2 e2!2 e3@2 e2!2 e3@2 ~@4 e2!2", AB: "e3@2 e2!2 e3@2 e2!2 e3@2 ~@4 d4!2",
  AC: "e3@2 e2!2 e3@2 e2!2 e3@2 ~@4 e5!2", AD: "e2!4 ~ e2 ~@3 a2@2 g2 ~ g2 [e2,b2,e3]@2",
})).s("gm_distortion_guitar").gain(0.62).pan(0.7)

// other · distortion guitar · "Guitar Fills"
const distortion_guitar_2 = note(`<
  ~@7
  [~@8 a#3 a3 g3 e3@4 ~]
  ~@8
  [e2!2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 a2@3 d3]
  ~@27
  [e2!2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 a2@3 d3]
  ~@72
>`).s("gm_distortion_guitar").gain(0.28).pan(0)

// other · guitar harmonics
const guitar_harmonics = note("<~@73 A ~@9 B ~@2 C D C ~ C D C ~@15 C D C ~ C D C E ~>".pickRestart({
  A: "~@3 a#4@4 ~", B: "b4@3 ~@13", C: "~@5 d4@2 ~", D: "~@5 c#4@2 ~", E: "a5 ~@2 g5@2 ~ f#5 ~@2 e5@2 ~ d5 ~ a4@2",
})).s("gm_guitar_harmonics").gain(0.29).pan(0.7)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@8 A@3 B A@3 B C@3 D E F E F G H G F G E G F I J G K A@3 B A@3 B L D E F E F G H G F G E G F M J G K A@3 B A@3 N O P
  Q R S T U V W P Q R W X Y R Z AA AB AC Z AA AB AC AD AE AF AG A@3 B A@3 B A B Z AA AB AC Z AA AB AC AH
>`.pickRestart({
  A: "e1 g1 e1 g1 a1 g1 a1 g1 a#1 g1 a1 g1 a#1 b1 d2@2", B: "e1 g1 e1 g1 a1 g1 a1 g1 a#1 a1 g1 e1 ~@4", C: "e1@3 ~@13",
  D: "e1 e1@2 e1@2 e1@2 e1 a1 a#1 b1 d2 a1 a#1 b1 d2", E: "e1 e1@2 e1@2 e1@2 e1@2 e1@2 e1 a1 a#1 b1 d2",
  F: "e1 e1@2 e1@2 e1@2 e1 a1 [a#1,b1] g1!2 a1 [a#1,b1] g1 f1", G: "e1 e1@2 e1@2 e1@2 e1@2 e1@2 e1!3 e1@2",
  H: "e1 e1@2 e1@2 e1@2 e1@2 e1@2 e1!2 a1 [a#1,b1] e2", I: "g1!9 ~ g1@2 g1@3 ~", J: "g1!8 ~ a#1@3 a1@2 g#1@2",
  K: "e1 e1@2 e1@2 e1@2 e1 a#1 a1 g1 e1 ~@4", L: "e1!2 ~@14", M: "g1!9 ~ g1@2 g1@2 ~@2",
  N: "e1 g1 e1 g1 a1 g1 a1 g1 ~ g1@2 ~ f#1@2 f1@2", O: "e1@2 e1@2 e1 e1@2 ~ e1!4 e2@3 ~",
  P: "c2@2 c2@2 c2 c2@2 ~ c2!5 c2@2 ~", Q: "c#2@2 c#2@2 c#2 c#2@2 ~ c#2!6 c#2@2",
  R: "d2@2 d2@2 d2!2 d2@2 ~ a#1@2 ~ a1@2 g1@2", S: "e1@2 e1@2 e1!2 e1@2 ~ e1@4 e1@2 ~",
  T: "~ c2@3 ~ c2@3 ~ c2@3 ~ c2@2 ~", U: "~ c#2@3 ~ c#2@3 ~ c#2@3 ~ c#2@2 ~", V: "~ d2@2 ~ d2!3 d2@2 a#1@2 ~ a1@2 g1@2",
  W: "e1@2 e1@2 e1 e1@2 ~ e1!4 e1@3 ~", X: "~ c2@2 c2 c2@2 ~ c2 c2@2 c2!2 c2@2 c2@2",
  Y: "c#2@2 c#2!2 c#2@2 c#2@2 c#2@2 c#2 e2 f#2 c#2 e2@2", Z: "e2 d2 e1!2 e2 d2 e1!2 e2 d2 e1!2 e2@2 e1!2",
  AA: "e2 d2 e1!2 e2 d2 e1!2 e2 d2 a1@3 ~ e1!2", AB: "e2 d2 e1!2 e2 d2 e1!2 e2 d2 a#1@3 ~ e2!2",
  AC: "a3 g3 e3 g3 f#3 d3 f#3 f3 c#3 e3 d3 b2 d3 c#3 a2@2", AD: "e1 e1@2 ~ e2@6 ~@6",
  AE: "e1 e1@2 ~ e2@3 ~ e1 e1@2 ~@5", AF: "e1 e1@2 ~ e2@4 ~@8", AG: "e1 e1@2 ~ e2@3 ~ a#1 a1 g1 e1@4 ~",
  AH: "e1!3 e1@2 e1@2 ~@2 [a1,a#1] a1 g1@2 g1 e1@2", // A#maj7
})).s("gm_electric_bass_finger").gain(0.33)

// bass · contrabass · "Flanging Effects"
const bass_2 = note("<~ [e2 ~@3 e2 ~@3 e2 ~@3 e2 ~@3]!7 ~@109>").s("gm_contrabass").gain(0.13).pan(0.7)

// other · pad sweep · "Flanging Effects"
const pad_sweep = note("<A@8 ~@109>".pickRestart({
  A: "[~@6 e2@57 ~]/8",
})).s("gm_pad_sweep").gain(0.22).pan(0.4)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@31 [~@14 x!2] ~@25 [~@14 x!2] ~@36 x!4 ~@19>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@18 [~ x!3] [~ x ~ x ~ x ~ x ~@8] ~@24 [~@8 x ~@3 x ~@2 x] [x!2 ~ x ~ x ~ x ~@8] ~@71>")
  .gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 A ~@11 B ~@13 A ~@11 B ~@59>".pickRestart({
  A: "~@8 x!2 ~@2 x!2 ~@2", B: "~@12 x!2 ~@2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A B@2 C A B@2 D ~@4 E F E G F@3 H E F@2 I ~@2 F J B@3 C B@3 D ~@2 E F E G F@4 E F@2 I ~@2 E K B@3 D B@3 L F@3 M
  N@3 O E F@2 M N@3 O B@3 F B@3 F P@3 ~ B@3 C B@3 C B C B@3 F B@3 F ~
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!3 ~ x ~ x ~@9", D: "x!4 ~@4", E: "~ x!3", F: "x!4", G: "~@2 x!2",
  H: "x ~@3 x ~@3 x!2 ~@2 x ~@3", I: "x ~ x ~ x!2 ~@2", J: "x ~ x!2 ~@4", K: "x ~@2 x!2 ~ x ~@9", L: "x!2 ~@6", M: "x",
  N: "~ x ~ x ~ x ~ x", O: "~ x ~@6", P: "~@4 x!3 ~",
})).gain(0.48)

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

stack(
  distortion_guitar, distortion_guitar_2, guitar_harmonics, bass, bass_2, pad_sweep, kick, snare, low_tom, hihat,
  mid_tom, open_hat, crash
)

More by Pantera