Strudelify
Rockin' Pneumonia cover art

1972 · L.A. Reggae

Rockin' Pneumonia

Johnny Rivers

KeyC majorTempo123 bpm
0:00/0:00
// Rockin' Pneumonia — Johnny Rivers
// 123 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(123/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C B D E F G H B C B D E F G H B C B D E F G H B C B D E F G H B C B D E F G H B C B D E F G H B C B D E F G H B
  C B D E F G H B C B D E F G H B C B D E F G H B C B D E F G H I
>`.pickRestart({
  A: "g2@2 ~@2 g2@2 ~@2 g2 ~ g2 ~ g2 ~ a2@2", B: "c2 ~ c2@3 ~@3 g1 ~ g1@3 ~@3", C: "c2 ~ c2@3 ~@3 g1@3 ~ a#1@2 b1 ~",
  D: "c2 ~ c2@4 ~@2 c2 ~ e2 ~ f2 ~ f#2 ~", E: "g2 ~ g2@2 ~@4 d2 ~ d2@2 ~@4", F: "g2 ~ g2@3 ~@3 d2 ~ d2@3 ~@3",
  G: "c2 ~@7", H: "~@10 g1@2 a1 ~ b1 ~", I: "c2@3 ~ c1@3 ~@9",
})).s("gm_acoustic_bass").gain(0.8)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@6 A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A
  B C D E F G H A B C D E F G H A B C D E F G H A B C D ~
>`.pickRestart({
  A: "~@2 [g4,b4,d5] ~ [g4,b4,d5]@3 ~ [g4,b4,d5]@3 ~ [g4,b4,d5] ~ [c5,e5]@2, ~@14 g4 ~", // G C
  B: "~@2 [g4,d5] ~ [g4,b4,d5]@2 ~@2 [g4,b4,d5]@3 ~ [g4,b4] ~ [g4,b4,d5] ~", C: "[g4,c5] ~@7",
  D: "~@2 g4 ~ g4 ~ g4 ~ [g3,g4] ~ [g3,g4] ~ [g3,g4] ~ [a3,a4]@2", // G A
  E: "~@4 [c5,e5]@2 [a#4,c5,e5]@2 ~@4 [g4,c5,e5] ~ [a4,c5,f5]@2, ~@4 g4 ~@11", // C C7 C F
  F: "~@4 [g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [g4,e5] ~ [a4,c5,f5]@2, ~@6 c5 ~", // C F
  G: "~@2 [g4,c5,e5] ~ [g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [g4,c5,e5] ~ [a4,c5,f5]@2", // C F
  H: "~@2 [g4,c5,e5] ~ [g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2", // C
})).s("gm_piano").gain(0.72)

// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
  A B C D E F G H I J K L K L M N O P ~ Q ~ R ~@2 S T ~ U ~ V W ~ X Y ~ U ~ V W ~ Z AA AB AC AD@2 AE AF AG AH AI AJ AK
  AL AM AN I J ~ Q ~ R ~@2 S T ~ U ~ V W ~ X Y ~ U ~ V W ~ Z AA ~ U ~ V W ~ AO AP AQ
