Strudelify

Never Let You Go

Third Eye Blind

KeyE majorTempo118 bpm
0:00/0:00
// Never Let You Go — Third Eye Blind
// 118 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(118/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 · electric guitar clean · "TabIt MIDI - Track 1"
const electric_guitar_clean = note(`<
  A B A B A B A B A B A B A B A B A B A B ~@6 A B A B A B A B A B A B A B A B A B ~@6 A B C D E D E D E D E D E D A B A
  B A B A B A B A B A B F@8 G H I H ~@4 J B A K@3
>`.pickRestart({
  A: "[e3,b3] ~ [b2,f#3] ~ [a2,e3] [a2,e3]@2 ~", B: "[e3,b3] ~ [b2,f#3] ~ [a2,e3]!3 ~",
  C: "~ [e3,b3]!3 [d#3,b3]!3 [e3,b3]", D: "[b2,f#3]!3 [b2,e3] [a2,e3]!4", E: "[a2,e3] [e3,b3]!3 [d#3,b3]!3 [e3,b3]",
  F: "[~ e3@4 f#3@4 a3@4 g#3@4 e3@4 f#3@4 a3@4 g#3@4 e3@4 f#3@4 a3@4 g#3@4 e3@4 f#3@4 a3@4 g#3@3]/8",
  G: "~ [e3,b3,e4]@2 ~ [b2,f#3,b3] [b2,f#3,b3]@2 ~", H: "[a3,e4,a4] ~ [a3,e4,a4] ~ [e3,b3,e4] ~ [b2,f#3,b3] ~",
  I: "[e3,b3,e4] [e3,b3,e4]@2 ~ [b2,f#3,b3] [b2,f#3,b3]@2 ~", J: "[e3,b3] ~ [b2,f#3] ~ [a2,e3] [a2,e3]@2 a2",
  K: "[[e3,b3] ~ [b2,f#3] ~ [a2,e3]!2 [a2,e3]@14 ~@4]/3", // E5 B5 A5
})).s("gm_electric_guitar_clean").gain(0.56)

// chords · overdriven guitar · "TabIt MIDI - Track 2"
const overdriven_guitar = note(`<
  ~@2 A B A B ~@14 C D E D C D F G F G ~@14 C D E D C D F G ~@20 A B A B A B ~@12 C D E D F G F G H@2
>`.pickRestart({
  A: "[f#3,f#4]@3 [e3,e4] [c#3,c#4]@3 ~", B: "[f#3,f#4]@3 [e3,e4] [c#3,c#4]@2 [b2,b3] ~",
  C: "~ [e3,b3,e4]@2 ~ [b2,f#3,b3] [b2,f#3,b3]@2 ~", D: "[a3,e4,a4] ~ [a3,e4,a4] ~ [e3,b3,e4] ~ [b2,f#3,b3] ~",
  E: "[e3,b3,e4] [e3,b3,e4]@2 ~ [b2,f#3,b3] [b2,f#3,b3]@2 ~", F: "[e3,b3] ~ [b2,f#3] ~ [a2,e3] [a2,e3]@2 ~",
  G: "[e3,b3] ~ [b2,f#3] ~ [a2,e3]!3 ~", H: "[[e3,b3]@3 ~]/2",
})).s("gm_overdriven_guitar").gain(0.25)

// other · distortion guitar · "TabIt MIDI - Track 3"
const distortion_guitar = note(`<
  ~@4 A B ~@20 C D C D ~@20 C D ~@4 E F@2 ~ E F@2 ~@9 A B A B A B ~@16 C D C G ~@2
>`.pickRestart({
  A: "[e3,b3] ~ [b2,f#3] ~ [a2,e3] [a2,e3]@2 ~", B: "[e3,b3] ~ [b2,f#3] ~ [a2,e3]!3 ~",
  C: "[f#3,f#4]@3 [e3,e4] [c#3,c#4]@3 ~", D: "[f#3,f#4]@3 [e3,e4] [c#3,c#4]@2 [b2,b3] ~", E: "~ f#4!7",
  F: "[f#4!6 g#4 f#4@2 ~@7]/2", G: "[f#3,f#4]@3 [e3,e4] [c#3,c#4]@2 [b2,b3]@2",
})).s("gm_distortion_guitar").gain(0.23)

