Strudelify

Daddy's Home

Shep & The Limelites

KeyG majorTempo70 bpm
0:00/0:00
// Daddy's Home — Shep & The Limelites
// 70 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 60 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/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 · piano · "Ac Piano"
const piano = note(`<
  ~@2 A B A B A B A B A B A B A B C D E F G H I J K L A B A B A B C D E F G H I J K M A B A B A B A B A B A B A N@4 ~
>`.pickRestart({
  A: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~", // G Em
  B: "[a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~", // Am F#dim
  C: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [a4,c5,d#5] ~ [a4,c5,d#5] ~ [a4,c5,d#5] ~ [a4,c5,d#5] ~ [a4,c5,f5] ~ [a4,c5,d#5] ~", // G Adim F Adim
  D: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [f4,b4,d5] ~ [f4,b4,d5] ~ [f4,b4,d5] ~ [f4,b4,d5] ~ [f4,b4,d5] ~ [f4,b4,d5] ~", // G Bdim
  E: "[g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [c3,g4,c5,e5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~, c3@2 ~@10 d3@5 ~ d3@2 ~@4", // C D
  F: "[b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [g3,b4,d5,f#5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~, g3@2 ~@10 e3@9 ~@3", // Bm Gmaj7 G Em
  G: "[g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~, c3@11 ~ d3@10 ~@2", // C D
  H: "[b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~, g3@11 ~@13", // Bm G Em
  I: "[g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [a4,c5,f5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~, c3@11 ~ d3@11 ~", // C F F#dim
  J: "[b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~, g3@5 ~ f#3@5 ~ e3@9 ~@3", // G D Em G
  K: "[g4,c#5] ~ [g4,c#5] ~ [g4,c#5,e5] ~ [g4,c#5,e5] ~ [g4,c#5,e5] ~ [g4,c#5] ~ [g4,c#5] ~ [g4,c#5,e5] ~ [g4,c#5,e5] ~ [g4,c#5,e5] ~ [g4,c#5] ~ [a2,g4,c#5] ~, a2@11 ~ a2@9 ~@3", // Gdim C#dim Gdim C#dim Gdim A7
  L: "[c5,d5]@2 f#4 ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [c5,d5] ~, d3@5 ~ c3@5 ~ b2@5 ~ a2@6, f#4 ~@21 f#4@2", // Csus2 D7 Csus2
  M: "[c5,d5]@2 f#4 ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~ [f#4,c5,d5] ~, d3@5 ~ c3@5 ~ b2@5 ~ a2@4 ~@2, f#4 ~@23", // Csus2 D7
  N: "[[a2,c4,e4,g4]@14 [d2,c4,f#4,a4]@20 [b3,d4,f#4,b4]@31 ~ [g1,b3,d4,f#4]@29 ~, ~@17 g2@16 ~@15]/4", // Am7 D7 Bm Gmaj7
})).s("gm_piano").gain(0.22).pan(0.2)

// bass · acoustic bass · "Ac Bass"
const bass = note(`<
  ~@2 A B C B A B C B A B C B A B D E F G H I J K L M A B C B A B D E F G H I J K L M A B C B A B C B A B C B A N@4 ~
>`.pickRestart({
  A: "g1@7 ~ b1 ~ d2 ~ e2@9 ~ e1 ~", B: "a1@7 ~ b1 ~ c2 ~ d2@5 ~ d2@6", C: "g1@7 ~ b1 ~ d2 ~ e2@10 g1 ~",
  D: "g1@9 ~ b1 ~ c2@10 d#2 ~", E: "g1@10 g2 ~ g1@6 b1@5 ~", F: "c2@9 ~ e2 ~ d2@10 f#2 ~",
  G: "g2@5 ~ f#2@6 e2@5 ~ d2@4 e2@2", H: "a1@5 ~ a1@5 ~ d2@5 ~ d2@5 ~", I: "g1@6 f#2@5 ~ e2@5 ~ d2@5 ~",
  J: "c2@5 ~ c2@4 e2 ~ d2@5 ~ d2@2 e2 ~ f#2 ~", K: "g2@5 ~ f#2@5 ~ e2@5 ~ e2@6",
  L: "a1@2 a2 ~ a2 ~ a2 ~@3 e2@2 a1 ~ a2 ~ a2 ~ a2 ~@3 a1 ~",
  M: "d2 ~ d2 ~ d2 ~ c2 ~ c2 ~ c2 ~ b1 ~ b1 ~ b1 ~ a1 ~ a1 ~ d2 ~", N: "[a1@7 d2@10 g1@26 ~@5]/4",
})).s("gm_acoustic_bass").gain(0.45)

// chords · vibraphone · "Vibes"
const vibraphone = note(`<
  A@2 B C B C D E F G B C B C D E H I J K J K L M N O B C B C D E H I J K J K L M N O B C B C D E F G B C B C D P@4 ~
>`.pickRestart({
  A: "[~@23 d6@12 ~@13, ~@11 c4@11 c6@13 ~@13, ~@6 d4@2 c5 d5@9 ~@6, ~@7 f#4@11 ~@6, ~@15 a4@4 f#5@2 a5@15 ~@12]/2",
  B: "[d4,b4]@12 [b3,g4]@11 ~", C: "[c4,g4]@11 ~ [c4,f#4]@11 ~", D: "~@10 [a4,c5]@2 [g4,b4]@11 ~, ~ [b4,d5] ~@2",
  E: "~@6 [c5,e5]@4 [b4,d5] ~ [a4,c5]@11 ~, ~@4 e4@7 ~@13", F: "~@3 f#4, [b4,d5], ~ a4@3, ~ g4",
  G: "[c4,e4]@12 [d4,f#4]@11 ~", H: "[d4,b4]@11 ~ c5@4 d5@4 c5@4, ~@12 d#4@11 ~", I: "d4@4 f4@3 ~, b4@7 ~",
  J: "[e4,g4]@11 ~ [f#4,a4]@11 ~", K: "[f#4,b4]@11 ~ [g4,b4]@11 ~", L: "[e4,g4]@11 ~ [f#4,a4]@9 ~@3",
  M: "[b4,d5]@6 [a4,c5]@6 [g4,b4]@11 ~", N: "[g4,c#5]@11 ~ [g4,c#5]@11 ~", O: "[f#4,d5]@19 ~@5",
  P: "[~@7 [c5,e5]@5 [b4,d5] ~ [a4,c5]@18 ~@42 f#5@21 ~, ~@5 e4@8 ~@21 g4@48 ~@14, ~@34 b4@24 b4@37 ~, ~@50 d5@45 ~, ~@66 f#4@29 ~]/4", // C Bm Am
})).s("gm_vibraphone").gain(0.22)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@25 A B C D@2 E F G H I J I K L M N O ~@8 P Q R S P T@5>".pickRestart({
  A: "[d3,d4]@12 [d4,d5]@11 ~", B: "[g2,d3,b3,f#4] [e3,b3,g4]", C: "[a2,g3,e4] [d3,f#3,d4], c4@23 ~",
  D: "[[g3,b4]@6 [f#3,a4]@6 e3@11 ~ [a2,e3,c4]@12 [d3,c4,f#4]@12, d4@23 ~@25, ~ g4@2 ~]/2", // G F#m Am D7
  E: "[g2,b3]@2 ~ d4, d3@3 ~, ~ [e2,g3]", F: "[a2,g3]@2 ~ d4, c4@3 ~, ~ [d2,f#3]", G: "[g2,d3,b3] [c2,d#3,c4]",
  H: "d3@4 g3 f#3 [g2,f3]@6, b3, g2 ~", I: "[c4,g4,e5] [d4,a4,f#5]", J: "[d4,a4,f#5] [e4,b4,g5]",
  K: "[b3,f#4,d5] [e4,b4,g5]", L: "[c4,g4,e5] [a4,f#5], ~@6 d4@5 ~", M: "[d4,b4,g5] [d4,b4,f#5] [b3,g4,e5] [b3,g4,d5]",
  N: "[a3,g4,c#5]!2", O: "[a3,f#4,d5] c4 b3 a3, ~ [f#4,d5]@3", P: "[g2,d3,b3,f#4] [e3,d4,g4]",
  Q: "[a2,g3] [d3,f#3,d4], c4@23 ~", R: "[g2,d3] [e3,d4,g4], [f#3,b3]@5 ~@7", S: "[a2,g3] [d3,f#4], c4",
  T: "[[a2,g3]@14 [d3,f#3,d4]@20 [g2,d3,b3,f#4]@63 ~@23, c4@11 ~@29]/5", // A7 D Gmaj7
})).s("gm_string_ensemble_1").gain(0.32)

