Strudelify

Sweet Hitch-Hiker

Creedence Clearwater Revival

KeyD majorTempo142 bpm
0:00/0:00
// Sweet Hitch-Hiker — Creedence Clearwater Revival
// 142 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 8 "Midi C4, T3" overdriven guitar (copy of ch 5 "Midi C2, T1" distortion guitar)
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(142/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 · distortion guitar · "Midi C2, T1"
const distortion_guitar = note(`<
  ~@2 A B C D E F G D E F G D H I J K L M N O P Q R S@2 T@2 D E F G D E F G D H I J K L M N O P Q R S@2 T@2 D H I J K L
  M N D E F G D E F G D H I J K L M N O P Q R S@2 T@2 O P Q R S@2 Q R O P Q R S@2 U@2 V
>`.pickRestart({
  A: "[d3,f#3,a3,d4] ~ [a3,d4]@2 [d3,f#3,a3,e4] ~ [d3,f#3,a3,d4] ~@3 [d3,f#3,a3,d4]@2 [d3,f#3,a3,e4] ~ [d3,f#3,a3,d4] ~", // D D5 D
  B: "~@2 [d3,f#3,a3,d4]@2 [d3,f#3,a3,e4] ~ [d3,f#3,a3,d4] ~@3 [d3,f#3,a3,d4]@2 [d3,f#3,a3,e4] ~ [d3,f#3,a3,d4] ~", // D
  C: "[d3,f#3,a3,d4] ~ [a3,d4]@2 [d3,f#3,a3,e4] ~ [d3,f#3,a3,d4] ~@3 [d3,f#3,a3]@2 [d3,f#3,a3,e4]@2 [d3,f#3,a3,d4] ~, ~@5 d4@2 ~", // D D5 D
  D: "[d3,f#3,d4]@3 ~ [d3,f#3,e4] ~ [d3,f#3,a3,d4]@3 ~ [d3,f#3,a3]@2 [d3,f#3,a3,e4]@2 [d3,f#3,a3,d4] ~, a3@2 ~@3 d4@2 ~", // D
  E: "[a3,d4] ~ a3@2 [d3,f#3,a3,e4]@2 [d3,f#3,a3,d4]@4 [d3,f#3] ~ [a3,e4]@2 [d3,f#3,a3,d4] ~, [d3,f#3]@2 ~@3 a3 ~@2, ~ d4@2 ~@2 d4@2 ~, ~@11 [d3,f#3]@3 ~@2", // D5 D A5 D
  F: "[g2,d3] ~ [g2,d3]@2 [g2,e3] ~ [g2,d3]@3 ~ [g2,d3]@2 [g2,e3]@2 d3@2, ~@6 e3 ~@9", // G5 C G5 C
  G: "[g2,d3]@2 [g2,d3]@2 [g2,e3] ~ d3@4 [g2,d3]@2 e3 ~ g2@2", // G5 C G5
  H: "[c3,g3] ~ [c3,g3]@2 a3 ~ [c3,g3]@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]@2", // C5
  I: "[g2,d3]@4 [g2,d3,e3] ~ [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 e3 ~ [g2,d3]@2, f2 ~@15", // G5 Em7 G5
  J: "[g2,d3]@2 [g2,d3]@2 e3 ~ [g2,d3]@2 [g2,d3]@2 ~@2 e3@2 [g2,d3] ~, ~@5 [g2,d3]@2 ~", // G5
  K: "[c3,g3]@4 [c3,g3] ~ [c3,g3] ~ [c3,g3]@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]@2", // C5
  L: "[a2,e3]@6 [a2,e3]@4 [a2,e3]@4 [a2,e3] ~", // A5
  M: "[d3,a3] ~ [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2", // D5
  N: "[d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3] ~", // D5
  O: "[a2,e3] ~ [a2,e3]@2 [a2,f#3]@2 [a2,e3]@2 [a2,e3] ~ [a2,e3]@2 a2@2 [a2,e3]@2, ~@3 f#3", // A5 D A5
  P: "[a2,e3] ~ [a2,e3]@2 [a2,f#3]@2 [a2,e3]@2 [a2,e3] ~ [a2,e3]@2 f#3@2 e3@2, ~@3 a2", // A5 D A5
  Q: "[g2,d3] ~ [g2,d3]@2 [g2,e3]@2 [g2,d3] ~ [g2,d3]@2 [g2,d3]@2 [g2,e3]@2 [g2,d3]@2", // G5 C G5 C G5
  R: "[d2,a2] ~ [d2,a2]@2 [d2,b2]@2 [d2,a2]@2 [d2,a2] ~ [d2,a2]@2 [d2,b2]@2 [d2,a2]@2", // D5 G D5 G D5
  S: "[a2,e3] ~ [a2,e3]@2 [a2,f#3]@2 [a2,e3] ~ [a2,e3] ~ [a2,e3]@2 [a2,f#3] ~ [a2,e3]@2", T: "[[g2,d3]@31 ~]/2",
  U: "[~@28 [c3,e3,g3]@3 ~, [g2,d3]@31 ~]/2", V: "[d3,f#3,a3] ~@7",
})).s("gm_distortion_guitar").gain(0.32)

// other · distortion guitar · "Midi C3, T2"
const distortion_guitar_2 = note(`<
  ~@2 A@2 B C@2 ~@2 D@2 ~@2 E F ~@2 F ~ G ~ H@2 I@2 J@2 K@2 C@2 ~@2 D@2 ~@2 E F ~@2 F ~ G ~ H@2 I@2 J@2 K@2 L M N O P Q
  R@2 ~@16 H@2 I@2 J@2 K@2 H@2 I@2 J@2 I@2 H@2 I@2 J@2 S@2 T
>`.pickRestart({
  A: "[[a3,d4]@2 [a3,d4]@2 [f#3,a3,e4] ~ [f#3,a3,d4]@4 [f#3,a3,d4]@2 [f#3,a3,e4] ~ [f#3,a3,d4]@4 [f#3,a3,d4]@2 [f#3,a3,e4] ~ [f#3,a3,d4]@4 [f#3,a3,d4]@2 [f#3,a3,e4] ~ [f#3,a3,d4]@2, f#3 ~@7]/2", // D5 F#m7 D F#m7 D F#m7 D F#m7 …
  B: "[a3,d4] ~ [a3,d4]@2 [f#3,a3,e4] ~ [f#3,a3,d4]@4 [f#3,a3]@2 [f#3,a3,e4]@2 [f#3,a3,d4] ~, f#3@2 ~@3 d4@2 ~", // D5 F#m7 D F#m F#m7 D
  C: "[f#3,d4]@3 ~ [f#3,e4]@2 [f#3,a3,d4]@3 ~ [f#3,a3]@2 [f#3,a3,e4]@2 [f#3,a3,d4] ~, a3@2 ~@3 d4@2 ~", // D F#7 D F#m F#m7 D
  D: "a3 ~ a3@2 b3@2 a3 ~ a3 ~ a3@2 b3@2 a3 ~", E: "a3 ~ a3@2 ~@2 a3 ~ a3 ~ a3@3 ~ a3 ~",
  F: "g3 ~ g3@2 a3@2 g3 ~ g3 ~ g3@2 a3@2 g3 ~", G: "a3 ~ a3@4 a3 ~ a3 ~ a3@3 ~ a3 ~", H: "[~@10 a4 ~@3 a4@18]/2",
  I: "[~@10 b4@2 d5 ~ d5@18]/2", J: "[~@10 a4 ~@3 a4@14 ~@4]/2", K: "[~@12 b4 ~ d5@17 ~]/2", L: "d5@3 ~ d5@7 ~ d5@4",
  M: "d5@7 ~ d5@7 ~", N: "d5@4 d5@5 ~ d5@5 ~", O: "d5@3 ~ d5@11 ~", P: "g4 a4 c5@2 g4 a4 c5@2 g4 a4 c5@2 g4 a4 c5@2",
  Q: "g4 a4 c5@2 g4 a4 c5@2 g4 a4 c5@2 g4@2 a4 ~", R: "[d5@25 ~@7]/2", S: "[~@10 b4@3 ~@15 g3@3 ~, ~@14 d5@17 ~]/2",
  T: "a3 ~@7",
})).s("gm_distortion_guitar").gain(0.05)

// bass · fretless bass · "Midi C6, T5"
const bass = note(`<
  ~@2 A B C A D E F A D E F A G H I J K L M N O P@2 Q R S@2 A D E F A D E F A G H I J K L M N O P@2 Q R S@2 A G H I J K
  L M A D E F A D E F A G H I J K L M N O P@2 Q R S@2 N O P@2 Q R P@2 N O P@2 Q R T@2 U
>`.pickRestart({
  A: "d2@4 ~@2 d2 ~ d2 ~ d2@2 b1@2 a1@2", B: "d2@2 ~ d2 ~ d2 b1 a1", C: "d2 ~ d2@2 ~@2 d2@3 ~ d2@2 b1@2 a1@2",
  D: "d2@5 ~ d2@2 ~@2 d2@2 b1 ~ a1 ~", E: "g1@4 ~@2 g1 ~ g1 ~ g1@2 d1@2 g1@2", F: "g1@4 ~@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  G: "c2@4 ~@2 c2 ~ c2 ~ c2@3 ~ c2 ~", H: "g1@4 ~@2 g1 ~ g1 ~ g1 ~ e1@2 d1@2", I: "g1 ~ g1@3 ~ g1@3 ~ g1@2 e1@2 d1@2",
  J: "c2@4 ~@2 c2 ~ c2 ~ c2 ~ c2 ~ b1@2", K: "a1@5 ~ a1@3 ~ a1 ~ a1 ~ a1@2", L: "d2@3 ~ d2@3 ~ d2 ~ d2@3 ~ d2 ~",
  M: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ e2@2 f#2@2 g2 ~", N: "a1 ~ a1@3 ~ a1@3 ~ a1@2 a1 ~ a1@2",
  O: "~@2 a1@2 a2@2 a1 ~ a1 ~ a1@2 a2@2 a1 ~", P: "[g1@3 ~ g1@3 ~ g1 ~ g1@2 g2@2 g1@4 d2@3 ~ d2@3 ~ d2 ~ c#2@2 b1@2]/2",
  Q: "a1 ~ a1@3 ~ a1@3 ~ a1@2 a2@2 a1 ~", R: "a1 ~ a1@2 a2@2 a1@4 a2@2 a1@2 a2@2", S: "[g1@15 ~]/2",
  T: "[~@28 c2@3 ~, g1@15 ~]/2", U: "d2 ~@7",
})).s("gm_fretless_bass").gain(0.51)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A B@10 C@2 D B E B E B F B@3 G B@2 H@2 B@7 C@2 D B E B E B F B@3 G B@2 H I B@4 H@2 B F B@7 C J D B E B E B F B@3 G
  B@2 K L B@3 G B@3 M B@3 G B@2 K N ~
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@5 x!5 ~", D: "~@4 x ~@7 x ~ x!2", E: "~ x!3", F: "~ x!7", G: "~@4 x ~@7 x!4",
  H: "x!4", I: "x!9 ~ x ~ x ~@3", J: "~@4 x ~@5 x!4 ~@2", K: "~@2 x ~@2 x ~@2", L: "x ~@2 x ~@2 x ~",
  M: "~@4 x ~@5 x ~ x!4", N: "x ~@5 x ~ x!8",
})).gain(0.51)

