Strudelify
Down on the Corner cover art

Willy And The Poor Boys

Down on the Corner

Creedence Clearwater Revival

KeyC majorTempo110 bpm
0:00/0:00
// Down on the Corner — Creedence Clearwater Revival
// 110 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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 · acoustic guitar steel · "Steel-str. Gt"
const acoustic_guitar_steel = note(`<
  ~@2 A B A B C D A B E F E G H I J K L M N@2 E F E G H I J O A B A B C D A B L M N@2 ~@2 E F E G H I J K L M N@2 L M
  P@2 ~@4
>`.pickRestart({
  A: "c4@3 a3@3 g3@2 c4 ~@2 c4@3 a3@2", B: "g3 ~@2 g3@3 b3@2 c4 ~@2 c4@3 ~@2", C: "f4@3 d4@3 c4@2 f4 ~@2 f4@3 d4@2",
  D: "c4 ~@2 c4@3 e4@2 g4 ~@2 g4@3 ~@2", E: "[e3,c4]@2 c4@2 [e3,c4]@2 e4 [e4,g4]@3 [e4,g4]@2 ~@2 [c4,e4]@2",
  F: "~ g4 g4@2 [b3,g4]@2 e4 c4@3 [e3,g3]@2 ~@2 g3@2, [b3,g4] ~@7", // Em
  G: "[b3,g4]@2 g4@2 [b3,g4] g4@2 [g3,e4]@3 [e3,g3]@2 ~@2 [g3,c4]@2", // Em C Em C5
  H: "[a3,c4,f4]@2 f4@2 [a3,c4,f4]@2 f4 [c4,a4]@3 [c4,f4,a4]@2 ~@2 [c4,f4]@2", // F F5
  I: "~ g4 g4@2 [c4,e4,g4]@2 a4 [g3,e4]@3 [e3,c4]@2 ~@2 g3@2, [e4,g4] ~@7", // C Em
  J: "[e3,c4]@2 c4@2 [e3,c4]@2 e4 [e4,g4]@3 g4@2 [e4,g4]@3 g4", // C Em
  K: "[b3,g4]@2 g4@2 [b3,g4]@2 c4 c4@3 [e3,g3]@2 ~@2 [e4,g4]@2", // Em
  L: "~@2 [a3,c4]@2 a4@2 [a3,c4,a4] g4@3 [g3,e4,g4]@2 ~@2 [g3,e4]@2, a4 ~@3", // Am C
  M: "g4@2 [b3,g4]@4 [b3,g4] g4@3 [g3,e4]@2 g4!2 ~ g4, ~@7 [e4,g4]", // Em C Em
  N: "[a4@2 [a3,c4,a4]@4 [a3,c4,a4]@2 g4 [e4,g4]@3 g4@2 [e4,g4] g4@2 [b3,g4]@3 g4@2 [b3,g4] g4@2 [g3,e4]@2 ~@3 [c4,e4]@2]/2", // Am Em C
  O: "[b3,g4]@2 g4@2 [b3,g4]@2 c4 c4@3 [e3,g3]@2 ~@4", // Em
  P: "[a4@2 [a3,c4,a4]@4 [a3,c4,a4]@2 g4 [e4,g4]@3 g4@2 [e4,g4] g4@2 [b3,g4]@3 g4@2 ~@10]/2", // Am Em
})).s("gm_acoustic_guitar_steel").gain(0.31).pan(0.2)

// chords · acoustic guitar steel · "Steel-str. Gt" · soft notes
const acoustic_guitar_steel_2 = note("<~@59 A B C D@2>".pickRestart({
  A: "~@6 [b3,g4] g4@2 [g3,e4]@2 ~@3 [c4,e4]@2", // Em C
  B: "~@2 [a3,c4]@2 a4@2 [a3,c4,a4] g4@3 [g3,e4,g4]@2 ~@2 [g3,e4]@2, a4 ~@3", // Am C
  C: "g4@2 [b3,g4]@4 [b3,g4] g4@3 [g3,e4]@2 g4!2 ~ g4, ~@7 [e4,g4]", // Em C Em
  D: "[a4@2 [a3,c4,a4]@4 [a3,c4,a4]@2 g4 [e4,g4]@3 g4@2 [e4,g4] g4@2 [b3,g4]@3 g4@2 [b3,g4] g4@2 [g3,e4]@2 ~@3 [c4,e4]@2]/2", // Am Em C
})).s("gm_acoustic_guitar_steel").gain(0.09).pan(0.2)

