Strudelify
Sledgehammer cover art

So

Sledgehammer

Peter Gabriel

KeyE♭ minorTempo98 bpm
0:00/0:00
// Sledgehammer — Peter Gabriel
// 98 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · electric guitar muted · "Electric Guitar (muted)"
const electric_guitar_muted = note(`<
  ~@7 A@8 B@3 C B@8 ~@2 B D B@8 E F E F E F E F B@3 G B@8 E F E F E F E F E F E F E F E F H@6 I J H@2 I J K L I M H N I
  J K L I M H N I J H N I J H N I J H N I J H N I O P Q ~@6
>`.pickRestart({
  A: "~@2 eb3!2 ~@2 eb3!2 ~@2 eb3!2 ~@2 eb3!2", B: "~@2 eb3 ~ db3 ~ eb3 ~@3 eb3 db3 ~ db3!2 eb3",
  C: "eb4 ~ [eb3,db4] ~ [db3,eb4] ~ [eb3,db4] ~ eb4 ~ eb3 db3 ~ db3!2 eb3", D: "~@2 eb3 ~ db3 ~ eb3 ~ eb3 ~@7",
  E: "c3 ~ c3 ~ db3 ~ c3 ~ db3 ~ c3 db3 ~ db3 c3 ~", F: "f3!2 eb3 ~ f3 ~ eb3 ~ f3 ~ eb3 ~ f3 ~@3",
  G: "eb4 ~ [eb3,db4] ~ [db3,eb4] ~ [eb3,db4] ~ [eb3,eb4] ~@7", // Eb7 Dbsus2 Eb7 Eb
  H: "~@2 [eb3,bb3,gb4]!2 ~@2 [eb3,bb3,gb4]!2 ~@2 [eb3,bb3,gb4]!2 ~@2 [eb3,bb3,gb4]!2", // Ebm
  I: "~@2 [b2,gb3,eb4]!2 ~@2 [b2,gb3,eb4]!2 ~@2 [b2,gb3,eb4]!2 ~@2 [b2,gb3,eb4]!2", // B
  J: "~@2 [eb3,ab3,f4]!2 ~@2 [eb3,ab3,f4]!2 ~@2 [eb3,ab3,f4]!2 ~@2 [eb3,ab3,f4]!2", // Fm7
  K: "~@2 eb3!2 ~@2 eb3!2 ~@2 eb3!2 ~@2 [eb3,eb4]!2", L: "~@2 eb3!2 ~@2 eb3!2 ~@2 [eb3,eb4]!2 eb4!2 [eb3,eb4]!2",
  M: "~@2 [eb3,ab3,f4]!2 ~@2 [eb3,ab3,f4]!2 ~@2 [eb3,ab3,eb4,f4]!2 eb4!2 [eb3,ab3,eb4,f4]!2", // Fm7
  N: "~@2 [eb3,bb3,gb4]!2 ~@2 [eb3,bb3,gb4]!2 ~@2 [eb3,bb3,eb4,gb4]!2 ~@2 [eb3,bb3,gb4]!2", // Ebm
  O: "~@2 [eb3,ab3,f4] [eb3,ab3] ~@2 [eb3,ab3,f4] [eb3,ab3] ~@2 [eb3,ab3,f4] [eb3,ab3] ~@2 [eb3,ab3,f4] [eb3,ab3]", // Fm7 Ab5 Fm7 Ab5 Fm7 Ab5 Fm7 Ab5
  P: "~@2 [eb3,bb3,gb4] [eb3,bb3] ~@2 [eb3,bb3,gb4] [eb3,bb3] ~@2 [eb3,bb3,gb4] bb3 ~@2 [eb3,bb3,gb4] bb3", // Ebm Eb5 Ebm Eb5 Ebm
  Q: "~@2 [eb3,bb3,gb4] bb3 ~@2 [eb3,bb3,gb4] bb3 ~@2 [eb3,bb3,eb4,gb4] [bb3,eb4] ~@2 [eb3,bb3,gb4] bb3", // Ebm Eb5 Ebm
})).s("gm_electric_guitar_muted").gain(0.27)