// other · french horn · "Brass"
const french_horn = note("<~@24 A B C D E ~ F G H I ~ J ~ K L M N O P Q R S T U V W X Y Z AA AB ~@5>".pickRestart({
  A: "~@2 [c#4,g4]@2 [a3,c#4,g4] ~ [a3,c#4,g4] ~@7 [a3,c#4,g4] ~ [a3,c#4,g4] ~ [a3,c#4,g4] ~@5, ~@2 a3 ~@21", // C#dim A7
  B: "[c4,f#4]@3 ~", C: "~@8 d4 a4@2 g4", D: "c4@6 ~@4 d4 e4", E: "b3 ~", F: "~@6 d4@3 ~ c4@2 b3@10 ~@2",
  G: "~@4 g3 ~ e4@4 d4@2 c4@10 d4 ~", H: "b3@3 c4 d4 c4", I: "b3@8 g3 ~ f#3@2 f3@10 ~@2",
  J: "~@6 a4@2 f#4 ~ d4 ~ a4@2 f#4@2 d4 ~ g4@4 ~@2", K: "~@6 a4@2 f#4@2 d4 ~ a4@2 f#4@2 d4 ~ g4@2 ~@4",
  L: "[e4,g4]@12 [f#4,a4]@11 ~", M: "[g4,b4]@6 [f#4,a4]@5 ~ [e4,g4]@9 ~@3",
  N: "~@2 [c#4,a4] ~ [c#4,a4] ~ [c#4,g4,a4] ~@7 [c#4,a4] ~ [c#4,g4,a4] ~ [c#4,g4,a4] ~@5, ~ g4!2 ~@4 g4 ~@4", // F#m A7 F#m A7
  O: "f#4@2 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4]@3 ~ [c4,f#4] ~ [c4,f#4]@3 ~ [c4,f#4] ~ d4@3 ~ e4 ~, c4 ~@23", // Cdim
  P: "f#4@6 d4 ~ e4 ~ f#4 ~ a4@3 ~ g4@8", Q: "c4@5 g3 f#3@5 ~", R: "~@6 b4@2 b4 ~ a4 ~ f#4@4 g4 ~@3 b3@2 d4 ~",
  S: "c4@3 ~ c4 ~@3 c4 ~@3 g4@5 ~ f#4@3 ~ e4 ~", T: "~@6 d4@3 ~ c4@2 b3@9 ~@3", U: "~@3 e4@2 d4 c4@5 d4", V: "b3@3 ~",
  W: "~@6 e4@3 ~ d4 ~ c4@6 ~@4 b3@2", X: "d4@6 c4@2 d4@2 c4@2 b3@6 a3 ~ b3 ~ a3@2", Y: "g3@3 e4@2 d4 c4@5 b3",
  Z: "d4@12 g3@11 ~", AA: "~@3 c4@2 b3 a3@5 g3", AB: "d4@6 c4@2 d4@2 c4@2 b3@9 ~@3",
})).s("gm_french_horn").gain(0.25)