>`.pickRestart({
  A: "~@4 [g6,c7] ~ [f6,a6] ~ [d#6,e6,g6] ~ [d#6,g6] [g5,c6,d6] [f5,c6] ~ [d#5,f#5] ~", // C5 F D# Gsus4 F5 D#m
  B: "[e5,g5]@2 [g3,g4,g5] ~ [g3,g4,g5] ~ [g3,g4,g5] ~ [g3,g4,g5] ~ [g3,g4,g5] ~ [g3,g4,g5] ~ [a3,a4,a5] ~", // Em G A
  C: "~@4 [c5,e5]@2 [a#4,c5,e5]@2 ~@4 [g4,c5,e5] ~ [a4,c5,f5]@2, ~@4 g4 ~@11", // C C7 C F
  D: "~@4 [g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [g4,e5] ~ [a4,c5,f5]@2, ~@6 c5 ~", // C F
  E: "~@2 [g4,c5,e5] ~ [g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [g4,c5,e5] ~ [a4,c5,f5]@2", // C F
  F: "~@2 [g4,c5,e5] ~ [g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2", // C
  G: "~@2 [g5,g6] ~ [f5,f6] ~ [d5,d6] ~ [f5,f6] ~ f5@2 ~@2 [d5,d6] ~, ~@10 f6 ~@5", // G F D F D
  H: "[f5,f6] ~ [f5,f6] ~ [d5,d6] ~ [f5,f6] ~@3 [g5,g6] ~ [a5,a6] ~ [g5,g6] ~", // F D F G A G
  I: "g7 [d7,d#7] c7 ~ [e6,c7] ~ [a6,c7] ~ [d#6,f#6] ~ [e6,g6] ~ [d#6,f#6] ~ [e6,g6] ~", // D#maj7 C Am D#m Em D#m Em
  J: "[d#6,f#6] ~ [e6,g6] ~ [d#6,f#6] ~ [e6,g6] ~ d#6 [c6,d6] a5 ~ [d#5,c6] ~ [e5,c6] ~", // D#m Em D#m Em Csus2 Cm C
  K: "~@4 [g5,c6,e6] ~ [a5,c6,f6] ~ [g5,c6,e6] ~@3 [g5,c6,e6] ~ [a5,c6,f6] ~", // C F C F
  L: "[g5,c6,e6] ~@2 [a5,c6,f6] ~@2 g5 [c6,e6] g5 [c6,e6] g5 [c6,e6] g5 [c6,e6] g5 [c6,e6]", // C F C
  M: "~@2 [g5,g6] ~ [f5,f6] ~ [d5,d6] ~ [f5,f6] ~ [f5,f6] ~@3 [d5,d6] ~", // G F D F D
  N: "[g5,g6] ~ [g5,g6] ~ [f#5,f#6] ~ [f5,f6]@4 [g5,g6] ~ [a5,a6] ~ [g5,g6] ~", // G F# F G A G
  O: "d#6 e6 g6 d#6 e6 a6 d#6 e6 g6 d#6 e6 a6 d#6 d6 c6 [g5,a5]", P: "c6 ~ a#5 ~ g5 ~ g5 ~ g5 ~ g5 ~ a5 ~ g5 ~",
  Q: "[c5,e5]@2 [g4,e5] ~ [a4,c5,f5] ~ g4@2 ~@2 g4 ~ g4 ~ g4 e5, ~@6 c5@9 ~, ~@6 e5@7 ~@3", // C F
  R: "[c5,e5]@2 g4 ~ [a4,c5,f5] ~ [g4,c5,e5]@2 ~@4 [a#5,a#6] [a5,a6] [g5,g6] ~, g4 ~@15", // C F C A# A G
  S: "~@2 [g5,c6] ~ [f5,a5] ~ [d#5,g5] ~ [d#5,g5] [c5,d5] a4 ~ [g4,c5] ~ c5@2, ~@14 d#4 ~", // C5 F D# Csus2 C5
  T: "[e4,c5] ~ [f4,g4] ~ [f4,g4] ~ [f4,g4] ~ [f4,g4] ~ [f4,g4] ~ [f4,g4] ~ [f4,g4] ~", // C Fsus2
  U: "~@2 [e5,g5,c6] ~ [f5,a5,d6] ~ [f#5,a#5,d#6] ~ [g5,b5,e6] ~ [f#5,a#5,d#6] ~ [f5,a5,d6] ~ [e5,g5,c6] ~", // C Dm D#m Em D#m Dm C
  V: "~@6 [e5,e6] ~ [e5,e6] ~ [g5,g6] ~ [a5,a6] ~ [a#5,a#6] ~", W: "[b5,b6] ~@7",
  X: "g6 [d6,d#6] c6 ~ [e5,c6] ~ [a5,c6] ~ [d#5,f#5] ~ [e5,g5] ~ [d#5,f#5] ~ [e5,g5] ~", // D#maj7 C Am D#m Em D#m Em
  Y: "[d#5,f#5] ~ [e5,g5] ~ [d#5,f#5] ~ [e5,g5] ~ d#5 [c5,d5] a4 ~ [d#4,c5] ~ [e4,c5] ~", // D#m Em D#m Em Csus2 Cm C
  Z: "[g5,c6] ~ [g5,c6] ~ [g5,c6] ~ [g5,c6] ~", // C5
  AA: "[f#5,c6] [g5,c6]@2 ~ [g5,c6]@3 ~ f#5 g5@3 [g5,c6]@3 ~, ~@8 c6@3 ~@5", // F#dim C5
  AB: "~@2 [e6,c7] ~ [f6,c7] ~ [f#6,c7] ~ [g6,c7]!8", AC: "[g6,c7]!16",
  AD: "[f#6 g6 c7 f#6 g6 c7 f#6 g6 c7 ~ g6 c7 f#6 g6 c7 ~ [g6,c7]@2 ~@2 [e6,e7] ~ [f6,f7] ~ [f#6,f#7] ~ [g6,g7] ~ [f#6,f#7] ~ [g6,g7] ~, ~@9 f#6@2 ~@4 f#6@2 ~@15]/2", // C5 E F F# G F# G
  AE: "b6 [b6,b7] b7 [b6,b7] b6 [b6,b7] b7 [b6,b7] b6 [b6,b7] b7 ~ [a#6,a#7] ~ [a6,a7] ~", // B A# A
  AF: "[g6,g7] ~ [a6,a7] ~ [g6,g7] ~ [d#6,d#7] ~ [d6,d7] ~ [c6,c7] ~ [a5,a6] ~ [g5,g6] ~", // G A G D# D C A G
  AG: "[c6,c7] ~ [c6,c7] ~@2 [a#5,a#6] [a5,a6] ~ [g5,g6] ~ [a5,a6] ~@2 [d#5,d#6] [d5,d6] ~", // C A# A G A D# D
  AH: "[c5,c6] ~ [d5,d6] ~@2 [a#4,a#5] [a4,a5] ~ [g4,g5] ~ [a4,a5] ~ [a4,a5] ~ [c5,c6] ~", // C D A# A G A C
  AI: "[d#6,g6] e6 c6 a5 [d#6,g6] [d#6,e6] c6 a5 [d#6,g6] e6 c6 a5 [d#6,g6] [e6,g6] c6 a5", // D# Emaj7 D# Em
  AJ: "[d#6,g6] [d#6,e6] c6 a5 [d#6,g6] e6 c6 a5 [g6,a#6] c6 [f6,a6] c6 [d#6,g6] [d#6,e6] c6 g5", // D# Emaj7 D# Gm F D# Emaj7
  AK: "[d#6,g6] e6 c6 a5 [d#6,g6] [e6,g6] c6 a5 [d#6,g6] [d#6,e6,g6] c6 a5 [d#6,g6] e6 [c6,e6] a5", // D# Em D# C
  AL: "[g6,a#6] c6 [f6,a6] c6 [d#6,f#6] [e6,g6] c6!2 d#6 e6 c6 a5 c6 e5 a#5 g5, ~@4 g6 ~@3", // Gm F D#m Em
  AM: "f5 [f5,f6]!3 f6 [f5,f6]!2 f5 [f5,f6] f6 [f5,f6] f5 [f5,f6] f6 [f5,f6] f5", // F
  AN: "[g5,a5,b5] [c6,d6,e6,f6] [g6,a6,b6,c7,d7] ~ d7 ~ c7 ~ a#6 ~ a6 ~ g6@2 ~@2", // G Dm7 G
  AO: "~@2 [g6,c7] ~ [f6,a6] ~ [d#6,g6] ~ [d#6,g6] [c6,d6] a5 ~ [g5,c6] ~ c6@2, ~@14 d#5 ~", // C5 F D# Csus2 C5
  AP: "[e5,c6] ~ [f5,g5] ~ [f5,g5] ~ [f5,g5] ~ [f5,g5] ~ [f5,g5] ~ [f5,g5] ~ [f5,g5] ~", AQ: "[c5,c6]@4 [c2,c3]@3 ~@9",
})).s("gm_piano").gain(0.8)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A B C@4 D E F B C@4 D E F B C@4 D E F B C@4 D E F B C@4 D E F B C@4 D E F B C@4 D E F B C@4 D E F B C@4 D E F B C@4
  D E F B C@4 D E F G
>`.pickRestart({
  A: "b3@2 ~@2 b3@2 ~@2 [b3,d4,f4] ~ [b3,d4,f4] ~ [b3,d4,f4] ~ [b3,d4,f4]@2", // Bdim
  B: "~@4 g3@2 g3 ~ g3 ~ a#3@2 g3 ~ [g3,a#3,c4]@2, ~@4 [a#3,c4]@5 ~ g3 ~@5", // C7 A#sus2
  C: "[g3 ~ g3 ~ [g3,a#3,c4]@3 ~ g3 ~ [g3,a#3,c4]@2 [g3,a#3] ~ a#3@2 g3 ~ [g3,a#3]@2 [g3,c4]@3 ~ g3 ~ [g3,a#3,c4]@3 ~ g3 ~ [g3,a#3]@3 ~ g3 ~ g3@3 ~ [g3,a#3]@2 g3 ~ [a#3,c4] ~ [f3,b3]@3 ~ [f3,g3]@3 ~ [f3,g3] ~ [g3,b3]@2 f3 ~ [f3,g3,b3] ~, ~@14 c4@4 ~@2 a#3@4 ~@6 c4@15 ~@7 b3@4 ~@8, ~@14 g3 ~@21 a#3@5 ~@5 g3@5 ~@7 f3 ~@5]/4", // C7 Gm C5 C7 Gm A#sus2 Fdim Fsus2 …
  D: "f3@2 f3@3 ~ [f3,g3,b3]@3 ~ [f3,g3,b3]@3 ~ [f3,g3,b3] ~, b3@5 ~@11", E: "[g3,a#3,c4] ~@7",
  F: "~@2 [f3,g3,b3] ~ [f3,g3,b3] ~ [f3,g3,b3] ~ [f3,g3,b3] ~ [f3,g3,b3] ~ [f3,g3,b3] ~ [f3,g3,b3]@2", // G7
  G: "[g3,c4]@3 ~ [c3,g3]@3 ~@9", // C5
})).s("gm_acoustic_guitar_steel").gain(0.57)