// bass · fretless bass · "Fretless Bs."
const bass = note(`<
  ~@2 A B A B C D A B E F E G H I E J K L K M E F E G H I E J E F E G H I E J K L K M ~@2 E F E G H I E J K L K M K L K
  M N ~@3
>`.pickRestart({
  A: "c3@3 a2@3 g2@2 c3@3 c3@3 a2@2", B: "g2@3 g2@3 b2@2 c3@3 c3@5", C: "f3@3 d3@3 c3@2 f3@3 f3@3 d3@2",
  D: "c3@3 c3@3 e3@2 g3@3 g3@5", E: "c3@2 ~ a2@3 g2@2 c3@2 ~ c3@3 a2@2", F: "g2@2 ~ g2@3 b2@2 c3@2 ~ c3@3 g2@2",
  G: "g2@2 ~ g2@3 b2@2 c3@2 ~ c3@3 e3@2", H: "f3@2 ~ d3@3 c3@2 f3@2 ~ f3@3 d3@2",
  I: "c3@2 ~ a2@3 g2@2 c3@2 ~ c3@3 g2@2", J: "g2@2 ~ g2@3 g2@2 c3@2 ~ c3@3 c2@2", K: "f2 ~ f2 ~ c3 ~ c3 ~",
  L: "g2 ~ g2 ~ c3 ~ c3 ~", M: "g2@2 ~@2 g2@2 ~ c3@2 c3@2 c3 c3@2 g2@2", N: "f2 ~@7",
})).s("gm_fretless_bass").gain(0.46)

// bass · fretless bass · "Fretless Bs." · soft notes
const bass_soft = note(`<
  ~@60
  [~@2 f2 ~ c3 ~ c3 ~]
  [g2 ~ g2 ~ c3 ~ c3 ~]
  [f2 ~ f2 ~ c3 ~ c3 ~]
  [g2@2 ~@2 g2@2 ~ c3@2 c3@2 c3 c3@2 g2@2]
>`).s("gm_fretless_bass").gain(0.13)

// chords · electric guitar clean · "Clean Gt."
const electric_guitar_clean = note(`<
  ~@6 A B C D B D B D A B C D E D F D B D B D A B C D B D B D A B C D E D F D B G B D B D A B C D E D F D E D H ~@5
>`.pickRestart({
  A: "[a3,c4,f4]!5 ~@2 [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] [a3,c4,f4]@2 ~@2", // F
  B: "[g3,c4,e4]!5 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] [g3,c4,e4]@2 ~@2", // C
  C: "[g3,c4,e4]!5 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4]!2 ~@3", // C
  D: "[b3,d4,g4]!5 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] [g3,c4,e4]@2 ~@2", // G C
  E: "[a3,c4,f4]!5 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] [g3,c4,e4]@2 ~@2", // F C
  F: "[a3,c4,f4]!4 [a3,d4,f4] ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] [g3,c4,e4]@2 ~@2", // F Dm C
  G: "[g3,b3,d4,g4]!5 ~@2 [e3,g3,c4,e4] ~ [e3,g3,c4,e4] ~ [e3,g3,c4,e4] [e3,g3,c4,e4]@2 ~@2", // G C
  H: "[a3,c4,f4]!4 [a3,d4,f4] ~@2 [g3,c4,e4] ~@8", // F Dm C
})).s("gm_electric_guitar_clean").gain(0.22).pan(0.8)

// chords · electric guitar clean · "Clean Gt." · soft notes · C G C F C G C F …
const electric_guitar_clean_2 = note(`<
  ~@58
  [~@9 [g3,c4,e4] ~ [g3,c4,e4] [g3,c4,e4]@2 ~@2]
  [[b3,d4,g4]!5 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] [g3,c4,e4]@2 ~@2]
  [[a3,c4,f4]!5 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] [g3,c4,e4]@2 ~@2]
  [[b3,d4,g4]!5 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] [g3,c4,e4]@2 ~@2]
  [[a3,c4,f4]!4 [a3,d4,f4] ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] [g3,c4,e4]@2 ~@2]
  [[b3,d4,g4]!5 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] [g3,c4,e4]@2 ~@2]
>`).s("gm_electric_guitar_clean").gain(0.06).pan(0.8)

