Strudelify
Crawling cover art

Hybrid Theory

Crawling

Linkin Park

KeyG♯ minorTempo104 bpm
0:00/0:00
// Crawling — Linkin Park
// 104 bpm, 4/4, key G# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 87 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(104/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 · clarinet · "TabIt MIDI - Track 1"
const clarinet = note("<A@6 B@3 ~@7 C@2 A@2 ~@8 D@7 E@2 ~@15 D@8 E@2 ~@25>".pickRestart({
  A: "[c#5 b5@3 g#5@5 f#5@2 e5 d#5@2 e5@2]/2", B: "[c#5 b5@3 g#5@5 f#5@2 e5 d#5@2 e5@3 ~@7]/3",
  C: "[~ b5@4 g#5@4 f#5@2 e5 d#5@2 e5@2]/2", D: "~ c#6 f#6 g#6, c#6 ~@3, ~ g#5@3 ~@4",
  E: "[~@2 c#6@2 f#6@2 g#6@3 ~@7, c#6 ~@7, ~ g#5@3 ~@12]/2",
})).s("gm_clarinet").gain(0.41)

// chords · string ensemble 1 · "TabIt MIDI - Track 2"
const string_ensemble_1 = note("<~@4 A@4 ~@37 B@8 ~@34>".pickRestart({
  A: "[~ [g#5,c#6]@27 [g#5,c#6]!3 ~]/4", B: "[~@7 g#6@10 a6@8 c#7@8 a6@8 g7@8 f#7@8 ~@7]/8",
})).s("gm_string_ensemble_1").gain(0.05)

// other · kalimba · "TabIt MIDI - Track 3"
const kalimba = note("<A B@7 C ~@11 A B@15 ~@8 A B@16 ~@26>".pickRestart({
  A: "~@2 g#4!14", B: "g#4!16", C: "g#4!2 ~@14",
})).s("gm_kalimba").gain(0.15)

// chords · distortion guitar · "TabIt MIDI - Track 4"
const distortion_guitar = note(`<
  ~@7 A B C D E@2 C D F@2 ~@18 G H C D E@2 C D F@2 ~@16 I C D E@2 C D E@2 C D E@2 C D E@2 C D E@2 C D J K L
>`.pickRestart({
  A: "~@10 [c#2,g#2,c#3,f#3,a#3,d#4] ~ [c#2,g#2,c#3,f#3,a#3,d#4]!2 ~ [c#2,g#2,c#3,f#3,a#3,d#4]", // D#m7
  B: "[c#2,g#2,c#3,f#3,a#3,d#4]!2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2", // D#m7 C#5
  C: "[c#2,g#2,c#3,g#4] [a2,e3,a3]!7", D: "[a2,e3,a3] [e2,b2,e3,b3]!7",
  E: "[[e2,b2,e3,b3] [b2,f#3,b3]!6 [g#2,d#3,g#3]@2 [c#2,g#2,c#3,g#4]!7]/2", // E5 B5 G#5 C#5
  F: "[[e2,b2,e3,b3] [b2,f#3,b3]!6 [g#2,d#3,g#3]@2 ~@7]/2", G: "~@14 [e2,g#2,d#3,g#3,a#3,d#4]!2",
  H: "[e2,g#2,d#3,g#3,a#3,d#4]!2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2 [c#2,g#2,c#3,g#4]@2", // Emaj7 C#5
  I: "~ [c#2,g#2,c#3,g#4]!7", J: "[e2,b2,e3,b3] [b2,f#3,b3]!6 [g#2,d#3,g#3]",
  K: "[g#2,d#3,g#3] [b2,f#3,b3]!6 [g#2,d#3,g#3]", L: "[g#2,d#3,g#3] ~@7",
})).s("gm_distortion_guitar").gain(0.41)

// other · guitar harmonics · "TabIt MIDI - Track 4"
const guitar_harmonics = note("<~@60 [~@10 b3@2 b3 b3@2 b3] [b3 ~@15] ~@25>").s("gm_guitar_harmonics").gain(0.41)

