Strudelify

Walkin' the Dog

Rufus Thomas

KeyE♭ majorTempo118 bpm
0:00/0:00
// Walkin' the Dog — Rufus Thomas
// 118 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 "OVERDRIVE" overdriven guitar (copy of ch 1 "JAZZ GTR" electric guitar jazz)
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(118/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.

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  A B C D E@2 F G H I J ~ K L M N O P Q R S T U@2 V W X ~ Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AC
  AS AT@2 AU@2 AV AW AX AY AZ BA BB BC BD AU@3 BE BF BG AU@3 ~
>`.pickRestart({
  A: "eb5@7 ~ d5@5 ~ bb4@2", B: "c5@4 bb4@3 ~ ab4@4 f4@3 ~", C: "eb4@4 d4@3 ~ g4@4 f4@4, ~@7 eb4@2 ~@7",
  D: "eb4@2 ~@2 [gb3,g3,ab3] [a3,bb3] [bb3,db4]@4 [bb3,db4] ~ eb3 f3 [eb3,ab3]@2", // Bbmaj7 Bbm Ab5
  E: "[[eb3,ab3] ~@3 [ab3,a3] ~ db4@4 db4 ~ eb3 f3 ~@2 eb3 ~@3 [ab3,a3] ~ db4@4 db4 ~@2 f3 [eb3,ab3]@2, ~@5 bb3@6 ~@3 ab3@4 ~@3 bb3@6 ~ [eb3,ab3]@2 ~@2]/2", // Ab5 Amaj7 Ab5
  F: "eb3 ~@3 [ab3,a3] bb3 [bb3,db4]@4 db4 ~ eb3 f3 ab3@2", // Amaj7 Bbm
  G: "eb3 ~@3 [ab3,a3] bb3 [bb3,db4]@4 db4 ~ eb3 ~ ab3@2, ~@13 f3@2 ~", // Amaj7 Bbm
  H: "eb3 ~@3 [ab3,a3] ~ db4@4 db4 ~ eb3 f3 [eb3,ab3]@2, ~@5 bb3@6 ~@5", // Amaj7 Ab5
  I: "[eb3,ab3] ~@3 ab3 a3 db4@4 db4 ~ eb3 f3 ab3@2, ~@5 bb3@6 ~@5", J: "eb3 ~@15",
  K: "~@4 [db4,d4] ~ gb4@4 gb4@2 ab3 bb3 db4@2, ~@5 eb4@7 ~@4", // Dmaj7
  L: "ab3@2 ~@2 [db4,d4] ~ gb4@4 gb4@2 eb3 f3 ab3@2, ~@5 eb4@7 ~@4", // Dmaj7
  M: "eb3@2 ~@2 [g3,ab3] a3 db4@4 db4 ~ eb3 gb3 ab3@2, ~@5 bb3@6 ~@5", // Abmaj7
  N: "eb3@2 ~@2 [ab3,a3] ~ db4@4 db4@2 bb3@2 ~@2, ~@5 bb3@7 ~@4", // Amaj7
  O: "~@2 [bb3,d4,ab4] [a3,db4,g4] [bb3,d4,ab4] [a3,db4,g4] [bb3,d4,ab4] ~", // Bb7 A7 Bb7 A7 Bb7
  P: "[ab3,c4,gb4]@2 [c4,gb4]@4 [c4,gb4]@9 ~, ~@2 ab3@13 ~", // Ab7 Cdim
  Q: "ab3 bb3 db4@2 ab3 bb3 db4 ab3 bb3 db4 ab3 bb3 db4@2 db4 ~",
  R: "ab3 bb3 db4 ~ ab3 bb3 db4 ab3 bb3 db4 ab3 bb3 db4@2 db4@2", S: "~@6 bb3@4 db4 ~ gb3 ~ ab3@2, ~@6 a3 ~@9",
  T: "eb3 ~@5 bb3@4 db4@2 gb3@2 ab3@2, ~@6 a3 ~@9", U: "eb3 ~@5 bb3@4 db4 ~ gb3@2 ab3@2, ~@6 a3 ~@9",
  V: "eb3 ~@5 bb3@3 ~ db4 ~ gb3@2 ab3@2, ~@6 a3 ~@9", W: "eb3@2 ~@4 a3 bb3@3 db4 ~ gb3@2 ab3@2", X: "eb3 ~@7",
  Y: "~@6 eb4@3 ~ gb4@2 ab3 bb3 db4 ~, ~@6 d4 ~@9", Z: "ab3 ~@5 d4 eb4@3 gb4@2 eb3 f3 ab3 ~",
  AA: "eb3@2 ~@4 a3 bb3 db4@2 db4 ~ ab3@2 bb3@2", AB: "eb3 ~@3 a4 ~ a3 bb3 db4@2 db4 ~ ab3@2 a3@2",
  AC: "bb3 ~@3 [bb3,d4,ab4]@2 [a3,db4,g4]@2 [bb3,d4,ab4]@2 [a3,db4,g4]@2 [bb3,d4,ab4]@2 ~@2", // Bb7 A7 Bb7 A7 Bb7
  AD: "[c4,gb4]@2 [c4,gb4]@4 [ab3,c4,gb4]@7 ~@3, ab3@3 ~@5", // Cdim Ab7
  AE: "a3 bb3 db4 ~ db4 ~ a3 bb3 db4 ~ bb3 db4 eb4 db4 bb3 ab3",
  AF: "a3 bb3 db4 ~ db4 ~ a3 bb3 db4 ~ db4 eb4@2 db4 bb3 ab3", AG: "~@6 bb3@3 ~ db4 ~ gb3 ~ f3@2, ~@6 a3 ~@9",
  AH: "eb3 ~@5 bb3@3 ~ db4 ~ gb3@2 f3 ~, ~@6 a3 ~@9", AI: "eb3 ~@5 bb3@4 db4 ~ gb3@2 f3 ~, ~@6 a3 ~@9",
  AJ: "eb3 ~@5 bb3@4 db4 ~ gb3 ~ f3@2, ~@6 a3 ~@9", AK: "eb3 ~@5 bb3@3 ~ db4 ~ gb3 ~ f3@2, ~@6 a3 ~@9",
  AL: "eb3 ~@5 bb3@3 ~ db4 ~ gb3 ~ f3 ~, ~@6 a3 ~@9", AM: "eb3 ~@3 eb4 ~ eb4 ~ f4@3 ~ eb4@2 gb4@2",
  AN: "ab4@4 [bb4,eb5]@4 ab4@3 ab4@2 gb4 eb4 ~", AO: "~@6 eb4@4 eb4 ~ [ab3,bb3] ~ bb3@2, ~@6 d4 ~@9",
  AP: "ab3@2 ~@4 eb4@3 ~ eb4@2 eb3 f3 ab3@2, ~@6 d4 ~@9", AQ: "eb3@2 ~@4 bb3@3 ~ db4 ~ ab3 ~ bb3 ~, ~@6 a3 ~@9",
  AR: "eb3 ~@5 bb3@3 ~ db4 ~ ab3 ~ a3 ~, ~@6 a3 ~@9", AS: "[ab3,c4,gb4] [ab3,c4,gb4]@2 [ab3,c4,gb4]@4 ~",
  AT: "[ab3 bb3 db4@2 ab3 bb3 db4!2 ab3 bb3 ~ ab3 bb3 ~ ab3 ~@2 ab3 bb3 ~ ab3 bb3 ~ ab3 bb3 ~ ab3 bb3 db4 ~ db4@2, ~@10 db4@3 db4@2 bb3@2 ~@12 bb3@2 ~, ~@16 db4@3 db4@3 db4@3 db4@2 ~@5]/2",
  AU: "eb3 ~@5 bb3@3 ~ db4@2 f3@2 e3@2, ~@6 a3 ~@9", AV: "eb3@2 ~@4 bb3@3 ~ db4@2 f3@2 e3@2, ~@6 a3 ~@9",
  AW: "eb3 ~@5 bb3@3 ~ db4@2 f3@2 f3 ~, ~@6 a3 ~@9", AX: "ab2@2 ~@4 d3 eb3@3 gb3 ~ bb2@2 a2@2",
  AY: "ab2@2 ~@4 eb3@3 ~ gb3 ~ db3@2 d3@2, ~@6 d3 ~@9", AZ: "eb3@2 ~@4 bb3@3 ~ db4@2 f3 ~ e3@2, ~@6 a3 ~@9",
  BA: "eb3@2 ~@4 a3 bb3@3 db4@2 f3@2 f3@2", BB: "bb2@2 ~@4 f3@3 ~ ab3@2 c3@2 bb2 ~, ~@6 e3 ~@9",
  BC: "ab2@2 ~@4 eb3@3 ~ gb3@2 eb3@2 ~@2, ~@6 d3 ~@9", BD: "eb3@2 ~@4 bb3@3 ~ db4 ~ f3@2 e3@2, ~@6 a3 ~@9",
  BE: "eb3 ~@5 a3 bb3@3 db4@2 f3 ~ e3@2", BF: "eb3 ~@5 bb3@3 ~ db4@2 f3 ~ e3@2, ~@6 a3 ~@9",
  BG: "eb3 ~@5 bb3@4 db4@2 f3@2 e3@2, ~@6 a3 ~@9",
})).s("gm_electric_guitar_jazz").gain(0.25).pan(0.4)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E@5 F G ~ H I E@2 J I E K E@6 G ~ H I E@2 L I E K F E@5 G ~ H I E@2 M I E K N@2 O P Q R N S T U N@10 D
>`.pickRestart({
  A: "eb2@7 ~ eb2@6 ~ eb2", B: "eb2@3 ~ eb2@3 ~ eb2@3 ~ eb2@3 ~", C: "eb2@3 ~ eb2@2 ~ eb2 eb2@3 ~ eb2@3 ~",
  D: "eb2 ~@15", E: "eb2 ~@2 g2@3 bb2 ~", F: "eb2@2 ~@4 g2@6 bb2@3 ~", G: "eb2 ~@7", H: "ab1 ~@2 c2@3 eb2 c2",
  I: "ab1 ~@2 c2@3 eb2 ~", J: "bb2 ~@2 d2@3 f2 bb1", K: "eb2 bb1 db2 d2", L: "bb1 ~@2 d2@3 f2 bb1",
  M: "bb1 ~@2 d2@3 f2 ~", N: "eb2 ~@2 bb2 ab2 g2 f2 e2", O: "eb2 ~@5 bb2@2 ab2@2 g2@2 f2@2 e2@2",
  P: "eb2@2 ~@4 bb2@2 ab2@2 g2@2 f2 ~ f2@2", Q: "ab1@3 ~@3 eb2@2 db2@2 c2@2 bb1@2 a1@2", R: "ab1 ~@2 eb2 db2 c2 db2 d2",
  S: "eb2 ~@2 bb2 ab2 g2 f2!2", T: "bb1 ~@2 f2 eb2 d2 c2 bb1", U: "ab1 ~@2 eb2 db2 c2 bb1 d2",
})).s("gm_acoustic_bass").gain(0.44)