// chords · electric guitar jazz · "Jazz Gt."
const electric_guitar_jazz = note(`<
  ~@18 A B C@2 ~@8 D E D E F G D H A B I@2 ~@6 F G D H A B I@2 A B J ~@5
>`.pickRestart({
  A: "[c5,f5,a5]@4 [c5,f5,a5]@2 [c5,f5,a5] [c5,e5,g5]@2 [c5,e5,g5]@3 ~@4", // F C
  B: "[b4,d5,b5]@2 [b4,g5,b5]@2 [b4,g5,b5]@2 [b4,d5,b5] [c5,e5,c6] ~@4 [c5,e5,c6]!4", // Bm Em Bm C
  C: "[[c5,f5,a5]@2 [c5,f5,a5]@4 [c5,f5,a5] [c5,e5,g5]@3 ~@2 [c5,e5,g5]@2 [c5,e5,g5] [d5,g5,b5]@2 [d5,g5,b5]@3 [d5,g5,b5]@2 [b4,d5,d6] [c5,e5,c6] ~@8]/2", // F C G Bm C
  D: "e4@3 d4@3 c4@2 e4 ~@2 e4@3 c4@2", E: "d4 ~@2 d4@3 ~@2 e4 ~@2 e4@3 ~@2", F: "a4@3 g4@3 f4@2 a4 ~@2 a4@3 f4@2",
  G: "e4 ~@2 e4@3 g4@2 c5 ~@2 c5@3 ~@2", H: "d4 ~@2 d4@3 ~@2 c4 ~@2 c4@3 ~@2",
  I: "[[c5,f5,a5]@2 [c5,f5,a5]@4 [c5,f5,a5] [c5,e5,g5]@3 ~@2 [c5,e5,g5]@2 [c5,e5,g5] [d5,g5,b5]@2 [d5,g5,b5]@3 [d5,g5,b5]@2 [b4,d5,b5] [c5,e5,c6] ~@8]/2", // F C G Bm C
  J: "[c5,f5,a5]@2 [c5,f5,a5]@4 [c5,f5,a5] [c5,e5,g5]@3 ~@6", // F C
})).s("gm_electric_guitar_jazz").gain(0.36).pan(0.3)

// chords · electric guitar jazz · "Jazz Gt." · soft notes
const electric_guitar_jazz_2 = note("<~@58 A@2 B C D@2>".pickRestart({
  A: "[~@12 [c5,e5,g5]@2 [c5,e5,g5] [d5,g5,b5]@2 [d5,g5,b5]@3 [d5,g5,b5]@2 [b4,d5,b5] [c5,e5,c6] ~@8]/2", // C G Bm C
  B: "[c5,f5,a5]@4 [c5,f5,a5]@2 [c5,f5,a5] [c5,e5,g5]@2 [c5,e5,g5]@3 ~@4", // F C
  C: "[b4,d5,b5]@2 [b4,g5,b5]@2 [b4,g5,b5]@2 [b4,d5,b5] [c5,e5,c6] ~@4 [c5,e5,c6]!4", // Bm Em Bm C
  D: "[[c5,f5,a5]@2 [c5,f5,a5]@4 [c5,f5,a5] [c5,e5,g5]@3 ~@2 [c5,e5,g5]@2 [c5,e5,g5] [d5,g5,b5]@2 [d5,g5,b5]@3 [d5,g5,b5]@2 [b4,d5,b5] [c5,e5,c6] ~@8]/2", // F C G Bm C
})).s("gm_electric_guitar_jazz").gain(0.09).pan(0.3)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@58 [x!2 ~@2 x ~@3] [x!2 ~@3 x ~@2]!3 [x!2 ~@6] [x!2 ~@3 x ~@2]>").gain(0.08)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@59
  [~@4 x ~@2 x ~ x ~@2 x ~@2 x]!3
  [~ x ~@2 x ~@2 x ~@8]
  [~@4 x ~@2 x ~ x ~@2 x ~@3]
