Strudelify

Last Stop: This Town

Eels

KeyE majorTempo103 bpm
0:00/0:00
// Last Stop: This Town — Eels
// 103 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 12 taiko drum (copy of ch 11 melodic tom); ch 13 synth drum (copy of ch 11 melodic tom, 0.075 beats late)
// note: Full arrangement: all 87 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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 · harpsichord
const harpsichord = note(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C D C B C B C B C E ~@28 C B C B C B C B C B C B C B C B C B C B C B C
  B F
>`.pickRestart({
  A: "e4!2 g#4 b4 ~ d#4 b4 f#4, ~ b3", B: "~ e4 a4 c#5 b4 a4 g#4 f#4, a3 b3", C: "e4!2 g#4 b4 ~ d#4 f#4 b4, ~ b3",
  D: "~ e4 a4 e4 [b3,f#4] ~@3, a3 ~", E: "~@2 e4@2 a4@2 c#5 ~@9, a3 ~", F: "[b3,e4] ~",
})).s("gm_harpsichord").gain(0.29)

// other · music box
const music_box = note("<~@42 A B A B ~@2 C D ~@37>".pickRestart({
  A: "e5 d#5", B: "e5 b4", C: "e5 ~ d#5 ~", D: "e5 ~ b4 ~",
})).s("gm_music_box").gain(0.22)

// chords · flute
const flute = note(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A C A B A B A B A D E F E F E F E G H I H J K L K M ~@4 H I H I H I H
  I A B A B A B A B A B A B A B A B A B A B A B A B N
>`.pickRestart({
  A: "e4 d#4", B: "c#4 d#4", C: "c#4@4 d#4 ~@3", D: "c#4@7 ~@9", E: "[b3,e4,g#4,b4,e5] [b3,d#4,f#4,b4,d#5]",
  F: "[a3,c#4,e4,a4,c#5] [b3,d#4,f#4,b4,d#5]", G: "[a3,c#4,e4,a4,c#5] ~", H: "[e5,g#5] [d#5,f#5]",
  I: "[c#5,e5] [d#5,f#5]", J: "[c#5,e5] [b4,d#5]", K: "e5 d#5", L: "c#5 d#5", M: "c#5@2 f#4 ~", N: "e4 ~",
})).s("gm_flute").gain(0.14)