// other · baritone sax · "BARITONSAX"
const baritone_sax = note(`<
  A B C D ~@7 E F G H D I J D ~ K@6 L E F G H D I J D ~@8 E F G H D I J D ~ M@8 I J D ~ M N@7 ~
>`.pickRestart({
  A: "eb3@8 d3@3 ~@4 bb2", B: "c3@2 bb2 ~ ab2@2 f2 ~", C: "eb2@4 d2@3 eb2 g2@4 f2@4", D: "eb2 ~@7", E: "~@3 bb2",
  F: "ab2 ~@5 bb2@2", G: "ab2 ~@5 f2@2", H: "eb2 ~@5 f2@2", I: "bb2@15 ~", J: "ab2",
  K: "~@3 bb2 eb3!2 ~@2 bb2@2 ab2@2 gb2 ~@3", L: "eb2 ~@15", M: "~@8 gb2@2 f2@2 eb2 ~@3", N: "~@4 gb2 f2 eb2 ~",
})).s("gm_baritone_sax").gain(0.38).pan(0.3)

// other · trumpet
const trumpet = note("<A B C D ~@8 E@2 F@2 G H ~@2 I@6 ~@2 J@4 K L ~@10 J@4 K L ~@2 M@8 K N ~@2 M@8 ~>".pickRestart({
  A: "eb5@8 d5@4 ~@2 bb4 ~", B: "c5@4 bb4@3 ~ ab4@4 f4@3 ~", C: "eb4@4 d4@2 ~ eb4 g4@4 f4@4", D: "eb4 ~@7",
  E: "~@4 c5 ~@2 c5 ~@2 c5 ~@5", F: "~@4 bb4 ~@2 bb4 ~@2 bb4 ~@5", G: "bb4", H: "ab4",
  I: "~@4 eb5!2 ~@2 bb4@2 ab4@2 gb4 ~@3", J: "~@4 eb5 ~@2 eb5 ~@2 eb5 ~@5", K: "f5", L: "eb5",
  M: "~@2 eb5!2 ~ eb5!2 ~@9", N: "eb5@7 ~",
})).s("gm_trumpet").gain(0.38).pan(0.6)

