Strudelify

Do Wah Diddy Diddy

Manfred Mann

KeyE majorTempo126 bpm
0:00/0:00
// Do Wah Diddy Diddy — Manfred Mann
// 126 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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 ~@2 C D E F G H I J K L G D C D E F G H I J K L M N O P Q R S@2 G D C D E F G H I J K L M N O P Q R S@2 ~@2 C D E
  F G H I J K L S@2 C D C D C T
>`.pickRestart({
  A: "e2@3 ~ e2 ~ e2@2 b1@3 ~ b1@3 ~", B: "a1@3 ~ a1 ~ a1 ~ b1@2 ~@6", C: "e2@4 ~@2 e2@2 b1@5 ~ b1 ~",
  D: "a1@5 ~ a1 ~ b1 ~ b1@2 c#2@2 d#2 ~", E: "e2@4 ~@2 e2@2 b1 ~ b1@2 e2@2 b1 ~", F: "a1@5 ~ a1 ~ b1@3 ~ b1@3 ~",
  G: "e2@5 ~ e2@2 b1 ~ b1@2 e2@2 b1 ~", H: "a1@5 ~ a1 ~ b1@2 ~@6", I: "~@2 e2@2 b1 ~@3", J: "~@4 e2@3 ~ b1@2 ~@6",
  K: "~@4 e2@3 ~ b1@3 ~ e2@4", L: "b1@3 ~ e2@4 b1@4 ~@4", M: "e2@2 ~ e2 b1@2 ~ d#2", N: "e2@4 ~@2 e2@2 b1@3 ~ d#2@3 ~",
  O: "c#2@4 ~@2 c#2@2 g#1@5 ~ g#1@2", P: "c#2@5 ~ c#2 ~ c#2@3 ~ b1@3 ~", Q: "a1@4 ~@2 a1@2 e1@5 ~ e1@2",
  R: "a1@5 ~ a1@2 e1@4 a1@2 a#1 ~", S: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", T: "a1@5 ~ a1 ~ b1 ~@7",
})).s("gm_acoustic_bass").gain(0.7)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B ~@2 A C D E A F G H I J A K A C L K A F G H I J M@2 N@2 O@2 P@2 A K A C L K A F G H I J M@2 N@2 O@2 P@2 ~@2 A C D
  E A F G H I J Q@2 A C A C A F
>`.pickRestart({
  A: "[e4,g#4,b4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~", // E
  B: "[e4,a4,c#5]@3 ~ [e4,a4,c#5]@2 ~@2 [e4,g#4,b4]@2 ~@6", // A E
  C: "[e4,a4,c#5]@3 ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,g#4,b4]@7 ~", // A E
  D: "[e4,g#4,b4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4]@3 ~", // E
  E: "[e4,a4,c#5]@7 ~ [e4,g#4,b4]@7 ~", F: "[e4,a4,c#5]@3 ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,g#4,b4] ~@7",
  G: "~@2 e3@2 b2 ~@3", H: "~@4 e3@3 ~ b2@2 ~@6", I: "~@4 e3@3 ~ b2@3 ~ e3@4", J: "b2@3 ~ e3@4 b2@4 ~@4",
  K: "[e4,a4,c#5]@3 ~ [e4,a4,c#5]@3 ~ [e4,g#4,b4]@7 ~", // A E
  L: "[e4,g#4,b4]@5 ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~", // E
  M: "[~@4 [e4,g#4,b4]@7 ~ [e3,g#3,b3,e4,g#4,b4]@7 ~ [e3,g#3,b3,e4,g#4,b4]@7 ~ [e3,g#3,b3,e4,g#4,b4]@3 ~, [e3,g#3,b3]@11 ~@21]/2", // E
  N: "[~@4 [e4,g#4,c#5]@7 ~ [e4,g#4,c#5]@7 ~ [e4,g#4,c#5]@7 ~ [e4,g#4,c#5]@2 ~@2, [c#3,g#3,c#4]@15 ~]/2", // C#m C#5
  O: "[~@4 [c#4,e4,a4]@7 ~@13 [a2,e3]@4 [c#4,e4,a4] ~@3, [a2,e3]@15 ~ [a2,e3]@7 ~@9, c#3@9 ~@3 [c#4,e4,a4]@6 ~@2 [c#4,e4,a4]@6 ~@6]/2", // A A5 A A5 A
  P: "[b2,b3,d#4,f#4] ~ [b2,b3,d#4,f#4] ~ [b2,b3,d#4,f#4] ~ [b2,b3,d#4,f#4] ~ [b2,b3,d#4,f#4] ~ [b2,b3,d#4,f#4] ~ [b2,b3,d#4,f#4] ~ [b2,b3,d#4,f#4] ~", // B
  Q: "[b2,f#3,a3,d#4,f#4] ~ [b2,f#3,a3,d#4,f#4] ~ [b2,f#3,a3,d#4,f#4] ~ [b2,f#3,a3,d#4,f#4] ~ [b2,f#3,a3,d#4,f#4] ~ [b2,f#3,a3,d#4,f#4] ~ [b2,f#3,a3,d#4,f#4] ~ [b2,f#3,a3,d#4,f#4] ~", // B7
})).s("gm_epiano2").gain(0.44)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  A B ~@2 A C D E A F G H I J A K A C L K A F G H I J M@2 N@2 O@2 P@2 A K A C L K A F G H I J M@2 N@2 O@2 P@2 ~@2 A C D
  E A F G H I J Q R A C A C A F