// chords · electric guitar muted · "Electric Guitar (muted)" · soft notes
const electric_guitar_muted_2 = note("<~@118 A B C D E F G D H>".pickRestart({
  A: "~@3 f4 ~@3 f4 ~@3 f4 ~@3 f4", B: "~@3 gb4 ~@3 gb4 ~@3 [eb3,gb4] ~@3 [eb3,gb4]",
  C: "~@3 [eb3,gb4] ~@3 [eb3,gb4] ~@3 [eb3,gb4] ~@3 [eb3,gb4]", // Ebm
  D: "~@2 [b2,gb3,eb4]!2 ~@2 [b2,gb3,eb4]!2 ~@2 [b2,gb3,eb4]!2 ~@2 [b2,gb3,eb4]!2", // B
  E: "~@2 [eb3,ab3,f4]!2 ~@2 [eb3,ab3,f4]!2 ~@2 [eb3,ab3,f4]!2 ~@2 [eb3,ab3,f4]!2", // Fm7
  F: "~@2 [eb3,bb3,gb4]!2 ~@2 [eb3,bb3,gb4]!2 ~@2 [eb3,bb3,gb4]!2 ~@2 [eb3,bb3,gb4]!2", // Ebm
  G: "~@2 [eb3,bb3,gb4]!2 ~@2 [eb3,bb3,gb4]!2 ~@2 [eb3,bb3,eb4,gb4]!2 ~@2 [eb3,bb3,gb4]!2", // Ebm
  H: "~@2 [eb3,ab3,f4]!2 ~@2 [eb3,ab3,f4]!2 ~@2 [eb3,ab3,f4]!2 ~@2 [eb3,ab3,f4] ~", // Fm7
})).s("gm_electric_guitar_muted").gain(0.09)

// bass · acoustic bass
const bass = note(`<
  ~@7 A B A B C D E F G H I J I H I K I H I L M@2 N O I H I K I H I P Q R Q R Q R Q S I H T U I H I K I H I L Q R Q R Q
  R Q S Q R Q R Q R Q S V W V W X Y Z AA X Y Z AA X Y Z AA X Y Z AA X Y Z AA X Y Z AA X Y Z AB X Y Z AB X Y Z AB X Y Z
  AB X Y AC ~@5
>`.pickRestart({
  A: "eb2@2 ~@5 db2", B: "eb2 ~@7", C: "b1 ~@3", D: "bb1@4 ~@10 ab1 bb1", E: "ab1@7 eb1", F: "ab1",
  G: "eb1@3 eb1 g1@2 bb1@2 c2 ~@7", H: "eb1!3 ~ g1 ~ bb1@2 db2@4 c2@2 bb1@2", I: "eb1@3 eb1 g1@2 bb1@2 eb2@2 ~@6",
  J: "eb2!3 ~ eb2 f2@3 eb2@4 bb1 c2 bb1@2", K: "eb1!3 ~ g1 bb1@3 g2 eb2 c2@2 db2@4",
  L: "eb1!3 ~ g1@2 bb1@2 eb2@4 ~ eb2 c2@2, ~@6 f2 ~", M: "c2@2 ~ c2 c2@2 ~@2", N: "eb2@2 ~ db2 eb2 db2 ~ db2",
  O: "eb2@2 ~ db2 eb2 ~@3", P: "eb1!3 ~ g1@2 bb1@2 eb2@2 eb2@2 ~ eb2 c2@2, ~@6 f2 ~", Q: "c2 ~ db2@6",
  R: "f2 eb2 ~ eb2 f2 eb2 ~ eb2", S: "f2 eb2 ~ eb2 f2 eb2 f2@2", T: "eb1@3 eb1 g1@2 bb1@2 c2@2 ~@6",
  U: "eb2 f2 eb2 ~ eb2 f2@3 eb2@4 ~@4", V: "eb2 db2 ~ db2 eb2 db2 eb2 db2", W: "eb2 db2 ~ db2 eb2 db2 gb2@2",
  X: "eb2 ~@2 db2 eb2 ~@2 db2", Y: "eb2@2 ~ eb2 ~ eb2 db2@2 eb2@4 db2@4", Z: "b1 ~@2 bb1 b1 ~@2 eb1",
  AA: "ab1@2 ~@3 ab1 gb1@2 ab1 ~ ab1@2 gb1@2 gb1@2", AB: "ab1!2 bb1!2 b1!2 db2@2", AC: "b1 ~@7",
})).s("gm_acoustic_bass").gain(0.57)

