Strudelify

Airbag

Radiohead

KeyA majorTempo83 bpm
0:00/0:00
// Airbag — Radiohead
// 83 bpm, 4/4, key A major. 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: Full arrangement: all 96 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(83/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.

// other · distortion guitar · "Track 1"
const distortion_guitar = note(`<
  A B C B D E C B F@2 ~@12 G H I@2 J@2 ~@5 K L M N O P Q R S T U P G H I@2 V@2 W X@3 Y Z W X@3 Y@2 G H I@2 J@2 G H I@2
  AA@5 AB@2 AC@2 AD@4 AE E C B AF E C B AG@2
>`.pickRestart({
  A: "~@7 e2", B: "f2@3 c3@3 b2@2", C: "c#3@3 a2@3 e2@2", D: "a2@3 c#3@3 e3@2", E: "f3@3 c3@3 b2@2",
  F: "[~ c#4@31, [a2,a3,b3,e4]]/2", G: "[b2,f#3]!8", H: "[f#2,c#3]!8", I: "[e2,b2]!8",
  J: "[a2,e3]!3 ~ [a2,e3]!4, ~@3 [a2,e3] ~@4, ~@7 [a3,e4,a4]@9", // A5
  K: "a4!4 a4@2 a4!2 a4@2 a4!3 a4@2 ~ a4@2 ~ a4@2 a4 a4@2 g#4 g#4@2 ~ g#4@2 g#4!2 g#4@2 g#4@2 ~ g#4!3 g#4@2 g#4!2 g#4@2 g#4!2",
  L: "f#4!3 f#4@2 f#4!2 f#4@2 ~ f#4 f#4@4 f#4!2 f#4@2 f#4@2 ~ f#4@2 g#4!2 g#4@3 g#4 ~ g#4@2 g#4 g#4@2 g#4!4 g#4@3 g#4 g#4@4",
  M: "f4@2 f4!2 f4@3 f4 f4@2 f4@2 f4!2 f4@2 f4!3 f4@2 f4 f4@4 f4!2 f4@2 ~ f4@2 f4 f4@4 f4 ~ f4!3 f4@2 ~ f4@2",
  N: "d4@2 d4 d4@3 d4@2 d4 d4@2 d4!2 d4@2 ~ d4@2 d4@3 d4 d4@3 d4 d4@2 d4@2 d4@3 d4@3 d4 d4@4 d4!2 d4@2 ~ d4@2",
  O: "f4!3 f4@2 f4 e4!2 ~ e4 e4@2 d4 d4@2 d4 d4@2 c#4@2 c#4!4 ~ c#4 c#4@2 c#4@2 c#4@2 c#4 c#4@2 c#4!2 c#4@2 c#4!3 c#4@2 c#4@3 c#4",
  P: "f4!4 f4@2 e4!2 e4@2 e4@2 d4@2 d4 d4@2 d4 c#4@3 c#4 c#4@2 c#4 c#4@2 c#4@3 c#4@4 c#4@3 c#4 c#4@4 c#4 c#4@4 c#4",
  Q: "a4!5 ~ a4!2 a4@2 a4!3 a4@2 ~ a4@2 ~ a4 ~ a4 a4@2 g#4 g#4@2 ~ g#4@2 g#4!2 g#4@2 g#4@2 ~ g#4!3 g#4@2 g#4!2 g#4@2 g#4!2",
  R: "f#4!3 f#4@2 f#4!2 f#4@2 ~ f#4 f#4@4 f#4!2 f#4@2 f#4@2 ~ f#4@2 g#4!2 g#4@3 g#4@2 g#4@2 g#4 g#4@2 g#4!4 g#4@3 g#4 g#4@4",
  S: "f4@2 f4!2 f4@3 f4 f4@2 f4@2 f4!2 f4@2 f4!3 f4@2 f4 f4@4 f4!2 f4@2 ~ f4@2 f4 f4@2 c5@2 c5 ~ c5!3 c5@2 ~ c5@2",
  T: "b4@2 b4 b4@3 b4@2 b4 b4@2 b4!2 b4@2 b4!2 b4@3 ~ a4 a4@3 a4 a4@2 a4@2 a4@3 a4@3 a4 a4@4 a4!2 a4@2 ~ a4@2",
  U: "f4!3 f4@2 f4 e4 e4@2 e4 e4@2 d4 d4@2 d4 d4@2 c#4@2 c#4!3 c#4@2 c#4 c#4@2 c#4@2 c#4@2 c#4 c#4@2 c#4!2 c#4@2 c#4!3 c#4@2 c#4@3 c#4",
  V: "[a2,e3]/2", W: "a4 g#4", X: "[f#4@12 a4 b4@2 ~@2 b4@2 ~@2 f4@3, ~@15 c5@3 ~ a4@3 ~@2]/3", Y: "d#4 d#4@3",
  Z: "d#4@4 d#4@6 a3@2 c#4 d4 c#4@2",
  AA: "[[a2,e3]@24 ~@4 e4@8 e4@4 ~@5 g#4@21 ~@14, ~@5 a#5@2 ~@3, ~@42 c2@15 ~@23, ~@22 f#4@11 ~@7]/5", // A5
  AB: "[~@10 f#4@3 ~@4 c#4@15, ~@8 g4@4 ~ e4@4 ~@15, ~@15 d4@4 ~@13]/2",
  AC: "[~@10 f4@3 ~@4 c#4@15, ~@13 e4@4 ~@15, ~@15 d4@4 ~@13]/2",
  AD: "[~ a4@2 ~ g4@2 ~ f4@2 e4@2 f4@2 ~@4 c#4@15, g4@2 ~ f4@2 ~ e4@2 ~@5 e4@4 ~@15, ~@15 d4@4 ~@13]/2",
  AE: "~@12 c3@3 c#3", AF: "c#3@3 a2@3 e3@2", AG: "[[a2,e3,a3,b3,c#4]@77 ~@19]/2",
})).s("gm_distortion_guitar").gain(0.2).pan(0)

