Strudelify
Apache cover art

The Shadow Tracks

Apache

The Shadows

KeyA minorTempo138 bpm
0:00/0:00
// Apache — The Shadows
// 138 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): MUTED GTR.
setcpm(138/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.

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@2 A B A C D E D F G H I J K L M N O H P Q R S T U R@2 V U W X Y Z W AA AB AC AD AA AE O R S AF U R S T I AG AH AG AI
  AG AJ AK U AL AM AN AL AG AH AO AP AQ AR AS AT AU AV AB AW AX AY AZ BA R@2 BB BC R S BB O BD BE BF BA BG BH BI BJ BG B
  BG C BK@2
>`.pickRestart({
  A: "a1@15 ~", B: "d2@15 ~", C: "d2@7 ~", D: "a1@5 ~ a1 ~ e2@3 ~ c2@3 ~", E: "d2@5 ~ d2 ~ a2@4 f#2@4",
  F: "a1@5 ~ a1 ~ e2@4 c2@4", G: "a1@5 ~ a1 ~ e2@4 c2@3 ~", H: "d2@4 ~@2 d2 ~ a2@4 f#2@4", I: "a1@4 ~@2 a1 ~ e2@4 c2@4",
  J: "a1@4 ~@2 a1@3 ~ a1@2 e2@4", K: "d2@5 ~ d2 ~ a2@4 f2@3 ~", L: "g1@4 ~@2 g1 ~ d2@4 b1@3 ~",
  M: "d2@5 ~ d2 ~ a2@4 f2@4", N: "d2@5 ~ d2@3 ~ d2@3 ~ d2 ~", O: "a1@4 ~@2 a1 ~ e2@4 c2@3 ~",
  P: "a1@4 ~@2 a1 ~ e2@3 ~ c2@4", Q: "a1@4 ~@2 a1@3 ~ a1 ~ e2@4", R: "c2 ~ f2!2 ~@2 f2 ~ c2 ~ f2!2 ~@2 f2 ~",
  S: "c2 ~ f2!2 ~@2 f2 ~ c2 ~ f2!2 ~@2 f2@2", T: "a1@5 ~ a1 ~ a1@7 ~", U: "a1@4 ~@2 a1 ~ e2@4 c2@2 a1 ~",
  V: "a1@5 ~ a1 ~ a1@5 ~@3", W: "f1@5 ~ f1 ~ c2@4 a1@4", X: "g1@5 ~ g1 ~ d2@4 b1@4", Y: "c2@4 ~@2 c2 ~ a1@4 ~@2 a1 ~",
  Z: "a1@4 ~@2 a1 ~ e2@3 ~ c2@2 a1@2", AA: "g1@5 ~ g1 ~ d2@4 b1@3 ~", AB: "c2@5 ~ c2 ~ g2@4 e2@3 ~",
  AC: "c2@5 ~ c2@3 ~ c2 ~ a1@4", AD: "f1@4 ~@2 f1 ~ c2@4 a1@4", AE: "c2@4 ~@2 c2 ~ a1@5 ~@3",
  AF: "a1@4 ~@2 a1 ~ a1@7 ~", AG: "a1@3 ~@3 a1 ~ a1@3 ~@5", AH: "d2@2 ~@4 d2 ~ d2@3 ~@5", AI: "a1@2 ~@4 a1 ~ a1@3 ~@5",
  AJ: "d2@3 ~@3 d2 ~ d2@3 ~@5", AK: "a1@3 ~@3 a1 ~ a1@5 ~@3", AL: "d2@4 ~@2 d2 ~ f2@3 ~ a2@3 ~",
  AM: "g1@4 ~@2 g1 ~ b1@4 d2@4", AN: "d2@4 ~@2 d2 ~ f2@3 ~ a2@4", AO: "a1@3 ~@3 a1 ~ a1@4 ~@2 a1 ~",
  AP: "a1@4 ~@2 a1 ~ c2@4 e2@4", AQ: "f1@4 ~@2 f1 ~ a1@3 ~ c2@4", AR: "g1@5 ~ g1 ~ b1@3 ~ d2@3 ~",
  AS: "c2@5 ~ c2 ~ a1@7 ~", AT: "a1@5 ~ a1 ~ c2@4 e2@4", AU: "f1@4 ~@2 f1 ~ c2@4 a1@3 ~", AV: "g1@5 ~ g1 ~ b1@4 d2@4",
  AW: "c2@5 ~ c2@3 ~ c2 ~ a1@3 ~", AX: "f1@5 ~ f1 ~ a1@3 ~ c2@4", AY: "g1@5 ~ g1 ~ d2@3 ~ b1@3 ~",
  AZ: "c2@4 ~@2 c2 ~ a1@7 ~", BA: "a1@4 ~@2 a1 ~ e2@3 ~ c2@3 ~", BB: "a1@5 ~ a1 ~ a1@6 ~@2",
  BC: "a1@4 ~@2 a1 ~ e2@4 c2@2 a1@2", BD: "f1 ~ f1!2 ~@2 f1 ~ a1 ~ a1!2 ~@2 a1 ~",
  BE: "c2 ~ c2!2 ~@2 c2 ~ f2 ~ f2!2 ~@2 f2 ~", BF: "a1@4 ~@2 a1 ~ a1@6 ~@2", BG: "a1@11 ~ a1@3 ~", BH: "d2@5 ~ d2@2",
  BI: "a1@10 ~@2 a1@3 ~", BJ: "d2@11 ~ d2@3 ~", BK: "[a1@9 ~@7]/2",
})).s("gm_fretless_bass").gain(0.33)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@2 A B A B A C D@3 B E@2 F G H@2 A B E@2 I@2 J@2 K@2 E@2 L M N@2 L M O P L M N@2 I@2 E@2 I@2 Q@2 ~@7 A F M R@2 ~@3 A
  L S@3 L M O T L M U@2 I@2 E@2 V@2 E@2 K@2 E@2 A B W C X C W B Y@2
>`.pickRestart({
  A: "[a3,c4,e4]@15 ~", B: "[f#3,a3,d4]@7 ~", C: "[f#3,a3,d4]@15 ~", D: "[[a3,c4,e4]@47 ~]/3", E: "[[a3,c4,e4]@31 ~]/2",
  F: "[f3,a3,d4]@7 ~", G: "[g3,d4], b3@7 ~", H: "[[f3,a3,d4]@31 ~]/2", I: "[[a3,c4,f4]@31 ~]/2",
  J: "[[a3,c4,e4]@15 ~]/2", K: "[a3,c4,f4]/2", L: "[a3,c4,f4]@15 ~", M: "[g3,b3,d4]@15 ~",
  N: "[g3@7 ~ a3@23 ~, [c4,e4]]/2", O: "[g3,c4,e4]", P: "[g3,a#3,c4,e4]@7 ~", Q: "[a3,c4,e4]/2", R: "[f3,a3,d4]/2",
  S: "[[b3,d4]@15 ~@9 a3@23 ~, g3@23 ~@25, ~@16 [c4,e4]@31 ~]/3", T: "[g3,a#3,c4,e4]@15 ~",
  U: "[g3@6 ~@2 a3@23 ~, [c4,e4]@31 ~]/2", V: "[[a3,c4], f4@15 ~]/2", W: "[a3,c4,e4]@7 ~", X: "[a3,e4]@15 ~, c4@13 ~@3",
  Y: "[[a3,c4,e4]@19 ~@13]/2", // Am
})).s("gm_synth_strings_1").gain(0.11).pan(0.4)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A@5 B C D@3 E D@2 F G F@2 D E D@2 H I J K H I J L M G N D O G P Q M G N D H I J K H I J L R S R@2 T U R D F V W@2 R
  U R D X V Y D M G P Q M G Z D H I AA D AB I AA D H I AC AD@8 AE AF AG