// bass · acoustic bass · soft notes
const bass_soft = note(`<
  ~@121
  [~@3 bb1 b1 ~@2 eb1]
  [ab1!2 bb1!2 b1!2 db2@2]
  [eb2 ~@2 db2 eb2 ~@2 db2]
  [eb2@2 ~ eb2 ~ eb2 db2@2 eb2@4 db2@4]
  [b1 ~@2 bb1 b1 ~@2 eb1]
  [ab1!2 bb1!2 b1!2 db2@2]
>`).s("gm_acoustic_bass").gain(0.21)

// chords · distortion guitar
const distortion_guitar = note("<~@19 A B A B A B A B ~@4 A B A B A B A B ~@13 C ~ D ~ E ~ D ~@68>".pickRestart({
  A: "~@2 [g2,eb3,g3] ~@7 [ab2,f3,ab3] ~@5", B: "~@2 [eb3,g3,bb3] ~@7 [ab2,f3,ab3] ~@5",
  C: "~@2 g3 ~ g3 ~ ab3 ~ ab3 ~ f3 ~ f3@2 ~@2",
  D: "~@2 [d4,g4] ~ [d4,g4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [c4,f4] ~ [c4,f4] ~@3", // G5 Ab5 F5
  E: "~@2 g4 ~ g4 ~ ab4 ~ ab4 ~ f4 ~ f4 ~ db5 ~",
})).s("gm_distortion_guitar").gain(0.1).pan(1)

// other · rock organ
const rock_organ = note(`<
  ~@15 A B ~@2 C D C D C D C E F@2 G H C D C D C D C E I J I J I K I L M B ~@2 C D C D C D C E I J I J I K I L N O P Q R
  S N T U@3 V@2 ~@3 W X ~@2 Y@2 Z AA W AB AC AD AE AF AG AH AI AJ AK AL AM AN AC AO AP AQ AR@2 AM AN AC AO AS AT AR@2 AU
  AT ~@6
>`.pickRestart({
  A: "[eb7,db8,d8] eb8 ~@10 [eb5,eb6,eb7] ~@3", B: "~@4 [eb5,eb6,eb7] ~@11", C: "~@4 [g5,g6]@3 [g5,g6] [ab5,ab6] ~@7",
  D: "~@4 [bb5,bb6]@3 [bb5,bb6] [ab5,ab6] ~@7", E: "~@4 [bb5,bb6]@3 [bb5,bb6] [ab5,ab6] ~@3 [eb6,eb7]@2 ~@2",
  F: "[c6,eb6,c7]/2", G: "~@4 [g5,g6,eb7]@4 [ab6,f7]!2 ab5 ~ [bb5,bb6,g7] ~@3, ~@4 ab5 ~@3", H: "[bb5,bb6,g7] ~@15",
  I: "[g5,g6] ~ [ab5,ab6]@6", J: "[g5,g6] ~@7", K: "[g5,g6]@2 [f5,f6] ~@13",
  L: "[g5,g6]@2 [f5,f6] ~@7 [eb5,eb6] ~ [f5,f6] ~@3", M: "~@12 [eb5,eb6,eb7] ~@3",
  N: "[g5,g6] ~@5 ab7@2, ~ [ab5,ab6]@3", O: "[g5,g6,g7]@2 f7 ~@5 [eb6,eb7] ~@3 [f6,f7] ~@3",
  P: "[g5,g6] ~@3 ab7@4, ~ [ab5,ab6]@3", Q: "[g5,g6,g7] ~@7", R: "~ ab7, ~ [ab5,ab6]@3",
  S: "[g5,g6]@2 [f5,f6,f7] ~@7 [eb5,eb6,eb7] ~ [f5,f6,f7] ~@3, g7 ~@15", // G F Eb F
  T: "[g5,g6,g7]@2 [f5,f6] ~@7 [eb5,eb6] ~ [f5,f6] ~@3", U: "eb7/3", V: "[db7 ~ c7 ~ bb6 ~ c7 eb6@9]/2",
  W: "[gb4,eb5,gb5]", X: "[ab4,f5,ab5]@2 [ab4,f5,ab5] ~@13",
  Y: "[~@2 [eb5,gb5,bb5] ~ [eb5,gb5,bb5]@2 [eb5,gb5,bb5] [db5,f5,ab5]@3 [eb5,gb5,bb5] ~ [bb4,eb5,gb5]@2 [bb4,eb5,gb5] [ab4,db5,f5]@3 [bb4,eb5,gb5]@2 [gb5,bb5,eb6]@2 [gb5,bb5,eb6] [f5,ab5,db6]@3 [gb5,bb5,eb6,gb6] ~@3 [eb5,bb5,eb6] ~]/2", // Ebm Db Ebm Db Ebm Db Ebm Eb5
  Z: "~@2 [eb5,bb5,eb6] ~@3 [eb5,bb5,eb6]!2 ~@2 [eb5,bb5,eb6] ~@3 [eb5,bb5,eb6]!2", // Eb5
  AA: "~@2 [f4,c5,f5] ~@3 [f4,c5,f5] ~@3 [f4,c5,f5] ~@3 [f4,c5,f5] ~", // F5
  AB: "[ab4,f5,ab5]@2 [ab4,f5,ab5] ~@7 [eb5,bb5,eb6]@2 ~@2 [eb5,bb5,eb6] ~", AC: "[eb5,bb5,eb6]",
  AD: "[f5,c6,f6] ~ [f5,c6,f6,gb6] eb6 ~@12", AE: "eb5@2 eb6 ~ eb6@2 db6 eb6@2 db6 eb6@2 eb6@2 db6@2",
  AF: "eb6@2 db6@2 a5@2 a5 bb5@2 a5 ab5 ~ bb5 ~ bb5 ~", AG: "bb5@2 ab5@2 gb5@3 ab5@2 gb5 ab5@2 gb5 ab5@2 ~",
  AH: "a5@2 ab5@2 gb5@2 eb5!2 ~ eb5@3 db5 ~ eb5 ~", AI: "db5@2 eb5 ~ eb5@2 ~ gb5@3 eb5@2 db5 ~ eb5@2, eb5 ~@15",
  AJ: "db5@2 eb5@2 gb5@2 ab5 ~ ab5 a5 ab5 ~ a5@2 ab5 ~", AK: "a5 ab5 gb5@2 ab5 gb5 ab5 gb5",
  AL: "ab5@2 a5@3 ab5@2 gb5 eb5@2 ~ eb5 ~@2 eb5 ~", AM: "[eb4,bb4,eb5]",
  AN: "[eb4,bb4,eb5,gb5] ~@3 [eb4,bb4,eb5,gb5] ~@3 [eb4,bb4,eb5,gb5] ~@3 [eb4,bb4,eb5,gb5] ~@3", // Ebm
  AO: "[f5,c6,f6] ~ [f5,c6,f6] ~@9 [e6,f6] [db6,d6,eb6] [bb5,b5,c6] [g5,ab5,a5]", AP: "[gb5,eb7]",
  AQ: "[gb6,gb7] ~ [gb6,gb7] ~@13", AR: "[gb6,gb7]@6 [eb6,eb7] [eb6,eb7]@9", AS: "[gb5,eb6]",
  AT: "[gb5,gb6] ~ [gb5,gb6] ~@13", AU: "eb6",
})).s("gm_rock_organ").gain(0.2).pan(1)