// bass · electric bass finger · "TabIt MIDI - Track 4"
const bass = note(`<
  ~@4 A B A B A B A B A B A B A B A B C D E D C D A B A B A B A B A B A B A B A B A F C D E D C D A B G H I H I H I H J
  K@2 H ~@8 A B A B A B ~@4 C D E D C L E D C D E D A F A F M@2
>`.pickRestart({
  A: "e2 ~ b1 ~ a1 a1@2 ~", B: "e2 ~ b1@2 a1!3 ~", C: "~ e2@2 ~ b1 b1@2 ~", D: "a2 ~ a2 ~ e2 ~ b1 ~",
  E: "e2 e2@2 ~ b1 b1@2 ~", F: "e2 ~ b1 ~ a1!3 ~", G: "~ e2!3 d#2!3 e2", H: "b1!3 e2 a1!4", I: "a1 e2!3 d#2!3 e2",
  J: "a1 e2!3 b2@2 a2 g#2", K: "[a2@2 g#2 f#2 g#2@2 f#2 e2@2 e2!3 d#2!3 e2]/2", L: "a2 ~ a2 ~@3 b1 ~", M: "[e2@3 ~]/2",
})).s("gm_electric_bass_finger").gain(0.21)

// chords · acoustic guitar steel · "TabIt MIDI - Track 6"
const acoustic_guitar_steel = note("<~@78 A@8 B@6 C@8>".pickRestart({
  A: "[~@5 g#4 ~@3 a4 ~@3 g#4 ~@7 g#4 ~@3 a4 ~@3 g#4 ~@7 g#4 ~@3 a4 ~@3 g#4 ~@7 g#4 ~@3 a4 ~@3 g#4 ~ b4, ~ e4@16 e4@16 e4@16 e4@15, ~@2 g#4@3 ~ a4@3 ~ a4@3 ~ g#4@4 g#4@3 ~ a4@3 ~ a4@3 ~ g#4@4 g#4@3 ~ a4@3 ~ a4@3 ~ g#4@4 g#4@3 ~ a4@3 ~ a4@3 ~ g#4@2, ~@3 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 ~, ~ e5 e5!2 e5!2 e5!2 e5!2 e5!2 e5!2 e5!2]/8",
  B: "[~@5 g#4 ~@3 a4 ~@3 g#4 ~@7 g#4 ~@3 a4 ~@3 g#4 ~@7 g#4 ~@3 a4 ~@3 g#4 ~ b4, e5!2 e5!2 e5!2 e5!2 e5!2 e5!2, ~ e4@16 e4@16 e4@15, ~@2 g#4@3 ~ a4@3 ~ a4@3 ~ g#4@4 g#4@3 ~ a4@3 ~ a4@3 ~ g#4@4 g#4@3 ~ a4@3 ~ a4@3 ~ g#4@2, ~@3 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 b4@4 ~]/6",
  C: "[~@5 g#4 ~@3 a4 ~@3 g#4 ~ b4 ~@48, e5!2 e5 e5@12 ~, ~ e4@59 ~@4, ~@2 g#4@3 ~ a4@3 ~ a4@3 ~ g#4@46 ~@4, ~@3 b4@4 b4@4 b4@4 ~@49]/8",
})).s("gm_acoustic_guitar_steel").gain(0.25)

// other · reed organ
const reed_organ = note("<~@14 A B A B A B ~@18 A B A B A B ~@28 A B A B A B ~@22>".pickRestart({
  A: "g#4@2 g#4@2 e4@3 ~@9", B: "g#4@2 g#4@2 e4@3 ~ f#4@2 ~@6",
})).s("gm_reed_organ").gain(0.22)

// other · trumpet
const trumpet = note("<~@30 A B A B A B A B ~@62>".pickRestart({
  A: "e3 f#3 g#3 f#3", B: "e3@2 f#3@2 g#3@2 a3 g#3",
})).s("gm_trumpet").gain(0.28)

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

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~ x!2 ~] ~@49 [~@6 x!2] x [~@6 x!2] x ~@43>").gain(0.34)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~ A ~ B A ~@18 A ~ A ~ B A ~@8 C A C A ~@14 D ~ A ~ A E F A ~@21>".pickRestart({
  A: "x", B: "x ~@6 x", C: "~@6 x!2", D: "~@5 x!2 ~", E: "~ x!7", F: "x!8",
})).gain(0.34)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@6 A ~ A ~ A ~ A ~ A ~ A ~ A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@7 A ~ A ~@5 A ~ A ~ A ~ A ~@7 A ~ A ~ A ~@17 A ~
  A ~@3
>`.pickRestart({
  A: "x",
})).gain(0.34)

// drums · high tom
const high_tom = s("ht").struct("<~@71 [~ x] ~@28>").gain(0.34)

// drums · crash
const crash = s("cr").struct("<~@3 A ~@16 B ~ B ~ B ~@19 B ~ B ~ B ~@29 B ~@5 B ~ B ~@3 B ~@7 C ~>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6", C: "x",
})).gain(0.34)

// drums · ride
const ride = s("rd").struct("<~@20 [~ x!7] [x!8]!5 ~@18 [~ x!7] [x!8]!5 ~@50>").gain(0.34)

stack(
  electric_guitar_clean, overdriven_guitar, distortion_guitar, bass, acoustic_guitar_steel, reed_organ, trumpet, kick,
  snare, hihat, low_tom, mid_tom, open_hat, high_tom, crash, ride
)

More by Third Eye Blind