Strudelify

Don't Give Up

Peter Gabriel

KeyE♭ majorTempo80 bpm
0:00/0:00
// Don't Give Up — Peter Gabriel
// 80 bpm, 6/8, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 170 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/3)

// 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 · synth bass 2 · "Synth Bass"
const bass = note(`<
  A B A C A B A C A B A D E F G H I J A D E F G H I J A D E F G H I J K L M@3 L N@6 A D E F G H I J A D E F G H I J K L
  O@6 P@4 Q@4 R@6 S@6 T@3 U@2 V@4 W@4 X@2 ~ A D E F G H I J K L M@3 L M@3 L M@3 L M@3 L M@3 L N@6 Y Z AA@2 AB AC AD AE
  AF AG AH@2 AI AJ AK AL AF AM AN AO AI AP AK AQ AR AS AT ~
>`.pickRestart({
  A: "c2@4 g2@2 g2@2 c3 ~@3 bb2@12", B: "c2@4 f2@2 f2@2 bb2 ~@3 c3@12", C: "c2@2 f2!2 bb2 ~ c3@6",
  D: "c2@4 f2 ~ f2@2 bb2 ~@3 c3@12", E: "eb2@2 bb2!2 g3 ~ f3@6", F: "eb2@4 bb2 ~ bb2@2 f3 ~@3 g3@12",
  G: "bb1@4 f2@2 f2@2 d3 ~@3 c3@12", H: "bb1@4 f2 ~ f2@2 c3 ~@3 d3@12", I: "c2@4 g2 ~ g2@2 c3 ~@3 bb2@12",
  J: "c2@5 f2 f2@2 bb2 ~@3 c3@8 ~@4", K: "f1", L: "g1", M: "[~@2 ab1@25 ~@21 f1@24, ~@7 ab1@6 ~@5]/3",
  N: "[~@2 ab1@25 ~ ab1@24 f1@25 g1@24 ab1@23 bb1@20]/6", O: "[~@2 ab1@25 ~ ab1@24 f1@25 g1@24 ab1@23 ab1@20]/6",
  P: "[~@4 f1@25 g1@24 ab1@23 bb1@20]/4", Q: "[~ eb2@11 bb1@12]/4", R: "[eb2@51 bb1@48 ~ eb2@44]/6",
  S: "[~@2 ab1@26 eb2@24 eb2@24 ~@24 eb2@31 ~@13, ~@76 bb1@29 ~@39]/6",
  T: "[~@4 eb2@23 eb2@2 ~@18 c2@3 ~ bb1@19 ~@2, ~@44 eb2@5 ~@23]/3", U: "[~@2 bb1@2 ~@11 bb1@4 c2@4 eb2@4 ~ eb2@20]/2",
  V: "[~@3 eb2@2 ~@18 c2@4 ab1@24 ~ ab1@2 ~@17 bb1@4 eb2@15 ~@6, ~@20 eb2@5 ~@43 ab1@5 ~@23]/4",
  W: "[~@4 eb2 ~@15 eb2@3 c2@3 ~ bb1@24 bb1 ~@16 c2@3 eb2@4 ~ eb2@20]/4", X: "[~@4 bb1@23 eb2@21]/2", Y: "~@4 eb2@19 ~",
  Z: "eb2", AA: "[~@32 c2 ~ c2@2 eb2@4 c2@2 ~@2 f2@4, eb2@35 ~@13]/2", AB: "c2 ~@3 eb2@2 f2@2 c2@2 ~@8 g1@2 bb1@2 g1@2",
  AC: "bb1@4 c2@4 ~@4 c1@7 ~@5", AD: "c2 ~ c2@2 eb2@4 c2 ~@3 f2@4 c2 ~@3 eb2@2 f2@2", AE: "c2 ~@4 g1 bb1 g1 bb1@2 c2@2",
  AF: "~@4 c1@5 ~@7 c2 ~ c2@2 eb2@4", AG: "c2 ~@3 f2@3 ~ c2 ~@3 eb2@2 f2@2 c2@2 ~@6",
  AH: "[~@2 g1@2 bb1@2 g1@2 bb1@3 c2@4 ~@5 c1@9 ~@3 c2 ~ c2@2 eb2@4 c2 ~@3 f2@4]/2", AI: "c2 ~ eb2 f2 c2 ~@4 g1 bb1 g1",
  AJ: "bb1@3 c2@4 ~@5 c1@5 ~@7", AK: "c2 ~ c2@2 eb2@4 c2 ~@3 f2@4 c2@2 ~@2 eb2@2 f2@2",
  AL: "c2@2 ~@8 g1@2 bb1@2 g1@2 bb1@3 c2@4 ~", AM: "c2 ~@3 f2@4 c2 ~@3 eb2@2 f2@2 c2@2 ~@6",
  AN: "~@2 g1@2 bb1@2 g1@2 bb1@4 c2@3 ~@5 c1@4", AO: "~@4 c2!2 eb2@2 c2 ~ f2@2", AP: "bb1@4 c2@4 ~@4 c1@5 ~@7",
  AQ: "c2@2 ~@8 g1@2 bb1@2 ~ bb1@4 c2@3 ~@2, ~@7 g1 ~@4", AR: "~@4 c1@6 ~@7 c2 c2@2 eb2@3 ~",
  AS: "c2 ~ f2@2 c2 ~ eb2 f2 c2 ~@3", AT: "~@2 g1@2 bb1@2 g1@2 bb1@4 c2@4 ~@3 c1@5",
})).s("gm_synth_bass_2").gain(0.44)