>`).gain(0.06)

// drums · low tom
const low_tom = s("lt").struct("<~ A ~@7 A ~@5 A ~ A ~@3 A ~@7 A ~@16 A ~@4 A ~ A ~ A ~@2 A ~@3 A ~>".pickRestart({
  A: "~@7 x",
})).gain(0.2)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@19 [~ x ~@2] ~@39 [~@2 x!6] [x!8]!2 x [x!8]>").gain(0.06)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~@7 B ~@5 B ~ B ~@3 B ~@3 C ~ C ~ A ~@16 D C ~@3 B ~ A ~ B ~@2 A ~@3 D ~
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@3 x!3 ~@2", C: "~@6 x!2 ~@6 x ~", D: "~@11 x!2 ~@3",
})).gain(0.17)

// drums · open hat
const open_hat = s("oh").struct("<[x!16]!60 [x!9 ~@7] ~@3>").gain(0.11)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@60 [~@9 x!7] [x!16]!2 [x!15 ~]>").gain(0.03)

// drums · high tom
const high_tom = s("ht").struct(`<
  A B C D C E C F A G C@2 E ~ C G C G H@2 I G C D J K C K C B H I L ~ C@2 F M@2 F D ~ H@2 L ~ N K C D J G C B C G O@2 B
  P ~@4
>`.pickRestart({
  A: "x!4 ~ x!6 ~ x!4", B: "~@8 x ~@2 x ~@4", C: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!4", D: "x!3 ~ x!2 ~ x!4 ~ x!4",
  E: "x!2 ~ x!3 ~@2 x!2 ~@2 x!4", F: "x!2 ~ x!4 ~ x!2 ~@2 x!4", G: "~@2 x!2 ~@12", H: "x!5 ~ x!7 ~ x!2",
  I: "x ~ x!3 ~ x!10", J: "x!2 ~ x!7 ~@2 x!4", K: "~ x ~ x ~@12", L: "x!13 ~ x!2", M: "x!2 ~ x!3 ~ x!3 ~@2 x!4",
  N: "~@8 x!2 ~@6", O: "x!16", P: "x!3 ~@13",
})).gain(0.17)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct(`<
  A ~ B C B D B E A ~ B@2 D ~ B ~ B ~ F@2 G ~ B C H ~ B ~ B ~ F G I ~ B@2 E J@2 E C ~ F@2 I ~@3 B C H ~ B ~ B ~@4 K L@2
  M N
>`.pickRestart({
  A: "~@4 x ~@6 x ~@4", B: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@4", C: "~@3 x ~@2 x ~@4 x ~@4", D: "~@2 x ~@3 x!2 ~@2 x!2 ~@4",
  E: "~@2 x ~@4 x ~@2 x!2 ~@4", F: "~@5 x ~@7 x ~@2", G: "~ x ~@3 x ~@10", H: "~@2 x ~@7 x!2 ~@4", I: "~@13 x ~@2",
  J: "~@2 x ~@3 x ~@3 x!2 ~@4", K: "~@3 x!13", L: "x!16", M: "~@8 x!2 ~@6", N: "x!15 ~",
})).gain(0.06)

// drums · ride
const ride = s("rd").struct(`<
  ~@2 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~@3 A ~ A ~ A ~@3 A ~@7 A ~@5 A ~@3 A ~ A ~ A ~@2 A ~@3 A
>`.pickRestart({
  A: "x",
})).gain(0.22)

// drums · tambourine
const tambourine = s("tb").struct("<~@19 [~ x ~ x ~ x ~ x]!2 ~@10 [~ x ~ x ~ x ~ x]!2 ~@10 [~ x ~ x ~ x ~ x]!2 ~@19>")
  .gain(0.2)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, bass, bass_soft, electric_guitar_clean, electric_guitar_clean_2,
  electric_guitar_jazz, electric_guitar_jazz_2, kick, kick_soft, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, open_hat_soft, high_tom, high_tom_soft, ride, tambourine
// … 1 more lines

More by Creedence Clearwater Revival