Strudelify

Climbing Up the Walls

Radiohead

KeyE minorTempo78 bpm
0:00/0:00
// Climbing Up the Walls — Radiohead
// 78 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: bank select 127 on channels 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14 is ignored: the parts fit General MIDI, not the Roland MT-32 map it names
// note: duplicate parts dropped: ch 14 "Track 14" pad poly (copy of ch 9 "Track 9" fretless bass)
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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 · acoustic guitar nylon · "Track 1"
const acoustic_guitar_nylon = note("<~@4 A@6 B@2 A@6 B@2 ~ A@6 B@2 ~@8 A@6 B@2 ~ A@6 B@2 ~@6 C@8 ~@16>".pickRestart({
  A: "[~@2 [f#3,b3]@3 [g2,e3,g3]@2 ~@6 g2@2 a2, b2@5 ~@2 e2@6 ~@3, ~@5 [e3,g3,b3]@3]/2", // B5 C Em
  B: "[~@2 [f#3,b3]@3 [g2,e3,g3]@2 ~@6 g2@2 a2, b2@5 ~@2 e2@6 ~@3, ~@5 [e3,g3,e4]@3]/2", // B5 C Em
  C: "[b2@2 ~@2 [f#3,b3,d4]@3 [f#3,b3,d4]@2 f#3 ~@2 [b3,e4]@2 [b3,e4] ~ e2@2 ~@2 [e3,g3]@3 [e3,g3]@3 e3 ~ [b3,e4] [e3,g3,b3,e4] [a2,e3,g3,b3,e4] [e3,g3,b3,e4], ~@2 b2@7 d4@12 ~@6 e3@2 ~@3, ~@9 b3@3 ~@3 e4@8 e4@5 ~@4, ~@10 [g2,e3,g3]@4 ~ b3@5 b3@8 ~@4, ~@9 e2@4 [g2,g3]@2 ~]/2", // Bm E5 Em E5 Em C G
})).s("gm_acoustic_guitar_nylon").gain(0.31).pan(0.3)

// other · electric guitar jazz · "Track 4"
const electric_guitar_jazz = note("<~@28 A B@4 ~@13 C D E F G H C I B@4 ~@10 B@4 ~@12>".pickRestart({
  A: "~@14 a4 ~", B: "a4 b4!2 b4@3 a4 b4!2 b4@3 a4 b4!3", C: "~@5 f#5 e5 ~, b4@2 a4 ~, ~@2 f#5@3 ~@3",
  D: "~ e5@7, g4 ~@3", E: "~ f#5 b4 ~@3 e5@2, b4@2 ~ f#4@5, ~ b4", F: "~ g5@7",
  G: "~@5 f#5 e5 b4, b4@2 a4 ~, ~@2 f#5@3 ~@3", H: "g4 e5@7", I: "~@2 e5@12 a4 ~, g4 ~@3",
})).s("gm_electric_guitar_jazz").gain(0.14)

// chords · synth strings 1 · "Track 5"
const synth_strings_1 = note("<~@28 A B C B D@3 ~@18 A B C B D@3 ~@7 A E@2 F@2 G@7 H@2 ~@3>".pickRestart({
  A: "~@14 b4 ~", B: "~@2 a4 ~@3 g4 ~@3 f#4 ~@3 e4 ~, b4 a4 g4 f#4",
  C: "~@2 d4 ~@3 c#4 ~@3 b3 ~ b3@2 b4 ~, e4 d4 c#4 ~", D: "[~@2 d4 ~@3 c#4 ~@3 b3 ~ b3@2 b4@34, e4 d4 c#4 ~@9]/3",
  E: "[[e4,e5]@5 [f#4,f#5]@2 [g4,g5]@5 [a4,a5]@4]/2", F: "[b4,b5]/2",
  G: "[~@56 [b5,c6] g#5 [f#5,g5] [e5,f5] [c#5,d#5] [b4,c5] a4 ~@9 [b5,c6] [a5,a#5] [f#5,g5] [e5,f5] [c#5,d#5] [b4,c5] a4 ~@33, [d5,d6], ~@57 a#5@13 ~@42]/7", // Cmaj7 Gmaj7 Fmaj7 C#sus2 Cmaj7 A#maj7 Gmaj7 Fmaj7 …
  H: "[b4@3 ~]/2",
})).s("gm_synth_strings_1").gain(0.27)

// chords · guitar harmonics · "Track 6"
const guitar_harmonics = note(`<
  ~@6 A ~ A ~ A ~@3 A ~ A ~ A ~@4 A ~ A ~ A ~@11 A ~ A ~ A ~@4 A ~ A ~ A ~@6 B C@6 D@2 ~@16
>`.pickRestart({
  A: "~ a4@3 ~@4", B: "~@7 b2",
  C: "[~@20 b2@8 ~@18 f#4@9 ~@19 a#3@4 ~@9 b2@5 b2@4, a#3@16 ~@2 [f#3,g3]@4 ~@6 f#3@7 ~@20 g3@2 d3@4 ~@3 b3@12 ~@2 b3@10 ~@8, ~@14 b3@6 ~@12 f4@17 ~@7 f#3@2 b2@14 ~@14 [f#3,g3]@2 ~@8]/6", // Gmaj7
  D: "[f4@14 f#4@9 ~ f#3 ~ b2@6, ~@23 g3@2 d3@3 ~@4]/2",
})).s("gm_guitar_harmonics").gain(0.16).pan(1)