// chords · electric guitar jazz · "JazGuit"
const electric_guitar_jazz = note(`<
  ~@2 A B C D A B C D A B C D A B E F G H I J K L M N A B C D A B E F G H I J K L M O A B C D A B C D A B C D A P@4 ~
>`.pickRestart({
  A: "~@2 g3 ~@2 d3 ~@2 b3 ~@2 g3, g2@5 ~ e2@5 ~, ~ d3@3 g3@2 ~ g3@3 b3@2, ~ b3 ~ e4",
  B: "~@2 c4 ~@2 g3 ~@2 d4 c4 ~ f#3, a2@11 ~ d3@11 ~, ~@2 g3@6 c4@4 ~@2 f#3@7 ~@3, ~@3 e4@3 ~@4 d4@2",
  C: "~@5 g3 ~@5 g3, g2@2 b3 ~ g3 b3, ~@2 d3@7 ~@3 e2@10 ~@2, ~@4 g3@5 ~@5 b2@9 ~, ~ d4 ~ e4",
  D: "~@4 c4@2 ~@4 g3@2 ~@4 c4@2 ~@2 c4@2 f#3 ~, a2@10 ~@2 d3@11 ~, ~ a3@3 c4@2 ~ f#3@3 ~@2, ~@6 e4@6 ~@6 d4@5 ~",
  E: "~@4 b3@2 ~@2 b3@2 d3 ~@5 d#4@2 ~@2 d#4@2 c4@2, g2@5 ~@4 g4@3, ~@2 d3@6 ~@4 c3@9 ~@3, ~@6 g4@6 ~@2 c4@7 ~@3",
  F: "~@4 b3@2 ~@4 d3@2 ~@4 b3@2 ~@2 b3@2 d3 ~, g2@3 ~ g2@3 ~, ~@2 d3@6 b3@5 ~ d3@6 ~@4, ~@6 g4@6 ~@6 f4@5 ~",
  G: "~@5 g3 ~@5 a3, c3@10 ~@2 d3@11 ~, ~@2 e3@8 ~@4 f#3@9 ~, ~ g3 c4 ~ a3 d4, ~ e4 ~ f#4",
  H: "~@4 d4@2 ~@4 b3@2 ~@4 b3@2 ~@4 g3 ~, g3@5 ~ e3@4 b3@2, ~@2 b3@6 d4@4 ~@2 g3@7 ~@3, ~ f#4 ~ d4",
  I: "~@2 e4 ~@2 c4 ~@2 d4 ~@2 c4, a3@5 ~ a3@5 ~, ~ c4@3 e4@2 ~ c4@3 d4@2, ~ g4 ~ f#4",
  J: "~@2 d4 ~@2 b3 ~@2 d4 ~ d4 b3, g3@5 ~ g3@5 ~, ~@2 b3@6 d4@4 ~@2 b3@7 ~@3, ~@6 f#4@7 ~@5 e4@6",
  K: "~@5 g3 ~@5 a3, c3@5 ~ d3@5 ~, ~ g3@3 c4@2 ~ d4@2 ~ d4@2, ~@2 e3@3 ~@3 f#3@3 ~, ~ e4 ~ f#4",
  L: "~@2 d4 ~@2 d4 ~@5 d4, g3@5 ~ f#3@5 ~ e3@4 d4@4 g3@4, ~ b3@2 ~ a3@2 ~ g3@2 e3@2 ~",
  M: "~@2 c#4 ~@2 g3 ~@2 c#4 ~@2 g3, a2@11 ~ a2@10 ~@2, ~ g3@3 c#4@3 g3@3 c#4@2, ~@6 e4@8 ~@4 e4@5 ~",
  N: "~@2 c4 ~@2 c4 f#3 d4 ~@2 f#3 d4, d3@5 ~@7, ~@2 d4@4 f#3@5 ~@5 f#3@4 ~@4, ~@4 d4@2 ~@3 c4@3",
  O: "~@4 c4@2 ~@4 c4@2 f#3@2 d4@2 ~@4 f#3@2 d4 ~, d3@5 ~@7, ~@2 d4@4 f#3@5 ~@5 f#3@4 ~@4, ~@8 d4@4 ~@6 c4@5 ~",
  P: "[~@5 c4@2 e4@2 c4@3 g3 ~@5 d4@16 ~@2 [b3,f#4]@39 ~@21, a2@12 ~@2 [d3,f#3,c4]@19 ~ g2@40 ~@22, ~@2 g3@7 ~@26 d3@39 ~@22]/4", // B5 D7
})).s("gm_electric_guitar_jazz").gain(0.22).pan(0.8)

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