// bass · electric bass finger · "TabIt MIDI - Track 6"
const bass = note("<~@4 A@4 B@8 C@4 D@8 E@8 B@8 F@4 G@8 H@5 B@24 I@2>".pickRestart({
  A: "[~@2 a1@10 e2@6 b1@10 e2@6 c#2@10 b1@6 e1@11 ~@3]/4",
  B: "[~ c#1 c#1@2 c#1!2 c#1@3 a1 a1@2 a1!2 a1@3 e1 e1@2 e1!2 e1@3 b1 b1@2 b1!3 g#1@2 c#1 c#1@2 c#1!2 c#1@3 a1 a1@2 a1!2 a1@3 e1 e1@2 e1!2 e1@3 b1 b1@2 b1!3 g#1]/8",
  C: "[~ c#1@4 c#1@4 a1 a1@3 a1@4 e1@4 e1@4 b1 b1@3 b1 b1@2]/4",
  D: "[b1@2 c#1@2 c#1@6 c#1@8 a1@8 a1@2 a1@6 e1@8 e1@2 e1@6 b1@8 b1@4 f#1 g#1@3 c#1@2 c#1@6 c#1@8 a1@8 a1@2 a1@6 e1@8 e1@2 e1@6 b1@8 b1@4 f#1 g#1]/8",
  E: "[~@2 a1@10 e2@6 b1@10 e2@6 c#2@10 b1@6 e1@12 f#1 g#1@3 a1@10 e2@6 b1@10 e2@6 c#2@10 b1@6 e1@14]/8",
  F: "[~ c#1 c#1@3 c#1@4 a1@4 a1 a1@3 e1@4 e1 e1@3 b1@4 b1@3]/4",
  G: "[g#1@2 c#1@2 c#1@6 c#1@8 a1@8 a1@2 a1@6 e1@8 e1@2 e1@6 b1@8 b1@4 f#1 g#1@3 a1@10 e2@6 b1@10 e2@6 c#2@10 b1@6 e1@12 f#1 g#1]/8",
  H: "[~ a1@5 e2@3 b1@5 e2@3 c#2@5 b1@3 e1@10 ~@5]/5", I: "[~ b1 b1@2 b1!3 g#1@2 ~@7]/2",
})).s("gm_electric_bass_finger").gain(0.41)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B C D C E C D C E F D C E C@9 D C D C D C D C D C E C D C E F C@8 D C D C D C D A C D C E C D C E F D C
  E C D C E F D C E C D C E G H
>`.pickRestart({
  A: "~ x ~@6", B: "~ x ~@2", C: "~ x ~@3 x ~@2", D: "~ x!2 ~@2 x ~@2", E: "~@3 x!2 ~ x ~@2 x!2 ~ x ~@3",
  F: "x!2 ~@3 x ~@2", G: "x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@3", H: "x",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct(`<
  A@11 B A@3 B A@3 B ~@8 A@11 B A@3 B ~@8 A@8 C A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B@2 ~
>`.pickRestart({
  A: "~@3 x ~@2 x ~", B: "~ x ~@2 x ~@2 x", C: "~@3 x ~@4",
})).gain(0.41)

// drums · clap
const clap = s("cp").struct("<~@20 [~@3 x ~@2 x ~]!8 ~@16 [~@3 x ~@2 x ~]!8 ~@35>").gain(0.41)

// drums · hihat
const hihat = s("hh").struct(`<
  A@2 B A B A B A C ~@7 A B@3 D E@7 F B@5 G H ~@8 I E@2 J I E@3 F B@5 G H ~@27
>`.pickRestart({
  A: "~@2 x!14", B: "x!16", C: "x!2 ~@14", D: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~", E: "x!8", F: "x ~ x!14",
  G: "x!10 ~ x ~ x ~ x", H: "~ x ~ x ~ x ~@10", I: "~ x!7", J: "x!7 ~",
})).gain(0.41)

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

// drums · crash
const crash = s("cr").struct("<~@8 A ~@2 B ~@4 A ~@19 A ~@2 B ~@21 A ~@2 B ~@4 A ~@2 B ~@4 A ~@2 B ~@6>".pickRestart({
  A: "~ x ~@6", B: "~@7 x",
})).gain(0.41)

stack(
  clarinet, string_ensemble_1, kalimba, distortion_guitar, guitar_harmonics, bass, kick, snare, clap, hihat, open_hat,
  crash
)

More by Linkin Park