Strudelify

The Grand Parade of Lifeless Packaging

Genesis

KeyE minorTempo85 bpm
0:00/0:00
// The Grand Parade of Lifeless Packaging — Genesis
// 85 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: ch 1 "RMI Electric Piano" named as a piano, played on epiano1 (its contrabass patch is not one)
// note: Full arrangement: all 57 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(85/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 · epiano1 · "RMI Electric Piano"
const epiano1 = note(`<
  ~ A B C D E F G H I J K L M N C D E F G H I J K L M N C D E F G H I J K L M N C D E F G H I J K L M N ~@6
>`.pickRestart({
  A: "[a2,c#3,e3] ~@3 [a2,c#3,e3] ~@3 [f#2,b2,d3] ~@3 [f#2,b2,d3] ~@3", // A Bm
  B: "[a2,c#3,e3] ~@3 [a2,c#3,e3] ~@3 [f#2,b2,d3] ~@3 [f#2,b2,d3] ~ [f#2,b2,d3] ~", // A Bm
  C: "[a3,c#4,e4]@2 ~@4 [a3,d4,f#4] ~ [a3,c#4,e4]@7 ~@9 [f#3,a3,b3,d4]@2 ~@2 [b3,d4]@2 ~@2, ~@28 [f#3,a3] ~@3", // A D A Bm7 Bm F#m
  D: "[c#4,e4]@2 ~@4 [a3,d4,f#4] ~ [a3,c#4,e4]@7 ~@9 [f#3,a3,b3,d4]@2 ~@2 [a3,b3,d4]@2 ~@2, a3 ~@27 f#3 ~@3", // C#m D A Bm7
  E: "[a3,c#4,e4]@2 ~@4 [a3,d4,f#4] ~ [a3,c#4,e4]@6 ~@10 [f#3,a3,b3,d4]@2 ~@2 [a3,b3,d4]@2 ~@2, ~@28 f#3 ~@3", // A D A Bm7
  F: "[c#4,e4]@2 ~@4 [a3,d4,f#4] ~ [a3,c#4,e4]@6 ~@10 [a3,d4]@2 ~@2 [a3,b3,d4]@2 ~@2, a3 ~@23 [f#3,b3] ~@3 f#3 ~@3", // C#m D A D5 Bm7 B5
  G: "[g3,c4,e4]@2 ~@4 [g3,b3,d4] ~ [g3,c4,e4]@6 ~@10 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3", // C G C G
  H: "[g3,c4,e4] ~@5 [g3,b3,d4] ~ [g3,c4,e4]@6 ~@10 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3", // C G C G
  I: "[g3,c4,e4] ~@5 [g3,b3,d4] ~ [g3,c4,e4]@5 ~@11 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3", // C G C G
  J: "[c4,e4] ~@5 [g3,b3,d4] ~ [g3,c4,e4]@6 ~@10 [g3,c4,e4] ~@3 [a3,d4,f#4] ~@3, g3 ~@15", // C G C D
  K: "[b3,d#4,e4,g#4] ~@5 [a3,d4,f#4] ~ [b3,e4,g#4]@7 ~@9 [g3,c4,e4] ~@3 [a3,d4,f#4] ~@3", // Emaj7 D E C D
  L: "[b3,e4,g#4] ~@5 [a3,d4,f#4] ~ [b3,e4,g#4]@7 ~@9 [g3,c4,e4] ~@3 [a3,d4,f#4] ~@3", // E D E C D
  M: "[b3,g#4]@2 ~@4 [a3,d4,f#4] ~ [b3,e4,g#4]@6 ~@10 [g3,c4,e4] ~@3 [a3,d4,f#4] ~@3, e4 ~@31", // E D E C D
  N: "[b3,e4,g#4]@2 ~@4 [a3,d4,f#4] ~ [b3,e4,g#4]@7 ~@9 [g3,c4,e4] ~@3 [a3,d4,f#4]@2 ~@2", // E D E C D
})).s("gm_epiano1").gain(0.22).pan(0.3)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@3 A B@2 C D E F D G H I G J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ@2 AR
  AS AT AU AV AW AX
