Strudelify
Games Without Frontiers cover art

Peter Gabriel 3: Melt

Games Without Frontiers

Peter Gabriel

KeyF♯ majorTempo97 bpm
0:00/0:00
// Games Without Frontiers — Peter Gabriel
// 97 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 41, 4/4 at bar 42) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/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 · whistle
const whistle = note("<~@23 A B C D E B F G ~@25 H I J K@2 I J L@2 ~@13 M ~@15>".pickRestart({
  A: "a#5@6 f#5 ~ g#5 ~ a#5@3 ~ b5@2", B: "~@2 a#5@3 ~ g#5@3 ~ f#5@5 ~", C: "~@2 d#5 c#5 c#6@5 ~ d#5 c#5 c#6@3 ~",
  D: "c#6@15 ~", E: "a#5@5 ~ f#5 ~ g#5 ~ a#5@3 ~ b5@2", F: "~@2 d#5 c#5 c#6@5 ~ d#5 c#5 c#6@4", G: "c#6@3 ~",
  H: "~@8 a#5@6 f#5 ~", I: "g#5 ~ a#5@3 ~ b5@2 ~@2 a#5@3 ~ g#5@2", J: "~@2 f#5@5 ~@3 d#5 c#5 c#6@4",
  K: "[~@2 d#5 c#5 c#6@3 ~ c#6@15 ~ a#5@5 ~ f#5 ~]/2", L: "[~@2 d#5 c#5 c#6@4 c#6@12 ~@12]/2", M: "d#4 ~@15",
})).s("gm_whistle").gain(0.2)

// other · whistle · soft notes
const whistle_soft = note("<~@6 [~@2 f#5 ~ g#5 ~ f#5 ~ c#6 ~ f#5 ~ g#5 ~ d#5 ~] ~@87>").s("gm_whistle").gain(0.1)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@6 A@2 B C D C E C D F G H I F G J K L@2 M N L@2 M O@2 P Q R S P T U T V W X W Y W Z W AA AB AC AD AE AF AG AH AI@3
  AJ@4 AK@2 AL@2 AM@2 AN@5 C B C D F@16