// chords · acoustic guitar steel · "STEEL GTR" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~ A B C D ~@2 E ~@2 F C D ~@2 E ~@2 F C D ~@2 E ~@2 F C D ~@2 E ~@2 F C D ~@2 E ~@2 F C D ~@2 E ~@2 F C D ~@2 E ~@2 F
  C D ~@2 E ~@2 F C D ~@2 E ~@2 F C D ~@2 E ~@2 F C D ~@2 E ~@3
>`.pickRestart({
  A: "[g3,d4] ~ [g3,d4] ~@5", B: "a#3@3 ~@13", C: "~@2 a#3 c4 ~@4 a#3 ~@7", D: "a#3 ~@13 a#3 ~", E: "g3@5 ~@11",
  F: "[g3,a#3,c4]@3 ~@13", // C7
})).s("gm_acoustic_guitar_steel").gain(0.29)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note("<~@74 [d5@2 a#5 ~ a#5 ~ a#5@10] ~@16>").s("gm_electric_guitar_muted").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C B D B@2 E A B C B D B@2 E A B C B D B@2 E A B C B D B@2 E A B C B D B@2 E A B C B D B@2 E A B C B D B@2 E A B
  C B D B@2 E A B C B D B@2 E A B C B D B@2 E A B C B D B@2 E A F
>`.pickRestart({
  A: "x ~ x ~ x!4", B: "x!2 ~@2 x!2 ~@2", C: "x!2 ~@2 x ~@2 x", D: "x!2 ~@2 x!2 ~ x", E: "x!4", F: "x!2 ~@2",
})).gain(0.62)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B@6 ~ C B@6 ~ C B@6 ~ C B@6 ~ C B@6 ~ C B@6 ~ C B@6 ~ C B@6 ~ C B@6 ~ C B@6 ~ C B@6 ~ C ~
>`.pickRestart({
  A: "x ~@7 x ~ x ~ x!3 ~", B: "~ x ~ x", C: "~@6 x!2",
})).gain(0.62)

// drums · low tom
const low_tom = s("lt").struct("<~@9 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A B>".pickRestart({
  A: "~@5 x!3", B: "~@3 x ~@12",
})).gain(0.56)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A B>".pickRestart({
  A: "~ x", B: "~ x ~@6",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ B ~ B ~ C ~@3 B ~ B ~ C ~@3 B ~ B ~ C ~@3 B ~ B ~ C ~@3 B ~ B ~ C ~@3 B ~ B ~ C ~@3 B ~ B ~ C ~@3 B ~ B ~ C ~@3
  B ~ B ~ C ~@3 B ~ B ~ C ~@3 B ~ B ~ C ~@3
>`.pickRestart({
  A: "~ x ~@6", B: "~@7 x", C: "~ x",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@9 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~>".pickRestart({
  A: "~@4 x ~@2 x ~@8",
})).gain(0.56)

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

stack(
  bass, piano, piano_2, acoustic_guitar_steel, acoustic_guitar_steel_2, electric_guitar_muted, kick, snare, low_tom,
  hihat, mid_tom, open_hat, high_tom, crash
)

More by Johnny Rivers