// other · alto sax
const alto_sax = note(`<
  A B C D ~@8 E@2 F@2 G H ~@2 I@6 ~@2 E@2 F@2 G H D J K L M N O P Q ~ E@2 F@2 G H D ~ R@8 S T ~@2 R@8 ~
>`.pickRestart({
  A: "eb4@8 d4@5 ~@2 bb3", B: "c4@4 bb3@3 ~ ab3@4 f3@3 ~", C: "eb3@4 d3@3 eb3 g3@4 f3@4", D: "eb3 ~@7",
  E: "~@4 ab3 ~@2 ab3 ~@2 ab3 ~@5", F: "~@4 eb4 ~@2 eb4 ~@2 eb4 ~@5", G: "bb3", H: "ab3",
  I: "~@4 eb4!2 ~@2 bb3@2 ab3@2 gb3 ~@3", J: "~@12 ab4@2 g4 ~", K: "ab4@2 g4 ~ ab4@2 g4 ~ ab4@2 g4 ~ ab4@2 g4 ~",
  L: "ab4@2 g4 ~ ab4@2 g4 ~ ab4@2 c5 ~ eb5@2 db5 ~", M: "ab4@2 g4 ~ eb4@2 db4@2 eb4@3 ~ f4 gb4@2 ~",
  N: "~@2 eb4 ~ eb4@2 db4 ~ eb4@3 ~ g4@2 eb4 ~, ~@12 gb4 ~@3", O: "g4@2 ab4@2 eb4 ~ gb4@2 f4@2 eb4 ~ eb4@2 db4 ~",
  P: "eb4@2 g4@2 eb4@2 db4@2 eb4@2 ~@2 [f4,gb4] g4@2 [f4,gb4], ~@6 d4 ~ d4 ~@7", Q: "eb4 ~@7",
  R: "~@2 eb4!2 ~ eb4!2 ~@9", S: "bb4", T: "ab4@15 ~",
})).s("gm_alto_sax").gain(0.38).pan(0.7)

