Strudelify

The Cisco Kid

War

KeyD minorTempo142 bpm
0:00/0:00
// The Cisco Kid — War
// 142 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 8 "HARMONICA(1N)" harmonica (copy of ch 7 "SAX(2N)" tenor sax)
// note: Full arrangement: all 157 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(142/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.

// chords · lead 8 bass lead · "Harmonies(2N)"
const lead_8_bass_lead = note("<~@116 A B@2 ~ A C@2 ~ A C@2 ~ A D@2 ~ E F G H ~@4 E F G H ~@13>".pickRestart({
  A: "a4 ~ a4 ~ a4 ~@3", B: "[a4@2 ~@2 a4 ~@3 g4@3 ~ f4 ~ f4@4 e4 ~@13]/2",
  C: "[a4@2 ~@2 a4@2 ~@2 g4@3 ~ f4 ~ f4@4 e4@2 ~@12]/2", D: "[a4@2 ~@2 a4@2 ~@2 g4@2 ~@2 f4 ~ f4@4 e4@2 ~@12]/2",
  E: "[a4,d5] ~@3 [g4,c5] ~@3", F: "[f4,a4] ~@3 [g4,c5] ~@3", G: "d5 c5 [f4,a4] [g4,c5], a4 ~ g4 ~@5",
  H: "[f4,a4]@8 d4@7 ~, ~@8 f4@5 ~@3", // F
})).s("gm_lead_8_bass_lead").gain(0.46)

