Strudelify

Mrs Brown You've Got a Lovely Daughter

Herman's Hermits

KeyC majorTempo140 bpm
0:00/0:00
// Mrs Brown You've Got a Lovely Daughter — Herman's Hermits
// 140 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: track names are the Roland MT-32 patch names at their program numbers ("Bass" on 64, "Guitar" on 62), so with no bank select the whole file is read through the MT-32 patch table: ch 2 "Bass" Acou Bass 1 -> acoustic bass; ch 3 "Guitar" Elec Gtr 2 -> overdriven guitar; ch 4 "Lead" Syn Brass 1 -> synth brass 1; ch 5 "Duet" Whistle 2 -> whistle; ch 5 "Duet" Harmonica -> harmonica; ch 5 "Duet" Whistle 1 -> whistle
// note: duplicate parts dropped: ch 4 "Lead" synth brass 1 (copy of ch 5 "Duet" whistle)
// note: Full arrangement: all 77 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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 · "Bass"
const bass = note(`<
  A B C B C B C D C D E F E G E H I J K L B L B C B L B M F M F M H N O P Q R S T U V W X L Y L Y L D L Y E G M G E H N
  J K Z Y AA AB AC D AD D AC D AD D L D AD Y
>`.pickRestart({
  A: "c2@3 ~ c2 ~ c2@3 ~ g2 ~ e2@3 ~ e2 ~ e2@3 ~ e2 ~", B: "d2@3 ~ d2 ~ d2@3 ~ d2 ~ g1@3 ~ g1 ~ g1@3 ~ d2 ~",
  C: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ e2@3 ~ e2 ~ e2@3 ~ b2 ~", D: "d2@3 ~ d2 ~ d2@3 ~ d2 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~",
  E: "a1@3 ~ a1 ~ a1@3 ~ a1 ~ a1@3 ~ a1 ~ a1@3 ~ b1 ~", F: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ b1 ~",
  G: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ g1 ~", H: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~ e2@4 ~@2",
  I: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ f2 ~", J: "g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~",
  K: "g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ b1 ~", L: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ e2@3 ~ e2 ~ e2@3 ~ e2 ~",
  M: "a1@3 ~ a1 ~ a1@3 ~ a1 ~ a1@3 ~ a1 ~ a1@3 ~ c#2 ~", N: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ f#2 ~",
  O: "g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ a1 ~", P: "a#1@3 ~ a#1@2 ~@4 f1@2 a#1@3 ~ a#1@2 ~@2 c2@2 d2@2",
  Q: "d#2@3 ~ d#2@2 ~@4 d#2@2 d#2 ~@3 d#2@2 ~@2 a1@2 f#1@2", R: "g1@3 ~ g1@2 ~@4 d1@2 g1@3 ~ g1@2 ~@2 a#1@2 g1@2",
  S: "g#1@3 ~ g#1@2 ~@4 d#1@2 g#1@3 ~ g#1@2 ~@2 c2@2 b1@2", T: "a#1@3 ~ a#1@2 ~@4 a#1@2 a#1 ~@3 a#1@2 ~@2 g#1@2 g1@2",
  U: "f#1@3 ~ f#1@2 ~@4 f#1@2 f#1 ~@3 f#1@2 ~@2 c2@2 b1@2", V: "a#1@3 ~ a#1@2 ~@4 f1@2 a#1@3 ~ a#1@2 ~@2 c2@2 b1@2",
  W: "a#1@3 ~ a#1@2 ~@4 a#1@2 a#1 ~@3 a#1@2 ~@2 a#1@2 f1@2", X: "g1@3 ~ g1@2 ~@4 d1@2 g1@3 ~ g1@2 ~@2 a1@2 b1@2",
  Y: "d2@3 ~ d2 ~ d2@3 ~ d2 ~ g1@3 ~ g1 ~ g1@3 ~ a1 ~", Z: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ e2@3 ~ e2 ~ e2@3 ~ f#2 ~",
  AA: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c#2 ~", AB: "d2@3 ~ d2 ~ d2@3 ~ e2 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~",
  AC: "c2@3 ~ c2 ~ c2@3 ~ d2 ~ e2@3 ~ e2 ~ e2@3 ~ f#2 ~", AD: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ e2 ~",
})).s("gm_acoustic_bass").gain(0.48).pan(0.3)

