Strudelify

proud mary

John Fogerty

KeyD majorTempo155 bpm
0:00/0:00
// proud mary — John Fogerty
// 155 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/4334651; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(155/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 · marimba · "Marimba (Grand Staff)"
const marimba = note(`<
  ~@11 A B C D E@2 F G H@2 I@5 ~ A B C D E@2 F G H@2 I@5 ~@9 A B C D J@2 F G H@2 I@5 K@4 L@4 ~@9
>`.pickRestart({
  A: "b3 d4!2 d4@3 e4 d4", B: "[d4,f#4] [d4,f#4]@3 ~@4", C: "f#4!4 e4 d4 e4 d4", D: "e4 f#4@2 f#4@2 ~@3",
  E: "[f#4!4 e4@2 d4 f#4@2 f#4!3 e4 d4@2 ~]/2", F: "f#4!4 e4@2 d4 e4", G: "f#4!2 f#4@2 f#4!2 ~@2",
  H: "[[c#4,e4]@2 [c#4,e4]@2 [c#4,e4] [c#4,e4]@2 ~ a3 [c#4,f#4]@6 ~, ~@7 [c#4,e4]@2 ~@7]/2", // C#m F#5 C#m
  I: "[a4@2 e4 d4 e4 d4@2 d4@2 d3!2 e3 f#3 a3 b3 [d4,f#4]@2 [d4,f#4] ~@5 [d4,f#4]@2 [d4,f#4] ~@5 [a3,f#4]@2 [a3,f#4] [g3,e4] [f#3,d4] [g3,e4]@2 [f#3,d4]@2]/5", // D C D C D
  J: "[f#4!5 e4 d4 f#4@2 f#4!3 e4 d4@2 ~]/2",
  K: "[~@7 [d#4,g4]@2 [d#4,g4] ~@5 [d#4,g4]@2 [d#4,g4] ~@5 [a#3,g4]@2 [a#3,g4] [g#3,f4] [g3,d#4] [g#3,f4]@2 [g3,d#4]@2]/4", // D# C# Cm C# Cm
  L: "[~@7 [f4,a4]@2 [f4,a4] ~@5 [f4,a4]@2 [f4,a4] ~@5 [c4,a4]@2 [c4,a4] [a#3,g4] [a3,f4] [a#3,g4]@2 [a3,f4]@2]/4", // F D# Dm D# Dm
})).s("gm_marimba").gain(0.37)