// other · rock organ · soft notes
const rock_organ_soft = note(`<
  ~@40 A ~ B ~ A ~ A ~@13 A ~ B ~ A ~ A ~ A ~ C ~ A ~ A ~@21 D ~@2 E ~@21 F@2 G H F@2
>`.pickRestart({
  A: "~@2 [c6,c7] ~@13", B: "~@2 [g5,c6,g6,c7] ~@13", C: "~@2 [g5,c6,g6,c7] ~@7 [bb5,bb6] ~@3 [a5,a6] ~",
  D: "~@7 ab5 ~@8", E: "~@6 eb5 ~@9", F: "[gb6,gb7]@6 [eb6,eb7] [eb6,eb7]@9", G: "eb6", H: "[gb5,gb6] ~ [gb5,gb6] ~@13",
})).s("gm_rock_organ").gain(0.11).pan(1)

// other · electric guitar clean · "Electric Guitar (clean)"
const electric_guitar_clean = note("<~@27 [c3@2 ~ c3 c3@2 ~@2]!2 ~@98>").s("gm_electric_guitar_clean").gain(0.32)

// bass · slap bass 1
const bass_2 = note(`<
  ~@7 A B A B C D E F G H I J I H I K I H I L M@2 N O I H I K I H I P Q R Q R Q R Q S I H T U I H I K I H I L Q R Q R Q
  R Q S Q R Q R Q R Q S V W V W X Y Z AA X Y Z AA X Y Z AA X Y Z AA X Y Z AA X Y Z AA X Y Z AB X Y Z AB X Y Z AB X Y Z
  AB X Y AC ~@5
>`.pickRestart({
  A: "eb2@2 ~@5 db2", B: "eb2 ~@7", C: "b1 ~@3", D: "bb1@4 ~@10 ab1 bb1", E: "ab1@7 eb1", F: "ab1",
  G: "eb1@3 eb1 g1@2 bb1@2 c2 ~@7", H: "eb1!3 ~ g1 ~ bb1@2 db2@4 c2@2 bb1@2", I: "eb1@3 eb1 g1@2 bb1@2 eb2@2 ~@6",
  J: "eb2!3 ~ eb2 ~@3 eb2@4 bb1 ~ bb1@2", K: "eb1!3 ~ g1 bb1@3 g2 ~@3 db2@4", L: "eb1!3 ~ g1@2 bb1@2 eb2@4 f2@2 ~@2",
  M: "c2@2 ~ c2 c2@2 ~@2", N: "eb2@2 ~ db2 eb2 db2 ~ db2", O: "eb2@2 ~ db2 eb2 ~@3",
  P: "eb1!3 ~ g1@2 bb1@2 eb2@2 eb2@2 f2@2 c2@2", Q: "c2 ~ db2@6", R: "f2 eb2 ~ eb2 f2 eb2 ~ eb2",
  S: "f2 eb2 ~ eb2 f2 eb2 eb2@2", T: "eb1@3 eb1 g1@2 bb1@2 c2@2 ~@6", U: "eb2 f2 eb2 ~ eb2 ~@3 eb2@4 ~@4",
  V: "eb2 db2 ~ db2 eb2 db2 eb2 db2", W: "eb2 db2 ~ db2 eb2 db2 gb2@2", X: "eb2 ~@2 db2 eb2 ~@2 db2",
  Y: "eb2@2 ~ eb2 ~ eb2 db2@2 eb2@4 db2@4", Z: "b1 ~@2 bb1 b1 ~@2 eb1",
  AA: "ab1@2 ~@3 ab1 gb1@2 ab1 ~ ab1@2 gb1@2 gb1@2", AB: "ab1!2 bb1!2 b1!2 db2@2", AC: "b1 ~@7",
})).s("gm_slap_bass_1").gain(0.32)

