Strudelify

Someday Never Comes

Creedence Clearwater Revival

KeyB minorTempo142 bpm
0:00/0:00
// Someday Never Comes — Creedence Clearwater Revival
// 142 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · overdriven guitar
const overdriven_guitar = note("<~@27 A B A B ~@20 A B A B ~@20 A B A B ~@24 C D C D ~@30>".pickRestart({
  A: "[c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4]!2 ~@2", B: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4]!2 ~@2",
  C: "[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4]!2 ~@2", D: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5]!2 ~@2",
})).s("gm_overdriven_guitar").gain(0.44).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@5 A@6 B C D E B F B@3 C D G B C B@2 C B C B H I J ~ B C D E B F B@3 C D K B C B@2 C B C B H I J ~ B C D E B F B@3 C
  D G B C B@2 C B C B H I J ~ H I L M N O P Q N R N@3 O P S N O N@2 O N O N T U V ~ T U V ~ W@2 X@2 W@2 X@2 W@2 X@2 W@2
  X@2 W@2 X@2 W@2
>`.pickRestart({
  A: "[~ [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]]/6", // B
  B: "~@7 f#3, b2, ~ f#3@2 f#3@2 f#3@2 ~, ~ b3 d#4 b3", C: "~@7 f#3, f#2, ~ f#3@2 f#3@2 f#3@2 ~, ~ a#3 f#4 a#3",
  D: "~@7 g#3, g#2, ~ g#3@2 g#3@2 g#3@2 ~, ~ b3 d#4 b3", E: "~@7 g3, e3, ~ g3@2 g3@2 g3@2 ~, ~ b3 e4 b3",
  F: "~@7 b3, g3, ~ b3@2 b3@2 b3@2 ~, ~ d4 g4 d4", G: "~@7 g#3, e3, ~ g#3@2 g#3@2 g#3@2 ~, ~ b3 e4 b3",
  H: "[c#3,g#3,c#4,e4]", I: "[e3,g#3,b3,e4]", J: "[b2,f#3,b3,d#4]", K: "~@7 e4, e3, ~ g#3@2 g#3@2 g#3@2 ~, ~ b3 e4 b3",
  L: "~@7 b3, b2, ~ f#3@2 f#3@2 b3@2 ~, ~ b3 d#4 f#3", M: "~@6 g3 ~, g2, ~ d3@2 b3@2 b3@2 ~, ~ g3 d4 ~",
  N: "~@7 g3, c3, ~ g3@2 g3@2 g3@2 ~, ~ c4 e4 c4", O: "~@7 g3, g2, ~ g3@2 g3@2 g3@2 ~, ~ b3 g4 b3",
  P: "~@7 a3, a2, ~ a3@2 a3@2 a3@2 ~, ~ c4 e4 c4", Q: "~@7 g#3, f3, ~ g#3@2 g#3@2 g#3@2 ~, ~ c4 f4 c4",
  R: "~@7 c4, g#3, ~ c4@2 c4@2 c4@2 ~, ~ d#4 g#4 d#4", S: "~@7 a3, f3, ~ a3@2 a3@2 a3@2 ~, ~ c4 f4 c4",
  T: "[d3,a3,d4,f4]", U: "[f3,a3,c4,f4]", V: "[c3,g3,c4,e4]", W: "~@7 d4, d3, ~ f4@2 a3@2 d4@2 ~, ~ d4 f4 a3",
  X: "~@7 c4, c3, ~ e4@2 g3@2 c4@2 ~, ~ c4 e4 g3",
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  ~@8 A B@2 C D E F C G C H C D E F C D C I J K L K M F C N C D E F C G C O C D E F C D C I J K L K M F C P C D E F C G
  C O C D E F C D C I J K L K M F C Q M F C R S G T U S E S V S G T U S G S W X Y Z Y AA U S AB AA U S AC AA AD S AB AA
  AE AF AG AH AI AJ AK AL AM S AN AO AP S AN AO AP
>`.pickRestart({
  A: "~@7 f#1", B: "[b1@13 ~@2 f#1]/2", C: "b1@13 ~@3", D: "f#1@13 ~@3", E: "g#1@13 ~@3", F: "e2@13 ~@3",
  G: "g1@13 ~@3", H: "b1 b1@5 ~ f#1", I: "b1@2 b1@2 ~@2 b1@2 ~@2 f#1 ~ b1@2 f#2@2",
  J: "f#1@3 ~ f#1@3 ~ f#1@2 f#1@2 c#2@2 f#1@2", K: "b1@5 ~ f#1 ~ b1@2 b1@2 f#2@2 b1 ~",
  L: "f#1@3 ~ f#1@2 f#1@2 c#2@2 f#1@2 c#2 ~ f#1 ~", M: "c#2@13 ~@3", N: "b1@6 ~ f#1", O: "b1@2 b1@9 ~ f#1@2 g#1@2",
  P: "b1@5 ~ f#1 g#1", Q: "b1@2 b1@7 ~ f#1@2 b1@2 c2@2", R: "g1@9 ~ d2@2 g2@2 d2@2", S: "c2@13 ~@3", T: "a1@13 ~@3",
  U: "f2@13 ~@3", V: "c2@2 c2@9 ~ g1@2 a1@2", W: "c2@2 c2@2 ~@2 c2@2 ~@2 g1 ~ c2@2 g2@2",
  X: "g1@3 ~ g1@3 ~ g1@2 g1@2 d2@2 g1@2", Y: "c2@5 ~ g1 ~ c2@2 c2@2 g2@2 c2 ~",
  Z: "g1@3 ~ g1@2 g1@2 d2@2 g1@2 d2 ~ g1 ~", AA: "d2@13 ~@3", AB: "c2@2 c2@7 ~ g1@2 c2@2 c#2@2", AC: "c2 c2@5 ~ c2",
  AD: "d2 d2@6 ~", AE: "d2@2 d2@9 ~ a1@2 ~@2", AF: "c2@6 ~ c2", AG: "c2@7 ~ c2@2 c2@3 ~@3", AH: "g2@13 ~@3",
  AI: "g2 g2@6 ~", AJ: "g2@10 ~@2 g2@3 ~", AK: "c2@7 ~ c2@2 c2@2 g2@2 c2@2", AL: "d2@7 d2",
  AM: "d2@2 d2@5 ~ a2@2 d3@3 ~ f3@2", AN: "c2@2 c2@5 ~ g2@2 c2@3 ~ c2@2", AO: "d2@14 a2 ~",
  AP: "d3@2 e3@2 a2@3 ~ d3@2 e3@2 a2@2 d2@2",
})).s("gm_electric_bass_finger").gain(0.37)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@5 A@6 B C D E F G H I B C D J F K H I L M L M N O P@2 B C D E F G H I B C D J F K H I L M L M N O P@2 B C D E F G H
  I B C D J F K H I L M L M N O P@2 N O Q R S T U V W X Y Z S T U AA W AB Y Z AC AD AC AD AE AF AG@2 AE AF AG@2 AH@2
  AI@2 AH@2 AI@2 AH@2 AI@2 AH@2 AI@2 AH@2 AI@2 AH@2