// other · cello · "Track 2"
const cello = note("<A B C B D E C B F@2 ~@18 B C B D E ~@36 G@6 ~@12 E C B H E C B I@2>".pickRestart({
  A: "~@7 e2", B: "f2@3 c3@3 b2@2", C: "c#3@3 a2@3 e2@2", D: "a2@3 c#3@3 e3@2", E: "f3@3 c3@3 b2@2", F: "a2/2",
  G: "a2/6", H: "c#3@3 a2@3 e3@2", I: "[[a2,e3,a3,b3,c#4]@77 ~@19]/2",
})).s("gm_cello").gain(0.39).pan(1)

// other · electric guitar clean · "Track 3"
const electric_guitar_clean = note("<~ A@7 B@2 ~@18 A@5 ~@63>".pickRestart({
  A: "d4@3 e4@3 e4@3 d4@3 e4@4", B: "[a2,a3,b3,c#4,e4]/2",
})).s("gm_electric_guitar_clean").gain(0.39)

// chords · overdriven guitar · "Track 5"
const overdriven_guitar = note(`<
  ~@10 A B C@2 D@2 A B C@2 D@2 ~@11 A B C@2 D@2 A B C@2 D@2 E F E G H I ~@12 J K E L M I ~@27
>`.pickRestart({
  A: "[a2,a3,e4]@3 [a3,e4] [a2,a3,e4]@3 ~@2 [a3,e4]@3 [a3,e4]@2 [a3,e4]@2, ~@7 [a3,e4]@2 ~@7, ~@2 a2!2", // A5
  B: "[a2,a3,d#4]@3 [a3,d#4] [a2,a3,d#4]@3 ~@2 [a3,d#4]@3 [a3,d#4]@2 [a3,d#4]@2, ~@7 [a3,d#4]@2 ~@7, ~@2 a2!2", // Adim
  C: "[a2,a3,d4]@3 [a3,d4] [a2,a3,d4]@3 ~@2 [a3,d4]@3 [a3,d4]@2 [a3,d4]@2, ~@7 [a3,d4]@2 ~@7, ~@2 a2!2", // D5
  D: "e4 d4 c#4 [a3,d4] [a2,a3]@3 ~@2 a3@3 a3@2 a3@2, [a2,a3] c#4@3, ~@7 a3@2 ~@7, ~@2 a2!2", // D5 A
  E: "a4!3 a4@2 a4!2 a4@2 ~ a4 a4@2 a4@2 a4@2 a4!3 a4@3 a4!2 a4@3 a4@2 a4 a4@2 a4!2 a4@2 a4 a4@2 a4@3 a4 a4@2 a4@2",
  F: "a4!3 a4@2 a4!2 a4@2 ~ a4 a4@2 a4@2 a4@2 a4!3 a4@3 a4!2 a4@3 a4@2 a4 a4@2 a4!3 ~ a4 a4@2 a4@3 a4 a4@2 a4@2",
  G: "a4!3 a4@2 a4!2 a4@2 ~ a4 a4@2 a4@2 a4@2 a4!3 a4@2 a4!4 a4@2 a4!3 a4@2 a4!2 a4@2 a4 a4@2 a4 a4@2 a4 a4@2 a4 ~",
  H: "a4!3 a4@2 a4!9 ~ a4!10 a4@2 a4 a4@2 a4 a4@2 a4!5 a4@2 a4 a4@2 a4!2 ~ a4@2",
  I: "a4!8 a4@2 a4 a4@2 a4!2 a4@2 a4!4 a4@2 a4!3 a4@2 a4!3 a4@2 a4!2 a4@2 a4 a4@2 a4 a4@2 a4 a4@2 a4@2",
  J: "a4!3 a4@2 a4!2 a4@2 ~ a4 a4@2 a4@2 a4@2 a4!3 a4@3 a4!2 a4@3 a4@2 a4 a4@2 a4!2 a4@2 a4 a4@2 a4@3 a4 a4@2 a4 ~",
  K: "a4!3 a4@2 a4!2 a4@2 ~ a4 a4@2 a4 ~ a4@2 a4!3 a4@3 a4!2 a4@3 a4@2 a4 a4@2 a4!2 a4@2 a4 a4@2 a4@3 a4!2 ~ a4@2",
  L: "a4!3 a4@2 a4!2 a4@2 ~ a4 a4@2 a4@2 a4@2 a4!3 a4@2 a4!4 a4@2 a4!3 a4@2 a4!2 a4@2 a4 a4@2 a4 a4@2 a4 a4@2 a4@2",
  M: "a4!3 a4@2 a4!8 a4@2 a4!10 a4@2 a4 a4@2 a4 a4@2 a4!5 a4@2 a4 a4@2 a4 a4@2 a4@2",
})).s("gm_overdriven_guitar").gain(0.25)