// chords · overdriven guitar · "Guitar"
const overdriven_guitar = note(`<
  A B C B D E F E G B H I H J K L M N O P Q G B F B A E R S T J T L I U V W X Y Z AA AB AC AD AE AF F E A AG G AH K AI
  AJ AK T AL AM AN U P AH AO AP AQ B AO AR AS AH AT AP A B AO AP
>`.pickRestart({
  A: "c3@4 ~@2 [g3,c4,e4]@2 ~@2 c3 ~ e3@4 ~@2 [b3,d4,e4,g4]@2 ~@4", // C Em7
  B: "d3@4 ~@2 [c4,d4,f4,a4]@2 ~@4 g3@4 ~@2 [b3,d4,f4,g4]@3 ~ [b3,d4,f4,g4] ~", // Dm7 G7
  C: "[g3,c4,e4]@10 ~@2 e3@4 ~@2 [b3,d4,e4,g4]@2 ~@2 e3 ~", D: "[g3,c4,e4]@5 ~ e3@2 ~ [b3,d4,e4,g4] ~@2",
  E: "d3@4 ~@2 [c4,d4,f4,a4]@2 ~@2 d3 ~ g3@4 ~@2 [b3,d4,f4,g4]@3 ~ [b3,d4,f4,g4] ~", // Dm7 G7
  F: "c3@4 ~@2 [g3,c4,e4]@2 ~@4 e3@4 ~@2 [b3,d4,e4,g4]@2 ~@2 e3 ~", // C Em7
  G: "c3@4 ~@2 [g3,c4,e4]@2 ~@2 c3 ~ e3@4 ~@2 [b3,d4,e4,g4]@2 ~@2 e3 ~", // C Em7
  H: "a2@4 ~@2 [a3,c4,e4]@2 ~@2 a2 ~ a2@4 ~@2 [a3,c4,e4]@2 ~@4", // Am
  I: "c3@4 ~@2 [g3,c4,e4]@2 ~@4 c3@4 ~@2 [g3,c4,e4]@3 ~ [g3,c4,e4] ~", // C
  J: "c3@4 ~@2 [g3,c4,e4]@4 ~@2 [g3,c4,e4]@3 ~@3 [g3,c4,e4]@4 ~@2", K: "[a3,c4,e4]@5 ~ a2@2 ~ [a3,c4,e4] ~@2",
  L: "c3@2 ~ [g3,c4,e4] ~@2 [g3,c4,e4]@2 ~ [g3,b3,e4]@2 ~", M: "[g3,c4,e4]@10 ~@2 [g3,c4,e4]@3 ~@3 [g3,c4,e4]@4 ~@2",
  N: "g3@4 ~@2 [b3,d4,f4,g4]@4 ~@2 [b3,d4,f4,g4]@3 ~@3 [b3,d4,f4,g4]@4 ~@2", // G7
  O: "g3@2 ~ [b3,d4,f4,g4] ~@2 g3@2 ~ [b3,d4,f4,g4] ~@2", P: "c3@4 ~@2 [g3,c4,e4]@2 ~@2 c3 ~ [b3,d4,e4,g4]@10 ~@2",
  Q: "[c4,d4,f4,a4]@5 ~ [b3,d4,f4,g4]@5 ~", R: "a2@2 ~ [a3,c4,e4] ~@2 a2@2 ~ [a3,c4,e4] ~@2",
  S: "c3@4 ~@2 [g3,c4,e4]@2 ~@2 c3 ~ c3@4 ~@2 [g3,c4,e4]@3 ~ [g3,c4,e4] ~", // C
  T: "a2@4 ~@2 [a3,c4,e4]@2 ~@4 a2@4 ~@2 [a3,c4,e4]@2 ~@2 a2 ~", U: "[b3,d4,f4,g4]@5 ~ g3@2 ~ [b3,d4,f4,g4] ~@2",
  V: "~@4 a#2@2 [d4,f4,g#4,a#4]@3 ~ [d4,f4,g#4,a#4] ~@5 a#2@2 [d4,f4,g#4,a#4]@3 ~ [d4,f4,g#4,a#4] ~", // A#7
  W: "~@4 d#3@2 [g3,a#3,d#4]@3 ~ [g3,a#3,d#4] ~@7 [g3,a#3,d#4]@3 ~ [g3,a#3,d#4] ~", // D#
  X: "~@4 g3@2 [g3,a#3,d4]@3 ~ [g3,a#3,d4] ~@7 [g3,a#3,d4]@3 ~ [g3,a#3,d4] ~", // Gm
  Y: "~@6 [g#3,c4,d#4]@4 ~@2 [g#3,c4,d#4]@4 ~@2 [g#3,c4,d#4]@3 ~ [g#3,c4,d#4]@2", // G#
  Z: "~@6 [f3,a#3,d4]@3 ~ [f3,a#3,d4] ~@7 [f3,a#3,d4]@3 ~ [f3,a#3,d4] ~", // A#
  AA: "~@4 f#3@2 [c#4,f#4,a#4]@3 ~ [c#4,f#4,a#4] ~@7 [c#4,f#4,a#4]@3 ~ [c#4,f#4,a#4] ~", // F#
  AB: "~@4 a#2@2 [a#3,c#4,f4]@3 ~ [a#3,c#4,f4] ~@5 a#2@2 [a#3,c#4,f4]@3 ~ [a#3,c#4,f4] ~", // A#m
  AC: "~@4 a#2@2 [a#3,d4,f4]@4 ~@2 [a#3,d4,f4]@4 ~@2 [a#3,d4,f4]@3 ~ [a#3,d4,f4]@2", // A#
  AD: "~@4 g3@2 [b3,d4,f4,g4]@3 ~ [b3,d4,f4,g4] ~@7 [b3,d4,f4,g4]@3 ~ [b3,d4,f4,g4] ~", // G7
  AE: "[g3,c4,e4]@10 ~@2 [b3,d4,e4,g4]@3 ~@3 [b3,d4,e4,g4]@4 ~@2", // C Em7
  AF: "[c4,d4,f4,a4]@3 ~@3 [c4,d4,f4,a4]@4 ~@2 g3@4 ~@2 [b3,d4,f4,g4]@3 ~ [b3,d4,f4,g4] ~", // Dm7 G7
  AG: "d3@4 ~@2 [c4,d4,f4,a4]@2 ~@4 [b3,d4,f4,g4]@3 ~ g3@2 [b3,d4,f4,g4]@4 ~@2", // Dm7 G7
  AH: "[c4,d4,f4,a4]@10 ~@2 g3@4 ~@2 [b3,d4,f4,g4]@3 ~ [b3,d4,f4,g4] ~", AI: "c3@2 ~ [g3,c4,e4] ~@2 [g3,c4,e4]@5 ~",
  AJ: "a2@4 ~@2 [a3,c4,e4]@2 ~@2 a2 ~ a2@4 ~@2 [a3,c4,e4]@2 ~@2 a2 ~", // Am
  AK: "c3@4 ~@2 [g3,c4,e4]@4 ~@2 [g3,c4,e4]@3 ~ c3@2 [g3,c4,e4]@4 ~@2", // C
  AL: "c3@4 ~@2 [g3,c4,e4]@2 ~@2 c3 ~ [g3,c4,e4]@4 ~@2 [g3,b3,e4]@4 ~@2", // C Em
  AM: "c3@4 ~@2 [g3,c4,e4]@2 ~@2 c3 ~ c3@4 ~@2 [g3,c4,e4]@2 ~@4", // C
  AN: "g3@4 ~@2 [b3,d4,f4,g4]@4 ~@2 [b3,d4,f4,g4]@3 ~ g3@2 [b3,d4,f4,g4]@4 ~@2", // G7
  AO: "c3@2 ~ [g3,c4,e4] ~@2 c3@2 ~ [g3,c4,e4] ~@2", // C
  AP: "d3@4 ~@2 [c4,d4,f4,a4]@4 ~@2 [b3,d4,f4,g4]@3 ~ g3@2 [b3,d4,f4,g4]@4 ~@2", // Dm7 G7
  AQ: "c3@2 ~ [g3,c4,e4] ~@2 [b3,d4,e4,g4]@5 ~", AR: "[c4,d4,f4,a4]@10 ~@2 [b3,d4,f4,g4]@3 ~ g3@2 [b3,d4,f4,g4]@4 ~@2",
  AS: "c3@2 ~ [g3,c4,e4] ~@2 e3@2 ~ [b3,d4,e4,g4] ~@2", // C Em7
  AT: "[g3,c4,e4]@3 ~@3 [g3,c4,e4]@4 ~@2 c3@4 ~@2 [g3,c4,e4]@2 ~@2 c3 ~", // C
})).s("gm_overdriven_guitar").gain(0.39).pan(0.4)