// chords · pad warm · "Warm Pad"
const pad_warm = note(`<
  A B C D@2 E@4 F G@2 H I J K L M G@2 H I J K L M G@2 H I J K L M N O P@3 O Q@6 G@2 H I J K L M G@2 H I J K L M N O Q@6
  R@4 ~@32 G@2 H I J K L M N O P@3 O P@3 O P@3 O P@3 O P@3 O Q@6 ~@10 S T@2 U@2 V@2 W S X@2 Y@2 Z@2 AA ~@2
>`.pickRestart({
  A: "~@5 eb5@13 ~@6", B: "~@2 c5@11 ~@11", C: "~@3 g4@16 ~@5", D: "[c5@12 ~@11 c5@13 ~@5 bb4@7]/2",
  E: "[g4@7 ~@16 c5@10 ~@6 eb5@8 c5@10 ~@14 c5@10 ~@7 bb4@6 ~@2]/4", F: "g4 ~@2", G: "[c5@9 ~@6 eb5@5 ~@3 c5@9 ~@16]/2",
  H: "g5@10 ~@4 ab5@7 ~@3", I: "g5@6 ~@11 f5@5 ~@2", J: "~@3 eb5@11 ~@10", K: "d5@5 ~@7", L: "c5@8 ~@7 bb4@6 ~@3",
  M: "g4@5 ~@7", N: "~ [f4,ab4]@22 ~", O: "[g4,bb4]", P: "[~ [ab4,c5]@48 [f4,ab4]@22 ~]/3",
  Q: "[~ [ab4,c5]@48 ~@3 ab4@24 [g4,bb4]@23 ~ c5@38 ~@6, ~@52 f4@21 ~@26 ab4@39 ~@6]/6", // Ab Gm
  R: "[~@4 ab4@24 [g4,bb4]@23 ~ c5@38 ~@6, ~@4 f4@21 ~@26 ab4@39 ~@6]/4", S: "~@12 [ab2,ab3,eb4]@7 ~@5",
  T: "[~@4 [bb2,bb3,f4]@8 ~@8 [f2,f3,c4]@7 ~@21]/2", // Bb5 F5
  U: "[~@4 [ab2,ab3,eb4]@6 ~@10 [bb2,f4]@9 ~@7 [f2,f3,c4]@8 ~@4, ~@19 bb3@9 ~@20]/2", // Ab5 Bb5 F5
  V: "[~@20 [ab2,ab3,eb4]@7 ~@9 [bb2,bb3,f4]@7 ~@5]/2", W: "~ [f2,f3,c4]@2 ~@3",
  X: "[~ [bb2,bb3,f4]@2 ~@2 c4@2 ~@5, ~@19 [f2,f3]@8 ~@21]/2", // Bb5 F
  Y: "[~@4 [ab2,ab3,eb4]@9 ~@7 [bb2,bb3,f4]@9 ~@7 [f2,f3,c4]@8 ~@4]/2", // Ab5 Bb5 F5
  Z: "[~@21 [ab3,eb4]@7 ~@7 [bb2,bb3,f4]@9 ~@4, ~@5 ab2@2 ~@5]/2", AA: "~@4 [f2,f3,c4]@7 ~@13",
})).s("gm_pad_warm").gain(0.2)

