Strudelify
KeyA majorTempo210 bpm
0:00/0:00
// FBI — The Shadows
// 210 bpm, 12/8, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 80 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(210/6)

// 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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C D B E B A F G D B C D B E B A F G D B H I J K L M N O P Q A B C D B E B A F G D B C D B E B A F G D B R S T O U
  V W X W Y B A B@3 Z B AA AB AC AD@5 AE
>`.pickRestart({
  A: "a2@5 ~ e2@5 ~ a2@5 ~ e2@4 ~@2", B: "a2@5 ~ e2@5 ~ a2@5 ~ e2@5 ~", C: "a2@5 ~ e2@5 ~ a2@4 ~@2 e2@6",
  D: "a2@4 ~@2 e2@5 ~ a2@5 ~ e2@5 ~", E: "a2@5 ~ e2@5 ~ a2@4 ~@2 e2@5 ~", F: "d2@5 ~ d2@4 ~@2 d2@3 ~ d2 ~ d2@4 ~@2",
  G: "e2@2 ~@2 e2 ~ e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@2 ~@2 e2 ~", H: "e2@5 ~ e2@3 ~ e2 ~ e2@5 ~ e2@2 ~@2 e2@2",
  I: "c2@3 ~ c2 ~ c2@4 c2 ~ c2@3 ~ c2 ~ c2@2 ~@2 c2@2",
  J: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@2 ~@2 f2 ~, ~@12 e2 ~@5 e2 ~@5",
  K: "e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@2 ~@2 e2 ~", L: "c2@2 ~@2 c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2@2",
  M: "f2@2 ~@2 f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~", N: "b2@2 ~@2 b2 ~ b2@2 ~@2 b2 ~ b2@2 ~@2 b2 ~ b2@5 ~",
  O: "e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@2 ~@2 e2@2", P: "b2@3 ~ b2 ~ b2@3 ~ b2 ~ b2@3 ~ b2 ~ b2@3 ~ e2 ~",
  Q: "e2@3 ~ e2 ~ e2@2 ~@2 e2 ~ e2@3 ~ e2 ~ e2@3 ~ e2 ~", R: "e2@5 ~ e2@3 ~ e2 ~ e2@5 ~ e2@3 ~ e2@2",
  S: "c2@3 ~ c2 ~ c2@2 ~@2 c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2@2", T: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~",
  U: "c2@2 ~@2 c2 ~ c2@2 ~@2 c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2@2", V: "f2@3 ~ f2 ~ f2@2 ~@2 f2 ~ f2@3 ~ f2 ~ f2@2 ~@2 f2 ~",
  W: "b2@3 ~ b2 ~ b2@2 ~@2 b2 ~ b2@2 ~@2 b2 ~ b2@2 ~@2 e2 ~", X: "e2@3 ~ e2 ~ e2@2 ~@2 e2 ~ e2@3 ~ e2 ~ e2@2 ~@2 e2@2",
  Y: "e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@2 ~@2 e2 ~ e2@2 ~@2 e2 ~", Z: "a2@5 ~ e2@6 a2@5 ~ e2@5 ~",
  AA: "a2@6 e2@5 ~ a2@5 ~ e2@4 ~@2", AB: "d2@5 ~ d2@5 ~ d2@5 ~ d2@4 ~@2", AC: "e2@5 ~ e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@5 ~",
  AD: "a2@5 ~ e2@5 ~ a2@6 e2@5 ~", AE: "a2@5 ~ e2@5 ~ a2@6 e2@4 ~@2",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B C D@2 E F@2 G H D I C D@2 E F@2 G H D I J K L M N O P Q R S A B C D@2 E F@2 G H D I C D@2 E F@2 G H D I J K L T N
  O P U R S A B V W X Y X Z AA AB AC D@2 AD AE I
>`.pickRestart({
  A: "~@4 [e3,a3,c#4] ~@5 [e3,a3,c#4] ~@2 [a3,c#4] e3 [e3,a3,c#4] ~@5 c#4 [e3,a3] ~, a2 e2 a2 e2", // A A5
  B: "~@4 [e3,a3,c#4] ~@5 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~ e2@4 [e3,a3,c#4] ~, a2@6 e2@6 a2@7 ~@5", // A
  C: "a2@4 [e3,a3,c#4] ~@5 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~@5 [e3,a3,c#4] ~, ~ e2 a2 e2", // A
  D: "~@4 [e3,a3,c#4] ~@5 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~@5 [e3,a3,c#4] ~, a2 e2 a2 e2", // A
  E: "~@3 c#4 [e3,a3] ~@5 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~@5 [e3,a3,c#4] ~, a2 e2 a2 e2", // A5 A
  F: "[~@4 [e3,a3,c#4] e2@5 [e3,a3,c#4] ~@2 c#4 [e3,a3] [e3,a3,c#4] ~@5 [a3,c#4] e3 a2@5 [e3,a3,c#4] ~@5 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~@4 [e3,a3,c#4] ~@2, a2@6 ~@6 a2@5 e2@6 ~@7 e2@6 a2@6 e2@5 ~]/2", // A A5 A
  G: "d3@4 a3 ~ d3@4 a3 ~ d3@4 a3 ~ d3@3 ~ a3 ~",
  H: "[e2,e3]@2 ~@2 [e2,e3] ~ [e2,e3]@3 ~ [e2,e3] ~ [e2,e3] ~ [e2,e3] ~ [e2,e3] ~ [e2,e3]@3 ~ [e2,e3] ~", // E
  I: "~@4 [e3,a3,c#4] ~@5 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~ e2@4 [e3,a3,c#4] ~, a2 e2 a2 ~", // A
  J: "e3@3 ~ e3 ~ e3@5 ~ e3@3 ~ e3 ~ e3@5 ~, d3 ~@23", K: "c3 ~ c3 ~ c3 ~ c3@3 ~ c3 ~ c3@3 c3 ~@2 c3@3 ~ c3@2",
  L: "f3@3 f3@2 ~ f3@3 ~ f3 ~ [c3,f3]@3 ~ f3 ~ [c3,f3]@3 ~ f3 ~", // F5
  M: "[d#3,e3] ~ e3 ~ e3 ~ [d#3,e3]@2 ~@2 e3 ~ e3@3 ~ e3 ~ e3@3 ~ e3@2, ~@12 d#3 ~@11", // Emaj7
  N: "c3@3 ~ c3@2 c3@5 ~ c3@3 ~ c3 ~ c3@3 ~ c3 ~", O: "f2@3 ~ f2 ~ f2@3 ~ f2@2 f3@3 ~ f3@2 f3@3 ~ f3@2",
  P: "b2@3 ~ b2 ~ b2@5 ~ b2@3 ~ b2@2 b2@5 ~", Q: "e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@3 ~ e2@2 e2@3 ~ e2 ~",
  R: "b2 ~ b2 ~ b2 ~ b2@3 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2@3 ~ b2@2", S: "e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@5 ~ e2@3 ~ e2 ~",
  T: "[d#3,e3] ~ e3 ~ e3 ~ e3@3 ~ e3 ~ e3@3 ~ e3 ~ e3@3 ~ e3@2, ~@6 d#3 ~@5 d#3 ~@11", // Emaj7
  U: "e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@3 ~ e2 ~",
  V: "a2@3 ~ [e3,a3,c#4] ~ e2@3 ~ [e3,a3,c#4] ~ a2@2 [e3,a3,c#4] ~ [e3,a3,c#4] ~ e2@4 [e3,a3,c#4] ~", // A
  W: "a2@4 [e3,a3,c#4] ~ e2@4 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~ e2@4 [e3,a3,c#4] ~, ~@3 a2 ~@2", // A
  X: "a2@4 [e3,a3,c#4] ~ e2@4 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~ e2@4 [e3,a3,c#4] ~, ~@12 a2@5 ~@7", // A
  Y: "~@4 [e3,a3,c#4] ~ e2@4 [e3,a3,c#4] ~ a2@2 [e3,a3,c#4] ~ [e3,a3,c#4] ~ e2@4 [e3,a3,c#4] ~, a2 ~@3", // A
  Z: "a2@4 [e3,a3,c#4] ~@5 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~ e2@4 [e3,a3,c#4] ~, ~@3 e2@3 a2@2 ~@4", // A
  AA: "d3@4 a3 ~ d3@4 a3 ~ d3@3 ~ a3 ~ d3@3 ~ a3 ~",
  AB: "[e2,e3] ~ [e2,e3]!2 ~ e3 e2 [e2,e3] ~ [e2,e3] ~ e3 e2!2 e3 ~ [e2,e3] ~ [e2,e3] ~ [e2,e3] ~ [e2,e3] ~", // E
  AC: "~@4 [e3,a3,c#4] ~ e2@4 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~@5 [e3,a3,c#4] ~, a2@6 ~@6 a2@5 ~ e2@6", // A
  AD: "~@4 [e3,a3,c#4] ~@5 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~@4 c#4 [e3,a3] ~, a2@6 e2@6 a2@5 ~ e2@6", // A A5
  AE: "~@3 c#4 [e3,a3] e2@5 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~ [e3,a3,c#4] ~@5 [a3,c#4] ~, a2@5 ~@7 a2@6 e2@6", // A5 A
})).s("gm_electric_guitar_muted").gain(0.28).pan(0.7)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted_2 = note(`<
  ~@10 A ~@9 A ~ B C D E F G H I J ~@11 A ~@11 K L M N O P Q R S T ~@16
>`.pickRestart({
  A: "~@16 e3@2 g3@3 ~ a3 ~", B: "e3@3 ~ e3@2 g#3 ~ g#3 ~ g#3 ~ b3@5 ~ g#3@5 ~",
  C: "c3 ~ c3 ~ c3 ~ e3@5 ~ g3@3 ~ g3@2 e3@3 ~ c3@2", D: "f3@3 ~ f3 ~ a3@3 ~ a3@2 c4@3 ~ a3@5 ~ f3@2",
  E: "e3@6 g#3@4 ~@2 b3@5 ~ g#3@5 ~", F: "c3@3 ~ c3@2 e3@3 ~ g3@11 ~ e3@2",
  G: "f3@3 ~ f3@2 a3@5 ~ c4 ~ c4 ~ c4@2 a3@5 ~", H: "b2@3 ~ b2@2 d#3@5 ~ f#3@3 ~ f#3@2 ~@6",
  I: "~@6 d3@3 ~ d#3@2 e3@9 ~@3", J: "b2@5 ~ d#3@5 ~ f#3@5 ~ d#3@5 ~", K: "e3@3 ~ e3@2 g#3@5 ~ b3@3 ~ b3@2 g#3@6",
  L: "c3@3 ~ c3@2 e3@3 ~ e3@2 g3@3 ~ g3@2 e3@4 c3@2", M: "f3@3 ~ f3@2 a3@3 ~ a3@2 c4@3 ~ c4@2 a3@3 ~ a3@2",
  N: "[e3,g#3]@4 e3@2 [d3,f#3]@3 ~ [d#3,g3] ~ [e3,g#3]@6 ~@6", O: "c3@5 ~ e3@5 ~ g3 ~ g3 ~ g3 ~ e3@5 ~",
  P: "[e3,f3] ~ f3 ~ f3 ~ [e3,f3] ~ f3 ~ f3 ~ [e3,f3] ~ f3 ~ f3 ~ [e3,f3] ~ f3 ~ f3@2", // Fmaj7
  Q: "~@6 b2@3 ~ d#3@2 f#3@3 ~ d#3@2 b2@4 ~@2", R: "[e3,g#3]@3 ~ e3 ~ [d3,f#3]@3 ~ [d#3,g3] ~ [e3,g#3]@4 e3@2 e3@5 ~",
  S: "b2@2 ~@2 b2@2 d#3 ~ d#3 ~ d#3 ~ d#4@3 d#4@2 ~ b3@5 ~",
  T: "[e3,g#3]@3 ~ e3@2 [d3,f#3]@3 ~ [d#3,g3]@2 [e3,g#3]@3 e3 ~@2 e3@5 ~", // E D D# E
})).s("gm_electric_guitar_muted").gain(0.54).pan(0.3)