>`.pickRestart({
  A: "[b2@9 b2@2 b2@2 b2@2 f#3]/2", B: "~ f#3 ~ f#3 ~ f#3 ~@2, b2@13 ~@3", C: "~ f#3 ~ f#3 ~ f#3 ~@2, f#2@13 ~@3",
  D: "~ g#3 ~ g#3 ~ g#3 ~@2, g#2@13 ~@3", E: "~@2 g3@2 ~@2 g3@7 ~@3, e3@13 ~@3", F: "~ f#3 ~ f#3 ~ f#3 ~@2, b2",
  G: "~ g3 ~ g3 ~ g3 ~@2, g2", H: "~ f#3 ~ f#3 ~ f#3 b2@2, b2@3 ~", I: "b2 ~ b2@4 b2@4 b2@4 f#3@2",
  J: "~ g#3 ~ g#3@4 ~, e3@13 ~@3", K: "~ f#3 ~ f#3@4 ~, f#2", L: "[f#2,c#3]@2 [f#2,c#3]!2", M: "[b2,f#3]@2 [b2,f#3]!2",
  N: "[c#3,g#3,c#4]", O: "[e3,b3,e4]", P: "[b2@11 ~@3 b2@4 b2@4 b2@4 b2@4 f#3@2, [f#3,b3,d#4] ~]/2",
  Q: "[f#3,b3,d#4], b2@11 ~@5", R: "[g2,d3,g3]", S: "~ g3 ~ g3 ~ g3 ~@2, c3@13 ~@3", T: "~ g3 ~ g3 ~ g3 ~@2, g2@13 ~@3",
  U: "~ a3 ~ a3 ~ a3 ~@2, a2@13 ~@3", V: "~@2 g#3@2 ~@2 g#3@7 ~@3, f3@13 ~@3", W: "~ g3 ~ g3 ~ g3 ~@2, c3",
  X: "~ g#3 ~ g#3 ~ g#3 ~@2, g#2", Y: "~ g3 ~ g3 ~ g3 c3@2, c3@3 ~", Z: "c3 ~ c3@4 c3@4 c3@4 g3@2",
  AA: "~ a3 ~ a3@4 ~, f3@13 ~@3", AB: "~ g3 ~ g3@4 ~, g2", AC: "[g2,d3]@2 [g2,d3]!2", AD: "[c3,g3]@2 [c3,g3]!2",
  AE: "[d3,a3,d4]", AF: "[f3,c4,f4]", AG: "[c3@11 ~@3 c3@4 c3@4 c3@4 c3@4 g3@2, [g3,c4,e4] ~]/2", AH: "d3", AI: "c3",
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@10 B@7 C B@6 D E F@4 B@3 G B@7 C B@6 D E F@4 B@3 H B@7 C B@6 D E F@4 B@3 I B@3 G B@7 C B@6 D E F@4 B@3 I B@3 H
  A@22
>`.pickRestart({
  A: "x ~@4 x ~ x", B: "x ~@6 x", C: "x!2 ~@2 x!2 ~ x", D: "x", E: "x!4", F: "x ~@2 x!3 ~ x", G: "x ~@2 x ~@3 x",
  H: "x!2 ~ x ~@3 x", I: "x!2 ~ x ~ x ~ x",
})).gain(0.41)

