Strudelify

Rock and Roll Girls

John Fogerty

KeyG majorTempo132 bpm
0:00/0:00
// Rock and Roll Girls — John Fogerty
// 132.1 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 11 "Rhythm 2" acoustic guitar nylon (copy of ch 3 "Rhythm 1" electric guitar clean)
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Rhythm 1, OD Gtr, Muted Rhythm.
setcpm(132.1/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
const bass = note(`<
  ~@5 A B A B A B A B A B C B A B A B A B D E A B A B A B A@3 B A B A B A B A@2 F@6 A@2 G@2 F@4 A@3 B A B A B D E A B A
  B A B A@3 B A B A B A B A B A B A B A B A B A B A B A H I@2
>`.pickRestart({
  A: "g1!8", B: "c2!4 d2!3 e1", C: "g1!3 b2 a2 g2 e2 d2", D: "g1!3 b2 ~ b2 g2 e2", E: "g2 c2!3 d2!3 e1",
  F: "[g2@2 ~ f#2 e2 ~@2 c2@2 ~@2 c2 d2!3 f#2]/2", G: "[g1@2 ~ f#2 e2 ~@2 c2@2 ~@2 c2 d2!3 f#2]/2",
  H: "c2!4 d2!2 a#1 a1", I: "[g1@3 ~]/2",
})).s("gm_fretless_bass").gain(0.56)

// chords · electric guitar clean · "Rhythm 1"
const electric_guitar_clean = note(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@10 C D C D C D ~@2 C D C D C D ~@3 A ~ A ~ A ~ A ~
  A ~ A ~ A ~ B ~@26
>`.pickRestart({
  A: "~@7 [d3,a3]", B: "~@7 [e2,a2]", C: "~ [b3,d4,g4] ~ [b3,e4,g4]", D: "~ [c4,e4,g4] ~ a4",
})).s("gm_electric_guitar_clean").gain(0.2).pan(0.7)

// chords · overdriven guitar · "OD Gtr"
const overdriven_guitar = note("<~@32 A@2 ~@40 A@2 ~@7 A ~@7 A ~@9>".pickRestart({
  A: "~@7 e3",
})).s("gm_overdriven_guitar").gain(0.32).pan(0.6)

// chords · electric guitar muted · "Muted Rhythm"
const electric_guitar_muted = note("<~@43 A B A B A B ~@2 C B A B A B ~@44>".pickRestart({
  A: "d3 ~@2 c#3 ~@3 g2", B: "~@3 e3 f#3@2 d3 ~", C: "~@3 c#3 ~@3 g2",
})).s("gm_electric_guitar_muted").gain(0.37)

// other · alto sax · "Sax"
const alto_sax = note("<~@23 A B ~@17 C D@2 E F G H@2 C I@2 E J K L@2 ~@7 M N ~@23 O P Q R S T U V W X@2>".pickRestart({
  A: "~@4 [a#4,b4] ~@2 b4@5 g4 ~@3, ~@7 a#4 ~@8", B: "g4@2 ~@2 g4@4 e4 d4@6 ~", C: "~@12 a#4 ~ d5 ~, ~@13 b4@2 ~",
  D: "[c#5 d5@21 g4@2 c5@4 b4@2 ~@2, ~@24 b4 ~@7]/2", E: "g4@2 g4 ~ b4@2 d4 ~ g4@4 e4@2 ~@2, f#4 ~@7 f#4 ~@7",
  F: "~@6 g4@2 c#5 d5@2 ~ d5@3 ~, ~@12 c#5 ~@3", G: "[c#5,d5] g4@2 ~ a#4 b4 a#4 b4 g4@4 e4@2 ~@2, ~@8 f#4 ~@7",
  H: "[~@2 c5@2 b4@2 g4@3 ~ g4@2 e4@2 g4@9 ~@9, ~@2 b4 ~@3 f#4 ~@25]/2", I: "[c#5 d5@21 g4@2 b4 c5@3 b4@2 ~@2]/2",
  J: "~@6 g4@2 c#5 d5@2 ~ c#5 d5@3", K: "d5@2 ~@2 d5@3 ~ b4 g4@2 ~ g4@2 e4@2, c#5 ~@3 c#5 ~@11",
  L: "[~@2 c5@2 b4@2 e4@2 f#4 g4 g4@2 e4@2 g4@9 ~@9, ~@2 b4 ~@29]/2",
  M: "~@3 [a#4,b4] ~@2 b4@2 f4 g4@3 e4@2 ~@2, ~@6 a#4 ~@9", N: "~@2 f#4 g4@2 ~ g4@2 e4 ~ d4@2 ~@4, ~@6 f#4 ~@9",
  O: "[c#5,d5] ~ c#5 d5@5 ~ a4@2 ~@5, ~@4 b4 ~@3", // Dmaj7
  P: "~@2 [f#4,g4] ~ f#4 ~ e4 ~@3 [f#4,g4] ~ f#4 ~ e4@2, ~@5 g4@2 ~@6 g4@2 ~", // Gmaj7
  Q: "~@2 [f#4,g4] ~ f#4 ~ e4@2 f#4 g4@3 a4@3 ~, ~@5 g4@2 ~@9", // Gmaj7
  R: "~@2 [f#4,g4] ~ f#4 ~ e4@2 ~@2 [f#4,g4] ~ f#4 ~ e4 ~, ~@5 g4@2 ~@6 g4@2 ~", // Gmaj7
  S: "a#4 b4@3 g4@2 ~@2 g4@4 g#4 a4@3, ~@7 e4@2 ~@7", T: "~@3 c#5 d5@2 [c#5,d5] ~ c#5 d5 ~ [c#5,d5] ~@2 [c#5,d5] ~",
  U: "c#5 d5@15", V: "~@2 a#4 b4@5 a4@2 g4 ~ e4 ~ a4@2", W: "~@2 a4@2 g4@2 e4@2 f#4 g4@3 a4@2 ~@2",
  X: "[g4@12 f#4 f4 [d4,e4] g3@6 ~@11]/2", // Dsus2
})).s("gm_alto_sax").gain(0.54).pan(0.6)

// other · distortion guitar · "Dist Gtr"
const distortion_guitar = note(`<
  ~@35 A B C B C B D@2 ~@34 C B C B C B C B C B C B C B C B C B C B C B E@2
>`.pickRestart({
  A: "~@2 g3@4 e3 d3", B: "c3@2 e3 c3 c3@2 f#3 d3", C: "g2@2 g3@4 e3 d3", D: "[g2@27 ~@5]/2", E: "[g3@9 ~@7]/2",
})).s("gm_distortion_guitar").gain(0.46).pan(0.4)

// chords · electric guitar clean · "Finger Picking 1"
const electric_guitar_clean_2 = note(`<
  ~@18 A@2 B@2 C@2 D@2 E ~ F@2 G@2 ~@28 A@2 B@2 C@2 D@2 E ~ F@2 G@2 ~@27
>`.pickRestart({
  A: "[~@7 d5@2 ~@7, c4 d4 ~@2, ~ e4@3 ~@12, ~@4 g4@4 ~@2 f#4@7 ~@15, ~@6 c5@4 ~@2 a4@5 ~@15]/2",
  B: "[~@7 d5@2 ~@7, c4@8 d4@9 ~@15, ~ e4@3 ~@12, ~@4 g4@5 ~ f#4@7 ~@15, ~@3 c5@2 ~ a4@3 ~@7]/2",
  C: "[~@7 d5@3 ~@6, c4@6 c5@4 ~@2 a4@7 ~@13, ~ e4@3 d4@5 ~@7, ~@2 g4@3 f#4@4 ~@7]/2",
  D: "[~@14 d5@3 ~@15, c4 d4 ~@2, ~ e4@3 ~@12, ~@2 g4@2 ~ f#4@3 ~@8, ~@6 c5@4 ~@2 a4@7 ~@13]/2",
  E: "~@7 d5, c4@9 ~@7, ~@2 e4@7 ~ f#4@6, ~@4 g4@4 d4@7 ~, ~@6 c5@5 ~ a4@4",
  F: "[~@14 d5@5 ~@13, c4@4 d4@5 ~@7, ~ e4@3 ~@12, ~@4 g4@4 ~@2 f#4@9 ~@13, ~@6 c5@6 a4@7 ~@13]/2",
  G: "[~@7 d5@2 ~@7, c4 d4 ~@2, ~ e4@3 ~@12, ~@4 g4@5 ~ f#4@5 ~@17, ~@6 c5@5 ~ a4@6 ~@14]/2",
})).s("gm_electric_guitar_clean").gain(0.24).pan(0.3)

// chords · acoustic guitar steel · "Rhythm 3"
const acoustic_guitar_steel = note(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C D@2 B C B C B C B C B D E@6 B D F@2 E@4 B D B C B C B C
  B C B C B C B C D@2 B C B C B C B C B C B C B C B C B C B C B C B C G@2
>`.pickRestart({
  A: "~@7 e2", B: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3]@2 [g2,d3] ~",
  C: "[c3,g3] ~ [c3,g3] ~ [c3,g3]@2 [c3,g3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3]@2 e2@2", // C5 D5
  D: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~", // G5
  E: "[[g2,b2]@2 ~ f#2 [e2,b2,e3,g3]@2 ~@3 [e3,g3,c4]@2 [g3,c4] [a3,d4]@2 [f#3,a3] ~, ~@14 c3@9 ~@9]/2", // G Em C C5 D5 F#m
  F: "[~@3 f#2 [e2,b2,e3,g3]@2 ~@3 [e3,g3,c4]@2 [g3,c4] [a3,d4]@2 [f#3,a3] ~, ~@14 c3@9 ~@9]/2", G: "[[g2,d3]@5 ~@3]/2",
})).s("gm_acoustic_guitar_steel").gain(0.14).pan(0.6)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@90 [~@12 x!3 ~] ~@10>").gain(0.48)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@58 [~@12 x!2 ~@2] ~@31 [~@5 x ~@2] ~@10>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@40 A ~@2 B C@5 ~ D B C@5 ~@44>".pickRestart({
  A: "~@6 x!2", B: "~ x!3", C: "x!4", D: "~@5 x!3",
})).gain(0.38)

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

stack(
  bass, electric_guitar_clean, overdriven_guitar, electric_guitar_muted, alto_sax, distortion_guitar,
  electric_guitar_clean_2, acoustic_guitar_steel, kick, snare, low_tom, hihat, mid_tom, open_hat, crash
)

More by John Fogerty