Strudelify
One Step Closer cover art

2000 · Hybrid Theory

One Step Closer

Linkin Park

KeyC♯ minorTempo96 bpm
0:00/0:00
// One Step Closer — Linkin Park
// 96 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar Harmonics, Elec Guitar.
setcpm(96/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 · overdriven guitar · "Elec Guitar"
const overdriven_guitar = note(`<
  A B@3 C D@11 E F G H G H I@8 F J K L K L K L K M N B@3 O P@3 Q P@3 R K L K L K L K M S ~@5
>`.pickRestart({
  A: "~@8 c#2@2 c#3@2 g#2 d#3@3", B: "a2@2 g#2@2 c#2 e2@3 c#2@2 c#3@2 g#2 d#3@3",
  C: "a2@2 g#2@2 c#2 e2@3 [c#2,c#3]@2 [c#3,c#4]@2 [g#2,g#3] [d#3,d#4]@3", // C# G# D#
  D: "[a2,a3]@2 [g#2,g#3]@2 [c#2,f#3] [e2,b3]@3 [c#2,c#3]@2 [c#3,c#4]@2 [g#2,g#3] [d#3,d#4]@3", // A G# F#5 E5 C# G# D#
  E: "[a2,a3]@2 [g#2,g#3]@2 [c#2,f#3] [e2,b3]@3 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]!2 ~ [f#2,c#3]", // A G# F#5 E5 F#5
  F: "[f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]!2 ~ [f#2,c#3] [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]!2 ~ [f#2,c#3]", // F#5
  G: "[c#2,g#2] [g#2,c#3,g#3] [f#2,b2,f#3] [d#2,g#2,d#3]", H: "[e2,a2,e3] [c#2,f#2,c#3] [d#2,g#2,d#3] [e2,b2,e3]",
  I: "[c#2,c#3]@2 [c#3,c#4]@2 [g#2,g#3] [d#3,d#4]@3 [a2,a3]@2 [g#2,g#3]@2 [c#2,f#3] [e2,b3]@3", // C# G# D# A G# F#5 E5
  J: "[f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]!2 ~ [f#2,c#3] [c#2,g#2]@4 [g#2,c#3,g#3]@4", // F#5 C#5
  K: "[f#2,b2,f#3] [d#2,g#2,d#3] [e2,a2,e3] [c#2,f#2,c#3]", L: "[d#2,g#2,d#3] [e2,b2,e3] [c#2,g#2] [g#2,c#3,g#3]",
  M: "[d#2,g#2,d#3]@2 [e2,b2,e3]@2 [a2,d3]!4", N: "[a2,d3]@2 [a2,d3]@2 [a2,d3]@2 [a2,d3]@2 c#2@2 c#3@2 g#2 d#3@3",
  O: "a2@2 g#2@2 c#2 e2@3 d2@2 c#2@2 ~@3 c#2", P: "c#2 e2 d2 c#2 g2@2 f#2 e2 d2@2 c#2@2 ~@3 c#2",
  Q: "c#2 e2 d2 c#2 g2 f#2 ~ e2 d2@2 c#2@2 ~@3 c#2",
  R: "~ e2 ~ c#2 [f#2,g2,c#3] [f#2,c#3] ~ [e2,f#2,c#3] [c#2,g#2]@4 [g#2,c#3,g#3]@4, [c#2,f#2,c#3] [d2,f#2,c#3] ~@6", // F# F#5 F#7 C#5 F#5 Dmaj7
  S: "[a2,d3]!4 c#2 ~@3", // D5
})).s("gm_overdriven_guitar").gain(0.64)

// chords · guitar harmonics
const guitar_harmonics = note("<A@5 ~@35 A@5 ~@22>".pickRestart({
  A: "[~@36 f#1 b1@3 ~@12 f#1 b1@3 ~@12 f#1 b1@3 ~@8, ~ d#3@8 ~]/5",
})).s("gm_guitar_harmonics").gain(0.6)

// bass · electric bass finger
const bass = note("<~ A B@2 C D@3 E F@3 G D@3 H ~@5 I@4 J@4 ~@10 K B@3 L ~@7 M ~@8 N ~@5>".pickRestart({
  A: "~@8 c#3!8", B: "c#3!16", C: "c#3!8 c#3@2 c#3@2 g#2 d#3@3", D: "a2@2 g#2@2 f#2 e2@3 c#3@2 c#3@2 g#2 d#3@3",
  E: "a2@2 g#2@2 f#2 e2@3 c#1@2 c#1 ~@5", F: "a1@2 g#1 ~@5 c#1@2 c#1 ~@5", G: "a1@2 g#1 ~@5 c#3@2 c#3@2 g#2 d#3@3",
  H: "a2@2 g#2@2 f#2 e2@3 ~@8", I: "c#1@2 c#1 ~@5 a1@2 g#1 ~@5", J: "c#3@2 c#3@2 g#2 d#3@3 a2@2 g#2@2 f#2 e2@3",
  K: "d2@2 d2@2 d2@2 d2@2 c#3!8", L: "c#3!8 ~@8", M: "~@2 c#1!2 ~@12", N: "d2@2 d2@2 d2@2 d2@2 c#3 ~@7",
})).s("gm_electric_bass_finger").gain(0.68)

// bass · fretless bass · "Bass2"
const bass_2 = note(`<
  A@5 B@3 C D@3 E B@3 F G H I H I J@4 K@4 G L M N M N M N M O P@5 Q@3 R Q@3 S M N M N M N M O T@6
>`.pickRestart({
  A: "[~@8 c#1@64 c#1@2 c#2@2 g#1 d#2@3]/5", B: "a1@2 g#1 ~ f#1 b1@3 c#1@2 c#2@2 g#1 d#2@3",
  C: "a1@2 g#1 ~ f#1 b1@3 c#1@2 c#1 ~@5", D: "a1@2 g#1 ~@5 c#1@2 c#1 ~@5", E: "a1@2 g#1 ~@5 c#1@2 c#2@2 g#1 d#2@3",
  F: "a1@2 g#1 ~ f#1 b1@3 f#1@2 f#1@2 f#1!2 ~ f#1", G: "f#1@2 f#1@2 f#1!2 ~ f#1 f#1@2 f#1@2 f#1!2 ~ f#1",
  H: "c#1 c#2 b1 g#1", I: "a1 f#1 g#1 e1", J: "c#1@2 c#1 ~@5 a1@2 g#1 ~@5",
  K: "c#1@2 c#2@2 g#1 d#2@3 a1@2 g#1 ~ f#1 b1@3", L: "f#1@2 f#1@2 f#1!2 ~ f#1 c#1@4 c#2@4", M: "b1 g#1 a1 f#1",
  N: "g#1 e1 c#1 c#2", O: "g#1@2 e1@2 d2!4", P: "[d2@2 d2@2 d2@2 d2@2 c#1@64 c#1@2 c#1@2 ~ c#1 ~ c#1]/5",
  Q: "c#1@2 c#1!2 c#1@2 c#1!2 c#1@2 c#1@2 ~ c#1@2 c#1", R: "c#1@2 c#1!4 ~ c#1 c#1@2 c#1@2 ~ c#1@2 c#1",
  S: "[c#1,f#1]@2 c#1!2 [c#1,f#1]!2 ~ [c#1,f#1] c#1@4 c#2@4, ~ f#1 ~@6", T: "[d2!4 c#1@43 ~]/6",
})).s("gm_fretless_bass").gain(0.8)

// other · pad poly
const pad_poly = note("<~@2 A@3 B@3 C ~@3 D B@3 C ~@9 E@4 ~@12 F@3 ~@22>".pickRestart({
  A: "[~@4 c#2@16 c#2 c#2@3]/3", B: "a1 g#1 e1@2 c#2 c#2@3", C: "a1 g#1 e1@2 ~@4", D: "~@4 c#2 c#2@3",
  E: "c#2 c#2@3 a1 g#1 e1@2", F: "[~ c#2@4 ~]/3",
})).s("gm_pad_poly").gain(0.8)

// chords · distortion guitar · "Elec Guitar"
const distortion_guitar = note(`<
  ~@8 A B@3 C D@3 E ~ F G F G ~@4 H@4 ~ I J K J K J K J L ~@4 M N@3 O N@3 P J K J K J K J L ~@6
>`.pickRestart({
  A: "~@8 c#2@2 c#2 ~@5", B: "g#2@2 g#2 ~@5 c#2@2 c#2 ~@5",
  C: "g#2@2 g#2 ~@5 [c#2,g#2]@2 [c#2,g#2]@2 [c#2,g#2]@2 [c#2,g#2]@2", D: "[g#2,c#3]!4 [c#2,g#2]!4",
  E: "[g#2,c#3]!4 ~@4", F: "[c#2,g#2]!8", G: "[e2,a2]!4 [d#2,g#2]!3 [e2,a2]", H: "[c#2,g#2]!4 [g#2,c#3]!4",
  I: "~@4 [c#2,g#2]!4", J: "[c#2,g#2]!4 [e2,a2]!4", K: "[d#2,g#2]!3 [e2,a2] [c#2,g#2]!4", L: "[d#2,g#2]!3 [e2,a2] ~@4",
  M: "a2@2 g#2@2 c#2 e2@3 d2@2 c#2@2 ~@3 c#2", N: "c#2 e2 d2 c#2 g2@2 f#2 e2 d2@2 c#2@2 ~@3 c#2",
  O: "c#2 e2 d2 c#2 g2 f#2 ~ e2 d2@2 c#2@2 ~@3 c#2",
  P: "c#2 e2 d2 c#2 g2 f#2 ~ e2 [c#2,g#2]@2 [c#2,g#2]@2 [c#2,g#2]@2 [c#2,g#2]@2", // C#5
})).s("gm_distortion_guitar").gain(0.8)

// drums · kick
const kick = s("bd").struct("<~@4 A B@11 C ~ B@12 ~ D B@8 C ~@3 A B@3 E B@3 E B@8 C ~@5>".pickRestart({
  A: "~@8 x ~ x ~@2 x ~@2", B: "x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2", C: "x ~ x ~@2 x ~@10", D: "~@4 x!5 ~ x ~@2 x ~@2",
  E: "x ~ x ~ x!2 ~ x!2 ~ x ~@2 x ~@2",
})).gain(0.8)

// drums · clap
const clap = s("cp").struct("<~@2 A B C ~@37 A B C ~@22>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.8)

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

// drums · hihat
const hihat = s("hh").struct("<~@2 A B C ~@3 D E@3 F ~@9 G@3 H ~@16 A B C ~@22>".pickRestart({
  A: "~@8 x ~ x!3 ~ x!2", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", C: "x ~ x!3 ~ x!2 ~@8", D: "~@8 x!8", E: "x!7 ~ x!8",
  F: "x!8 ~@8", G: "x!15 ~", H: "x!16",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@45 [~@6 x!2 ~@8]!3 [~@4 x!2 ~ x ~@8] ~@3 [~@4 x!2 ~ x ~@8] ~@14>").gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@4 A ~@3 B ~@3 C ~@3 B ~@4 D ~@3 E ~@3 D ~@5 B ~@3 B@2 ~@3 A ~@3 F ~@3 F ~@3 B ~@3 B@2 ~@5
>`.pickRestart({
  A: "~@4 x!4 ~@8", B: "~@6 x!2 ~@8", C: "~@3 x!5 ~@8", D: "~@14 x!2", E: "~@11 x!5", F: "~@5 x ~ x ~@8",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@9 [~@7 x ~@8]!3 ~@10 [~@15 x]!3 ~@6 [~@4 x!4 ~@8] ~@35>").gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@7 A ~@4 B ~@7 B ~@5 A ~@3 A@2 ~@7 C ~@3 C ~@3 A ~@3 A@2 ~@5>".pickRestart({
  A: "~@4 x!2 ~@10", B: "~@12 x!2 ~@2", C: "~ x ~@2",
})).gain(0.8)

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

stack(
  overdriven_guitar, guitar_harmonics, bass, bass_2, pad_poly, distortion_guitar, kick, clap, snare, hihat, low_tom,
  mid_tom, open_hat, high_tom, crash
)

More by Linkin Park