>`.pickRestart({
  A: "[~@16 [a3,c4,e4]@13 ~@3 [a3,d4,f#4]@13 ~@3 [e3,a3,c4,e4]@14 ~@2 [d3,a3,d4,f#4]@13 ~@3, ~@15 [a2,c3,e3]@14 ~@2 [f#2,a2,d3]@14 ~@2 [a2,c3]@15 ~ [f#2,a2]@14 ~@3]/5", // Am D Am D Am D Am F#m
  B: "[e3,a3,c4,e4]@4 [e3,a3,c4,e4] ~ [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@4 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~", // Am
  C: "[d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]!2 ~ [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~", // D
  D: "[e3,a3,c4,e4]@2 [e3,a3,c4,e4]!3 ~ [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~", // Am
  E: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!3 ~ [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~", // D
  F: "[d3,a3,d4,f4]@2 [d3,a3,d4,f4]!3 ~ [d3,a3,d4,f4]@2 [d3,a3,d4,f4]@2 [d3,a3,d4,f4]@2 [d3,a3,d4,f4]@2 [d3,a3,d4,f4] ~", // Dm
  G: "[d3,g3,b3,g4]@2 [d3,g3,b3,g4]!3 ~ [d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~", // G
  H: "[f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3 ~ [f3,a3,c4,f4]!2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3 ~ [f3,a3,c4,f4]!2", // F
  I: "[f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3 ~ [f3,a3,c4,f4]!2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3 ~ [f3,a3,c4,f4] ~", // F
  J: "[e3,a3,c4,e4]@4 [e3,a3,c4,e4] ~ [e3,a3,c4,e4] ~ [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~ [e3,a3,c4,e4] ~", // Am
  K: "[e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~ [e3,a3,c4,e4]@4 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~", // Am
  L: "[e3,a3,c4,e4]@2 [e3,a3,c4,e4]!3 ~ [e3,a3,c4,e4]@4 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~", // Am
  M: "[f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3 ~ [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4] ~", // F
  N: "[e3,g3,c4,e4]@2 [e3,g3,c4,e4]!3 ~ [e3,g3,c4,e4] ~ [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~", // C Am
  O: "[f3,a3,c4,f4]@3 [f3,a3,c4,f4]!2 ~ [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4] ~", // F
  P: "[e3,g3,c4,e4]@2 [e3,g3,c4,e4]!3 ~ [e3,g3,c4,e4]@4 [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4] ~", // C
  Q: "[e3,g3,c4,e4]@2 [e3,g3,c4,e4]!3 ~ [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4] ~", // C
  R: "[e3,a3,c4,e4]@3 ~@3 [e3,a3,c4,e4] ~ [e3,a3,c4,e4]@3 ~@5", // Am
  S: "[d3,a3,d4,f#4]@2 ~@4 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@3 ~@5", // D
  T: "[e3,a3,c4,e4]@2 ~@4 [e3,a3,c4,e4] ~ [e3,a3,c4,e4]@3 ~@5", // Am
  U: "[d3,a3,d4,f#4]@3 ~@3 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@3 ~@5", // D
  V: "[d3,g3,b3,g4]@2 [d3,g3,b3,g4]!3 ~ [d3,g3,b3,g4]@4 [d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2 [d3,g3,b3,g4] ~", // G
  W: "[d3,a3,d4,f4]@2 [d3,a3,d4,f4]!3 ~ [d3,a3,d4,f4]@4 [d3,a3,d4,f4]@2 [d3,a3,d4,f4]@2 [d3,a3,d4,f4] ~", // Dm
  X: "[f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3 ~ [f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4] ~", // F
  Y: "[e3,g3,c4,e4]@2 [e3,g3,c4,e4]!2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4] ~ [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~", // C Am
  Z: "[e3,g3,c4,e4]@2 [e3,g3,c4,e4]!3 ~@3 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~", // C Am
  AA: "[e3,a3,c4,e4]@2 [e3,a3,c4,e4]!3 ~ [e3,a3,c4,e4] ~ [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~", // Am
  AB: "[f3,a3,c4,f4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4]!2 ~ [f3,a3,c4,f4]!2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3 ~ [f3,a3,c4,f4]!2", // F
  AC: "[e3,a3,c4,e4]@2 [e3,a3,c4,e4]!2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~ [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~ [e3,a3,c4,e4] ~", // Am
  AD: "[[e3,a3,c4,e4]@2 [e3,a3,c4,e4]!3 ~ [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,c4,e4] ~ [e3,a3,c4,e4]@14 ~@2 [d3,a3,d4,f#4]@13 ~@3 [e3,a3,c4,e4]@14 ~@2 [d3,a3,d4,f#4]@13 ~@3 [e3,a3,c4,e4]@14 ~@2 [d3,a3,d4,f#4]@13 ~@3 [e3,a3,c4,e4]@14 ~ [f#2,a2], ~@15 [a2,c3]@14 ~@2 [f#2,a2]@14 ~@2 [a2,c3]@14 ~@2 [f#2,a2]@14 ~@2 [a2,c3]@15 ~ [f#2,a2]@14 ~@2 [a2,c3]@14 ~@3]/8", // Am D Am D Am D Am F#m …
  AE: "[d3,a3,d4,f#4]@3 ~", AF: "[a3,c4,e4,a4]!16", AG: "[a3,c4,e4,a4]@5 ~@11",
})).s("gm_acoustic_guitar_steel").gain(0.13).pan(0.6)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note("<~@50 A B ~ C A B ~@5 C A B ~@18 D ~@17>".pickRestart({
  A: "~@12 a3 ~ e3 ~", B: "~@8 e3 ~@3 d3 ~@3", C: "~@12 e3@3 ~", D: "~@2 f3 ~@13",
})).s("gm_electric_guitar_muted").gain(0.63).pan(0.4)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~@20 A@2 ~@34 B@2 ~@6 C@2 ~@34>".pickRestart({
  A: "[~@17 [c4,a4]@14 ~, ~@15 e3@14 ~@3, ~@8 a3@7 ~]/2", B: "[~@17 a4@14 ~, ~@15 e3@14 ~@3, ~@8 [a3,c4]@7 ~]/2",
  C: "[~@8 [c4,a4]@7 ~, ~@15 [e3,a3]@14 ~@3]/2", // F A5
})).s("gm_electric_guitar_jazz").gain(0.28).pan(0.4)

// drums · kick
const kick = s("bd").struct("<A@6 B@24 A@12 C@2 B@2 C@2 B@18 A@12 D@2 B@2 D@2 B@6 A@7 E ~@2>".pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3", C: "x!4", D: "x!3 ~", E: "x",
})).gain(0.45)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@30 [~@3 x ~@4]!12 ~@24 [~@3 x ~@4]!12 [~@3 x]!2 ~@2 [~@3 x]!2 ~@16>").gain(0.2)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  A@22 B@2 C A B@2 A@14 B@2 A@2 B@2 A@2 D@7 A@5 D@3 E A@12 B@2 A@2 E B A@2 B@2 A@9 ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "x!4", C: "x ~@2 x", D: "x ~@2 x!2 ~@3", E: "~ x!3",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<[x!8]!6 ~@84 [x!8]!7 ~@3>").gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@50 [~@3 x]!7 ~@5 [~@3 x]!3 ~@33 [x!16] x>").gain(0.2)

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

// drums · ride
const ride = s("rd").struct("<~@30 A B@11 ~@24 A B@7 C B@3 ~@22>".pickRestart({
  A: "~@3 x!2 ~ x ~ x ~ x ~ x ~ x ~", B: "x!2 ~ x!2 ~ x ~ x ~ x ~ x ~ x ~", C: "~ x ~ x!2 ~ x ~ x ~ x ~ x ~ x ~",
})).gain(0.3)

stack(
  bass, synth_strings_1, acoustic_guitar_steel, electric_guitar_muted, electric_guitar_jazz, kick, kick_soft, snare,
  snare_soft, hihat, mid_tom, open_hat, crash, ride
)

More by The Shadows