// chords · clavinet · "CLAVINET(4N)"
const clavinet = note(`<
  ~ A B C D E B ~@2 A B C D E F G H I J I K L K L K L K L K L K L K L K L K L K L K L K L M N K L M N K L K L M N M N K
  L M N M N M N M O P Q R S P T U@2 K L K L K L K L M N K L M N K L K L M N M N K L M N M N M N M O P V W X Y Q Z@2 K L
  M N M N K L AA AB AC AD AE AB AF AG AH AI AJ AK AH AL AM AN AH AI AO AP AH AQ AF AC P V W X Y Q Z@2 AR
>`.pickRestart({
  A: "~@7 c4", B: "d4 c4 d4 ~@5", C: "~@7 b3", D: "c4 b3 c4 ~@4 f3", E: "g3 f3 g3 ~@4 c4",
  F: "d4@2 c4 ~ d4@2 ~@8 [f4,d5]@2, ~@14 a4 ~", G: "~ [g4,c5,e5] ~ a4 [d5,f5] ~ [g4,c5,e5] ~",
  H: "~ [g4,c5,e5] ~@2 [f4,a4,d5] ~ [g4,c5,e5] ~", I: "d4 [g4,c5,e5] ~@2 [a3,f4,a4,d5] ~ [c4,g4,c5,e5] ~",
  J: "d4 [f4,d5] ~@2 [a3,g4,c5,e5] ~ c4 [d5,f5], ~@2 a4 ~@11 a4 ~", // Dm Am7 Dm
  K: "~@2 [f4,a4,d5] ~@5 [f4,a4,d5] ~@3 [g4,c5,e5] ~ [a4,d5,f5] ~", // Dm C Dm
  L: "~@2 [c5,e5] ~@5 [f4,a4,d5] ~@3 [g4,c5,e5] ~ [f4,a4,d5] ~, ~ g4 ~@6", // C Dm C Dm
  M: "~@2 [f4,a4,d5] ~@5 [f4,a4,d5] ~ [f4,a4,d5] ~ [g4,c5,e5] ~ [a4,d5,f5] ~", // Dm C Dm
  N: "~@2 [g4,c5,e5] ~@5 [f4,a4,d5] ~ [f4,a4,d5] ~ [g4,c5,e5] ~ [f4,a4,d5] ~", // C Dm C Dm
  O: "~@2 [g4,c5,e5,a6,b6,c7] [b5,c6,d6,e6,f6,g6] [f4,c5,d5,e5,f5,g5,a5,c6] ~@2 c7 [e6,f6,g6,a6,b6] [g5,a5,b5,c6,d6] [b4,c5,d5,e5,f5] [e4,f4,g4,a4] [a3,b3,c4,d4] [f3,g3] [a2,b2,c3,d3,e3] g2", // Cmaj7 Fmaj7 Em G Bdim Fmaj7 D7 Fsus2 …
  P: "[e4,g4,c5]@7 ~", Q: "[f4,ab4,db5]@7 ~", R: "[f4,a4,d5]@13 ~@3",
  S: "[f6,g6,a6,b6] [f5,g5,a5,b5,c6,d6,e6] [c5,d5,e5] ~@3 [f6,g6,a6,b6,c7] [b5,c6,d6,e6] [e5,f5,g5,a5] [a4,b4,c5,d5] [e4,f4,g4] [c4,d4] ~@4", // G7 Fmaj7 C F Cmaj7 Fmaj7 D7 Em …
  T: "[f4,ab4,db5]@13 ~@3", U: "[[f4,a4,d5]@7 ~]/2", V: "[f4,ab4,db5]@15 ~",
  W: "[f4,a4,d5] ~ [f4,a4,d5] ~ [g4,c5,e5] ~ [a4,d5,f5] ~@3 [g4,c5,e5] ~@5", // Dm C Dm C
  X: "[g4,c5,e5] g4 [c5,e5] ~ [a4,d5,f5] ~@3 [f4,a4,d5] ~ [f4,a4,d5] ~ [g4,c5,e5] ~@3", Y: "[e4,g4,c5]@15 ~",
  Z: "[[f4,a4,d5]@13 ~@3]/2", AA: "~ [f4,d5] ~ [g4,c5] ~ [a4,d5,f5] ~ [g4,c5,e5], ~@2 a4 ~@3 e5 ~@9",
  AB: "~ [f4,a4,d5] ~ [f4,a4,d5] ~ [g4,c5,e5] ~@2", AC: "~ [f4,a4,d5] ~ [g4,c5,e5] ~ [a4,d5,f5] ~@2",
  AD: "[a4,d5,f5] ~ [a4,d5,f5] ~ [c5,e5] ~@3 [f4,a4,d5]@2 ~@2 [g4,e5] ~@3, ~@2 g4 ~@3 c5 ~", // Dm C Dm C
  AE: "~ [f4,d5] ~ [g4,c5,e5] ~ [a4,d5,f5] ~ [g4,c5,e5], ~@2 a4 ~@13", // Dm C Dm C
  AF: "~ [f4,a4,d5] ~ [g4,c5,e5] ~ [a4,d5,f5] ~ [g4,c5,e5]", // Dm C Dm C
  AG: "~@2 [a4,d5,f5]@2 ~@4 [g4,c5,e5] ~ [g4,c5,e5] ~ [f4,a4,d5]@2 ~@2", // Dm C Dm
  AH: "~ [f4,a4,d5] ~ [f4,a4,d5] ~ [g4,c5,e5] ~ [a4,d5,f5]", AI: "~ [g4,c5,e5] ~ [f4,a4,d5] ~ [g4,c5,e5] ~@2",
  AJ: "~ [f4,a4,d5] ~ [f4,a4,d5] ~ [g4,c5] ~ [a4,d5,f5], ~@10 e5 ~@5", // Dm C5 Dm
  AK: "~@2 [g4,c5,e5]@2 ~@2 [f4,a4,d5]@2 ~@2 [g4,c5,e5] ~ [g4,c5,e5]@2 ~@2", // C Dm C
  AL: "~ [g4,c5,e5] ~ [f4,a4,d5] ~ [g4,c5,e5] ~ [a4,d5,f5]", // C Dm C Dm
  AM: "~@2 [f4,a4,d5] ~@3 [f4,a4,d5]@2 ~@2 [g4,c5,e5]@2 ~@2 [a4,d5,f5]@2", // Dm C Dm
  AN: "~@2 [g4,c5,e5]@2 ~@4 [a4,d5,f5] ~ [a4,d5,f5] ~ [g4,c5,e5]@3 ~", // C Dm C
  AO: "~@2 [f4,a4,d5]@2 ~@2 [f4,a4,d5]@2 ~@2 [g4,c5,e5]@3 ~@3", // Dm C
  AP: "[a4,d5,f5] ~ [a4,d5,f5] ~ [g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [a4,d5,f5]@2 ~@2", // Dm C Dm
  AQ: "~@2 [g4,c5,e5]@2 ~@4 [g4,c5,e5] ~ [g4,c5,e5] ~ [f4,a4,d5]@2 ~@2", AR: "[d5,f5,a5,d6] ~@7",
})).s("gm_clavinet").gain(0.31)