>`.pickRestart({
  A: "[e4,g#4,b4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~", // E
  B: "[e4,a4,c#5]@3 ~ [e4,a4,c#5]@2 ~@2 [e4,g#4,b4]@2 ~@6", // A E
  C: "[e4,a4,c#5]@3 ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,g#4,b4]@7 ~", // A E
  D: "[e4,g#4,b4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4]@3 ~", // E
  E: "[e4,a4,c#5]@7 ~ [e4,g#4,b4]@7 ~", F: "[e4,a4,c#5]@3 ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,g#4,b4] ~@7",
  G: "~@2 e3@2 b2 ~@3", H: "~@4 e3@3 ~ b2@2 ~@6", I: "~@4 e3@3 ~ b2@3 ~ e3@4", J: "b2@3 ~ e3@4 b2@4 ~@4",
  K: "[e4,a4,c#5]@3 ~ [e4,a4,c#5]@3 ~ [e4,g#4,b4]@7 ~", // A E
  L: "[e4,g#4,b4]@5 ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~", M: "[[e4,g#4,b4]@31 ~]/2",
  N: "[[c#4,e4,g#4,c#5]@31 ~]/2", O: "[[e4,a4,c#5]@15 ~]/2",
  P: "[f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~", // B
  Q: "[f#4,a4,d#5] ~ [f#4,a4,d#5]!2 ~ [f#4,a4,d#5]!2 ~ [f#4,a4,d#5] ~ [f#4,a4,d#5]!2 ~ [f#4,a4,d#5]!2 ~", // D#dim
  R: "[f#4,a4,d#5] ~ [f#4,a4,d#5]!2 ~ [f#4,a4,d#5] [f#4,a4,a#4,d#5] ~ [f#4,a4,d#5] ~ [f#4,a4,d#5]!2 ~ [f#4,a4,d#5]!2 ~", // D#dim D#m D#dim
})).s("gm_rock_organ").gain(0.56)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B ~@2 C D E F G H I J K L M N O P Q R S T U V W X Y Z ~@2 AA AB AC@2 M N O P Q R S T U V W X Y Z ~@2 AA AB AC@2 ~@2
  C D E F G H I J K L AC@2 C D C D C AD
>`.pickRestart({
  A: "[e3,g#3,b3]!2 [e3,g#3,b3,e4] [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4] [e3,e4]!2, e4 ~@2 [g#3,b3]", // E G#m
  B: "[e3,a3,c#4,e4]@3 ~ [e3,a3,c#4,e4]@3 ~ [e3,g#3,b3,e4]@2 ~@6", // A E
  C: "[e3,g#3,b3]@2 [e3,g#3,b3]!2 ~@2 e4 [e3,g#3,b3,e4], e4@2 e4 ~, ~@5 [e3,g#3,b3]@2 ~", // E
  D: "[e3,a3,c#4]@4 [e3,a3,c#4]@4 [e3,g#3,b3]@3 ~ [e3,g#3,b3]@2 [e3,g#3,b3]@2", // A E
  E: "[e3,g#3,b3]@3 ~ [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@2", // E
  F: "[e3,a3,c#4,e4]@3 ~ [e3,a3,c#4,e4]@4 [e3,g#3,b3,e4]@3 ~ [e3,g#3,b3,e4]@4", // A E
  G: "[e3,g#3,b3]@3 ~ [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~", // E
  H: "[e3,a3,c#4,e4]@3 ~ [e3,a3,c#4,e4]@3 ~ [e3,g#3,b3,e4] ~@7", I: "~@4 e3@3 ~ [e2,b2]@2 ~@6",
  J: "~@2 e3@2 [e2,b2] ~@3", K: "~@8 [e2,b2]@3 ~ e3@3 ~", L: "[e2,b2]@4 e3@4 [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~",
  M: "[e3,g#3,b3]@2 [e3,g#3,b3] [e3,g#3,b3]@2 [e3,g#3,b3]!3", // E
  N: "[e3,a3,c#4]@2 e3!2 ~@3 e4, ~ [a3,c#4] [e3,g#3,b3]!2, ~@5 e4@2 ~", // A E
  O: "[e3,g#3,b3]@2 ~ e4 ~@3 e4, e4@3 ~@2 e4@2 ~, ~ [e3,g#3,b3]!3", P: "[e3,a3,c#4] [e3,a3,c#4,e4] [e3,g#3,b3,e4]!2",
  Q: "[e3,g#3,b3,e4]@2 [e3,g#3,b3,e4] [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4] [e3,g#3,b3,e4]@2", // E
  R: "[e3,a3,c#4]@2 ~ e4 ~@3 e4, e4@3 ~@2 e4@2 ~, ~ [e3,a3,c#4] [e3,g#3,b3]!2", // A E
  S: "[e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@2 e4 ~@5 e4@2 e4@2, ~@3 [e3,g#3,b3]@2 [e3,g#3,b3]@3, ~@2 e4 ~", // E
  T: "[e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@3 ~ [e3,g#3,b3,e4]@2 ~@6", U: "~@2 e3@2 b2 ~@3", V: "~@4 e3@3 ~ b2@2 ~@6",
  W: "~@4 e3@3 ~ b2@3 ~ e3@4", X: "b2@3 ~ e3@4 b2@4 ~@4", Y: "~@8 [b3,b4]@2 ~ [c#4,c#5]@2 [d#4,d#5]@2 ~",
  Z: "[e4,e5]@13 ~@3", AA: "~@8 [g#3,g#4]@3 [f#3,f#4]@2 [e3,e4]@3", AB: "[d#3,d#4]@3 ~@5",
  AC: "[b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~", // B5
  AD: "[e3,a3,c#4]@4 [e3,a3,c#4]@4 [e3,g#3,b3] ~@7", // A E
})).s("gm_acoustic_guitar_steel").gain(0.44)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@3 A ~@9 B ~@11 B ~ C ~@3 B ~@13 B ~ C ~@3 B ~ D ~ A ~@9 B ~ C ~@6>".pickRestart({
  A: "~@5 x!2 ~", B: "~@12 x!2 ~@2", C: "~@10 x!4 ~@2", D: "x!4 ~@4",
})).gain(0.21)