// chords · piano · "Bright Acoustic Piano"
const piano = note("<~@75 A ~ B ~ C ~ D@3 E@5 F G H I B J K L M N O P Q R S T U ~@64>".pickRestart({
  A: "[eb2,eb3,ab3,c4,eb4]@2 [eb2,eb3,g3,bb3,eb4] ~@9", B: "[bb2,eb3,f3,bb3]@2 [bb2,d3,f3,bb3] ~@9",
  C: "[eb3,ab3,c4,eb4]@2 [eb3,g3,bb3,eb4] ~@9", // Ab Eb
  D: "[[bb2,eb3,f3,bb3]@4 [bb2,f3,bb3]@2 ~@2 [eb2,eb3,g3,bb3]@3 ~ [eb2,eb3,g3]@3 ~ [eb2,eb3,eb4]@3 ~ [eb3,bb3,eb4,f4]@2 ~@2 [eb3,g4]@3 ~ eb3@16 eb3@22 ~@2 [eb3,bb3,eb4,f4]@4, ~@4 d3 ~@7 c4@4 bb3@2 ~ eb2@3 eb2@4 ~@2 eb2@38 ~@6, ~@12 bb3 ~@3 g3@8 ~@3 [bb3,eb4,g4]@38 ~@7]/3", // Bbsus4 Bb5 Eb Ebsus2 Eb Ebsus2 Eb
  E: "[db3@4 [ab3,c4,eb4]@21 ~@3 [eb3,g3,bb3,eb4]@23 ~ [g3,bb3,eb4]@17 ~@7 [d3,f3,bb3]@17 ~@7 [eb3,g3,eb4]@18 ~@2, db4@2 ~@98 bb3@15 ~@5, bb3 ~@3 ab2@24 ~@24 eb3@24 bb2@24 ~@20]/5", // Ab Eb Bb Eb
  F: "[eb3,ab3,c4,eb4]@4 [eb3,g3,bb3,eb4] ~@3 [eb2,eb3,g3,bb3]@3 ~ [g3,c4]@4 [eb2,eb3,eb4]@4 [eb2,eb3,bb3,f4]@3 ~, ~@12 [eb2,eb3]@3 ~ g3@7 ~, ~@16 bb3@2 ~@2 eb4 ~@3", // Ab Eb C5 Eb Ebsus2 Eb
  G: "[eb2,eb3,eb4,g4]@3 ~ [eb2,eb3,bb3,eb4,g4]@20", H: "~@2 [eb2,eb3,g4] ~@9, ~@4 [bb3,eb4] ~@19",
  I: "~@4 [bb2,d3,f3,bb3]@15 ~@5", J: "~ [eb2,eb3,bb3,eb4,g4]@5", K: "~@2 [eb2,eb3,bb3,g4] ~@9, ~@4 eb4 ~@19",
  L: "~@4 [ab2,eb3,ab3,c4]@17 ~@3", M: "[ab2,eb3,bb3,c4]@4 [ab2,eb3,ab3,c4]@2 ~@16 bb2 ~, ~@5 [ab2,eb3,ab3,c4]",
  N: "bb3 ~@3 [eb3,bb3,eb4,g4]@18 ~@2", O: "~@2 [eb3,bb3,g4] ~@9, ~@4 eb4 ~@19", P: "~ [bb2,d3,f3,bb3]@4 ~",
  Q: "[bb2,eb3,f3,bb3]@4 [d3,f3,bb3] ~@19, ~@2 bb2 ~@9", R: "~@4 [bb3,eb4,g4]@13 ~@7, ~ eb2@9 ~@2, ~@4 eb3@17 ~@3",
  S: "~@4 [d3,f3,bb3]@15 ~@5, ~@4 bb2@19 ~", T: "~@2 [eb2,eb3,g3,bb3,eb4]@7 ~@3",
  U: "[eb2,eb3,ab3,c4,eb4]@4 [eb2,eb3,g3,bb3,eb4] ~@19", // Ab Eb
})).s("gm_piano").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  A@5 B A@3 B A@5 B A@7 B A@7 B A@2 C@12 A@5 B A@7 B A@2 C@44 A@5 B A@2 C@31 D@2 E D E D E D E D E D E D E D E D E D E D
  E D ~
>`.pickRestart({
  A: "x", B: "x ~@10 x", C: "x!2 ~@4", D: "x!2 ~@2 x ~@3 x ~@3", E: "x!3",
})).gain(0.44)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@34 A@12 ~@16 A@44 ~@8 A@31 B@2 ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "x!12", B: "~@5 x",
})).gain(0.44)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@34 A@12 ~@16 A@44 ~@8 A@31 B@2 C B C B C B C B C B C B C B C B C B C B C B ~
>`.pickRestart({
  A: "~@2 x", B: "~ x ~ x ~@2", C: "~ x ~ x ~ x",
})).gain(0.44)

stack(bass, pad_warm, piano, kick, hihat, open_hat)

More by Peter Gabriel