// drums · kick
const kick = s("bd").struct("x!4").gain(0.35)

// drums · snare
const snare = s("sd").struct("<~@22 A B C A@4 D C E ~@21 F C G C H C@4 A ~@17>".pickRestart({
  A: "~ x ~ x", B: "~@6 x ~@10 x!2 ~@5", C: "~@3 x ~ x ~@3 x ~@2", D: "~@11 x", E: "~ x!2 ~ x!3 ~",
  F: "~@17 x!2 ~@3 x ~", G: "~@2 x ~@3 x!2", H: "~@3 x ~@4 x!4",
})).gain(0.45)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@22 A B ~ C A@3 ~@2 D ~@21 E ~ F ~@6 A ~@17>".pickRestart({
  A: "~@5 x ~@6", B: "~@5 x ~@5 x", C: "~@8 x ~@2 x", D: "~@3 x ~@4", E: "~@2 x", F: "~@5 x ~@2",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<A@8 ~@2 A@8 ~@2 A@2 ~@10 A@8 ~@2 A@8 ~@2 A B ~@10 A@8 ~@2 A@6>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x ~@6",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@57 [~@6 x!2 ~@4] ~@22>").gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A B ~@8 A B ~@20 A B ~@8 A B ~@20 A C ~@6>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!5 ~ x!2 ~ x", C: "x!12",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@22 A@4 B C B D A E ~@21 F A G A H B@5 I ~@16>".pickRestart({
  A: "x ~ x!2 ~@2 x ~@2 x ~@2", B: "x!4", C: "x!3 ~ x ~ x ~", D: "x!7 ~ x!2 ~@2", E: "x ~ x!3 ~ x!2", F: "~ x",
  G: "x ~@3 x ~ x ~@5 x ~@2 x ~@2 x ~@2 x ~@2", H: "x ~ x!2 ~ x!2 ~@5", I: "x!10 ~@2",
})).gain(0.35)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@25 [~@5 x ~@2 x ~@3] [~ x ~@4] ~ [~ x ~@6] ~@2 [~ x ~@3 x ~@2] ~@48>").gain(0.2)

stack(
  bass, electric_guitar_muted, electric_guitar_muted_2, kick, snare, snare_soft, hihat, mid_tom, open_hat, ride,
  ride_soft
)

More by The Shadows