// chords · distortion guitar · "WahGuitar(4N)"
const distortion_guitar = note(`<
  ~@10 A@2 B C D E F G F G F G F H F I F G J G F K F G F L F G F H F I F G J G F K F G F L F G F H F I F G J G F K F G F
  L M N O P Q R O P F G F H F I F G J G F K F G F L F G F H F I F G J G F K F G F L M N O P Q R O P F G F H F I F G J G
  F K F G F L F G F H F I F G J G F K F G F L M N O P Q R O P S
>`.pickRestart({
  A: "[[a3,c4,d4]@12 ~@3 b2]/2", B: "c3 b2 c3 ~@4 f2", C: "g2 f2 g2 ~@4 c3",
  D: "d3@2 c3@2 d3 ~@3 [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~", // Dm
  E: "d4 ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~@3", // Dm C
  F: "[f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~", // Dm
  G: "[f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [g3,c4,e4] ~ [f3,a3,d4] ~", // Dm C Dm
  H: "[f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [g3,c4,e4] ~", // Dm C
  I: "[f3,a3,d4] ~ [f3,a3,d4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~", // Dm C Dm C
  J: "[f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~", // Dm F Dm
  K: "[f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [f3,a3,d4] ~", // Dm C Dm
  L: "[f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~", // Dm C Dm
  M: "[e3,g3,c4]@13 ~@3", N: "[f3,ab3,db4]@13 ~@3",
  O: "~@2 [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~", // Dm
  P: "[f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [g3,c4,e4] ~ [f3,a3,d4] ~ [g3,c4,e4] ~ [f3,a3,d4] ~", // Dm C Dm C Dm
  Q: "[e3,c4]@15 ~, g3@13 ~@3", R: "[f3,ab3,db4]@7 ~", S: "[d4,f4,a4,d5] ~@7",
})).s("gm_distortion_guitar").gain(0.26)

// bass · slap bass 2 · "BASS(2N)"
const bass = note(`<
  ~ A B C D E F G H I B C D I J K L M N@2 O N P Q N@3 R N@2 S T N@2 U V O N P Q N@3 R N@2 S T N@2 U V O N P Q N@3 R N@2
  S T N@2 U V W X Y Z W X AA AB O N P Q N@3 R N@6 U V O N P Q N@3 R N@2 P Q N@3 AC W X Y Z W X AA AD O N P AE N@3 R N@2
  AF AG N@3 AE O N P@2 N@3 R N@2 P@2 N@3 AC W X Y Z W X AA AB AH
>`.pickRestart({
  A: "~@7 c2", B: "d2 c2 d2 ~@5", C: "~@7 b1", D: "c2 b1 c2 ~@4 f1", E: "g1@2 f1@2 g1 ~@9 c2 ~", F: "d2 c2 d2 ~@4 gb1",
  G: "g1@2 ab1@2 a1@2 f1@9 ~", H: "d2 c2 d2 ~@4 f1", I: "g1 f1 g1 ~@4 c2", J: "d2@2 c2@2 d2@2 ~@8 gb1 ~",
  K: "g1 ~ ab1 ~ a1@2 f1@7 ~ c2@2", L: "d2@2 c2 ~ d2@2 ~@10", M: "~@4 a1 ~ c2 ~", N: "d2 ~@3 a1 ~ c2 ~",
  O: "d2@3 ~@5 a1@2 ~@2 c2@2 ~@2", P: "d2@2 ~@6 a1@3 ~ c2@2 ~@2", Q: "g2@2 ab2 ~ a2 ~ g1@2 a1@3 ~ c2@2 ~@2",
  R: "gb1 ~ g1 ~ a1@2 g1@2 a1@3 ~ c2@2 ~@2", S: "d2@3 ~@5 a1@2 ~@2 c2 ~ gb1 ~", T: "g1 ~ ab1 ~ a1@2 f1@10",
  U: "d2@2 ~@6 a1@2 ~@2 c2 ~ gb1 ~", V: "g1 ~ ab1 ~ a1 ~ f1@9 ~", W: "c2", X: "db2", Y: "d2@14 gb1 ~",
  Z: "g1 ~ ab1 ~ a1@2 f1@8 ~@2", AA: "d2@7 f1", AB: "g1 f1 g1 f1 g1 a1 c2@2", AC: "d2 ~@3 a1 ~ d2 ~",
  AD: "g1@2 f1@2 g1@2 ~@2 a1@3 ~ c2@3 ~", AE: "g2@2 ab2 ~ a2 ~ f2@2 a1@3 ~ c2@2 ~@2", AF: "d2@2 ~@6 a1@3 ~ c2@2 f1@2",
  AG: "g1@2 f1 ~ g1@2 f1@8 ~@2", AH: "d2 ~@7",
})).s("gm_slap_bass_2").gain(0.36)

// other · overdriven guitar · "ElecGtr(2N)"
const overdriven_guitar = note("<~@54 A@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@89>".pickRestart({
  A: "[~@8 a3@2 c4 ~ f4@2 d4@4 ~@14]/2", B: "[~@8 a3@2 c4 ~ f4@2 d4@10 ~@8]/2",
})).s("gm_overdriven_guitar").gain(0.36)

