Strudelify

Ripcord

Radiohead

KeyD majorTempo140 bpm
0:00/0:00
// Ripcord — Radiohead
// 140 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 3, 4/4 at bar 4, 2/4 at bar 8, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 106 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): Guit2B.
setcpm(140/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · electric guitar clean · "Guit1"
const electric_guitar_clean = note("<A@2 ~@2 B@3 ~@2 A@2 ~@2 B@3 ~@90>".pickRestart({
  A: "[g2,d3,g3,b3]@2 ~ [f#2,d3,a3]@3 ~@2", // G D
  B: "[~@4 [g2,d3,g3,b3]@2 ~ [f#2,d3,a3]@3 ~@2 [g2,d3,g3,b3]@2 ~ [f#2,d3,a3]@3 ~@6]/3", // G D G D
})).s("gm_electric_guitar_clean").gain(0.72).pan(0.4)

// chords · distortion guitar · "Guit2"
const distortion_guitar = note(`<
  ~ A B@3 ~ C@3 ~ D E@2 F ~ G@2 H I J K L M N O P Q R O P Q S T@2 U V@5 H I J K L M N O P Q R O P Q W X Y Z AA AB@4 AC I
  J K AD AE AF@2 P Q R O P Q R O P Q R O P AG AH AI AJ AK AH AI AJ AL AM AI AJ AK AH AI AJ AN AO AP@4
>`.pickRestart({
  A: "~@14 [g2,d3,g3] ~", // G5
  B: "[[g2,d3,g3,b3]@2 [f#2,d3,a3]@2 [e2,d3,g3]@2 [a2,e3,a3,c#4]@4 [a2,e3,a3,c#4]!2 [a2,f#3,a3,d4]@2 [a2,e3,a3,c#4]@26 ~@8]/3", // G D Em7 A D A
  C: "[~@6 [g2,d3,g3]!2 [g2,d3,g3,b3]@2 [f#2,d3,a3]@2 [e2,d3,g3]@2 [a2,e3,a3,c#4]@12 [a2,e3,a3,c#4]!2 [a2,f#3,a3,d4]@2 [a2,e3,a3,c#4]@6 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@10]/3", // G5 G D Em7 A D A
  D: "~@14 [g2,d3,g3,d4,g4]!2", // G5
  E: "[[g2,d3,g3,b3]@2 [f#2,d3,a3]@2 [e2,d3,g3]@2 [a2,e3,a3,c#4]@16 [a2,e3,a3,c#4]!2 [a2,e3,a3,c#4]@6 [a2,e3,a3,c#4]@2]/2", // G D Em7 A
  F: "[a2,e3,a3,c#4]!4 ~@4", // A
  G: "[~@6 [g2,d3,g3,d4,g4]!2 [g2,d3,g3,b3]@2 [f#2,d3,a3]@2 [e2,d3,g3]@2 [a2,e3,a3,c#4]@4 [a2,e3,a3,c#4]@2 [a2,f#3,a3,d4]@2 ~@2 [a2,f#3,a3,d4]@2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2]/2", // G5 G D Em7 A D A
  H: "[a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2 [a2,f#3,a3,d4]@2 [a2,e3,a3,c#4]@2 [a2,f#3,a3,d4]@2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2 [g2,d3,g3,d4,g4]!2", // A D A D A G5
  I: "[g2,d3,g3,d4,g4]!3 [g2,d3,g3,b3,e4] [a2,e3,a3,c#4]!2 [a2,f#3,a3,d4] [a2,e3,a3,c#4]", // G5 Em7 A D A
  J: "[a2,d3,a3,d4]@2 [a3,d4,f#4] a3 [d4,g4] [d4,f#4]!2 [a2,d3]", // D5 D G5 D D5
  K: "[g2,d3,g3]!2 [g2,d3,g3,d4,g4]!2 [a2,e3,a3,c#4]!3 e2", // G5 A
  L: "[b2,b3]@4 [b2,b3]@2 [c#3,c#4]!2 [c#3,c#4]@2 [c#3,c#4]@2 [c#3,c#4]@2 [c#3,c#4]@2", M: "[c#3,c#4] [d3,d4]!7",
  N: "[d3,d4]@2 [d3,d4]@2 [d3,d4]@2 [d3,d4]@2 [d3,d4]@2 [d3,d4]@2 [f#3,f#4]!4", // D F#
  O: "[d3,d4,f#4]@2 [d3,d4,f#4]@2 [d3,d4,f#4]@2 [c#3,d3,e4]@4 [c#3,d3,e4]@2 [c#3,d3,e4]@2 [c3,d3,f4] [c3,d3,e4]", // D C#m Dm7 C
  P: "[c3,d3,f4]@2 [c3,d3,f4]@2 [c3,d3,e4]@2 [b2,d3,d4]@4 [b2,d3,d4]@2 [b2,d3,e4]@2 [a#2,d3,d4]!2", // Dm7 C Bm E7 A#
  Q: "[a#2,d3,d4]@2 [a#2,d3,d4]@2 [a#2,d3,e4]@2 [a#2,d3,d4]@4 [a#2,d3,d4]@2 [a#2,d3,e4]@2 [a#2,d3,d4]!2", // A# Em7b5 A# Em7b5 A#
  R: "[a#2,d3,d4]@2 [a#2,d3,d4]@2 [a#2,d3,e4]@2 [a#2,d3,d4]@2 [a#2,d3,d4]@2 [a#2,d3,e4]@2 [a#2,d3,e4]@2 [d3,f#4]!2", // A# Em7b5 A# Em7b5 D
  S: "[a#2,d3,d4]!2 [a#2,d3,e4] [a#2,d3,d4]@2 [a#2,d3,e4]!2 [e2,g3]", T: "[[g2,d3,g3,d4]@30 [g2,d3,g3,d4,g4]!2]/2",
  U: "[g2,d3,g3,d4,g4] [f#2,d3,a3]@2 [a2,e3,a3,c#4]@5", // G5 D A
  V: "[[e3,a3,c#4] [f#3,a3,d4] ~ [g3,d4] ~ [f#3,g3,d4] ~ c#4@2 [d3,g3,d4] [d3,g3,c#4] [d3,g3,b3] [d3,g3,d4,a4]@14 ~@2 [g2,d3,g3,b3] [f#2,d3,a3] [e2,d3,g3] [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4] [a2,f#3,a3,d4] ~ [a2,f#3,a3,d4] [a2,e3,a3,c#4]!3]/5", // A D G5 Gmaj7 G5 G Dsus4 G …
  W: "[a#2,d3,d4]@2 [a#2,d3,d4]@2 [a#2,d3,e4]@2 [a#2,d3,d4]@4 [a#2,d3,e4]@2 [a#2,d3,e4]@2 [d3,g3,g4]!2", // A# Em7b5 A# Em7b5 G5
  X: "[d3,g3,g4]@2 [d3,g3,g4]@2 [d3,g3,g4]@2 [d3,g3,c#4]@4 [d3,g3,d4]@2 [d3,g3,d4]@2 [d3,g3,g4]!2", // G5 G G5
  Y: "[d3,g3,g4]@2 [d3,g3,g4]@2 [d3,g3,g4]@2 [d3,g3,c#4]@4 [d3,g3,d4]@2 [d3,g3,d4]@2 [d3,g3,b4]!2", // G5 G G5 G
  Z: "[d3,g3,b4] [d3,g3,a4] [a2,d3,g3] [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]!3", AA: "[a2,e3,a3,c#4]!8",
  AB: "[[a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2 [d3,g3,g4]!2 [d3,g3,g4]@2 [d3,g3,g4]@2 [d3,g3,g4]@2 [d3,g3,c#4]@4 [d3,g3,d4]@2 [d3,g3,d4]@2 [d3,g3,g4]!2 [d3,g3,g4]@2 [d3,g3,g4]@2 [d3,g3,g4]@2 [d3,g3,c#4]@4 [d3,g3,d4]@2 [d3,g3,d4]@2 [d3,g3,b4]!2 [d3,g3,b4]@2 [d3,g3,a4]@2 [a2,d3,g3]@2 [a2,e3,a3,c#4]@4 [e3,a3,c#4]@2 [e3,a3,d4]@2 [e3,a3,c#4]@2 [e3,a3,d4]@2 [e3,b3,e4]@4 [e3,a3,c#4]@2]/4", // A G5 G G5 G G5 G Dsus4 …
  AC: "[e3,a3,d4]@2 [e3,a3,e4]@2 [e3,a3,d4]!2 [e3,a3,c#4]@6 [d3,g3,b3]@2 [d3,g3,g4]!2", // Dsus2 A5 Dsus2 A G G5
  AD: "[b2,b3]@4 [b2,b3]@2 [c#3,c#4]!10", // B C#
  AE: "[d3,d4]@2 [d3,d4]@2 [d3,d4]@2 [d3,d4]!2 [e3,e4]@2 [e3,e4]@2 [e3,e4]@2 [e3,e4]!2", // D E
  AF: "[[f#3,f#4]!4 [g3,g4]!3 [a3,a4]@9]/2", // F# G A
  AG: "[a#2,d3,d4]@2 [a#2,d3,d4]@2 [a#2,d3,e4]@2 [a#2,d3,d4]@4 [a#2,d3,d4]@2 [a#2,d3,e4]@2 [c4,f4,a4,d5]!2", // A# Em7b5 A# Em7b5 Dm7
  AH: "[d4,f4,a#4,d5]@2 [c4,f4,a4]@2 [d4,f4,a#4]@2 [c4,f4,a4]@2 [d4,f4,a#4]@2 [c4,f4,a4]@2 [d4,f4,a#4]@2 [d3,a3,d4,f#4]!2", // A# F A# F A# F A# D
  AI: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [c#3,g#3,c#4,f4]@2 [c#3,g#3,c#4,f4]@2 [c#3,g#3,c#4,f4]@2 [c#3,g#3,c#4,f4]@2 [c3,g3,c4,e4]!2", // D C# C
  AJ: "[c3,g3,c4,e4]@2 [c3,g3,c4,e4]@2 [b2,f#3,b3,d#4]@2 [b2,f#3,b3,d#4]@2 [b2,f#3,b3,d#4]@2 [b2,f#3,b3,d#4]@2 [b2,f#3,b3,d#4]@2 [a#2,f3,a#3,d4]!2", // C B A#
  AK: "[a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [e2,a2,d3,g3]@2 [c4,f4,a4,d5]!2", // A# Em7 Dm7
  AL: "[a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [e2,a2,d3,g3]!2", // A# Em7
  AM: "a2@2 [g#2,d#3]!3 ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3,b3]@2 [g#2,d#3] ~ [d3,a3,d4,f#4]!2", // G#5 G#m G#5 D
  AN: "[a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 [a#2,f3,a#3,d4]@2 e2 ~ e2 ~ e2 ~", // A#
  AO: "[g3,d4]@2 [g3,d4]@2 [g3,d4]@2 [g3,d4]@2 [g3,d4] ~ [d3,g3,b3,e4]!6", AP: "[[d3,a3,d4,f#4]@7 ~]/4",
})).s("gm_distortion_guitar").gain(0.4).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  A B C@7 A B D E F@4 G H I H J K@2 L M N K L M N O P@2 Q R@5 G H I H J K@2 L M N K L M N O S@2 D T U@4 G H I H J K@2 L
  M N K L M N K L M N K L M N K V W X K V W X K V W X K V W X K Y@4
>`.pickRestart({
  A: "g1@2 ~ f#1@3 ~@2", B: "g1@2 ~ f#1@3 ~ g1",
  C: "[g1 f#1 e1 c#2@2 c#2!2 c#2@13 g1@2 ~ f#1@3 ~@2 g1@2 ~ f#1@3 ~ g1!2 f#1 e1 a1@6 a1!2 a1@3 a1!2 c#2!2 e2 g2]/7",
  D: "g1 f#1 e1 a1@2 a1!3", E: "a1!4 a1@3 a1", F: "[a1!4 g1@2 ~ f#1@3 ~@2 g1@2 ~ f#1@3 ~ g1!2 f#1 e1 a1@2 a1!7]/4",
  G: "a1!7 g1", H: "g1!4 a1!4", I: "d2!8", J: "b1!4 a1!4", K: "g1!8", L: "d2!3 c#2@2 c#2!2 c2", M: "c2!3 b1@2 b1!2 a#1",
  N: "a#1!3 a#1@2 a#1!3", O: "g1!3 g1@2 g1!3", P: "g1@3 f#1@3 f#1@2", Q: "g1 f#1 e1 a1@4 a1",
  R: "[a1!2 a1@2 a1@3 a1@3 a1!2 g1@3 f#1@3 f#1@2 g1@3 f#1@3 f#1@2 g1 f#1 e1 a1@2 a1!7]/5", S: "g1!3 f#1@2 f#1!3",
  T: "a1!8", U: "[a1!3 g1!4 f#1@2 f#1!3 g1!3 f#1@2 f#1!3 g1 f#1 e1 a1@2 a1!7]/4", V: "d2!3 c#2!4 c2",
  W: "c2!2 b1!5 a#1", X: "a#1!8", Y: "[d2@7 ~]/4",
})).s("gm_electric_bass_finger").gain(0.44).pan(0.6)

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

// drums · rim
const rim = s("rim").struct("<A B ~@2 C B D ~@2 A B ~@2 C B D ~@16 A B ~@2 C B D ~@67>".pickRestart({
  A: "~ x!3", B: "x!4", C: "~@3 x", D: "x!2 ~@2",
})).gain(0.41)

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

// drums · low tom
const low_tom = s("lt").struct("<~@24 A@7 B ~@15 A@7 B ~@15 A@7 B A@3 B A@2 C D ~@15 E ~@4>".pickRestart({
  A: "x ~ x ~@5 x ~ x ~@3 x!2", B: "x!4", C: "x!2 ~@2 x!2 ~ x", D: "~ x ~ x ~@4", E: "~@14 x!2",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@17 A ~@22 A ~@22 A ~@37 B ~@4>".pickRestart({
  A: "~@12 x!4", B: "~@10 x!4 ~@2",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct(`<
  A B C D E B F D@2 A B C D E B F D G ~@14 A B C D E B F D G ~@14 H D C D I D J D G ~@22 D J D J D J D J D J D J D J D G
  ~@4
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!3 ~ x!4", D: "x!8", E: "x!4 ~@2 x ~", F: "x ~ x ~ x!3 ~", G: "x!2 ~@6", H: "~ x!7",
  I: "x!4 ~ x!3", J: "x!7 ~",
})).gain(0.41)

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

// drums · ride
const ride = s("rd").struct("<~@18 A B@5 ~@17 A B@5 ~@17 A B@5 ~@36>".pickRestart({
  A: "~ x!7", B: "x!8",
})).gain(0.41)

stack(electric_guitar_clean, distortion_guitar, bass, kick, rim, snare, low_tom, mid_tom, open_hat, crash, ride)

More by Radiohead