// other · ocarina · "Track 6"
const ocarina = note("<~@16 A B C@2 D@2 E@4 ~@2 F@8 ~@9 E@4 ~@14 E@4 ~@2 E@4 ~@23>".pickRestart({
  A: "e5", B: "d#5", C: "f#5/2", D: "e5/2", E: "[~ a5@15]/4", F: "e5/8",
})).s("gm_ocarina").gain(0.17)

// other · violin · "Track 7"
const violin = note("<~@28 A@5 B C D E F@2 B C D E F@2 G@6 B C D E F@2 B C D E F@2 G@12 ~@21>".pickRestart({
  A: "a4/5", B: "a4 g#4", C: "f#4 g#4", D: "f4", E: "d4", F: "f4 e4 d4 c#4@5", G: "a4/6",
})).s("gm_violin").gain(0.22)

// other · lead 1 square · "Track 8" · F#sus2 C#7
const lead_1_square = note(`<
  ~@73
  [~@4 [f#7,g#8]@2 ~ [b7,c#8,g#8]@2 ~ f9 ~@2 e9@2 ~ c#9@2 ~ c#9@2 ~ d9@2 ~ c9@2 c#9 e9@2 ~ c9@2 ~ f9@2 ~ e9@2 ~ c#9@2 e9 c#9@2 ~ d9@2, ~@9 b8@2 ~@4 c9@2 ~ e9@2 ~ c9@2 ~ e9@2 ~@4 c#9@2 ~ d#9@2 ~ c#9@2 ~ c9@2 ~@4 c9@2 ~]
  [~ c9@2 ~ e9@2 ~ c9@2 d#9 f9@2 ~ e9@2 ~ c#9@2 ~ c#9@2 ~ d9@2 e9 c9@2 ~ e9@2 ~ c9@2 ~ f9@2 ~ e9@2 c9 c#9@2 ~ c#9@2 ~ d9@2, e9@2 ~ c#9@2 ~ c#9@2 ~@4 c#9@2 ~ c9@2 ~ e9@2 ~ c9@2 ~@4 c#9@2 ~ c#9@2 ~ d#9@2 ~ c#9@2 ~@4 e9@2 ~ c9@2 ~]
  ~@21
>`).s("gm_lead_1_square").gain(0.41)