// drums · rim
const rim = s("rim").struct("<~@2 [~ x ~ x]!31 [~ x ~@2] ~@26>").gain(0.6)

// drums · snare
const snare = s("sd").struct(`<
  ~@33
  [~@8 x!2 ~@2]
  [~ x ~ x]!3
  [~@3 x ~@4 x!2 ~@2]
  [~ x ~ x]!3
  [~@3 x ~@3 x!5]
  [~ x ~ x]!13
  ~@5
>`).gain(0.6)

// drums · hihat
const hihat = s("hh").struct("<~@2 A B@3 A B@3 A B@3 A B@3 A B@3 A B@2 ~ A B@3 A B@2 C ~@26>".pickRestart({
  A: "~ x!11", B: "x!12", C: "x!6 ~@6",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 [~@11 x] ~@3 [~@11 x] ~@22>").gain(0.42)

// drums · open hat
const open_hat = s("oh").struct("<~@33 [~ x] ~@11 [~@11 x] ~@7 [~@11 x] ~@6>").gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@25 A ~@7 A ~@3 A ~@3 B ~@18>".pickRestart({
  A: "~@5 x", B: "~@7 x!5",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@25 A ~@8 A ~@3 A ~ B C A ~@7 A ~@4 D E ~@3>".pickRestart({
  A: "x", B: "x!2", C: "x!3 ~", D: "x ~@6 x ~@4", E: "~@5 x ~@6",
})).gain(0.42)

// drums · ride
const ride = s("rd").struct(`<
  ~@2 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 B A ~@3 A ~@3 C D@2 E F D G H F D@2 I D@4 F D@2 I D ~@5
>`.pickRestart({
  A: "x", B: "~ x!9 ~@2", C: "~@2 x!10", D: "x!12", E: "x!9 ~@3", F: "~ x!11", G: "~ x!5 ~ x!5", H: "~ x!2 ~ x!2 ~@6",
  I: "x!11 ~",
})).gain(0.42)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 [~ x ~ x]!53 ~@5>").gain(0.54)

stack(
  piano, bass, vibraphone, string_ensemble_1, french_horn, electric_guitar_jazz, kick, rim, snare, hihat, mid_tom,
  open_hat, high_tom, crash, ride, tambourine
)