Strudelify

Last Train to Clarksville

The Monkees

KeyG majorTempo192 bpm
0:00/0:00
// Last Train to Clarksville — The Monkees
// 192 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 2 "Vocal" synth choir (copy of ch 1 "Vocal" french horn)
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(192/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 · "Guitar Lead"
const electric_guitar_clean = note(`<
  A B A B C@12 D E@3 F G C@8 D E@4 G H@2 C@12 I J I J I J K L K L K L K M C@8 I J I J I G H@2 N O P Q R S T S T S T S T
  U V W A X C@6 D E@3 F G H@2 C@8 A X A X A X A X A Y ~@2
>`.pickRestart({
  A: "g2 g3@3", B: "f3@3 e3@3 d3@2", C: "[g2 ~@6 d3, ~@2 g3@7 g3@3 g3@4, ~ f3, ~@10 b3@3 b3@3, ~@11 e3@5]/2",
  D: "~@5 e4@5 a3@2 g3@3 ~, ~@2 [c3,g3,c4]@3 ~@3", E: "c4@2 ~@3 e4@5 a3@2 g3@3 ~, ~@2 [c3,g3,c4]@3 ~@3",
  F: "c4@2 ~@3 c4@5 a3@2 g3@3 ~, ~@2 [c3,e3,g3]@3 ~@3", G: "c4 ~@7", H: "d3 a2",
  I: "~@5 c4@5 a3@2 g3@3 ~, ~@2 [c3,e3,g3]@3 ~@3", J: "c4@3 ~@13", K: "~ [g3,b3,g4]@9 ~@6, [g2,b2,d3]@5 ~@3",
  L: "~ [g3,c4,g4]@9 ~@6, [g2,c3,e3]@5 ~@3", M: "~ [g3,c4,g4]@9 ~@2 d3@4, [g2,c3,e3]@5 ~@3",
  N: "g3 b3 g4 g3 b3 g4 ~ g4, ~@3 g3", O: "a3 c4 g4 a3 c4 g4 ~ g4, ~@3 a3", P: "b3 d4 g4 b3 d4 g4 ~ g4, ~@3 b3",
  Q: "c4 f4 a4 c4 f4 a4 ~ a4, ~@3 c4", R: "d4 g4 b4 d4 g4 b4 ~ b4, ~@3 d4", S: "f4 a4 c5 f4 a4 c5 ~ c5, ~@3 f4",
  T: "g4 b4 d5 g4 b4 d5 ~ d5, ~@3 g4", U: "f4 a4 e5 a4 f4 e5 ~ e5, ~@3 f4", V: "g4 b4 d5 g4 b4 c5 f4!2",
  W: "[f4,a4,c5] ~@3", X: "f3 g3 b3 e3 g3 b3 d3@2", Y: "f3 g3 b3 e3 g3 b3 ~@2",
})).s("gm_electric_guitar_clean").gain(0.46).pan(0.3)

// other · banjo · "Guitar hi"
const banjo = note("<~@80 A@14 B@3 ~@19 A@9 C ~@6>".pickRestart({
  A: "d5!8", B: "[d5!7 d5@16 ~]/3", C: "d5!5 ~@3",
})).s("gm_banjo").gain(0.55).pan(0.6)

// other · banjo · "Guitar hi" · soft notes
const banjo_soft = note("<~@125 A B@3 C@3>".pickRestart({
  A: "~@5 d5!3", B: "d5!8", C: "[d5!7 d5@16 ~]/3",
})).s("gm_banjo").gain(0.16).pan(0.6)

// other · acoustic guitar steel · "Guitar lo"
const acoustic_guitar_steel = note("<~@80 A B C D C E F E C D C E F E F G ~@36>".pickRestart({
  A: "b3 b3@2 b3 b3@3 ~", B: "a3 a3@2 a3 a3@3 ~", C: "d4 d4@2 d4 d4@3 ~", D: "c4 c4@2 c4 c4@3 ~",
  E: "f4 f4@2 f4 f4@3 ~", F: "g4 g4@2 g4 g4@3 ~", G: "f4 ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.59).pan(0.1)

// chords · acoustic guitar steel · "Guitar Rhythm"
const acoustic_guitar_steel_2 = note(`<
  ~@8 A@8 B@2 C@2 B ~ D A@2 E A E A F G H@2 G H ~ I@2 ~@4 E@2 J A@3 J A H@4 K ~ L M L M L M L M E@2 A@4 J A G N G N K ~
  I@2 L M L M L M L M L M L M L M L O A@8 B@2 C@2 B ~ I@2 ~@4 A@13 P ~@2
>`.pickRestart({
  A: "g2 [g2,b2,d3,g3,b3,g4] ~ [g2,b2,d3,g3,b3,g4]", B: "c3 [c3,e3,g3,a#3] g2 [c3,e3,g3,a#3]",
  C: "c3 [c3,e3,g3,a#3] ~ [c3,e3,g3,a#3]", D: "g2 [g2,b2,d3,g3] ~ [g2,b2,d3,g3]",
  E: "~ [g2,b2,d3,g3,b3,g4] ~ [g2,b2,d3,g3,b3,g4]", F: "~ [b2,d3,g3,b3,g4] ~ [g2,b2,d3,g3,b3,g4], ~ g2@2 ~",
  G: "c3 [g2,c3,e3,g3,a#3] g2 [g2,c3,e3,g3,a#3]", H: "c3 [g2,c3,e3,g3,a#3] g2 [c3,e3,g3,a#3]",
  I: "d3 [d3,f#3,a3,c4] a2 [d3,f#3,a3,c4]", J: "g2 [g2,b2,d3,g3,b3,g4] d2 [g2,b2,d3,g3,b3,g4]",
  K: "c3 [c3,e3,g3,c4] g2 [c3,e3,g3,c4]", L: "[g2,b2,d3,b3,g4]", M: "[a2,c3,f3,a3,g4]", N: "c3 [g2,c3,e3,g3,a#3] g2 ~",
  O: "[a2,c3,f3,a3,g4] ~@3", P: "g2 [g2,b2,d3,g3,b3,g4] ~@2",
})).s("gm_acoustic_guitar_steel").gain(0.42).pan(1)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A@4 B@4 C D C D C D C D E@2 F@3 G C D C D C D C D F@5 G H@2 B@4 C D C D C D C D F@5 G I@7 J C D C D C D C D F@5 G H@2
  K L K L K L K L M N M N M N M O C D C D C D C D E@2 F@3 G H@2 B@4 C D C D C D C D C D C D C P ~@2
>`.pickRestart({
  A: "[~ g2@7]/2", B: "[g1 g2@7]/2", C: "g1 g2@3", D: "f2@3 e2@3 d2@2", E: "c2@2 g1 a#1", F: "c2 g1", G: "c2@3 ~@13",
  H: "d2 a1", I: "g1@3 ~ g1@3 ~ g1@3 ~ g1@3 ~", J: "g1 ~@3", K: "g1 ~", L: "a1 ~", M: "g1!4", N: "a1!4", O: "a1 ~@3",
  P: "f2@3 e2@3 ~@2",
})).s("gm_electric_bass_pick").gain(0.56).pan(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B@13 C B@13 C B@2 ~@3 A B@13 D ~@7 A B@13 C B@2 D@7 C B@7 E B@13 C B@2 ~@3 A B@13 F ~@2
>`.pickRestart({
  A: "~@11 x!2 ~@3", B: "~ x ~ x", C: "x ~@10 x!2 ~@3", D: "x", E: "x ~@9 x!3 ~@3", F: "~ x ~@2",
})).gain(0.5).pan(0.7)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~ A ~ A ~ A ~@7 A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A ~@15 A ~ A ~ A ~ A ~@25 A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A ~ A ~
  A ~ A ~@3
>`.pickRestart({
  A: "~ x ~@2",
})).gain(0.56).pan(0.7)

// drums · ride bell
const ride_bell = s("rd").struct("<~@109 [~@11 x!2 ~@3] ~@22>").gain(0.5).pan(0.7)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B A B A B A B C@13 D C@13 D C@2 A B A B C@13 D B@8 C@13 D C@2 E@5 F C@9 D C@13 D C@2 A B A B C@13 G ~@2
>`.pickRestart({
  A: "~@4 x ~@7 x!4", B: "x!16", C: "x!8", D: "x", E: "x ~@3 x!10 ~@2", F: "x!2", G: "x!7 ~",
})).gain(0.33).pan(0.7)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~ A ~ A ~ A ~@7 A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A ~@15 A ~ A ~ A ~ A ~@17 A ~@7 A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A
  ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~ x ~@2",
})).gain(0.5).pan(0.7)

stack(
  electric_guitar_clean, banjo, banjo_soft, acoustic_guitar_steel, acoustic_guitar_steel_2, bass, snare, open_hat,
  ride_bell, tambourine, crash
)

More by The Monkees