Strudelify

Walk

Pantera

KeyD minorTempo115 bpm
0:00/0:00
// Walk — Pantera
// 115 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 153 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass pick
const bass = note(`<
  ~@2 A B C D@2 E F G H I F G H J@2 C D@2 K C D@2 K L M C D L M C D L N O P F G H J F G H J@2 C D@2 Q C D@2 K C D@2 K L
  M C D L M C D L N O P F G H J F G H J F G H J F G H J@4 R S R T U V U W X Y X Z AA AB AA AC AD ~@2 A B F G H J F G H J
  F G H J F G H J@2 AE@16 AF ~@9
>`.pickRestart({
  A: "~@5 d1!7", B: "d1!7 d1@2 a1@3", C: "d1@2 ~@2 d1 ~ e1@2 eb1@2 d1@2 ~@4 d1 ~ e1@2 eb1@2 d1@2",
  D: "~@4 d1 ~ e1@2 eb1@2 d1@2 ~@4 d1 ~ e1@2 eb1@2 d1@2", E: "~@4 d1 ~ e1@2 eb1@2 d1@2 ~@2 d1 ~@3 a1@6",
  F: "d1@2 ~@2 d1 ~ e1@2 eb1@2 d1@2 ~@4 d1 ~ bb1@6", G: "d1@2 ~@2 d1 ~ e1@2 eb1@2 d1@2 ~@4 d1 ~ ab1@6",
  H: "d1 ~ d1 e1 eb1 d1 ~@2 d1 db2@3", I: "d1!3 eb1 d1 f1 d1 gb1 d1 f1 d1 e1", J: "d1!3 eb1 d1 f1 d1 gb1 d1 f1 d1 eb1",
  K: "~@4 d1 ~ e1@2 eb1@2 d1@2 ~@2 db2@4 db2@6", L: "c2", M: "ab1 a1", N: "ab1", O: "f1", P: "e1 eb1",
  Q: "~@4 d1@2 e1@2 eb1@2 d1@2 ~@2 d1 ~@3 a1@6", R: "d1!3 eb1 d1 f1 d1!3 eb1 d1 f1", S: "d1!3 eb1 d1!2 f1@2 e1@2 c2@2",
  T: "d1!3 f1 d1!2 e2 c2 a1!2 g1 f1", U: "d1!4 f1!2 d1!4 f1!2", V: "d1!6 f1@2 e1@2 c2@2", W: "d1!6 d2!6",
  X: "g1!7 bb1 g1 bb1 g1 a1", Y: "g1!6 bb1@2 a1@2 c2@2", Z: "g1!6 g2!6", AA: "g1 a1!2 c2 a1!2 g1 a1!2 c2 a1!2",
  AB: "g1 a1!2 c2 a1!2 bb1@2 a1@2 a1@2", AC: "g1 a1!5 a2!6", AD: "d1", AE: "d1!3 eb1@2 e1 d1!3 eb1@2 e1", AF: "d1 ~@11",
})).s("gm_electric_bass_pick").gain(0.64)

// bass · electric bass pick · soft notes
const bass_soft = note(`<
  ~@2
  [d1!5 ~@7]
  ~@105
  [d1!5 ~@7]
  ~@34
  [~ d1!2 eb1@2 e1 d1!3 eb1@2 e1]
  [d1!3 eb1@2 e1 d1!3 eb1@2 e1]!8
  [d1!3 eb1@2 e1 d1!3 eb1@2 ~]
>`).s("gm_electric_bass_pick").gain(0.24)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@2 A ~@105 A ~@34 B C D C D C D C D C>".pickRestart({
  A: "x!2 ~@10", B: "~@5 x ~@6", C: "x ~@3 x ~@5 x!2 ~@12", D: "x ~@4 x ~@6",
})).gain(0.21)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@143 A B A B A B A B A C>".pickRestart({
  A: "~ x", B: "~@6 x ~ x ~ x!2", C: "~@3 x!3",
})).gain(0.14)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@2 A B ~@20 A ~@5 C D ~@4 E ~@20 A ~@5 C D ~@4 E ~@17 F@2 ~@15 G ~@3 A B ~@43
>`.pickRestart({
  A: "~@9 x!3", B: "x!6 ~@6", C: "~@19 x ~@4", D: "~@5 x ~@18", E: "~@21 x!3", F: "~@17 x!2 ~@2 x!2 ~", G: "~@10 x!2",
})).gain(0.57)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@16 B ~@5 C ~@4 D ~@21 B ~@5 C ~@4 D ~@18 E@2 ~@15 F ~@48>".pickRestart({
  A: "~@17 x ~@2 x ~ x ~", B: "~@2 x", C: "~@11 x ~@3 x!2 ~@3 x ~@3", D: "~@7 x ~@7 x!2 ~@2 x!2 ~@3", E: "~@7 x ~@4",
  F: "~@6 x!4 ~@2",
})).gain(0.57)

// drums · high tom
const high_tom = s("ht").struct("<~@7 A ~@22 B ~@4 C D ~@26 B ~@4 C D ~@83>".pickRestart({
  A: "~@13 x!2 ~@9", B: "~ x", C: "~ x!2 ~@3", D: "~@18 x!3 ~@3",
})).gain(0.57)

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

// drums · crash · soft notes
const crash_soft = s("cr").struct(`<
  ~@146
  [x ~@2 x ~@2 x ~ x ~@3]
  [x!4]
  [x ~@2 x ~@2 x ~ x ~@3]
  [x!4]
  [x ~@2 x ~@2 x ~ x ~@3]
  [x!4]
  [x ~@2 x ~@2 x ~ x ~@3]
>`).gain(0.14)

// drums · ride bell
const ride_bell = s("rd").struct("<~@25 A B ~@2 C B ~@2 C@2 ~@23 A B ~@2 C B ~@2 C@2 ~@85>".pickRestart({
  A: "~ x!3", B: "x!2 ~@2", C: "x!4",
})).gain(0.43)

stack(bass, bass_soft, kick, kick_soft, snare, snare_soft, low_tom, mid_tom, high_tom, crash, crash_soft, ride_bell)

More by Pantera