// bass · fretless bass · "Track 9"
const bass = note(`<
  ~@11 A B A C D ~ A B A E A F G ~ H I C ~ A F J K L ~ M A C D ~ A B A E A F G ~ H I C N@3 O P O P N@2 O P O Q G ~ H I C
  F G ~ H R ~ S ~ S ~ S@8 T U T U T U T V@2
>`.pickRestart({
  A: "~@15 e1", B: "g1 e1 g1 ~ a1 ~ a1@2 ~@4 a1 ~ a1 ~", C: "g1 e1 g1 ~ a1 ~@7 a1 ~ a1 ~", D: "~@12 c2 a1 g1 e1",
  E: "g1 e1 g1 ~ a1 ~@7 g1 ~ a1 ~", F: "g1 e1 g1 ~ a1 ~@11", G: "~@7 e1 g1 e1 g1 ~ a1 ~@3",
  H: "~@9 e1 g1 e1 ~ e1 g1 e1", I: "a1 ~@14 e1", J: "~@12 a1 ~ g#1 e1", K: "g1 e1 g1 ~ a1 ~@6 f2 c2 a1 g1 e1",
  L: "a1 ~ a1@2 ~@12", M: "g1 e1 g1 ~ a1 ~ a1@2 ~ e1 g1 ~ a1@2 ~@2", N: "~@7 e1 g1 e1 g1 ~@3 a1@2",
  O: "~@6 e1 g1 ~ g1 ~ e1 g1 e1 c2@2", P: "a1 ~@6 e1 g1 e1 g1 ~@3 a1@2", Q: "[g1,a1] e1 g1 ~ a1 ~@11", R: "a1 ~@15",
  S: "g1 a1 e1 g1 a1 ~ g1 a1 ~ g1 a1 ~@5", T: "f1@3 c2@3 b1@2", U: "a1 ~ a1 ~@3 g1 a1 ~ a1 ~ g1 a1 ~ g1 ~",
  V: "[a1@77 ~@19]/2",
})).s("gm_fretless_bass").gain(0.64)