// other · harmonica · "Duet"
const harmonica = note("<~@36 A@6 B ~@34>".pickRestart({
  A: "[~@12 a#4@3 g4@5 ~ d4@21 ~@5 c4@6 d#4@6 g#4@6 c5@6 a#4@11 f4@13 f#4@12 c#5@6 a#4@5 f4@21 ~@5]/6",
  B: "~@6 f4 ~@3 f4 ~ f4@2 ~@4 f4@2 ~@4",
})).s("gm_harmonica").gain(0.41).pan(0.4)

// other · synth strings 1 · "Strings"
const synth_strings_1 = note(`<
  ~@4 A B ~@2 C@2 D E ~ F@2 ~@6 G H ~@2 I J K@3 L@2 ~@3 M@5 N@2 O P ~@2 Q R ~@2 S@6 T ~@6 U@2 ~@2 V@2 ~@2 W@2 ~@2 X@2
>`.pickRestart({
  A: "~@7 g4@10 g4@7", B: "f4@4 ~ g4@6 ~", C: "[~@6 g4@10 ~ g4@6 f4@10 g4@8 ~@7]/2", D: "~@2 c5@5 ~", E: "~@17 a4@6 c5",
  F: "[~@21 c5@2 c5@4 ~@21, ~@3 a4 ~@4]/2", G: "~@6 g4@10 ~ g4@7", H: "f4@9 ~ g4@11 ~@3", I: "~@5 g4@11 ~ g4@6 ~",
  J: "f4@8 ~ g4@8 ~@7", K: "[~@5 c5@35 ~ c5@4 ~@2 a4@14 ~@11, ~@45 c5@16 ~@11]/3",
  L: "[~@17 c5@4 ~@3 a4@13 ~@11, ~@7 c5@5 ~@4]/2",
  M: "[~@23 d#4@13 a#4@5 g4@6 d4@19 ~@10 d#4@6 g#4@6 ~ c5@6 a#4@11 f4@9 ~@5, ~@71 c4@7 ~@42]/5",
  N: "[f#4@10 c#5@5 a#4@7 f4@22 ~@4]/2", O: "~@6 f4@2 ~ f4 ~@2 f4@2 ~@3 f4@4 ~@3", P: "~@5 g4@2 ~@4 g4@5 ~@8",
  Q: "~@6 g4@9 ~@2 g4@7", R: "f4@8 ~@2 g4@11 ~@3",
  S: "[~@5 g4@10 ~@2 g4 ~@6 f4 ~@9 g4@26 ~ c5@28 c5@2 ~@4 a4@5 a4@25 ~@13 c5@6, ~@18 g4@16 ~@57 c5@6 ~@47]/6",
  T: "a4 ~@5", U: "[~@6 g4@11 ~@7 f4@9 g4@12 ~@3, ~@17 g4@16 ~@15]/2",
  V: "[~@12 g4@7 ~@5 f4@9 g4@13 ~@2, ~@19 g4@14 ~@15]/2", W: "[~@6 g4@11 ~@7 f4@9 g4@13 ~@2, ~@17 g4@16 ~@15]/2",
  X: "[~@5 g4@12 ~@7 f4@10 ~ g4@12 ~, ~@17 g4@17 f4@13 ~]/2",
})).s("gm_synth_strings_1").gain(0.25)

// drums · kick
const kick = s("bd").struct("<[x ~@4 x!2 ~@5]!42 ~@2 [x ~@4 x!2 ~@5]!33>").gain(0.4)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!2 ~@41 [~ x!2 ~] ~@33>").gain(0.48)

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

// drums · clap
const clap = s("cp").struct("<~@43 [~ x!2 ~] ~@33>").gain(0.8)

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

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

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

stack(bass, overdriven_guitar, harmonica, synth_strings_1, kick, rim, snare, clap, hihat, open_hat, crash)

More by Herman's Hermits