// chords · piano
const piano = note(`<
  ~ A@2 B@2 ~@2 C D C D E F G H I@2 J K L@2 M@5 ~ E F G H I@2 J K L@2 M@5 ~ A@2 B@2 ~@2 C D E F G H I@2 J K L@2 M@5 N@4
  O@4 ~ A@2 P@3 Q@2 ~
>`.pickRestart({
  A: "[c2,c3] g2 c3 [a1,a2] ~ e2 a2@2, [c4,e4,g4,c5]@3 [a3,c#4,e4,a4]@4 ~", // C A C A
  B: "[[c2,c3] g2 c3 [a1,a2,a3,c#4,e4,a4]@2 [g1,g2,g3,b3,d4,g4]@2 [f1,f2,f3,a3,c4,f4]@2 [f1,f2,f3,a3,c4,f4]@2 [d1,d2,d3,d4] [f1,f2,f3,f4]@2 [g1,g2,g3,b3,d4,g4]@2, [c4,e4,g4,c5]@3 ~@13]/2", // C A G F D F G C
  C: "~ [d3,f#3,a3,d4] ~ [d3,f#3,a3,d4]!3 ~ [d3,f#3,a3,d4]", // D
  D: "[d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]@2 ~@2 a3@2 a#3 [d3,f#3,b3] a3@2 a#3 [d3,f#3,b3] a3@2", // D Bm
  E: "[d2,f#3,b3] [d2,f#3,d4] [d3,f#3,d4] a2 d2!2 [d3,g3,e4] [a2,f#3,d4], ~@3 [f#3,d4]@3 ~@2", // Bm D Em7 D
  F: "[d2,a3,d4,f#4] d2 d3 a2 d2!2 d3 a2, ~ [a3,d4,f#4]@3 ~@4", // D
  G: "[d2,a3,f#4]!2 [d3,a3,f#4] [a2,a3,f#4] [d2,g3,e4] [d2,f#3,d4] [d3,g3,e4] [a2,f#3,d4]", // D Em7 D Em7 D
  H: "[d2,g3,e4] d2 d3 a2 d2!2 d3 a2, ~ [a3,f#4]@2 [a3,f#4]@2 ~@3", // Em7 D
  I: "[[d2,a3,f#4]!2 [d3,a3,f#4] [a2,a3,f#4] d2!2 [d3,f#3,d4] [a2,a3] [d2,a3] [d2,a3,f#4] [d3,a3,f#4] [a2,a3,f#4] [d2,g3,e4] d2 d3 a2, ~@4 [g3,e4]@2 ~ f#4@2 ~@4 [f#3,d4]@2 ~]/2", // D A D5 D Em7 C D
  J: "[d2,a3,f#4]!2 [d3,a3,f#4] [a2,a3,f#4] d2!2 [d3,f#3,d4] [a2,g3,e4], ~@2 [g3,e4] ~", // D A7 C
  K: "[d2,d4,f#4]!2 d3 a2 [d2,d3,d4,f#4]!2 [g1,g2] [g#1,g#2], ~ [d4,f#4] ~@2", // D G G# D
  L: "[[a1,a2] a1 a2 e2 [a1,a3,c#4,e4] a1 a2 e2 a1!2 a2 e2 a1!2 a2 e2, [a3,c#4,e4]@4 [a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@4 [a3,c#4,e4]@4 [a3,c#4,f#4]@11 ~@3]/2", // A F#m
  M: "[[b1,b2] b1 [b2,e4] [f#2,d4] [b1,f#3,b3,e4] b1 b2 f#2 g1 [b1,d3,g3,b3] [d2,d3] [e2,e3] [f#2,f#3] [a2,a3] [b2,b3] d3 d2 [d2,a3,d4,f#4] d3 a2 d2!2 d3 a2 d2 [d2,a3,d4,f#4] d3 a2 d2!2 d3 a2 d2 [d2,a3,f#4] [d3,g3,e4] [a2,f#3,d4] d2!2 d3 a2, [d4,f#4,a4]@2 ~@3 [f#3,b3,d4]@2 [g3,b3,d4]@2 ~@6 [a3,d4,f#4]@2 ~@6 [a3,d4,f#4]@2 ~@6 [a3,f#4]@2 ~@3 [g3,e4]@2 [f#3,d4]@2]/5", // B E5 D Bsus4 G D E F# …
  N: "[~@7 d#3 d#2 [d#2,a#3,d#4,g4] d#3 a#2 d#2!2 d#3 a#2 d#2 [d#2,a#3,d#4,g4] d#3 a#2 d#2!2 d#3 a#2 d#2 [d#2,a#3,g4] [d#3,g#3,f4] [a#2,g3,d#4] d#2!2 d#3 a#2, ~@7 [a#3,d#4,g4]@2 ~@6 [a#3,d#4,g4]@2 ~@6 [a#3,g4]@2 ~@3 [g#3,f4]@2 [g3,d#4]@2]/4", // D# Fm7 D# C# Cm
  O: "[~@7 f3 f2 [f2,c4,f4,a4] f3 c3 f2!2 f3 c3 f2 [f2,c4,f4,a4] f3 c3 f2!2 f3 c3 f2 [f2,c4,a4] [f3,a#3,g4] [c3,a3,f4] f2!2 f3 c3, ~@7 [c4,f4,a4]@2 ~@6 [c4,f4,a4]@2 ~@6 [c4,a4]@2 ~@3 [a#3,g4]@2 [a3,f4]@2]/4", // F Gm7 F D# Dm
  P: "[[c2,c3]@2 g2@2 c3@2 [a1,a2,a3,c#4,e4,a4]@4 [g1,g2,g3,b3,d4,g4]@4 [f1,f2,f3,a3,c4,f4]@4 [f1,f2,f3,a3,c4,f4]@4 ~ [d1,d2,d3,d4]@2 [f1,f2,f3,f4]@5 [g1,g2,g3,b3,d4,g4]@5 ~@7 g#4 [a4,c#5]@3 [g4,b4]@2, [c4,e4,g4,c5] ~@7]/3", // C A G F D F G A …
  Q: "[~ g#4 [f#4,a4]@2 d4@2 ~ c4@2 a3@2 ~ [a3,c#4,d4,f#4]@20, ~@12 [d1,d2]@5 ~@15]/2", // F#m Dmaj7 D
})).s("gm_piano").gain(0.36)

// drums · kick
const kick = s("bd").struct("<~ A@3 ~@2 B A@19 ~ A@7 B A@7 ~ A@3 ~@2 B A@17 ~ A@3 ~ A@3 ~ A@3 ~@2 C ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x!4", C: "~ x ~@5 x ~@4 x ~@3",
})).gain(0.55)

// drums · snare
const snare = s("sd").struct("<~@6 A B@19 C B@7 C B@7 ~@6 A B@17 ~ B@3 ~ B@3 ~@9>".pickRestart({
  A: "x!3 ~", B: "~ x ~ x", C: "x!16",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~ A@3 ~@3 B@19 ~ B@7 ~ B@7 ~ A@3 ~@3 B@17 ~ B@3 ~ B@3 ~ A@3 ~@5>".pickRestart({
  A: "~ x ~ x", B: "x!8",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@5 [x!16] ~@41 [x!16] ~@31 [~@4 x!2 ~ x ~ x!2 ~ x ~ x ~] [x!2 ~@5 x ~@8] ~@2>")
  .gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~ [~@7 x]!3 ~@39 [~@7 x]!3 ~@29 [~@7 x]!3 ~@5>").gain(0.41)

// drums · cowbell
const cowbell = s("cb").struct("<[x!4]!6 ~ [x!4]!41 ~ [x!4]!29 ~@5>").gain(0.41)

// drums · crash
const crash = s("cr").struct("<~@6 [~@3 x] ~@41 [~@3 x] ~@31 [~@3 x] ~@2>").gain(0.41)

stack(marimba, piano, kick, snare, hihat, mid_tom, open_hat, cowbell, crash)

More by John Fogerty