// other · bassoon · "Track 15"
const bassoon = note("<~@79 A B@2 C@2 D@2 E A E F E F E G ~@2>".pickRestart({
  A: "~@3 [e2,e4]", B: "[[d2,d4]@6 ~ c#4@21 [e2,e4]@4, ~@3 c#2@9 ~@4]/2",
  C: "[[d2,d4]@6 ~ c#4@21 [e2,e4]@4, ~@6 c#2@21 ~@5]/2", D: "[[d2,d4]@6 ~ c#4@20 ~ [e2,e4]@4, ~@6 c#2@19 ~@7]/2",
  E: "[d2,d4]@6 ~ c#4@9, ~@3 c#2@5", F: "c2@3 [e2,e4]", G: "c2@3 ~",
})).s("gm_bassoon").gain(0.17)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A B@2 C B@21 ~@3 B@16 ~@2 B D@2 B D B@2 D@2 B D B@11 ~@2 B ~ E ~ F ~ G@6 C B C B C B C ~@2
>`.pickRestart({
  A: "~@7 x", B: "x ~@2 x ~@3 x ~ x ~ x ~@4", C: "x ~ x!2 ~@3 x!2 ~@2 x ~@4", D: "x ~@2 x ~@3 x!2 ~@2 x ~@4",
  E: "x ~@5 x ~@2 x!2 ~@10 x!2 ~@4 x!2 ~@4 x!2 ~@13", F: "x ~@2 x ~@3 x ~ x ~@6", G: "x ~@2 x ~@3 x ~@2 x!2 ~@4",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A B C D B@6 C B@5 C B@5 C B@2 ~@3 B@5 C B@5 C B@4 ~ E B@5 C B@5 C B@5 C B@4 ~@2 B ~ F ~ G H I@6 D B D B D B D ~@2
>`.pickRestart({
  A: "~@11 x!3 ~ x", B: "~@2 x!2 ~@2 x!2", C: "~@4 x ~ x ~@6 x!3", D: "~@4 x ~ x ~@5 x!2 ~ x", E: "~@13 x!3",
  F: "~@12 x!2 ~@4 x!2 ~@16 x!2 ~@4 x!2 ~@4", G: "~@2 x!2 ~@4", H: "~@12 x!4", I: "~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~",
})).gain(0.8)

// drums · clap
const clap = s("cp").struct(`<
  ~@5 A B C B D@21 ~@3 D@16 ~@2 D E@2 D E D@2 E@2 D E D@11 ~@2 D ~ F ~ G ~@7 B D B D B D B ~@2
>`.pickRestart({
  A: "~@11 x!3 ~ x", B: "x!8", C: "x!7 ~", D: "~ x!7", E: "~ x!3 ~@2 x!2",
  F: "~@12 x!2 ~@4 x!2 ~@4 x!2 ~@4 x!2 ~@4 x!2 ~@4 x!2 ~@4", G: "~ x!4 ~@3",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@5 [~@7 x] x ~@89>").gain(0.8)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@56 A ~@5 A ~@12 B ~@3 B ~ B@6 ~@9>".pickRestart({
  A: "~@3 x ~@2 x ~@2 x ~@6", B: "x!3 ~@5",
})).gain(0.8)

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

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

// drums · high tom
const high_tom = s("ht").struct("<~@56 [~@3 x ~@2 x ~@2 x ~@6] ~@5 [~@3 x ~@2 x ~@2 x ~@6] ~@33>").gain(0.8)

// drums · ride
const ride = s("rd").struct("<~@55 [~@5 x ~ x] ~@5 [~@5 x ~ x] ~@34>").gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~
  [x!16]!76
  [x ~@2 x!2 ~ x!2 ~ x ~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~]
  [x!16]!16
  ~@2
>`).gain(0.64)

// drums · bongos
const bongos = s("bongo:18").struct("<~@56 [~@6 x!2 ~ x ~ x!2 ~ x ~] ~@5 [~@6 x!2 ~ x ~ x!2 ~ x ~] ~@33>").gain(2.1)

// drums · congas
const congas = s("conga:13").struct("<~@56 [~@3 x ~@2 x!2 ~ x ~ x!2 ~@3] ~@5 [~@3 x ~@2 x!2 ~ x ~ x!2 ~@3] ~@33>")
  .gain(2.56)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@75 [~ x ~ x ~ x ~ x ~@8] ~@20>").gain(4.06)

stack(
  distortion_guitar, cello, electric_guitar_clean, overdriven_guitar, ocarina, violin, lead_1_square, bass, bassoon,
  kick, snare, clap, low_tom, hihat, mid_tom, open_hat, crash, high_tom, ride, tambourine, bongos, congas, cabasa
)

More by Radiohead