Strudelify
Digging in the Dirt cover art

1992 · Us

Digging in the Dirt

Peter Gabriel

KeyE♭ minorTempo163 bpm
0:00/0:00
// Digging in the Dirt — Peter Gabriel
// 163 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 207 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(163/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, A@4 for four bars: edit a riff to change every repeat.

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  A B@2 ~@31 C@2 D ~ C@2 E@2 F@4 G@2 H@2 I J K L I J M N I O P Q I R P Q ~@20 S@2 ~ T@2 U V W X@2 ~@10 C@2 D ~ C@2 E@2
  F@4 G@2 H@2 I J K L I J M N I O P Q I R Y Q ~@39 Z@2 AA AB ~@26
>`.pickRestart({
  A: "~@8 db4 ~ eb4@6", B: "[~@4 eb3@21 ~@7, db4@3 bb3@2 ~@27, ~ eb4@2 eb4@21 ~@8, ~ ab3 ~@14]/2",
  C: "[[eb1,eb2,eb3,bb3,eb4]@19 ~@13]/2", D: "[eb1,eb2,eb3,bb3,eb4]", E: "[[eb1,eb2,eb3,bb3,eb4]@21 ~@11]/2",
  F: "[[eb1,eb2,eb3,bb3,eb4]@21 ~@10 [eb1,eb2,eb3,bb3,eb4]@20 ~@13]/4", G: "[[eb1,eb2,eb3,bb3,eb4]@11 ~@5]/2",
  H: "[[eb1,eb2,eb3,bb3,eb4]@7 ~]/2", I: "~@8 [bb4,eb5,gb5] ~@5 [bb4,db5,gb5]@2",
  J: "~@2 [bb4,db5,gb5] ~ [bb4,eb5,gb5] ~@7 [bb4,db5,gb5]@2 [bb4,eb5]@2", // Gb Ebm Gb Eb5
  K: "~ bb4 ~@2 [gb4,c5] ~@3 [gb4,c5]@4 ~@2 [gb4,bb4,db5] ~", L: "~@2 [gb4,bb4,db5] ~ [gb4,bb4,db5] ~@11",
  M: "~@4 [gb4,c5] ~@3 [gb4,c5]@3 ~ gb4 ~ [gb4,bb4,db5] ~", // Gbdim Gb
  N: "~@2 [gb4,bb4,db5] ~ [gb4,db5] ~@7 [gb4,c5]@2 [bb4,db5]@2", // Gb Gb5 Gbdim Bbm
  O: "~@2 [bb4,db5,gb5] ~ [bb4,eb5,gb5] ~@7 [bb4,gb5]@2 eb5 ~, ~@12 db5 ~@3", // Gb Ebm
  P: "~@4 [gb4,bb4,c5] ~@3 [gb4,bb4,c5]@3 ~ gb4 ~ [gb4,bb4,db5] ~", // Cm7b5 Gb
  Q: "~@2 [gb4,bb4,db5] ~ [gb4,bb4,c5] ~@7 [gb4,bb4,db5] ~@3", // Gb Cm7b5 Gb
  R: "~@2 [bb4,db5,gb5] ~ [bb4,d5,eb5,gb5] ~@7 [bb4,gb5]@2 [bb4,eb5] ~, ~@12 db5 ~@3", S: "[eb4@12 ~ eb4 bb4 eb5]/2",
  T: "[~@16 eb5@2 [bb4,eb5]@2 ~@2 [bb4,eb5]@2 [bb4,db5] ~ [bb4,db5]@2 ~@2 [bb4,db5] ~, ~@13 eb4@5 ~@14, ~@7 bb4 ~@8, ~@15 db5@2 ~@15]/2", // Eb5 Bbm
  U: "bb4 ~ bb4@2 ~@2 bb4 ~ ab4 ~ ab4 ~@3 ab4 ~", V: "gb4 ~ gb4 ~@3 gb4 ~ eb4 ~ eb4@2 ~@2 eb4@2",
  W: "db4 ~ db4 ~@3 db4 ~ bb3 ~ bb3 ~@3 ab3 ~", X: "[~ eb1@31, eb2]/2",
  Y: "~@4 [gb4,bb4,c5] ~@3 [gb4,bb4,c5]@3 gb4 ~@2 [gb4,bb4,db5] ~", Z: "[eb4@30 ~ eb4]/2",
  AA: "~@8 eb5@2 db5 ~@3 [eb4,db5] ~, ~@6 eb4@5 ~@5", // Eb7
  AB: "~@2 eb4@2 [eb4,bb4,db5] ~@3 [eb4,bb4,db5] ~@3 [eb4,db5]@2 [eb4,bb4,eb5] ~", // Eb7 Eb5
})).s("gm_overdriven_guitar").gain(0.32)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@2 A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B C A@2 B D A@2 B ~ A@2 B ~ E F G H E I G H E
  I G H E F G H J K L M J K L N O P L N J Q R N A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B C A@2 B D A@2 B ~
  A@2 B ~ E F G H E I G H E I G H E F S@2 J T L M J K L N O P L N J Q R J T L M J T L M J K L N O P L N J Q R N A@2 B ~
  A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~@3
>`.pickRestart({
  A: "eb1/2", B: "e1@4 eb1@3 ~@9", C: "~@11 eb2@5", D: "~@2 eb2@2 eb2@2 eb2@2 eb2 ~ eb2@2 eb2@2 bb1@2",
  E: "eb1@4 eb1@3 ~@9", F: "~@6 eb1 eb2", G: "c2@3 ~ c2@2 ~@8 c2@2", H: "db2@3 ~ db2@2 ~@6 eb2@4",
  I: "~@2 eb1 ~@3 eb1 eb2", J: "ab1@3 ~ ab1@3 ~@7 ab1@2", K: "~@2 ab1 ~ ab1@2 ~@6 ab1@3 ~",
  L: "c2@4 c2@3 ~@5 c2@2 db2@2", M: "~ db2!2 ~@3 c2 db2", N: "~ db2 c2 ~@3 c2 db2", O: "ab1@3 ~ ab1@2 ~@8 ab1@2",
  P: "~@2 ab1@2 ab1@2 ~@6 ab1@2 ab1 ~", Q: "~@2 ab1 ab1@2 ~@7 ab1@2 db2@2", R: "c2@3 ~ c2@2 ~@8 db2@2",
  S: "[c2@3 ~ c2@2 ~@7 c2@2 db2@4 ~ db2@2 ~@6 eb2@4]/2", T: "~ ab1 ~ ab1@2 ~@7 ab1@4",
})).s("gm_fretless_bass").gain(0.71)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@2 A@2 B@2 C@2 B@2 D@2 B@2 D@2 E@2 F@2 G@2 F@2 H@2 F@2 I@2 F@2 J@2 ~@9 K L M N O P Q ~@16 R@2 S@2 T@2 U@2 V@2 W@2 X@2
  S@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 F@2 I@2 F@2 J@2 ~@9 Y Z AA@2 AB AC Q ~@16 R@2 S@2 T@2 U@2 V@2 W@2 X@2 AD@3 S@2
  AE@2 S@2 T@2 U@2 V@2 W@2 X@2 S@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 AF@2