// drums · rim
const rim = s("rim").struct("<~ A@25 ~@9 A@15 ~@9 A@15 ~@13 A@15 ~@13 A@22>".pickRestart({
  A: "x!4",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct(`<
  ~@26 A B@4 C@4 ~@15 A B@4 C@4 ~@15 A B@4 C@3 D C@4 ~@15 A B@4 C@3 D C@4 ~@22
>`.pickRestart({
  A: "x!2 ~@2 x ~ x ~", B: "~ x ~ x", C: "~ x", D: "~@2 x!2",
})).gain(0.46)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@25 ~ C B@3 C B@18 ~ C B@3 C B@18 ~ C B@3 C B@3 C B@18 ~ C B@3 C B@3 C B@25
>`.pickRestart({
  A: "x!4", B: "x!8", C: "~ x!7",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@26 A ~@23 A ~@23 A ~@27 A ~@34>".pickRestart({
  A: "~@7 x",
})).gain(0.46)

// drums · high tom
const high_tom = s("ht").struct("<~@26 A ~@23 A ~@23 A ~@27 A ~@34>".pickRestart({
  A: "~@2 x!2 ~ x ~@2",
})).gain(0.46)

// drums · crash
const crash = s("cr").struct("<~@27 A ~@3 A ~@19 A ~@3 A ~@19 A ~@3 A ~@3 A ~@19 A ~@3 A ~@3 A ~@25>".pickRestart({
  A: "x",
})).gain(0.41)

stack(
  overdriven_guitar, acoustic_guitar_steel, bass, electric_guitar_clean, kick, rim, snare, hihat, mid_tom, high_tom,
  crash
)

More by Creedence Clearwater Revival