// bass · slap bass 1 · soft notes
const bass_soft_2 = note(`<
  ~@121
  [~@3 bb1 b1 ~@2 eb1]
  [ab1!2 bb1!2 b1!2 db2@2]
  [eb2 ~@2 db2 eb2 ~@2 db2]
  [eb2@2 ~ eb2 ~ eb2 db2@2 eb2@4 db2@4]
  [b1 ~@2 bb1 b1 ~@2 eb1]
  [ab1!2 bb1!2 b1!2 db2@2]
>`).s("gm_slap_bass_1").gain(0.12)

// drums · kick
const kick = s("bd").struct("<~@7 A@7 B A@4 C@20 A@12 C@8 A@19 D C@23 E C@17 A F ~@5>".pickRestart({
  A: "x!2", B: "x ~@7 x!2 ~@4 x ~", C: "x ~@2 x!2 ~@3", D: "x!2 ~@2 x ~@3 x ~ x ~@5", E: "x!2 ~ x!2 ~ x ~", F: "x",
})).gain(0.45)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@120 [~@3 x ~@4] [~@3 x!2 ~@3] [x ~@2 x!2 ~@3]!5>").gain(0.15)

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@120
  [~@2 x ~@3 x!2 ~@2 x!2 ~@4]
  [~@2 x!3 ~ x ~ x ~ x!3 ~ x ~]
  [x ~ x ~ x ~ x!3 ~ x!3 ~@3]
  [x ~ x!3 ~ x ~ x ~ x!3 ~ x ~]
  [x ~ x ~ x ~ x!3 ~ x!3 ~@3]
  [x ~ x!3 ~ x ~ x ~ x!3 ~ x ~]
  [x ~ x ~ x ~ x!3 ~ x!3 ~@3]
>`).gain(0.15)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@26 A ~ A ~@9 A ~@7 A ~@11 A ~@7 A ~@7 A ~@3 A ~ A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A
>`.pickRestart({
  A: "~@7 x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@39 A ~@19 A ~@7 A ~@19 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "x",
})).gain(0.45)

stack(
// … 3 more lines

More by Peter Gabriel