// other · harpsichord
const harpsichord_2 = note(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@29 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B@3 C@2
>`.pickRestart({
  A: "e3@5 ~@3", B: "[~@3 g#5 e6 ~ b5 g#5 ~ a5 b5 ~ g#5 f#5 ~ a5 e6 ~ c#6 a5 ~ b5 c#6 ~, ~ e5@6 c#5@5 ~ d#5@6 b4@5]/3",
  C: "[[b4,a5] ~@2 g#5 e6 ~ b5 g#5 b3@5 ~@3, ~ e5@6 b4@5 ~@4]/2", // B7
})).s("gm_harpsichord").gain(0.32).pan(0.6)

// other · overdriven guitar
const overdriven_guitar = note("<~@25 A B C B C B C B D ~@23 A B C B C B C B C ~@11 A B C B C ~@5>".pickRestart({
  A: "~@6 f#4 ~", B: "e4 ~@2 f#4 ~ f#4!2 ~", C: "e4 ~@2 f#4 ~ e4 ~@2", D: "e4 ~@2 f#4 ~@4",
})).s("gm_overdriven_guitar").gain(0.25).pan(0.3)

// bass · acoustic bass
const bass = note(`<
  A B C B C B C B C B C B C D E F E G H I H J H I H K H I H J H I H K ~@4 C B C L ~@20 C B C B C B C B C B C B C B C B M
  G H I N O P@3
>`.pickRestart({
  A: "e2 b1", B: "a1 b1", C: "e1 b1", D: "a1@8 b1@7 b1", E: "e1@7 e1 b1@7 b1", F: "a1@7 a1 b1@7 g#1",
  G: "a1@7 a1 b1@7 f#1", H: "e1@3 e1 b1@3 b1", I: "a1@3 a1 b1@2 b1@2", J: "a1@3 a1 b1 b0 c#1 d#1", K: "a1@3 a1 ~@4",
  L: "a1 ~", M: "e1@6 ~ e1 b1@7 b1", N: "e1", O: "c#2 b1", P: "[e1@5 ~]/3",
})).s("gm_acoustic_bass").gain(0.25).pan(0.2)

// chords · overdriven guitar
const overdriven_guitar_2 = note(`<
  ~@26 A B A C A B A D ~@16 E F G F G F G F G F G F H ~@15 A C A B I ~@4
>`.pickRestart({
  A: "e3!2 g#3 b3 ~ d#3 f#3 b3, [e2,b2] [f#2,b2]", B: "~ e3 a3 c#4 b3 a3 g#3 f#3, [e2,a2] [f#2,b2]",
  C: "~ e3 a3 c#4 b3 a3 g#3 f#3, [e2,a2] [e2,b2]", D: "~ e3 a3 c#4 ~@4, [e2,a2] ~", E: "~@3 [e3,b3,e4,g#4]",
  F: "[f#3,b3,d#4,f#4] ~@11 [e3,a3,c#4,e4]@4", G: "[e3,g#3,b3,e4] ~@11 [e3,b3,e4,g#4]@4", H: "[e3,g#3,b3,e4] ~@15",
  I: "[e2,b2]", // E5
})).s("gm_overdriven_guitar").gain(0.25).pan(1)

// other · clarinet
const clarinet = note(`<
  ~@25 A B C B C B C B D E F G H I J I K L M L M N O N P ~@4 L M L M Q R Q R B C B C ~@21
>`.pickRestart({
  A: "~@6 f#4 ~", B: "e4 ~@2 f#4 ~ f#4!2 ~", C: "e4 ~@2 f#4 ~ e4 ~@2", D: "e4 ~@2 f#4 ~@4", E: "e4@2 f#4 g#4",
  F: "e4@2 c#4 b3", G: "e4@2 g#4 b4", H: "c#5 b4", I: "e5 d#5", J: "[c#5,e5] b4", K: "[c#5,e5] ~", L: "e5 b4",
  M: "a4 b4", N: "[g#4,e5] [f#4,d#5]", O: "[e4,c#5,e5] [f#4,b4,d#5]", P: "[e4,c#5,e5]@2 [f#4,b4] ~",
  Q: "e4 ~@2 f#4 ~ f#4!2 ~, e5 b4", R: "e4 ~@2 f#4 ~ e4 ~@2, a4 b4",
})).s("gm_clarinet").gain(0.15)

// bass · electric guitar muted
const bass_2 = note("<~@18 A B A C A B A D A B A C A B A D ~@44 E F A B ~@5>".pickRestart({
  A: "e1@3 e1 b1@3 b1", B: "a1@3 a1 b1@2 b1@2", C: "a1@3 a1 b1 b0 c#1 d#1", D: "a1@3 a1 ~@4", E: "e1@7 e1 b1@7 b1",
  F: "a1@7 a1 b1@7 f#1",
})).s("gm_electric_guitar_muted").gain(0.36).pan(0.7)

// other · melodic tom
const melodic_tom = note(`<
  ~@50
  [d#2@2 d#2!2 d#2@2 ~ d#2@2 d#2@2 d#2!2 ~@2 d#2]
  [d#2 ~ d#2!2 d#2@2 ~ d#2@2 d#2@2 d#2!2 ~@2 d#2]
  [d#2@2 d#2!2 d#2@2 ~ d#2@2 d#2@2 d#2!2 ~@2 d#2]!10
  [d#2 ~@15]
  ~@24
>`).s("gm_melodic_tom").gain(0.32).pan(0.1)

// other · tuba
const tuba = note("<~@22 A B C D ~@21 E F G ~@20 A B H I ~@13>".pickRestart({
  A: "e2@2 e2!2 e2@4 f#2@4 ~ e2 f#2@2", B: "a2!3 g#2 f#2 ~@3", C: "g#3@2 g#3!2 g#3@2 g#3@2 f#3@4 ~ g#3 f#3@2",
  D: "e3!2 ~@6", E: "~@2 a2 b2@2 a2@2 g#2 f#2@2 ~@6", F: "g#3@2 g#3!2 e3@2 e3@2 f#3@2 f#3@2 g#3@2 f#3@2",
  G: "e3@2 e3!2 b2@2 ~@2", H: "e4@2 e4!2 e4@2 e4@2 d#4@4 ~ e4 d#4@2", I: "c#4!4 b3@2 ~@2",
})).s("gm_tuba").gain(0.52).pan(0.1)

// other · tuba · soft notes
const tuba_soft = note("<~@46 [g#2@2 g#2!2 e2@2 e2@2 f#2@4 ~@2 f#2!2] [a2 ~@7] ~@39>").s("gm_tuba").gain(0.33).pan(0.1)

// other · tuba
const tuba_2 = note("<~@22 A B C D ~@21 E F G ~@20 A B C H ~@13>".pickRestart({
  A: "e2@2 e2!2 e2@4 f#2@4 ~ e2 f#2@2", B: "a2!3 g#2 f#2 ~@3", C: "g#3@2 g#3!2 g#3@2 g#3@2 f#3@4 ~ g#3 f#3@2",
  D: "e3!2 ~@6", E: "~@2 a2 b2@2 a2@2 g#2 f#2@2 ~@6", F: "g#3@2 g#3!2 e3@2 e3@2 f#3@2 f#3@2 g#3@2 f#3@2",
  G: "e3@2 e3!2 b2@2 ~@2", H: "e3!4 d#3 ~@3",
})).s("gm_tuba").gain(0.48).pan(0.9)

// other · tuba · soft notes
const tuba_soft_2 = note("<~@46 [g#2@2 g#2!2 e2@2 e2@2 f#2@4 ~@2 f#2!2] [a2 ~@7] ~@39>").s("gm_tuba").gain(0.3).pan(0.9)

// other · contrabass
const contrabass = note(`<
  ~@6 A B C D E F G H ~@4 I J I K ~ L ~ M ~@4 N O P Q ~@4 R S T U ~@24 V W X Y ~ Z AA ~@2 AB AC ~@10
>`.pickRestart({
  A: "~@2 g#4 f#4@2 ~ g#4 f#4", B: "e4@2 e4@2 e4 f#4@2 ~", C: "~@4 g#4@2 g#4@2 f#4@4 ~ g#4 f#4@2", D: "e4!2 b3@2",
  E: "~ e4 g#4 b4 b4@2 ~ b4", F: "c#5 b4 b4@2 g#4 b4@3", G: "~@2 g#4!2 f#4!2 g#4@2", H: "e4!2 e4@2 b3@3 ~",
  I: "~@4 g#4 g#4@2 f#4@2 ~@3 g#4@2 f#4@2", J: "e4!2 e4@2 e4@2 c#4@2 e4@2 f#4@2 ~@4", K: "e4!2 e4@2 e4@2 e4@2 b3@4 ~@4",
  L: "~@5 g#3@2 ~", M: "~@4 e4 e4@3 b3@2 ~@6", N: "e5@2 e5 e5@2 e5 e5@2 c#5@2 b4@2 b4@2 b4@2",
  O: "c#5@2 b4@2 b4@2 b4@2 g#4@2 b4@2 b4 ~ g#4!2", P: "g#4!4 a4 e4!3", Q: "e4!4 b3 ~@3",
  R: "~@2 g#4!2 g#4@2 g#4@2 f#4@2 f#4@2 g#4@2 f#4@2", S: "e4@4 e4@2 e4@2 b3@2 ~@4 b3!2", T: "g#4!4 f#4!2 g#4 f#4",
  U: "e4@2 e4!2 b3 ~@3", V: "~@2 e5@2 e5@2 e5@2 c#5@2 b4 b4@2 ~ b4@2", W: "c#5 b4!3 g#4 b4!2 ~",
  X: "~@2 g#4@2 g#4@2 a4 a4@2 g#4 g#4@2 ~@2 e4!2", Y: "e4!4 f#4@2 ~@2", Z: "~@5 g#3 g#3@2", AA: "g#3 ~@3",
  AB: "~@7 b3 g#4@4 f#4@4", AC: "e4 ~@3",
})).s("gm_contrabass").gain(0.64)

// drums · rim
const rim = s("rim").struct("<~@14 A@11 B A@7 C A@7 C ~@8 A@32 D ~@4>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2 ~@2", D: "x",
})).gain(0.17)

// drums · kick
const kick = s("bd").struct(`<
  ~@14 A B A B A B A B A B A C A B A B A B A D A B A B A B A D ~@8 A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B E ~@4
>`.pickRestart({
  A: "x ~@2 x!2 ~ x!2 ~ x!2 ~ x ~ x ~", B: "x!2 ~ x!2 ~ x ~@2 x!4 ~ x!2", C: "x!2 ~ x!2 ~ x ~ x ~@7",
  D: "x!2 ~ x!2 ~ x ~@9", E: "x",
})).gain(0.22)

// drums · snare
const snare = s("sd").struct("<~@14 A@11 B A@7 C A@7 C ~@8 A@32 ~@5>".pickRestart({
  A: "~ x ~ x", B: "~ x!2 ~", C: "~ x ~@2",
})).gain(0.22)

// drums · low tom
const low_tom = s("lt").struct("<~@18 A@7 B A@7 C A@7 C ~@8 A@32 ~@5>".pickRestart({
  A: "~ x ~ x", B: "~ x!2 ~", C: "~ x ~@2",
})).gain(0.22)

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

// drums · mt
const mt = s("mt").struct("<~@18 A@7 B A@7 C A@7 C ~@8 A@12 ~@25>".pickRestart({
  A: "~ x ~ x", B: "~ x!2 ~", C: "~ x ~@2",
})).gain(0.22)

stack(
  harpsichord, music_box, flute, harpsichord_2, overdriven_guitar, bass, overdriven_guitar_2, clarinet, bass_2,
  melodic_tom, tuba, tuba_soft, tuba_2, tuba_soft_2, contrabass, rim, kick, snare, low_tom, hihat, mt
)

More by Eels