>`.pickRestart({
  A: "a2@3 ~@5 g#2@2 ~@6 f#2@2 ~@6 e2@3 ~@5", B: "a2 ~@3 g#2 ~@3 f#2 ~@3 e2 ~@3",
  C: "a2@2 ~@6 g#2@2 ~@6 f#2@2 ~@6 e2@3 ~@5", D: "c2 ~@15", E: "c2 ~@27 g2@4", F: "c2@3 ~@29",
  G: "e1@3 ~@5 e1@4 ~@12 c2@2 ~@6", H: "~@24 c2@3 ~@5", I: "~@12 c2 ~@3", J: "~@4 g#2 ~@3 f#2 ~@3 e2 ~@3",
  K: "~@4 g#2 ~@3 f#2 ~@7", L: "~@8 g#2 ~@23", M: "~@7 g1", N: "c2@2 ~@6 c2@15 ~@9", O: "c2 ~@3 c2@8 g1@4",
  P: "c2@2 ~@6 c2@15 ~ g1@8", Q: "c2@3 ~@5 c2@24", R: "e1@4 ~@2 e1 ~ e1@15 ~ c2@3 ~ d2@4",
  S: "e1@3 ~@3 e1 ~ e1@14 ~@2 c2@2 ~@2 d2@3 ~", T: "e1@2 ~@4 e1 ~ e1@15 ~ c2@2 ~@2 d2@4",
  U: "e1@3 ~@3 e1 ~ e1@16 c2@2 ~@2 e1@4, ~@14 d2 ~", V: "a1@6 ~ a1 a1@7 ~ a1@7 ~ a1@4 e1@4",
  W: "a1@5 ~ a1 ~ a1@7 ~ a1@7 ~ a1@3 ~ e1@4", X: "a1@5 ~ a1 ~ a1@6 ~@2 a1@7 ~ a1@4 e1@4",
  Y: "a1@5 ~ a1 ~ a1@6 ~@2 a1@6 ~@2 a1@4 [e1,g1]@4", Z: "c2@4 ~@2 c2 ~ c2@6 ~@2 c2@6 ~@2 c2@2 g1 ~ a1 ~ b1 ~",
  AA: "c2@5 ~ c2 ~ c2@6 ~@2 c2@6 ~@2 c2@2 g1 ~ a1 ~ b1 ~", AB: "c2@5 ~ c2 ~ c2@5 ~@3 c2@5 ~@3 c2@2 g1 ~ a1 ~ [a1,b1] ~",
  AC: "c2@5 ~ c2 ~ c2@7 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c3 ~ c3 ~ c1@2, ~@30 c3 ~",
  AD: "e1 ~ e1 ~ e1 ~ e1 ~ e2@3 ~ e1 ~@5 e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~, ~@14 e2@7 ~@11",
  AE: "e1 ~ e1 ~ e1 ~ e1@2 e2@3 ~ e1@2 e2@4 e1@2 ~@2 e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  AF: "e1 ~ e1 ~ e1 ~ e1 ~ e2@3 ~ e1 ~ e2@4 e1@3 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  AG: "e1 ~ e1 ~ e1 ~ e1 ~ e2@3 ~ e1 ~ e2@3 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  AH: "a1 ~ a1 ~ a1 ~ a1 ~ a2@3 ~ a1 ~ a2@4 a1 ~@3 a1 ~ a1 ~ e1 ~ f#1 ~ g#1 ~",
  AI: "a1 ~ a1 ~ a1 ~ a1 ~ a2@2 ~@2 a1 ~ a2@3 ~ a1 ~@3 a1 ~ a1 ~ e1@2 f#1 ~ g#1 ~",
  AJ: "a1 ~ a1 ~ a1 ~ a1 ~ a2@2 ~@2 a1 ~ a2@3 ~ a1@2 ~@2 a1 ~ a1 ~ e1 ~ f#1 ~ g#1 ~",
  AK: "[a1,a#1] ~ a1 ~ a1 ~ a1 ~ a2@2 ~@2 a1 ~ a2@2 ~@2 a1@2 ~@2 a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", // A#maj7
  AL: "c2 ~ c2 ~ c2 ~ c2 ~ c3@3 ~ c2 ~ c3@4 c2 ~@3 c2 ~ c2 ~ g1 ~ a1 ~ b1 ~",
  AM: "c2 ~ c2 ~ c2 ~ c2 ~ c3@2 ~@2 c2 ~ c3@4 c2 ~@3 c2 ~ c2 ~ g1 ~ a1 ~ b1 ~",
  AN: "c2 ~ c2 ~ c2 ~ c2 ~ c3@2 ~@2 c2 ~ c3@3 ~ c2@2 ~@2 c2 ~ c2 ~ g1 ~ a1 ~ b1 ~",
  AO: "c2 ~ c2 ~ c2 ~ c2 ~ c3@3 ~ c2 ~ c3 ~@3 c2@2 ~@2 c2 ~ c2 ~ g1 ~ a1 ~ b1 ~",
  AP: "[d1,e1] ~ e1 ~ e1 ~ e1 ~ e2@3 ~ e1 ~ e2@4 e1@2 ~@2 e1 ~ e1 ~ e1 ~ e1 ~ e1 ~", // Dsus2
  AQ: "e1 ~ e1 ~ e1 ~ e1 ~ e2@3 ~ e1 ~ e2@4 e1 ~@3 e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  AR: "e1 ~ e1 ~ e1 ~ e1 ~ e2@2 ~@2 e1 ~ e2@4 e1@2 ~@2 e1 ~ e1 ~ e1 ~ e1@2 ~@2",
  AS: "d1 ~ d1 ~ d1 ~ d1 ~ d2@3 ~ d1 ~ d2@4 d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~",
  AT: "d1 ~ d1 ~ d1 ~ d1 ~ d2@3 ~ d1 ~ d2@3 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~@3", AU: "a#1@7 ~ a1@7 ~",
  AV: "g#1@7 ~ g1@6 ~@2", AW: "e1 ~@4 e1 ~ e2 ~@17 e2 ~ e1 ~ e2 ~ e1", AX: "~@2 e2 ~@29",
})).s("gm_electric_bass_finger").gain(0.8)

// bass · electric bass finger · "Bass" · soft notes
const bass_soft = note("<~@7 A ~ A ~ B C@2 B D E F G H ~@35 I ~>".pickRestart({
  A: "~@7 g1", B: "~@28 d2@3 ~", C: "e1@3 ~@5 e1@4 ~@16 d2@3 ~", D: "a2@3 ~@29", E: "a2@3 ~@21 e2@2 ~@6",
  F: "a2@3 ~@13 f#2@2 ~@6 e2@2 ~@6", G: "a2@3 ~@5 g#2@2 ~@6 f#2@2 ~@6 e2@4 ~@4", H: "~@3 g1",
  I: "~@3 e2@2 ~@4 e1 ~ e2 ~@2 e1 ~ e2 ~ e1 ~ e2 ~ e1 ~@9",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · percussive organ · "Organ"
const percussive_organ = note("<~@27 A@4 B@4 C@4 A@4 B@4 C@4 D E F G H ~>".pickRestart({
  A: "[[e4,c#5]@16 ~@2 f#4@14 [e4,a4,c#5]@15 ~ [f#4,a4,b4,d5]@15 ~ [e4,a4,c#5]@15 ~ [f#4,a4,b4,d5]@15 ~ [e4,a4,c#5]@15 ~ [f#4,a4,b4,d5]@15 ~, [a2,a3]@125 ~@3, a4@31 ~@97, ~@8 [b4,d5]@7 ~@49]/4", // C#m A Bm7 A Bm7 A Bm7 A …
  B: "[[c5,e5]@16 [b4,d5]@15 ~ [g4,c5,e5]@15 ~ [g4,b4,d5]@15 ~ [g4,c5,e5]@15 ~ [g4,b4,d5]@15 ~ [g4,c5,e5]@15 ~ [g4,b4,d5]@15 ~, [c3,c4]@125 ~@3, g4@31 ~@97]/4", // C Bm C G C G C G …
  C: "[[g#4,b4,e5]@15 ~ [g4,c5,e5]@7 ~ [f#4,a4,d5]@7 ~ [g#4,b4,e5]@15 ~ [g4,c5,e5]@7 ~ [f#4,a4,d5]@6 ~@2 [g#4,b4,e5]@15 ~ [g4,c5,e5]@7 ~ [f#4,a4,d5]@7 ~ [g#4,b4,e5]@15 ~ [g4,c5,e5]@7 ~ [f#4,a4,d5]@7 ~, [e2,e3]@127 ~, ~@88 a#4 ~@39]/4", // E C D E C D E C …
  D: "[g4,a#4,d#5]@2 ~ [f#4,a4,d5] [f#4,a4,d5]@3 ~ [e4,g4,c5] ~ [d#4,f#4,b4]@5 ~", // D# D C B
  E: "[g4,a#4,d#5]@2 ~ [f#4,a4,a#4,d5] [f#4,a4,d5]@3 ~ [e4,g4,c5] ~ [d#4,f#4,b4]@5 ~", // D# D C B
  F: "[e3,e4,a#4,e5] [a3,d#4,a4,d#5]", G: "[d3,d4,g#4,d5] [g3,c#4,g4,c#5]", H: "~@3 [e2,e3]@29, e4@29 ~@3",
})).s("gm_percussive_organ").gain(0.21).pan(0.6)

// other · distortion guitar · "Guitar"
const distortion_guitar = note("<~@15 A B C D E F G H I J K L M N C O P F Q R S@18 T U V ~>".pickRestart({
  A: "c#4@6 d4 e4", B: "c#4@27 ~ [b3,c#4]@2 a3@2", C: "c#4@12 d4 c#4 d4@2", D: "e4@27 ~ e4 ~ e4@2",
  E: "c4@12 d4 c4 d4@2, d4 ~@31", F: "e4@12 f4 e4 f4@2", G: "g4@23 ~@4 d4@5, ~@6 f4 ~, ~@13 e4 ~@2",
  H: "e4@6 c4 ~ c4@24", I: "e4@12 f#4 e4 f#4@2", J: "g#4@12 ~ g#4 a4@2, ~@25 a4@2 ~@5",
  K: "b4@23 ~ a4@2 ~ a4@5, ~@13 g#4 ~@2", L: "b4@27 ~ b4@2 ~@2", M: "~ c#4@23 d4@4 e4@4", N: "c#4@6 b3 a3",
  O: "e4@27 ~ e4@4", P: "c4@24 d4@3 ~ d4@4, ~@27 c4@2 ~@3", Q: "g4@12 f4 e4 d4@2", R: "e4@6 c4 ~ c4@23 ~", S: "e5!32",
  T: "[e3,e4] [d#3,d#4]", U: "[d3,d4] [c#3,c#4], c3 ~@31", V: "~ [e2,e3]@29 ~@2",
})).s("gm_distortion_guitar").gain(0.16).pan(0.9)

// chords · pan flute · Edim
const pan_flute = note(`<
  [~ e5@4 ~@2 [e5,a#5]@10 ~@15, a#5 ~@7]
  ~@10
  [~@12 [e5,a#5]@4 ~@2 [e5,a#5]@7 ~@7]
  ~
  [~@11 [e5,a#5]@4 ~@3 e5@8 ~@6, ~@17 a#5@8 ~@7]
  ~@25
  [~@12 [e6,a#6] ~ [e6,a#6] ~@2 [e6,a#6]@7 ~@8]
  ~@17
>`).s("gm_pan_flute").gain(0.17).pan(0.1)

// other · whistle
const whistle = note("<~@45 [~@12 e6 ~ d7@8 ~@10] ~@11>").s("gm_whistle").gain(0.11).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~@15
  [x ~@6 x]!3
  [x ~ x ~ x ~ x!2]!21
  [x ~@2 x!2 ~@3 x ~@3 x ~ x ~]!12
  [x!4]!2
  [x!2]!2
  ~@2
>`).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@11 A B@15 C D@6 C D@4 C D@6 C D@4 E F G@2 ~@2>".pickRestart({
  A: "~@4 x!3 ~ x ~@3 x!3 ~ x ~@3 x!3 ~ x ~@3 x ~@3", B: "x ~@3 x!3 ~ x ~@3 x!3 ~ x ~@3 x!3 ~ x ~@3 x ~@3",
  C: "x ~ x!3 ~ x!10", D: "x ~ x!3 ~ x!3 ~ x!6", E: "x ~@2 x!2 ~ x!10", F: "x ~@2 x!2 ~ x!3 ~ x!6",
  G: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3",
})).gain(0.56)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@3
  [~@5 x!2 ~ x ~@3 x!3 ~ x ~@3 x!3 ~ x ~@3 x ~@3]
  [x ~@3 x!3 ~ x ~@3 x!3 ~ x ~@3 x!3 ~ x ~@3 x ~@3]!7
  x
  ~@45
>`).gain(0.16)

// drums · hihat
const hihat = s("hh").struct("<~@3 A@8 B@3 A@9 B@3 A@9 B@3 A@9 B@4 A@2 C ~@3>".pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@31 A ~@7 A ~@3 A B ~@3 C ~@4 D E A ~>".pickRestart({
  A: "x", B: "x ~@6 x", C: "x!4 ~@12", D: "~ x", E: "x!2",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A@4 B@3 C B@3 D B@3 E ~@3 F G H I J K@2 L@2 ~@2 M@2 ~@2>".pickRestart({
  A: "~ x ~@2", B: "~@3 x!2 ~@2 x!2 ~@3 x!3 ~", C: "~@3 x!2 ~@2 x!2 ~@3 x!4", D: "~@3 x!2 ~@3 x ~@2 x!5",
  E: "~@6 x ~ x ~@5 x ~ x ~@7 x!8", F: "~@12 x!4", G: "~@9 x!7", H: "~@3 x!2 ~@7 x!2 ~@2", I: "~@3 x!2 ~ x!2 ~@8",
  J: "x ~@2 x!2 ~ x!2 ~@7 x", K: "~@6 x!2", L: "x!4 ~@8 x ~ x ~", M: "~@6 x!2 ~@6 x!2",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@23 A B@3 ~@3 C ~@7 D ~@3 E ~ F G H G@3 F G@2 I@2 ~@2>".pickRestart({
  A: "x!2 ~@6", B: "x!4 ~@12", C: "~@8 x!6 ~@2", D: "~@8 x!16 ~@8", E: "~@8 x!4 ~@4", F: "~@9 x ~ x ~@4",
  G: "~@9 x ~ x!2 ~ x ~", H: "~@9 x!6 ~", I: "~@4 x!2 ~@6 x!2 ~@2",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@26 A B@13 C@2 D C@4 B ~@5 C@2 ~@2>".pickRestart({
  A: "~@3 x ~@4", B: "x", C: "x!2", D: "x ~@8 x ~ x!5",
})).gain(0.8)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@42 [~@4 x!2 ~@2] ~@8 [x!2]!2 ~@4>").gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@22 [~@3 x] ~@11 [~@8 x!3 ~ x!3 ~] ~@22>").gain(0.8)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@26 [~@5 x ~@2] ~@20 [~@9 x ~@22] ~@9>").gain(9.4)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@14 [~@6 x!2] [~@12 x!4] [~@13 x!3]!2 [~@16 x ~ x!3 ~ x ~@9] ~@38>")
  .gain(3.06)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct("<~@15 x!3 [x ~@12 x ~ x] ~@38>").gain(3.06)

// drums · shaker
const shaker = s("sh").struct("<~@22 [~@13 x!3] x ~@33>").gain(0.64)

// drums · whistle
const whistle_2 = s("ballwhistle:0").struct("<~@35 x ~ x ~@19>").gain(0.62)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  ~@19
  [~@8 x ~@2 x ~@4]
  [x ~@3 x ~@3 x ~@5 x!2]
  [x!3 ~]
  [x ~@7 x ~@14 x ~ x ~ x ~@4]
  x
  ~@33
>`).gain(0.7)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<~@19 [~@12 x!4] [~@10 x!4 ~@2] [~@12 x!4] [~@15 x] ~@34>").gain(0.7)
// … 14 more lines

More by Genesis