// drums · low tom
const low_tom = s("lt").struct("<~@10 A@2 B C ~@8 A@2 B C ~@3 D ~@12 A@2 B C ~@3 D ~@12 A@2 B C ~@7 A>".pickRestart({
  A: "~ x", B: "~@8 x ~ x!2 ~@4", C: "x ~ x!2 ~@4 x ~ x!2 ~@4", D: "~@7 x",
})).gain(0.71)

// drums · hihat
const hihat = s("hh").struct("<A B C@2 A@5 B C@4 A@7 B C@4 A@15 B C@4 A@8 C@2 A@5 B C@4 A@7 B>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "~ x ~ x",
})).gain(0.71)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A ~@3 A@5 ~@5 A@7 ~@5 A B A B A B ~@2 A@7 ~@5 A B A B A B ~@4 A@5 ~@5 A B A@5 C
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~ x ~ x ~@4",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<~@10 A@2 B@2 ~@8 A@2 B@2 ~@3 C ~@12 A@2 B@2 ~@3 C ~@12 A@2 B@2 ~@7 D>".pickRestart({
  A: "~@4 x!4 ~@8", B: "~@4 x!4 ~@4 x!4", C: "~@10 x!3 ~@3", D: "~ x!3 ~@4",
})).gain(0.71)

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

// drums · crash
const crash = s("cr").struct("<A ~@7 A ~@11 A ~@19 A ~@19 A ~@13>".pickRestart({
  A: "x",
})).gain(0.71)

// drums · ride
const ride = s("rd").struct(`<
  A B ~@2 A@5 B ~@4 A@7 B ~@4 C@6 D ~ A@7 B ~@4 C@6 D ~@3 A@5 B ~@4 C@2 A@5 E
>`.pickRestart({
  A: "x ~ x ~ x!2 ~ x", B: "~ x!2 ~@5", C: "x!4", D: "x", E: "x!2 ~@2",
})).gain(0.71)

// drums · shaker
const shaker = s("sh").struct("<A B ~@2 A@5 B ~@4 A@7 B ~@10 A@9 B ~@10 A@2 ~@2 A@5 B ~@6 A@5 B>".pickRestart({
  A: "x!4", B: "x!3 ~",
})).gain(0.71)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<A B ~@2 A@5 B ~@4 A@7 B ~@10 A@9 B ~@10 A C ~@2 A@5 B ~@6 A@5 B>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4", C: "~ x ~ x ~ x ~@2",
})).gain(0.21)

stack(
  bass, epiano2, rock_organ, acoustic_guitar_steel, kick, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, crash, ride, shaker, shaker_soft
)

More by Manfred Mann