>`.pickRestart({
  A: "[~@6 [d#1,d#2]@9 c#2]/2", B: "b1 ~@11 a#1@2 ~@2", C: "d#2 ~@13 c#2@2", D: "b1 ~@7 f#1@4 g#1@4",
  E: "b1 ~@7 a#1 ~@3 c#2@2 ~@2", F: "d#1 ~@7 d#1 ~@7", G: "a#1 ~@7 b1 ~@7", H: "c#2 ~@7 a#1 ~@7",
  I: "d#2 ~@7 d#1@4 d#2@4", J: "c#2 ~@7 a#1 ~@3 a#1@3 ~", K: "d#1 ~@3 d#1@2 d#2@2", L: "f#1/2", M: "c#2 b1", N: "a#1",
  O: "[a#1@11 ~ d#1@12 f1@8]/2", P: "f#1", Q: "d#2@2 ~ d#2 c#2 ~ c#2@2 b1@8", R: "a#1@6 d#1@9 ~", S: "d#1 f1",
  T: "d#2@2 ~ d#2 c#2!2 ~ b1@9", U: "a#1@4 c#2@2 ~ d#1@9", V: "a#1@4 c#2@2 ~@2 d#2 ~@7", W: "~@6 c#2@2 b1 ~@7",
  X: "~@4 a#1@2 ~@2 d#2 ~@7", Y: "f#1@4 g#1@4 d#2 ~@7", Z: "a#1 ~@3 c#2@2 ~@2 d#2 ~@7", AA: "f#1@4 g#1@4 d#1@4 d#2 ~@3",
  AB: "~@4 d#2 ~@7 a#1 ~@3", AC: "~@4 b1 ~@7 c#2 ~@3", AD: "~@4 a#1 ~@7 d#1@2 ~@2", AE: "d#2@4 d#1@4 d#2 ~@7",
  AF: "d#2 ~@7 a#1 ~@7", AG: "b1 ~@7 c#2 ~@7", AH: "a#1 ~@7 d#1 ~@7", AI: "[d#1@4 d#2@3 ~ f#1@32 c#2@8]/3",
  AJ: "[b1 a#1@2 f#1@4 c#2]/4", AK: "[b1@8 a#1@11 ~ d#1@12]/2", AL: "[f1@8 f#1@16 d#2@2 ~ d#2 c#2 ~ c#2@2]/2",
  AM: "[b1@8 a#1@6 d#1@9 ~ d#1@8]/2",
  AN: "[f1@8 f#1@16 d#2@2 ~ d#2 c#2!2 ~ b1@9 a#1@4 c#2@2 ~ d#1@9 d#2@2 ~ d#2 c#2!2 ~ b1@9 a#1@4 c#2@2 ~@2]/5",
})).s("gm_synth_bass_1").gain(0.18)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@4 A@3 ~@8 B C ~ D E F ~ G H@2 I J H@2 K@2 L@2 M N ~@2 O P O P ~@8 Q R S T U V W X@4 Y@3 Z@7 AA@4 ~@4 AB ~@15
>`.pickRestart({
  A: "[~@12 d#3@35 ~]/3", B: "~@10 d#4 ~@3 d#3 ~", C: "~@2 b3!2 ~@2 b2 ~ b3 ~ c#4 ~ b3 ~ a#3 ~",
  D: "~@2 d#2 ~@5 d#4 ~ d#4 ~ d#3 ~ d#4 ~", E: "~@2 d#4!2 ~@2 d#3 ~@9", F: "~@2 b3!2 ~@2 b2 ~@3 b3 ~ c#4 ~ a#3 ~",
  G: "~@2 d#2 ~ d#4 ~ d#3 ~@9", H: "[[f#2,c#3]@31 ~]/2", I: "~@2 d#4 c#4 c#5@6 d#4 c#4 c#5@4", J: "c#5@15 ~",
  K: "[~@2 d#4 c#4 c#5@6 d#4 c#4 c#5@16 ~@4]/2", L: "[d#4@31 ~]/2", M: "d#4@2 ~ d#4 c#4 c#4@2 b3@9", N: "a#3@3 d#4@5",
  O: "d#4@2 ~ d#4 c#4!2 ~ b3@9", P: "a#3@7 ~@9", Q: "~@2 d#4 ~@3 d#3 ~@3 b3!2 ~@2 b2 ~", R: "b3 ~ c#4 ~ b3 ~ a#3 ~@9",
  S: "~@10 d#2 ~@5", T: "d#4 ~ d#4 ~ d#3 ~ d#4 ~@3 d#4!2 ~@2 d#3 ~", U: "~@10 b3!2 ~@2 b2 ~",
  V: "~@2 b3 ~ c#4 ~ a#3 ~@9", W: "~@10 d#2 ~ d#4 ~ d#3 ~",
  X: "[~@8 f#2@32 ~@2 d#4 c#4 c#5@6 d#4 c#4 c#5@4 c#5@8, ~ c#3@7]/4", Y: "[~@8 f#2@32 ~@2 d#4 c#4 c#5@4, ~ c#3@5]/3",
  Z: "[~@2 d#4 c#4 ~@20 d#4@32 d#4@3 ~ c#4 c#4@2 b3@9 a#3@6 d#4@34, ~ c#5@27, ~@59 d#4@19 ~@34]/7",
  AA: "[~@8 d#4@3 ~ c#4!2 ~ b3@9 a#3@7 ~@9 d#4@3 ~ c#4!2 ~ b3@9 a#3@7 ~, ~@11 d#4@29 ~@3 d#4@7 ~@14]/4", AB: "d#4 ~@15",
})).s("gm_overdriven_guitar").gain(0.15)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~@7 A B A B A B C D ~@7 E@3 F@4 ~ G@3 H@2 I J K L M L N O N O N P Q ~@16 R S@5 T@2 U@2 ~@20
>`.pickRestart({
  A: "[d#4,d#5] ~@15", B: "[b3,b4] ~@15", C: "[d#4,d#5] ~@14 b4", D: "b3 ~@15", E: "[~@15 [f#4,c#5]@32 ~]/3",
  F: "[~@32 f#4@31 ~, c#5]/4", G: "[~@16 d#3@8 [f3,f4]@8 [f#3,f#4]@13 ~@3, ~@5 d#4@11]/3",
  H: "[a#4@3 ~ [c#4,g#4]@3 [b3,f#4]@8 ~@7 [a#3,d#4]@10, d#4@11 ~@5]/2", I: "~@7 f4@8 ~", J: "f#4@15 ~",
  K: "[a#3,d#4]@3 ~ c#4@2 ~ [f#3,b3]@8 ~, ~@3 g#3@3 ~@10", L: "[d#3,g#3] ~@15",
  M: "~@4 c#4@2 ~ [f#3,b3]@8 ~, ~@3 g#3@3 ~@10", N: "~@8 [b3,b4] ~@7", O: "~@8 [d#4,d#5] ~@7", P: "~@8 d#5 ~@7",
  Q: "~@7 b4 b3 ~@7", R: "~ d#3", S: "[~@8 f#3@13 ~@3 a#4@3 ~ [c#4,g#4]@3 b3@7 ~@8 a#3@10 ~@24, f4@71 ~@9]/5",
  T: "[~@8 a#3@3 ~ c#4@2 ~ [f#3,b3]@8 ~ [d#3,g#3] ~@7, ~@11 g#3@3 ~@18]/2", // B5 G#5
  U: "[~@12 c#4@2 ~ [f#3,b3]@8 ~ [d#3,g#3] ~@7, ~@11 g#3@3 ~@18]/2", // B5 G#5
})).s("gm_pad_warm").gain(0.05)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@6 A@2 ~@15 B@2 C@2 B@2 D@2 E F G H I F J K L M@2 ~@14 N@8 O P@4 Q@5 R@2 S@2 ~@16
>`.pickRestart({
  A: "[~@3 d#2@2 ~@3]/2", B: "[[c#3,f#3]@31 ~]/2", C: "[[c#3,g#3]@31 ~]/2", D: "[[c#3,g#3]@7 c#2]/2", E: "d#2 f2",
  F: "f#2", G: "[d#3,a#3]@4 [c#3,g#3]@3 [b2,f#3]@8 ~", H: "[a#2,f3]@3 d#2@5", I: "~ f2",
  J: "[d#3,a#3]@4 [c#3,g#3]@3 [b2,f#3]@9", K: "[a#2,f3]@7 d#2@9", L: "[d#3,a#3]@4 [c#3,g#3]@3 [b2,f#3]@7 ~@2",
  M: "[[a#2,f3]@8 d#2@15 ~@9]/2", N: "[~@8 [c#3,f#3]@31 ~ [c#3,g#3]@31 ~ [c#3,f#3]@31 ~ [c#3,g#3]@24]/8",
  O: "~@4 c#2 ~@3 d#2@8", P: "[f2@8 f#2@16 [d#3,a#3]@4 [c#3,g#3]@3 [b2,f#3]@8 ~ [a#2,f3]@6 d#2@10 ~@8]/4",
  Q: "[f2@8 f#2@16 [d#3,a#3]@4 [c#3,g#3]@3 [b2,f#3]@9 [a#2,f3]@7 d#2@9 [d#3,a#3]@4 [c#3,g#3]@3 [b2,f#3]@7 ~@2 [a#2,f3]@8]/5", // D#5 C#5 B5 A#5 D#5 C#5 B5 A#5
  R: "[d#2@15 ~]/2", S: "~@2 d#2!2 ~@2 d#2!2 ~@2 d#2!2 ~@2 d#2!2",
})).s("gm_distortion_guitar").gain(0.1)