// other · trombone
const trombone = note(`<
  A B C D ~@8 E@4 F G ~@2 H@6 ~@2 I@2 J@2 K L D ~@9 I@2 J@2 K L D ~ M@8 N O ~@2 P M@7 ~
>`.pickRestart({
  A: "eb4@8 d4@4 ~@2 bb3 ~", B: "c4@4 bb3@3 ~ ab3@3 ~ f3@3 ~", C: "eb3@4 d3@2 ~ eb3 g3@4 f3@4", D: "eb3 ~@7",
  E: "~@4 eb4 ~@2 eb4 ~@2 eb4 ~@5", F: "f4", G: "eb4", H: "~@4 eb3!2 ~@2 bb2@2 ab2@2 gb2 ~@3",
  I: "~@4 c4 ~@2 c4 ~@2 c4 ~@5", J: "~@4 bb3 ~@2 bb3 ~@2 bb3 ~@5", K: "ab3", L: "gb3", M: "~@2 eb4!2 ~ eb4!2 ~@9",
  N: "bb3", O: "ab3@15 ~", P: "~@2 eb4!2 ~ eb4 ~@10",
})).s("gm_trombone").gain(0.38).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@3 A B@6 A ~ B@14 A ~ B@14 A ~ B@7 C B@11 D B@8 A>".pickRestart({
  A: "x", B: "x ~@3 x!2 ~ x", C: "x ~@4 x ~ x", D: "x!2",
})).gain(0.44)

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@4 A@7 B A@15 B A@15 B A@28 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.27)

// drums · mid tom
const mid_tom = s("mt").struct("<~@11 A ~@15 A ~@15 A ~@27 A ~>".pickRestart({
  A: "~@12 x!4",
})).gain(0.38)

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

// drums · high tom
const high_tom = s("ht").struct("<~@11 A ~@15 A ~@15 A ~@27 A ~>".pickRestart({
  A: "~@8 x!4 ~@4",
})).gain(0.38)

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

stack(
  electric_guitar_jazz, bass, baritone_sax, trumpet, alto_sax, trombone, kick, snare, pedal_hat, mid_tom, open_hat,
  high_tom, ride
)

More by Rufus Thomas