// chords · guitar harmonics · "Track 6" · soft notes
const guitar_harmonics_soft = note(`<
  ~@6 A ~ A ~ A ~@3 A ~ A ~ A ~@4 A ~ A ~ A ~@11 A ~ A ~ A ~@4 A ~ A ~ A ~@31
>`.pickRestart({
  A: "~ a#5@3",
})).s("gm_guitar_harmonics").gain(0.08).pan(1)

// bass · fretless bass · "Track 9"
const bass = note(`<
  ~@4 A@6 B@2 A@6 C@2 D A@6 E@2 F@4 G@4 A@6 C@2 D A@6 E@2 F@4 H I A@6 E@2 F@4 H I H I H I H J ~@4
>`.pickRestart({
  A: "[b1@5 g1@2 e1@6 g1@2 a1]/2", B: "[b1@5 g1@2 e1@9]/2", C: "[b1@5 g1@2 e1@5 e2 e1@3]/2", D: "e1@2 e1@2 e2 e1@3",
  E: "[b1@5 g1@2 e1@5 g1@2 f#1@2]/2", F: "[e1@8 e1@2 f#1@4 g1@10 d2 e2 g2@2 d2@4]/2", G: "e1/4",
  H: "e1@6 d1@2 e1 d1 e1@6", I: "d1@2 e1@2 e1@2 d1@2 e1 d1 e1@6", J: "e1@15 ~",
})).s("gm_fretless_bass").gain(0.41).pan(0)

// other · overdriven guitar · "Track 12"
const overdriven_guitar = note("<~@36 A B@2 C@2 B@2 D@3 ~@8 E F E G@3 ~@8 H I H@2 ~@7 J@4 ~>".pickRestart({
  A: "~@3 d4!2 c#4!2 b3", B: "[b3@11 b3!2 a3!2 g3]/2", C: "[~@11 d4!2 c#4!2 b3, f#3 ~, ~@7 b2@7 ~@2]/2",
  D: "[~@7 b2@17, f#3 ~@2]/3", E: "~@2 a4 ~@3 g4 ~@3 f#4 ~@3 e4 ~, b4 a4 g4 f#4",
  F: "~@2 d4 ~@3 c#4 ~@3 b3 ~ b3@2 b4 ~, e4 d4 c#4 ~", G: "[~@2 d4 ~@3 c#4 ~@3 b3 ~ b3@2 [f#4,b4]@34, e4 d4 c#4 ~@9]/3",
  H: "a4 b4!2 b4@3 a4 b4!2 b4@3 a4 b4!3", I: "a4 b4!2 b4@3 a4@2 a4@4 a4@4", J: "[f1,e2]/4",
})).s("gm_overdriven_guitar").gain(0.29)

// other · pad choir · "Track 13"
const pad_choir = note("<~@36 A B@2 C@2 D@2 E@2 A F@2 G@2 H@2 I@2 J@4 K@2 ~@11 L M@5 N@2 O ~@4>".pickRestart({
  A: "~@5 b3 d4 e4", B: "[f#4@2 e4!4 e4@7 b3 d4 e4]/2", C: "[f#4 e4!2 d4!2 c#4@8 b3 d4 e4]/2",
  D: "[f#4@2 e4!5 d4@6 b3 d4 e4]/2", E: "[f#4@2 e4 d4 c4@12]/2", F: "[f#4@2 b3@2 a4@2 a4 f#4@6 b3 d4 e4]/2",
  G: "[f#4@2 b3!2 g4 f#4@8 e4!3]/2", H: "[f#4@2 e4 d4 a4@2 a4 a4@6 b3 d4 e4]/2",
  I: "[f#4@4 e4@2 d4@2 d4@2 c#4@13 b3 g4!2 f#4@2 e4@2 b3@2]/2",
  J: "[b3@8 b3@2 c#4@4 d4@10 g4!2 f#4@2 e4@2 b3@10 b3@2 c#4@4 ~@10 b4!2 a4@2 g4@2 f#4 g4, ~@23 d4@6 ~@3]/4",
  K: "[f#3,f#4]/2", L: "~@8 b4!2 a4@2 g4@2 f#4 g4", M: "[f#4@55 ~ b4!2 a4@2 g4@2 a4@4 f#4@12 e4@2]/5", N: "f#4@7 e4",
  O: "f#4",
})).s("gm_pad_choir").gain(0.28).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~@37
  [x ~@4 x ~@2]!8
  [x!2 ~@2 x!2 ~@2]
  [x ~@4 x ~@2]!12
  [x ~@3 x!2 ~@2]
  [x!2 ~@2 x!2 ~ x]
  [x!2 ~@2 x!2 ~@2]!19
  ~@5
