Strudelify
Can't Be Seen cover art

Steel Wheels

Can't Be Seen

The Rolling Stones

KeyF♯ minorTempo130 bpm
0:00/0:00
// Can't Be Seen — The Rolling Stones
// 130 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "Bass Guitar" named as a bass, played on electric bass finger (its english horn patch is not one); ch 7 "Synth Horns" named as a brass, played on synth brass 1 (its acoustic guitar nylon patch is not one)
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · electric bass finger · "Bass Guitar"
const bass = note(`<
  A B C D C E C F G H I J I K L M G N I O I P L Q L R L S T U I J G H I O I K L Q L V I W T U I O T U I X L Y C E C D C
  D C Z AA AB AC AD AE AF AG AH AI AJ AI AK AL AM AN AO G H I J I X L M G H I AP I P L M L M I J T U I J T@2 I K L Y C E
  C B C B C D C
>`.pickRestart({
  A: "f#2@2 f#2@3 ~ b1@2 f#1@2 f#1@3 ~ a1@2", B: "f#1@2 f#1@3 ~ a1@2 d2@2 d2@2 d#2@2 d#2@2",
  C: "f#1@2 f#1@3 ~ b1@2 f#1@2 f#1@3 ~ a1@2", D: "f#1@2 f#1@3 ~ a1@2 a2@2 a2@2 c3@2 c3@2",
  E: "f#1@2 f#1@3 ~ a1@2 f#2@2 g2@2 g#2@2 a2@2", F: "f#1@2 f#1@3 ~ a1@2 d2@2 d2@2 c2@2 b1@2",
  G: "a1@2 a1@3 ~ e1@2 a1@2 a1@3 ~ e1@2", H: "a1@2 a1@3 ~ e1@2 e2@2 e2@2 g2@2 g2@2",
  I: "b1@2 b1@3 ~ f#1@2 b1@2 b1@3 ~ f#1@2", J: "b1@2 b1@3 ~ f#1@2 d2@2 e2@2 f2@2 f#2@2",
  K: "b1@2 b1@3 ~ f#1@2 f#1@2 f#1@2 a1@2 a1@2", L: "f#1@2 f#1@3 ~ c#1@2 f#1@2 f#1@3 ~ c#1@2",
  M: "f#1@2 f#1@3 ~ c#1@2 a1@2 b1@2 c2@2 c#2@2", N: "a1@2 a1@3 ~ e1@2 c#2@2 d2@2 d#2@2 e2@2",
  O: "b1@2 b1@3 ~ f#1@2 f#2@2 f#2@2 a2@2 a2@2", P: "b1@2 b1@3 ~ f#1@2 d1@2 e1@2 f1@2 f#1@2",
  Q: "f#1@2 f#1@3 ~ c#1@2 c#1@2 c#1@2 e1@2 f1@2", R: "f#1@2 f#1@3 ~ c#1@2 c#2@2 c#2@2 e2@2 e2@2",
  S: "f#1@2 f#1@3 ~ c#1@2 a1@2 a1@2 a#1@2 b1@2", T: "c#2@2 c#2@3 ~ g#1@2 c#2@2 c#2@3 ~ g#1@2",
  U: "c#2@2 c#2@3 ~ g#1@2 g#1@2 g#1@2 a#1@2 a#1@2", V: "f#1@2 f#1@3 ~ c#1@2 g#1@2 g#1@2 a1@2 a#1@2",
  W: "b1@2 b1@3 ~ f#1@2 b1@2 b1@2 c2@2 c2@2", X: "b1@2 b1@3 ~ f#1@2 b1@2 b1@2 a1@2 g1@2",
  Y: "f#1@2 f#1@3 ~ c#1@2 c#2@2 c#2@2 d#2@2 d#2@2", Z: "f#1@2 f#1@3 ~ a1@2 f#1@2 g1@2 g#1@2 a1@2", AA: "a1!8",
  AB: "g#1!8", AC: "a1@2 a1 ~ a1@2 a1@2 a1@2 a1 ~ a1@2 a1 ~", AD: "d2@2 d2 ~ d2@2 d2@2 d2@2 d2 ~ d2@2 g1 ~",
  AE: "a1@2 a1@2 a1@2 a1 ~ a1@2 a1@2 a1@2 a1 ~", AF: "g#1@2 g#1@2 g#1@2 g#1@2 g#1@2 g#1 ~ g#1@2 g#1@2",
  AG: "a1@2 a1@2 a1@2 a1 ~ a1@2 a1 ~ a1@2 a1@2", AH: "f#1@2 f#1 ~ f#1@2 f#1@2 f#1@2 f#1 ~ f#1@2 g#1 ~",
  AI: "a1@2 a1@2 a1@2 a1@2 a1@2 a1 ~ a1@2 a1@2", AJ: "g#1@2 g#1@2 g#1@2 g#1@2 g#1@2 g#1 ~ g#1@2 g#1 ~",
  AK: "d2@2 d2@2 d2@2 d2@2 d2@2 d2 ~ d2@2 g1 ~", AL: "a1@2 a1 ~ a1@2 a1 ~ a1@2 a1@2 a1@2 a1 ~",
  AM: "g#1@2 g#1 ~ g#1@2 g#1@2 g#1@2 g#1 ~ g#1@2 g#1 ~", AN: "a1@2 a1@2 a1@2 a1 ~ a1@2 a1@2 a1@2 a1@2",
  AO: "e2@2 e2 ~ f#2@2 f#2@2 e2@2 e2@2 e2@2 g#1 ~", AP: "b1@2 b1@3 ~ f#1@2 f#1@2 f#1@2 a1@2 a#1@2",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · muted trumpet · "Rhythm Guitar"
const muted_trumpet = note(`<
  A B C D A B E F G H I J I J K@2 L@2 M I N M O@2 K P Q@2 R@2 I@2 S G N@2 I M K P Q O N M T U M N R U J I Q K E V E D W
  X Y D G Z S X H AA L P G Z G B H AB G AC L G M J N@2 K P L@2 J@2 AD AE Q O P O M J T AF M J R@2 I J Q O AG X AH D AI D
  AJ X AK
>`.pickRestart({
  A: "[g#3,b3,e4]@3 ~ [g#3,b3,e4]@2 ~@2 [a3,d4,f#4]@7 ~", B: "[a3,d4,f#4]@7 ~ [a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@2 ~@2",
  C: "~@2 [g#3,b3,e4]@3 ~@3 [a3,d4,f#4]@7 ~", D: "[a3,d4,f#4]!2 ~ [a3,d4,f#4]@2 ~@3",
  E: "~@2 [g#3,b3,e4]@3 ~@3 [a3,d4,f#4]@3 ~ [a3,d4,f#4]@2 ~@2", // E D
  F: "~@2 [f#3,a3,d4]@5 ~ [f#3,a3,d4]@2 ~@2 [f#3,a3,d4]@2 ~@2", G: "[a3,c#4,e4]!2 ~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~",
  H: "[a3,c#4,e4]@7 ~ [a3,c#4,e4]@2 ~@2 [a3,c#4,e4]@2 ~@2", I: "[f#3,b3,d4]!2 ~ [f#3,b3,d4]@2 ~@3",
  J: "[f#3,b3,d4]@7 ~ [f#3,b3,d4]@2 ~@2 [f#3,b3,d4]@2 ~@2", K: "[a3,c#4,f#4]!2 ~@2 [a3,c#4,f#4] ~ [a3,c#4,f#4] ~",
  L: "~@2 [a3,c#4,e4]@5 ~ [a3,c#4,e4]@2 ~@2 [a3,c#4,e4]@2 ~@2", M: "[f#3,b3,d4]!2 ~@2 [f#3,b3,d4] ~ [f#3,b3,d4] ~",
  N: "~@2 [f#3,b3,d4]@5 ~ [f#3,b3,d4]@2 ~@2 [f#3,b3,d4]@2 ~@2", // Bm
  O: "~@2 [a3,c#4,f#4]@5 ~ [a3,c#4,f#4]@2 ~@2 [a3,c#4,f#4]@2 ~@2", P: "[a3,c#4,f#4]!2 ~ [a3,c#4,f#4]@2 ~@3",
  Q: "[a3,c#4,f#4]@7 ~ [a3,c#4,f#4]@2 ~@2 [a3,c#4,f#4]@2 ~@2", // F#m
  R: "[g#3,c#4,e4]@7 ~ [g#3,c#4,e4]@2 ~@2 [g#3,c#4,e4]@2 ~@2", S: "[a3,c#4,e4]!2 ~ [a3,c#4,e4]@2 ~@3",
  T: "~@2 [g#3,c#4,e4]@5 ~ [g#3,c#4,e4]@2 ~@2 [g#3,c#4,e4]@2 ~@2", U: "[g#3,c#4,e4]!2 ~ [g#3,c#4,e4]@2 ~@3",
  V: "[a3,d4,f#4]!2 ~@2 [a3,d4,f#4] ~ [a3,d4,f#4] ~", W: "~@2 [g#3,b3,e4]@3 ~@3 [a3,d4,f#4] ~ [a3,d4,f#4]@2 ~@4",
  X: "~@2 [a3,d4,f#4]@5 ~ [a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@2 ~@2", // D
  Y: "[g#3,b3,e4]@3 ~ [g#3,b3,e4]@2 ~@2 [a3,d4,f#4]@3 ~ [a3,d4,f#4]@2 ~@2", // E D
  Z: "[g#3,b3,e4]!2 ~@2 [g#3,b3,e4] ~ [g#3,b3,e4] ~", AA: "[g#3,b3,e4]!2 ~ [g#3,b3,e4]@2 ~@3",
  AB: "[g#3,b3,e4]@7 ~ [g#3,b3,e4]@2 ~@2 [g#3,b3,e4]@2 ~@2", // E
  AC: "[g#3,b3,e4]@3 ~ [c#4,e4,f#4,a4]@3 ~ [g#3,b3,e4] ~ [g#3,b3,e4]@2 ~@4", AD: "[b3,d4,f#4]!2 ~ [b3,d4,f#4]@2 ~@3",
  AE: "[b3,d4,f#4]!2 ~@2 [b3,d4,f#4] ~ [b3,d4,f#4] ~", AF: "[g#3,c#4,e4]!2 ~@2 [g#3,c#4,e4] ~ [g#3,c#4,e4] ~",
  AG: "[g#3,b3,e4] ~ [g#3,b3,e4]@2 ~@4 [a3,d4,f#4]@3 ~ [a3,d4,f#4]@2 ~@2", // E D
  AH: "[g#3,b3,e4]@7 ~ [a3,d4,f#4] ~ [a3,d4,f#4]@2 ~@4", AI: "[g#3,b3,e4]@3 ~ [g#3,b3,e4]@2 ~@2 [f#3,a3,d4]@7 ~",
  AJ: "~@2 [g#3,b3,e4]@3 ~@3 [f#3,a3,d4]@7 ~", AK: "[g#3,b3,e4]@7 ~ [a3,d4,f#4]@3 ~ [a3,d4,f#4]@2 ~@2",
})).s("gm_muted_trumpet").gain(0.31)

// other · synth brass 1 · "Riffs"
const synth_brass_1 = note("<~ A ~ B ~ B ~ C ~@47 D ~ E F@2 ~ G ~@45 H ~ I ~ J ~ K ~ L ~>".pickRestart({
  A: "f#4@4 a4@3 e5@3 ~ d5@5", B: "f#4@4 a4@4 e5@3 ~ d5@4", C: "f#4@4 a4@3 ~ e5@3 ~ d5@3 ~",
  D: "f#4@4 a4@4 e5@3 d5@4 ~", E: "f#4@4 a4@3 e5@4 d5@4 ~", F: "[~@15 f#4@4 ~ a4@4 e5@3 d5@3 ~@2]/2",
  G: "f#4@3 a4@4 e5@4 d5@2 ~@3", H: "f#4@3 a4@4 ~ e5@3 d5@4 ~", I: "f#4@3 ~ a4@4 e5@3 ~ d5@4",
  J: "f#4@4 a4@4 e5@3 d5@3 ~@2", K: "f#4@3 a4@4 ~ e5@3 d5@2 ~@3", L: "f#4@3 a4@4 e5@3 ~ d5@2 ~@3",
})).s("gm_synth_brass_1").gain(0.26)

// chords · synth brass 1 · "Synth Horns"
const synth_brass_1_2 = note(`<
  ~@27 A B ~ C@2 ~@12 D ~ E@2 F ~ G ~@13 H I ~@2 J@2 ~@28 K@2 L@4 M@2 ~@5 N@2 ~ O@2 P
>`.pickRestart({
  A: "a4 b4 c#5 d5 e5@4", B: "c#5", C: "[~@15 [d4,f#4,b4]@14 ~@3]/2", D: "[e4,g#4,b4]", E: "[~@8 [d4,f#4,b4]@15 ~@9]/2",
  F: "[e4,g#4,b4]@13 ~@3", G: "[d4,f#4,b4]@7 ~", H: "[a4,c#5,e5]@13 ~@3", I: "~ a4@12 ~@3, [f#4,d5]@13 ~@3",
  J: "[~@16 e4@13 ~@3, ~@15 [c#4,b4]@13 ~@4]/2", K: "[[e4,g#4,b4]@7 ~]/2",
  L: "[f#4@31 [e4,g#4]@31 ~@2, b4@63 ~, d4@29 ~@35]/4", M: "[[d4,f#4,b4]@29 ~@3]/2",
  N: "[e5@2 ~ c#5@2 d5@2 e5@3 d5@2 ~ d5@2 c#5@4 b4@6 ~@7, ~ d5 ~@4 c#5 ~@9]/2",
  O: "[~@15 e5@2 d5@2 c#5@2 d5@2 e5@3 d5@2 c#5@2 d5@2]/2", P: "c#5@3 b4@4 ~@9",
})).s("gm_synth_brass_1").gain(0.26)

// other · acoustic guitar nylon · "Fill-in"
const acoustic_guitar_nylon = note("<~@11 A B ~@6 C B ~@14 A D ~@32 E@2 ~@10 A F ~@6 G@2 ~@26>".pickRestart({
  A: "a2 b2 c#3 d3 c#3@2 b2 a2", B: "b2@3 ~@13", C: "~ b2 c#3 d3 c#3@2 b2 a2, ~ a2@2 ~@13", D: "b2 ~@3",
  E: "[f#3@2 a3@3 b3@3 c#4@3 d4@3 c#4@5 b3@11 ~@2]/2", F: "b2 ~@15",
  G: "[a2@2 b2@2 c#3@2 d3@2 c#3@4 ~ a2@2 b2@2 ~@15, ~@6 b2 ~@9]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A@3 B A B A B A@3 B A B A B A@3 B A B A B A@3 B A B A B A B A@3 B A B A@3 B A B A@3 B A B A B A@2 C@15 A@2
  B A B A B A@3 B A B A B A@3 B A B A B A B A@2 B A@2 B A@9
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@2 x!3 ~ x", C: "x!2 ~ x!3 ~ x",
})).gain(0.26)

// drums · snare
const snare = s("sd").struct(`<
  A@7 B A@7 C A@7 B A@7 B A@9 B A@5 B A@5 C A@7 B A@15 D A@7 B A@7 E A@8 C A@2 E A@3 B A E A B A B A
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x!3 ~ x ~", C: "~@2 x!3 ~@11", D: "~ x!7", E: "~@4 x ~@3 x!4 ~@4",
})).gain(0.31)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@11 A ~@3 B ~@3 A ~@7 A ~@11 C ~@5 D ~@5 D ~ B ~@3 C ~@23 A ~@7 A ~@7 A ~@3 C B ~@14
>`.pickRestart({
  A: "~ x ~@6", B: "~@7 x", C: "~ x ~@3 x ~@2", D: "~@5 x ~@2",
})).gain(0.26)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@37 A ~@39 B ~@8 A ~@2 B ~@5 B ~@5>".pickRestart({
  A: "~@3 x ~ x!2 ~", B: "~@12 x!4",
})).gain(0.31)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@12 A ~@2 A ~@9 A ~@8 A ~@6 A ~@6 A ~@4 A ~@2 A ~@3 A ~@8 A ~ A ~ A ~@3 A ~@5 A ~ A ~@8 A ~@14 A@2 ~@6
>`.pickRestart({
  A: "~@7 x",
})).gain(0.26)

// drums · high tom
const high_tom = s("ht").struct("<~@15 [~ x] ~@37 [~ x] ~@48 [~ x] ~@14>").gain(0.31)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@62 [x!8]!15 [~ x!7] x ~@38>").gain(0.36)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@62 [x!8]!15 [~ x!7] x ~@38>").gain(1.82)

stack(
  bass, muted_trumpet, synth_brass_1, synth_brass_1_2, acoustic_guitar_nylon, kick, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, tambourine, cabasa
)

More by The Rolling Stones