// other · synth drum
const synth_drum = note("<~@76 [d#2 ~@7 d#2 ~@7]!18>").s("gm_synth_drum").gain(0.13)

// drums · kick
const kick = s("bd").struct("<~@3 [x!2]!91>").gain(0.41)

// drums · rim
const rim = s("rim").struct("<~ A B C@37 D C@32 E C@11 F C@3 F C@3 F>".pickRestart({
  A: "~@6 x!2 ~@2 x ~@3 x!2", B: "~@2 x ~@4 x ~@2 x ~@3 x!2", C: "~@2 x ~@3 x!2 ~@2 x ~@3 x!2",
  D: "x ~ x ~@7 x ~@3 x!2", E: "~@2 x ~@3 x!3 ~ x ~@5", F: "~@2 x ~@3 x!2 ~@2 x ~@5",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@3 [~ x ~ x]!91>").gain(0.36)

// drums · cowbell
const cowbell = s("cb").struct("<~ [~ x ~ x]!93>").gain(0.41)

// drums · bongos
const bongos = s("bongo:4").struct("<~@34 [~@7 x ~@8] ~@32 [~@15 x] ~@26>").gain(0.67)

// drums · congas
const congas = s("conga:13").struct("<~ A@32 B A@4 B A C D@25 E D@4 E D F A@20>".pickRestart({
  A: "x ~ x ~@4 x ~@2 x ~@5", B: "x!2 ~ x ~ x ~@2", C: "x ~ x ~@5 x ~ x ~@4 x", D: "~@2 x ~@5 x ~ x ~@4 x",
  E: "~ x ~@2 x!2 ~ x", F: "~ x ~@2 x!2 ~@2",
})).gain(1.15)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~@3 x] ~@93>").gain(2.08)

// drums · shaker
const shaker = s("sh").struct("<~ A@39 B A@32 C A@11 C A@3 C A@3 C>".pickRestart({
  A: "x!8", B: "x!3 ~ x!4", C: "x!7 ~",
})).gain(0.31)

stack(
  whistle, whistle_soft, bass, overdriven_guitar, pad_warm, distortion_guitar, synth_drum, kick, rim, snare, cowbell,
  bongos, congas, cabasa, shaker
)

More by Peter Gabriel