>`).gain(0.38)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ A B C ~@16 D E@16 ~@8 D ~@38>".pickRestart({
  A: "~@8 x!8", B: "x", C: "~ x!9 ~@6", D: "~@7 x", E: "x ~@4 x ~@2",
})).gain(0.15)

// drums · snare
const snare = s("sd").struct("<~@4 A@16 B A@16 C B C B C@3 B C@2 B C B C B C B C B C B C D E@19 ~@5>".pickRestart({
  A: "~ x ~@2", B: "~ x ~ x", C: "~@4 x ~@2 x ~@4 x ~@3", D: "~@4 x ~@3 x ~@3 x!4", E: "~@4 x ~ x!2 ~ x ~@2 x ~@3",
})).gain(0.34)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@4 A B@3 A B@3 A B@3 A B@3 C A B@3 A B@3 A B@3 A B@3 D C D C D ~ D C D@2 C D C D C D C D C D C D C ~@24
>`.pickRestart({
  A: "x ~@6 x ~@4 x ~@3", B: "~@7 x ~@4 x ~@3", C: "~@7 x ~@8", D: "x",
})).gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@20 [~@7 x] ~@24 [~@7 x] ~@38>").gain(0.15)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@4 [x!4]!56 x ~@23>").gain(0.19)

// drums · open hat
const open_hat = s("oh").struct("<~@4 x ~@54 [~@2 x!2] ~@24>").gain(0.38)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@16 A ~@7 A ~@7 A ~@8 A ~@7 A ~@5 B@19 A ~@4>".pickRestart({
  A: "x", B: "x!4",
})).gain(0.38)

// drums · ride
const ride = s("rd").struct("<~@4 A ~@16 A ~@7 A ~@7 B@17 C@2 B@4 D@19 A ~@4>".pickRestart({
  A: "x", B: "x!3 ~ x ~ x!2", C: "x!3 ~ x ~ x ~", D: "x!8",
})).gain(0.38)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@4 x ~@32 [~@3 x ~ x ~@2]!17 [~@3 x ~ x ~ x]!2 [~@3 x ~ x ~@2]!4 ~@24>").gain(0.23)

// drums · whistle
const whistle = s("ballwhistle:0").struct("<~ [~@11 x ~@4] [x!2 ~@2 x ~@11] [~@4 x ~@4 x!2 ~ x ~@3] ~@80>").gain(0.1)

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

// drums · guiro · soft notes
const guiro_soft = s("guiro:0").struct(`<
  ~ A B ~@3 C D E ~@5 C D E ~@6 C D E ~@5 C D E ~@5 C D E ~@6 C D E ~@5 C D E ~@25
>`.pickRestart({
  A: "~ x ~ x ~@12", B: "~@5 x!2 ~", C: "~@13 x ~@2", D: "x", E: "~@11 x ~@2 x ~",
})).gain(0.79)

// drums · guiro
const guiro_2 = s("guiro:4").struct(`<
  A B C D ~@2 E F G H ~@4 E F G H ~@5 E F G H ~@4 E F G H ~@4 E F G H ~@5 E F G H ~@4 E F G H ~@24
>`.pickRestart({
  A: "~@13 x ~@2", B: "x ~@4 x ~ x ~@2 x!2 ~@4", C: "~@6 x ~ x ~@4 x ~@2", D: "x!3 ~@5", E: "~@9 x ~@2 x ~@3",
  F: "~ x ~ x ~@2 x!2 ~@8", G: "~@7 x ~@2 x ~@4 x", H: "~ x ~@2 x!2 ~@10",
})).gain(1.59)

// drums · guiro · soft notes
const guiro_soft_2 = s("guiro:4").struct(`<
  ~ A B C ~@2 D E F G ~@4 D E F G ~@5 D E F G ~@4 D E F G ~@4 D E F G ~@5 D E F G ~@4 D E F G ~@24
>`.pickRestart({
  A: "~@2 x ~@10 x!2 ~", B: "x!2 ~@9 x ~@4", C: "~@5 x ~ x ~ x!2 ~@5", D: "~@7 x", E: "~@9 x!2 ~ x ~ x ~", F: "~@3 x",
  G: "~@7 x!2 ~ x ~ x ~@3",
})).gain(0.79)

stack(
  acoustic_guitar_nylon, electric_guitar_jazz, synth_strings_1, guitar_harmonics, guitar_harmonics_soft, bass,
  overdriven_guitar, pad_choir, kick, kick_soft, snare, snare_soft, low_tom, pedal_hat, open_hat, crash, ride,
  ride_soft, whistle, guiro, guiro_soft, guiro_2, guiro_soft_2
)

More by Radiohead