// drums · low tom
const low_tom = s("lt").struct("<~@52 [~@14 x!2] ~@47 [~@14 x!2] ~>").gain(0.51)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@52 [~@8 x ~ x!4 ~@2] ~@47 [~@5 x!2 ~] ~>").gain(0.51)

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

// drums · high tom
const high_tom = s("ht").struct("<~@100 [~@9 x ~@6] ~>").gain(0.51)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@10 A@3 ~ A@3 ~ A ~@3 A ~ A ~ A ~@7 A@3 ~ A@3 ~ A ~@3 A ~ A ~ A ~@3 A@3 ~ A ~@7 B ~ A ~ A@3 ~ A ~@3 A ~ A ~ A
  ~@3 A ~@3 A ~@3 A ~ A ~ A
>`.pickRestart({
  A: "x", B: "x ~@6 x",
})).gain(0.51)

// drums · ride
const ride = s("rd").struct(`<
  ~@21 A B A B A B ~@18 A B A B A B ~@10 A B A B A B C D B E F G H I F J A B A B A B K L A B A B A B A B A B A B A B K L
  ~
>`.pickRestart({
  A: "x!3 ~ x ~ x!2", B: "x ~ x ~ x!2 ~ x", C: "x ~ x ~ x ~ x!2", D: "~ x ~ x ~ x ~@2", E: "~ x!2 ~ x!4",
  F: "~@2 x ~ x ~ x!2", G: "~ x ~ x!5", H: "~@2 x ~ x!3 ~", I: "~ x ~ x ~ x!3", J: "~ x!2 ~ x ~ x ~", K: "x!4 ~ x ~ x",
  L: "~ x!6 ~",
})).gain(0.51)

stack(
  distortion_guitar, distortion_guitar_2, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride
)

More by Creedence Clearwater Revival