Strudelify
Have You Ever Seen the Rain cover art

1968 · Pendulum

Have You Ever Seen the Rain

Creedence Clearwater Revival

KeyC majorTempo115 bpm
0:00/0:00
// Have You Ever Seen the Rain — Creedence Clearwater Revival
// 115 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 "Clean electric guitar" electric guitar clean (copy of ch 3 "Steel acoustic guitar" acoustic guitar steel)
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · acoustic guitar steel · "Steel acoustic guitar"
const acoustic_guitar_steel = note(`<
  A B C D E F G F@4 H@2 F@6 H@2 F@2 I H J K L M J K L M F G F@4 H@2 F G F@4 H@2 F@2 I H J K L M J K L M F G I H J K L M
  J K L M F E N@3
>`.pickRestart({
  A: "~@14 [a2,a3,c4,e4]!2", B: "[a2,a3,c4,e4]@2 [a2,a3,c4,e4]!6",
  C: "[f2,a3,c4,f4]@2 [f2,a3,c4,f4]@2 [f2,a3,c4,f4]@2 [f2,a3,c4,f4]@2 [f2,a3,c4,f4]@2 [f2,a3,c4,f4]@2 [f2,a3,c4,f4]@2 [f2,g3,c4,e4] [g3,c4,e4]", // F C
  D: "[g2,g3,c4,e4]@2 [g2,g3,c4,e4]!6", // C
  E: "[g2,g3,d4,g4] [g2,g3,d4,g4]@2 [g2,g3,d4,g4]@2 [g2,g3,d4,g4] [g2,g3,d4,g4]@2", F: "[c3,g3,c4,e4]!8",
  G: "[c3,g3,c4,e4] [c3,g3,c4,e4]@2 [c3,g3,c4,e4]@2 [c3,g3,c4,e4]@2 [c3,g3,c4,e4]", H: "[d3,g3,b3,d4]!8",
  I: "[f3,a3,c4,f4]!8", J: "[c3,g3,c4,e4]!4 [b2,g3,b3,e4]!4", K: "[a2,a3,c4,e4]!4 [g2,g3,c4,e4]!4",
  L: "[f2,a3,c4,f4]!8", M: "[g2,g3,b3,d4]!8", N: "[c3,g3,c4,e4]/3",
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.8)

// chords · percussive organ
const percussive_organ = note("<~@51 A B C D A B C D@2 ~@3 A B C D A B C D@2 ~@6>".pickRestart({
  A: "[a4,c5]", B: "[g4,b4]", C: "e4", D: "c4",
})).s("gm_percussive_organ").gain(0.48)

// chords · percussive organ · soft notes
const percussive_organ_soft = note("<~@57 A ~@2 B C@2 ~@6 A ~@2 B ~@5>".pickRestart({
  A: "g4", B: "g3", C: "c4/2",
})).s("gm_percussive_organ").gain(0.32)

// other · piano
const piano = note("<~@4 A B C B ~@26 C B ~@6 C B ~@18 C D ~@10 A E@3>".pickRestart({
  A: "a2 g2 ~ e2 ~ e2 g1@2", B: "c2", C: "c3 b2 ~ a2 ~ g2 ~ g2", D: "f2", E: "c2/3",
})).s("gm_piano").gain(0.72).pan(0.8)

// bass · electric bass finger · "Fingered electric bass"
const bass = note(`<
  ~@4 A B C D@3 E F@2 D@5 E F@2 D G H I J K H I J K H I D C D@3 E F@2 D C D@3 E F@2 D L M N J K M N J K M N D C M N J K
  M N J K M N O A P@3
>`.pickRestart({
  A: "a2 g2 ~ e2 ~ e2 g1 ~", B: "c2@2 ~ c2 c2@2 ~@2", C: "c3 b2 ~ a2 ~ g2 ~ g2", D: "c2@2 ~ c2 c2@2 g2@2",
  E: "c2@2 ~ c2 e2@2 f2@2", F: "g2@2 ~ g2 g2@2 d3@2", G: "c2@2 ~ c2 c2@2 e2@2", H: "f2@2 ~ f2 f2@2 ~@2",
  I: "g2@2 ~ g2 g2@2 ~@2", J: "c3@2 ~ c3 b2@2 ~ b2", K: "a2@2 ~ a2 g2@2 ~ g2", L: "c2@2 ~ c2 d2@2 e2@2",
  M: "f2@2 ~ f2 f2@2 ~ f2", N: "g2@2 ~ g2 g2@2 ~ g2", O: "c2@2 ~ c2 g2@2 g2@2", P: "c2/3",
})).s("gm_electric_bass_finger").gain(0.48).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~ A@3 B A B A@15 C D@10 A B A@7 B A@7 E D@10 A B D@10 F B C ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x!2 ~ x ~ x ~@2", C: "x", D: "x ~@2 x!2 ~@2 x", E: "x!8", F: "x ~@2 x!3 ~@2",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct("<~ A@21 B A@3 C A@3 C A@19 B A@3 C A@3 C A@16 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@2 x!6", C: "~@2 x ~@2 x!2 ~",
})).gain(0.48)

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

// drums · open hat
const open_hat = s("oh").struct("<~@22 A B C@9 ~@17 A B C@9 ~@2 D E@9 F G ~@3>".pickRestart({
  A: "~ x!7", B: "~@2 x!6", C: "x!8", D: "~@2 x!4 ~ x", E: "x!2 ~ x!3 ~ x", F: "x!2 ~@6", G: "~@3 x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@5 A ~ A ~@15 A ~@11 A ~@7 A ~@7 A ~@11 B C@9 ~@2 A ~@2>".pickRestart({
  A: "x", B: "x ~@2 x", C: "~ x ~ x",
})).gain(0.48)

stack(acoustic_guitar_steel, percussive_organ, percussive_organ_soft, piano, bass, kick, snare, hihat, open_hat, crash)

More by Creedence Clearwater Revival