Strudelify

Centerfield

John Fogerty

KeyG majorTempo142 bpm
0:00/0:00
// Centerfield — John Fogerty
// 142 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 136 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.

// bass · fretless bass · "CENTERF"
const bass = note(`<
  ~@10 A B C D E@6 F E@2 G H@2 E@2 F E F H I J K L M K@2 L A B C D E@6 F E@2 G H@2 E@2 F E F H I J K L M K@2 L A B C D
  E@3 N O P O P O P A B C D E@6 F E@2 G H@2 E@2 F Q F H I J K L M K@2 L A B C D K L M K@2 L A B C D E R A S@2 T U@2
>`.pickRestart({
  A: "c2@3 c2@4 ~", B: "b1@3 b1@4 g1", C: "a1!8", D: "d2!8", E: "g1@2 g1@3 ~ g1@4 g1@3 ~ g1@2",
  F: "c2@2 c2@3 ~ c2@4 c2@3 ~ c2@2", G: "e2@3 ~ e2@2 d2@2 e2@3 ~ e2@3 ~", H: "d2@2 d2@3 ~ d2@4 d2@3 ~ d2@2",
  I: "g1@2 g1@3 ~ g1@4 g1@3 ~@3", J: "~ b2 a2 g2 e2 d2 b1 a1", K: "g1@3 ~ g1@3 ~ e1@2 g1@3 ~ e1@2",
  L: "g1@3 ~ g1@3 ~ e1@2 g1@6", M: "c2@3 ~ c2@3 ~ a1@2 c2@3 ~ a1@2", N: "g1 g1@2 g1@2 g1 a1 b1", O: "c2!4 d2!2 d2@2",
  P: "g1@6 g1@2 g1@2 g1@3 ~ g1@2", Q: "g1@2 g1@3 ~ g1@4 ~@6", R: "g1@2 g1@11 ~@3", S: "[b1@3 ~@5 a1!8, ~@3 b1@6 ~@7]/2",
  T: "d2@2 ~@6 d2@3 d2@2 d2@3", U: "[g1@15 ~]/2",
})).s("gm_fretless_bass").gain(0.38)

// chords · rock organ
const rock_organ = note(`<
  ~@14 A@3 B ~@6 C D ~@8 E ~ F G E ~@5 A@3 B ~@6 C D ~@8 E ~ F G E ~@5 A@3 H ~@10 A@3 I ~@6 C D ~@5 J K L E ~ F G E ~@5
  E ~ F G E ~@5 A@2 M N O@2 P@2
>`.pickRestart({
  A: "~@4 [e5,g5,c6]@3 ~ [d5,g5,b5]@2 ~@6", B: "~@2 [c6,e6,g6]@2 [b5,d6,g6] ~@3",
  C: "~@4 [a4,d5,f#5]@3 ~ [a4,d5,f#5]@3 ~ [a4,d5,f#5]@3 ~", D: "[c5,a5]@3 ~ [b4,g5]@3 ~ [a4,f#5]@3 ~ d5@2 b4@2",
  E: "~@2 [b4,d5] [c5,e5,g5]", F: "~@4 [c5,e5,a5]@5 ~@7", G: "~@4 [b4,d5,g5]@5 ~@7",
  H: "~@2 [c5,e5,g5]@2 [b4,d5,g5] d5@2 b4", I: "~@2 [c5,e5,g5]@2 g5 ~@3",
  J: "[c5,e5,g5]@2 [b4,d5,f#5]@3 ~ [c5,f#5,b5]@5 ~ [c5,e5,a5]@3 ~", // C Bm B Am
  K: "[b4,d5,g5]@3 ~ [c5,e5,g5]@3 ~ [b4,d5,g5]@3 ~ [b4,d5,g5]@3 ~", // G C G
  L: "[d5,g5]@3 ~ [c5,e5,g5]@3 ~ [b4,d5,g5]@3 ~ [d5,g5]@3 ~", M: "c5@3 ~@3 [e5,g5,c6]@5 ~@3 c5@2",
  N: "b4@5 ~ [d5,g5,b5]@6 ~@2 b4@2", O: "[[a4,d5,a5]@21 ~@11]/2", P: "[[b4,g5]@29 ~@3, d5@27 ~@5]/2",
})).s("gm_rock_organ").gain(0.51)

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

// drums · kick
const kick = s("bd").struct(`<
  ~@7 A ~ B C@2 ~ D@27 E F G H D@3 H D@11 I@2 H@4 D@3 H@2 F@2 G H@11 F@2 G H@16 J H@10 F@2 G H@7 F@2 G H@2 J F@2 H K L M
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@3 x", C: "x ~@2 x ~@4", D: "x!2", E: "x ~@2 x ~@2 x ~", F: "x ~ x!2 ~@2 x ~", G: "~ x ~ x",
  H: "x!4", I: "x ~ x!2", J: "x!2 ~ x", K: "x ~@7 x ~@2 x ~ x ~@2", L: "x", M: "~@15 x",
})).gain(0.51)

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

// drums · clap
const clap = s("cp").struct("<A B A B A B A B A B ~@26 A ~@29 A ~@11 A B A B A B ~@52>".pickRestart({
  A: "x ~ x ~ x!3 ~", B: "x ~ x ~@2 x!2 ~",
})).gain(0.46)

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

// drums · hihat
const hihat = s("hh").struct("<~@14 A@3 B A@15 B A@9 C A@3 C A@15 C A@20 D@2 ~ D A@15 E A@25 D A@3 ~@3>".pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "x!2 ~@6", D: "x!4", E: "x",
})).gain(0.51)

// drums · mid tom
const mid_tom = s("mt").struct("<~@77 [~@10 x ~ x!2 ~@2] ~@55 [~@2 x ~@8 x ~ x ~@2] ~@2>").gain(0.51)

// drums · open hat
const open_hat = s("oh").struct("<~@7 [~ x!3 ~@4] ~@4 [x!8] [x ~ x ~ x ~ x ~ x!5 ~@3] ~@122>").gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<~@77 [~@7 x] ~@55 [~ x] ~@2>").gain(0.51)

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

stack(bass, rock_organ, electric_guitar_clean, kick, snare, clap, low_tom, hihat, mid_tom, open_hat, high_tom, crash)

More by John Fogerty