Strudelify

Creedence Clearwater Revival - Have You Ever Seen The Rain (A)

John Taylor

KeyA majorTempo120 bpm
0:00/0:00
// Creedence Clearwater Revival - Have You Ever Seen The Rain (A) — John Taylor
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Transcription provider: pdmx. https://musescore.com/score/5826416; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · "Acoustic"
const acoustic_guitar_steel = note(`<
  A B C D E D@6 F@2 D@6 F@2 D@2 G F H I G F H I G F D@6 F@2 D@6 F@2 D@2 G F H I G F H I G F D@2 G F H I G F H I G F D J
  K
>`.pickRestart({
  A: "~@14 [f#2,c#3,f#3,a3,c#4]!2", B: "[f#2,c#3,f#3,a3,c#4]!8",
  C: "[a2,d3,f#3,a3,d4]@2 [a2,d3,f#3,a3,d4]@2 [a2,d3,f#3,a3,d4]@2 [a2,d3,f#3,a3,d4]@2 [a2,d3,f#3,a3,d4]@2 [a2,d3,f#3,a3,d4]@2 [a2,d3,f#3,a3,d4]@2 [a2,d3,f#3,a3,d4]!2", // D
  D: "[a2,c#3,e3,a3,c#4]!8", E: "[e2,g#2,b2,e3,g#3,e4]!8", F: "[e3,g#3,b3,e4]!8", G: "[d3,f#3,a3,d4]!8",
  H: "[c#3,e3,a3,c#4]!8", I: "[c#3,f#3,a3,c#4]!8", J: "[e2,g#2,b2,e3,g#3,e4]@3 [e2,g#2,b2,e3,g#3,e4]",
  K: "[a2,c#3,e3,a3,c#4]", // A
})).s("gm_acoustic_guitar_steel").gain(0.25)

// bass · electric bass finger · "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 L 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 H I J K H I
  J K H I L C M
>`.pickRestart({
  A: "f#2 e2 ~ c#2 ~ c#2 b1@2", B: "a1@3 a1 a1@4", C: "a2 g#2 ~ f#2 ~ e2 ~ e2", D: "a1@6 a1@2 a1@4 d2 e2@3",
  E: "a1@3 a1 c#2@2 d2@2", F: "e2@6 e2@2 e2@4 a2 b2@3", G: "a1@3 a1 a1@2 c#2@2", H: "d2@3 d2 d2@4", I: "e2@3 e2 e2@4",
  J: "a2@3 a2 g#2@3 g#2", K: "f#2@3 f#2 e2@3 e2", L: "a1@6 a1@2 d2 e2@3 d2 e2@3", M: "a1",
})).s("gm_electric_bass_finger").gain(0.64)

// other · percussive organ · "Organ"
const percussive_organ = note("<~@37 A@2 B@2 C@6 B@2 A@2 D E F G D E F G D E A@2 D E F G D E A@2 ~@5>".pickRestart({
  A: "a3/2", B: "e4/2", C: "a3/6", D: "d4", E: "e4", F: "a3 g#3", G: "f#3 e3",
})).s("gm_percussive_organ").gain(0.64)

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

// 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@7 C A@3 C A@4 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x!7", C: "~@2 x ~@2 x!2 ~",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~ A@21 B ~@10 A@17 B ~@10 A@2 ~@10 A C ~>".pickRestart({
  A: "x!8", B: "x", C: "x!6 ~@2",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@74 [~@3 x] ~>").gain(0.47)

// drums · splash
const splash = s("cr").struct("<~@22 A B@10 ~@17 A B@10 ~@2 B@10 ~@2 C>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x",
})).gain(0.32)

stack(acoustic_guitar_steel, bass, percussive_organ, kick, snare, hihat, open_hat, splash)