// other · tenor sax · "SAX(2N)"
const tenor_sax = note(`<
  ~@16 A ~ A ~ A ~ B C A ~ B C A ~ B C D ~ B C A ~@17 E@2 ~@2 E@2 ~@8 F G H@2 I J H@2 ~@2 K L M@2 K L M@2 K N M@2 K N
  M@2 K N M@2 K N M@2 K N O@2 K P F G H@2 I J H@2 A ~ Q C A ~ Q C A ~ Q C A ~ Q C A ~@7 A ~@5 A ~ F G H@2 I J H@2 A
>`.pickRestart({
  A: "[d5,f5] ~@7", B: "~@8 ab5@2 ~ g5@2 f5@2 ~", C: "d5 ~@7", D: "~@4 [d5,f5] ~@3",
  E: "[~@8 a4@2 c5 ~ f5@2 d5@4 ~@14]/2", F: "c5", G: "db5", H: "[d5@7 ~]/2", I: "a5", J: "f5", K: "~@2 a4 c5 d5 ~@3",
  L: "a4@2 c5 ~ d5@2 ~@6 a4@2 c5@2", M: "f5/2", N: "a4 c5 d5 ~@3 a4 c5", O: "[d5,f5]/2", P: "a4 c5 d5 ~@5",
  Q: "[d5,f5]@2 ~@6 ab5@2 ~ g5@2 f5@2 ~", // Dm
})).s("gm_tenor_sax").gain(0.41)

// drums · kick
const kick = s("bd").struct("<~@2 A B C@3 D C@61 A@2 ~ A C A ~ C@32 A@8 C@32 A@9>".pickRestart({
  A: "x", B: "~@7 x", C: "x ~@4 x ~ x", D: "x ~@2 x ~ x ~ x",
})).gain(0.41)

// drums · rim
const rim = s("rim").struct("<~@2 A@2 B@65 ~@3 C D ~@2 B@32 E F G H I J G ~ B@32 E F G H I J G ~@2>".pickRestart({
  A: "x!8", B: "x ~ x!3 ~ x!2", C: "~@2 x!3 ~ x!2", D: "x ~ x!3 ~ x ~", E: "x ~@5 x!2", F: "x ~ x!6", G: "x",
  H: "~@4 x!3 ~", I: "x ~@4 x!3", J: "x ~@2 x",
})).gain(0.26)

// drums · snare
const snare = s("sd").struct("<~@41 A ~@9 B ~@19 A ~@27 C ~@11 A ~ A ~@9 C ~@15 C ~@11 A ~ A ~@3>".pickRestart({
  A: "~@3 x", B: "~@3 x!2 ~@3", C: "~@6 x!2",
})).gain(0.41)

// drums · clap
const clap = s("cp").struct(`<
  ~@76 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B C
>`.pickRestart({
  A: "~ x", B: "~@2 x!2", C: "x",
})).gain(0.46)

// drums · hihat
const hihat = s("hh").struct("<A B C B C@12 D@52 C@2 B@2 ~@2 B@2 D@32 E@8 D@32 E@8 F>".pickRestart({
  A: "x!2", B: "x!4", C: "~ x!3", D: "x ~ x!3 ~ x!2", E: "~ x ~ x", F: "x",
})).gain(0.41)

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

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

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@99 A ~@13 B ~@9 C ~@15 C ~@13 B ~@3>".pickRestart({
  A: "~ x ~@6", B: "~ x ~@2", C: "~ x ~@3 x ~@2",
})).gain(0.26)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@15 A ~@3 B ~@19 C ~@7 D ~@15 D ~@3 A ~@5 D ~ D ~@3 B ~@23 B ~@5 E ~@3 D ~@9 D ~ B ~ F ~@3 G ~@7 D ~@6 H I ~ E ~@3 D
  ~ J ~
>`.pickRestart({
  A: "~@6 x!2", B: "~ x ~ x", C: "~@5 x!2 ~", D: "~@3 x", E: "~@2 x!4 ~@2", F: "~@10 x!2 ~@4", G: "~@5 x!3",
  H: "~@3 x ~@3 x ~@3 x ~@3 x", I: "~@3 x ~@2 x ~@7 x ~", J: "x!2 ~ x!2 ~@2 x ~ x ~ x!2 ~@3",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct(`<
  ~@39 A ~@2 B ~@9 B ~@7 B ~@7 B@3 ~ B ~ B ~ B ~@7 B ~@3 B ~@3 B ~ B ~ B ~@3 B ~@3 B ~@3 B@3 ~ B@3 ~ B ~ B ~ B ~ B ~ B ~
  B ~ B ~ B ~ B ~ B ~ B ~@3 B ~@7 B@3 ~ B@3 ~ B
>`.pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.46)

// drums · ride bell
const ride_bell = s("rd").struct("<~@108 A ~@3 A ~@35 A ~@3 A ~@4>".pickRestart({
  A: "~@4 x!3 ~",
})).gain(0.46)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~ x", B: "~@2 x!2",
})).gain(1.15)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
// … 12 more lines

More by War