>`.pickRestart({
  A: "[~@14 db4@2 eb4@2 gb4@2 eb4@2 ~@6 gb3@2 ab3 ~, [eb2,eb3]@3 ~]/2", // Eb
  B: "[~@14 db4@2 eb4@2 gb4@2 eb4 ~@7 gb3@3 ~, eb3@3 ~, ~ eb2@5 ~@2]/2",
  C: "[~@14 db4@2 [db4,eb4]@2 gb4@2 eb4 ~@7 gb3@2 ab3 ~, eb3@3 ~, ~ eb2@5 ~@2]/2", // Dbsus2
  D: "[~@14 db4@2 eb4@2 gb4@2 eb4@2 ~@6 gb3@2 ab3 ~, eb3@3 ~, ~ eb2@5 ~@2]/2",
  E: "[~@14 db4@2 ~ eb4@2 gb4@2 eb4 ~@6 gb3@3 ~, eb3@3 ~, ~ eb2@5 ~@2]/2",
  F: "[~@8 [db4,bb4]@2 [db4,gb4] ~@3 [eb4,ab4] ~@3 [eb4,ab4] ~ [eb4,gb4] ~@7 gb3@2 ab3 ~, eb3@3 ~, ~ eb2@5 ~@2]/2", // Gb Gb5 Ab5 Ebm
  G: "[~@9 db4@2 [db4,gb4] ~@2 [eb4,ab4] ~@3 [eb4,ab4] ~ [eb4,gb4] ~@7 gb3@3 ~, eb3@3 ~, ~ eb2@5 ~@2, ~@4 bb4 ~@11]/2", // Gb5 Ab5 Ebm
  H: "[~@8 [db4,bb4]@2 gb4 db4 ~@2 [eb4,ab4] ~@3 [eb4,ab4] ~ [eb4,gb4] ~@7 gb3@3 ~, eb3@3 ~, ~ eb2@5 ~@2]/2", // Gb Ab5 Ebm
  I: "[~@8 [db4,bb4]@2 gb4 db4 ~@2 [eb4,ab4] ~@3 [eb4,ab4] ~ [eb4,gb4] ~@7 gb3@2 ab3 ~, eb3@3 ~, ~ eb2@5 ~@2]/2", // Gb Ab5 Ebm
  J: "[~@8 [db4,bb4]@2 [db4,gb4] ~@3 [eb4,ab4] ~@3 [eb4,ab4] ~ [eb4,gb4] ~@11, eb3@27 ~@5, ~@4 eb2@23 ~@5]/2", // Gb Gb5 Ab5 Ebm
  K: "~ [gb4,db5,gb5] ~ [gb4,db5,gb5] ~@2 [gb4,db5,gb5] ~ [gb4,db5,f5] ~@2 [gb4,db5,f5] ~@2 f5 gb4", // Gb5 Gbmaj7
  L: "~ [gb4,db5,eb5] ~ [gb4,db5,eb5] ~@2 eb5 [gb4,db5] ~ db5 ~ [gb4,db5] ~@2 [gb4,db5] ~, ~@4 gb4 ~@3", // Ebm7 Gb5
  M: "[gb4,bb4,db5] ~ [gb4,bb4,db5] ~@3 [gb4,bb4,db5] ~ [gb4,ab4,db5] ~ [gb4,ab4,db5] ~@3 [gb4,ab4,db5] ~", // Gb Gbsus2
  N: "[gb4,bb4,eb5] ~ [gb4,bb4,eb5] ~@3 [gb4,bb4,eb5] ~ gb4 [bb4,eb5] ~ [gb4,bb4,eb5] ~@3 [gb4,bb4,eb5]", // Ebm Eb5 Ebm
  O: "~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~@2 [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4] db5 ~@2 [gb4,bb4,db5] ~", // Gb
  P: "[gb4,bb4] ~ [gb4,bb4] ~@3 [gb4,bb4] ~ gb4 bb4 gb4 bb4 ~@2 [gb4,bb4] ~", // Gb
  Q: "[db4,gb4,bb4] ~ [db4,gb4,bb4] ~@3 [db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~@5", // Gb
  R: "[c4 [ab3,db4]@10 ~ c4@4]/2", S: "[c4@2 [ab3,db4]@19 ~@11]/2", T: "[c4@2 [ab3,db4]@19 ~@3 c4@5 ~@3]/2",
  U: "[c4@2 [ab3,db4]@12 [ab3,db4]@13 ~ c4@2 [ab3,db4]@2]/2", V: "[c4@2 [ab3,db4]@19 ~@3 c4@8]/2",
  W: "[c4@2 [ab3,db4]@17 ~@9 c4@2 db4 ~]/2", X: "[c4@2 [ab3,db4]@19 ~@7 c4@4]/2",
  Y: "[gb4,db5,gb5] ~@2 [gb4,db5] ~ [gb4,gb5] db5 ~ [gb4,db5,f5] ~@2 [gb4,db5,f5] ~@2 [gb4,f5] ~, ~ gb5 ~@6", // Gb5 Gb Gbmaj7
  Z: "[gb4,db5,eb5] ~ gb4 [db5,eb5] ~@2 [gb4,db5,eb5] ~ [gb4,db5]@2 [gb4,db5] ~@3 [gb4,db5] [gb4,bb4]", // Ebm7 Dbsus2 Ebm7 Gb5 Gb
  AA: "[db5 gb4 [bb4,db5] ~@2 [gb4,bb4,db5] ~ [gb4,ab4,db5] ~@2 [gb4,ab4,db5] ~@3 [gb4,ab4,db5] ~ [gb4,bb4] ~ [gb4,bb4,eb5] ~@3 [gb4,bb4,eb5] ~ [gb4,bb4,eb5] ~ [gb4,eb5] bb4 ~@2 [gb4,bb4,eb5] ~, ~@15 eb5@2 ~@15]/2", // Bbm Gb Gbsus2 Gb Ebm
  AB: "[gb4,bb4,db5] ~ [gb4,bb4,db5] ~@3 [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~@2 gb4 [bb4,db5] [gb4,bb4]", // Gb Bbm Gb
  AC: "~@2 [gb4,bb4] ~@3 [gb4,bb4] ~ [gb4,bb4] ~ [gb4,bb4] ~@3 [gb4,bb4] ~", // Gb
  AD: "[c4@2 ~@14 c4@2 [ab3,db4]@17 ~@5 c4@8, ~@2 [ab3,db4]@19 ~@27]/3", // Db5
  AE: "[c4 ~ db4@21 ~ c4@8, ~ c4@2 ~@29, ~@2 ab3@19 ~@11]/2", AF: "[eb3@3 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.32)

// drums · kick
const kick = s("bd").struct("<~@2 [x!8]!202 [x!7 ~] ~@2>").gain(0.32)

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

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@6 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A@2 B A B A B A B A B A B A B A B A B A@3 B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B ~@2
>`.pickRestart({
  A: "x ~ x ~ x!3 ~", B: "x!2",
})).gain(0.32)

// drums · ride
const ride = s("rd").struct(`<
  ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~ x ~ x",
})).gain(0.32)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@2 [x!4]!203 ~@2>").gain(0.46)

stack(overdriven_guitar, bass, electric_guitar_clean, kick, snare, pedal_hat, ride, woodblocks)

More by Peter Gabriel