Strudelify

Carpet Crawl

Genesis

KeyA majorTempo76 bpm
0:00/0:00
// Carpet Crawl — Genesis
// 76 bpm, 4/4, key A major. 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: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 95 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(76/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.

// bass · fretless bass
const bass = note(`<
  ~@15 A@2 B C B C B C B D@2 E F E F G H I J I J I J I J K@2 L M L M N H I J I J I J I J K@2 L M L M N H I J I J I J I O
  K@2 L M L M N H I J I J I J I J K@2 L P L Q G
>`.pickRestart({
  A: "[~@4 d2 d3 d2 d3, ~@30 f#3@13 ~@21, ~@31 a2@16 ~ a2@16, ~@31 d3@9 ~@24]/2", B: "e2 e3 e2 e3, b2!2",
  C: "d2 d3 d2 d3, a2!2", D: "f#2 f#3 f#2 f#3, c#3!2", E: "a2 a3 a2 a3, e3!2", F: "g2 g3 g2 g3, d3!2", G: "f#2!2 d2!2",
  H: "c2!2 b1!2", I: "[d2,a2] d3 [d2,a2] d3", J: "[e2,b2] e3 [e2,b2] e3", K: "[f#2,c#3] f#3 [f#2,c#3] f#3",
  L: "[a2,e3] a3 [a2,e3] a3", M: "[g2,d3] g3 [g2,d3] g3", N: "[f#2,d3] f#2 [d2,d3] d2",
  O: "e2 e3 [e2,b2] e3, b2@11 ~@21", P: "[g2,d3]@8 g3@7 ~ g2@8 g3@8, ~@15 d3@8 ~@9", Q: "[g2,d3] g3 g2 g3",
})).s("gm_fretless_bass").gain(0.32)

// other · lead 3 calliope
const lead_3_calliope = note(`<
  ~@16 A B C D E F G@2 H I J@2 K@2 L M N ~@6 O H I J@2 K@2 L P Q R S T U V W@2 H I J@2 K@2 L P X ~@6 O H I J@2 K@2 L P X
  ~@7 Y Z J@2 K@2 L
>`.pickRestart({
  A: "~@14 a4@2 a4@3 ~ a4@3 ~@9", B: "~@7 b4 ~@3 g5@3 ~@2", C: "g5@2 f#5@2 d5@7 ~ f#5@2 ~@8 g5@3 ~ a5@4 ~@2",
  D: "g5@4 f#5@5 ~@11 b4@4 d5@4 ~@4", E: "~@12 a4@3 ~ a4@4 d5@6 a4@6", F: "b4@5 ~ b4 ~@9",
  G: "[~@12 f#5@2 ~@8 g5@3 ~ a5@4 g5@4 f#5@4 ~@16 f#5@6 ~@2 a4@2]/2", H: "a4@2 e5@2 ~@2 c#5@4 a4@3 ~@3",
  I: "a4@3 ~ a4@5 ~@3 b4@8 c#5@7 ~@5", J: "[~@16 c#5@2 d5@2 c#5@2 b4@6 a4@2 ~ b4@5 a4@8 a5@8 b4@6 d5@6]/2",
  K: "[e5@11 ~@5 c#5@2 d5@2 c#5@2 b4@6 a4@2 b4@6 a4@8 a5@8 b4@6 d5@6]/2", L: "f#5@11 ~@5 c5@2 c5@2 b4@2 a4@10",
  M: "~@2 g4 a4 b5@4", N: "a5 ~@3", O: "~@15 a4", P: "~@2 g4 a4 [g5,b5]@4",
  Q: "~@4 c5@3 ~ c5@2 c5@3 ~ d5@3 ~ a4@2 a4@5 ~@5 b4@2, [f#5,a5] ~@3", // F#m
  R: "c5@3 ~ c5@3 ~ f#5@2 e5@2 d5 ~ d5@4 ~@10 f#5@2 f#5@2",
  S: "f#5@3 ~ a5@2 ~@2 g5@2 f#5@3 ~ e5@2 ~@2 g5@3 ~ f#5@2 d5@3 ~ d5 ~ d5@2",
  T: "e5@2 d5@3 ~@3 f#5@2 e5@2 d5 ~ d5@6 ~@10 d5@2", U: "c#5@4 d5@2 e5@6 f#5@2 g5@6 f#5@2 e5@5 ~@3 d5@2",
  V: "b5@3 ~ a5@3 ~ g5@3 ~ f#5 ~ f#5@3 ~ e5@2 d5@4 ~@2 g5@3 ~ f#5 ~",
  W: "[f#5@2 d5@2 ~@4 g5@2 f#5@2 ~@2 e5@3 ~ d5@3 ~@5 a4@2 ~@2 f#5@6 e5@3 ~ g5@4 f#5@3 ~ f#5@4 e5@5 ~@5 a4@2]/2",
  X: "[f#5,a5] ~@3", Y: "a4@2 e5@2 ~@2 e5@4 c#5@3 ~@3", Z: "c#5@3 ~ c#5@5 ~@3 d5@8 e5@7 ~@5",
})).s("gm_lead_3_calliope").gain(0.35)

// other · lead 3 calliope · soft notes
const lead_3_calliope_soft = note("<~@16 A@2 B C@2 D@2 E ~@71>".pickRestart({
  A: "[~@24 d5@4 a4@2 b4@15 ~@3 g5@5 ~@7 f#5@4]/2", B: "~@14 f#5@2 f#5@2 f#5@3 ~@11",
  C: "[~@10 e5@3 ~ e5@2 g5@4 ~@8 e5@2 f#5@10 ~@24]/2",
  D: "[~@14 b4@2 g5@4 f#5@4 e5@2 f#5@3 ~ f#5@11 ~@5 f#5@2 f#5@2 f#5@3 ~@11]/2", E: "~@10 g5@3 ~ g5@2 f#5@4 e5@2 ~@10",
})).s("gm_lead_3_calliope").gain(0.2)

// chords · epiano1
const epiano1 = note(`<
  ~@56 A B C D E F G H I J K L I J K L A B C D E F M N I J K L I J K L A B C D E F G
>`.pickRestart({
  A: "[f#3,c#4]@2 ~@2 [f#3,c#4]@2 ~@2 [f#3,c#4]@2 ~@2 [f#3,c#4]@2 ~@2 [f#3,c#4]@3 ~ [f#3,c#4]@2 ~@2 [f#3,c#4]@3 ~ [f#3,c#4]@2 ~@2", // F#5
  B: "[f#3,c#4]@3 ~ [f#3,c#4]@2 ~@2 [f#3,c#4]@3 ~ [f#3,c#4]@3 ~ [f#3,c#4]@3 ~ [f#3,c#4]@2 ~@2 [f#3,c#4]@2 ~@2 [f#3,c#4]@2 ~@2", // F#5
  C: "[a3,e4]@2 ~@2 [a3,e4]@3 ~ [a3,e4]@3 ~ [a3,e4]@2 ~@2 [a3,e4]@3 ~ [a3,e4]@2 ~@2 [a3,e4]@3 ~ [a3,e4]@2 ~@2", // A5
  D: "[g3,d4]@2 ~@2 [g3,d4]@3 ~ [g3,d4]@2 ~@2 [g3,d4]@2 ~@2 [g3,d4]@3 ~ [g3,d4]@2 ~@2 [g3,d4]@3 ~ [g3,d4]@3 ~", // G5
  E: "[a3,e4]@2 ~@2 [a3,e4]@3 ~ [a3,e4]@3 ~ [a3,e4]@2 ~@2 [a3,e4]@3 ~ [a3,e4]@3 ~ [a3,e4]@3 ~ [a3,e4]@2 ~@2", // A5
  F: "[g3,d4]@2 ~@2 [g3,d4]@2 ~@2 [g3,d4]@3 ~ [g3,d4]@3 ~ [g3,d4]@2 ~@2 [g3,d4]@3 ~ [g3,d4]@3 ~ [g3,d4]@2 ~@2", // G5
  G: "[f#3,d4]@3 ~ [f#3,d4]@2 ~@2 [f#3,d4]@3 ~ [f#3,d4]@2 ~@2 [f#3,d4]@3 ~ [f#3,d4]@3 ~ [f#3,d4]@3 ~ [f#3,d4]@2 ~@2", // D
  H: "[e3,c4]@2 ~@2 [e3,c4]@2 ~@2 [e3,c4]@3 ~ [e3,c4]@2 ~@2 [e3,b3]@3 ~ [e3,b3]@2 ~@2 [e3,b3]@3 ~ [e3,b3]@2 ~@2", // C E5
  I: "[d4,a4]@2 ~@2 [d4,a4]@3 ~ [d4,a4]@3 ~ [d4,a4]@2 ~@2 [d4,a4]@3 ~ [d4,a4]@3 ~ [d4,a4]@2 ~@2 [d4,a4]@3 ~", // D5
  J: "[e4,b4]@3 ~ [e4,b4]@3 ~ [e4,b4]@3 ~ [e4,b4]@3 ~ [e4,b4]@2 ~@2 [e4,b4]@3 ~ [e4,b4]@2 ~@2 [e4,b4]@2 ~@2", // E5
  K: "[d4,a4]@3 ~ [d4,a4]@3 ~ [d4,a4]@3 ~ [d4,a4]@2 ~@2 [d4,a4]@3 ~ [d4,a4]@2 ~@2 [d4,a4]@2 ~@2 [d4,a4]@2 ~@2", // D5
  L: "[e4,b4]@3 ~ [e4,b4]@3 ~ [e4,b4]@3 ~ [e4,b4]@3 ~ [e4,b4]@3 ~ [e4,b4]@2 ~@2 [e4,b4]@2 ~@2 [e4,b4]@2 ~@2", // E5
  M: "[f#3,d4]@2 ~@2 [f#3,d4]@2 ~@2 [f#3,d4]@3 ~ [f#3,d4]@2 ~@2 [f#3,d4]@3 ~ [f#3,d4]@2 ~@2 [f#3,d4]@3 ~ [f#3,d4]@2 ~@2", // D
  N: "[e3,c4]@3 ~ [e3,c4]@2 ~@2 [e3,c4]@3 ~ [e3,c4]@2 ~@2 [e3,b3]@3 ~ [e3,b3]@3 ~ [e3,b3]@3 ~ [e3,b3]@2 ~@2", // C E5
})).s("gm_epiano1").gain(0.14).pan(0.3)

// other · lead 3 calliope
const lead_3_calliope_2 = note("<~@80 A B@6 C@2 ~@6>".pickRestart({
  A: "~@10 a4 ~ b4@2 a4 ~", B: "[~@10 d5@2 e5@2 g5@4 f#5@4 d5@2 ~@2 a4 ~ b4@2 a4 ~]/2",
  C: "[~@20 d5@4 e5@4 g5@8 f#5@27 ~]/2",
})).s("gm_lead_3_calliope").gain(0.45).pan(0.6)

// chords · synth strings 1
const synth_strings_1 = note("<~@64 A@4 B C@2 D E@3 F@2 G@2 H A@4 B C@2 D E@3 F@2 G@2>".pickRestart({
  A: "[[d5,f#5]@31 [e5,g5]@32 [d5,f#5]@32 [e5,g5]@32 ~]/4", B: "[a4,d5]", C: "[[e5,g5]@31 [a4,f#5]@33]/2", D: "[b4,g5]",
  E: "[a4@2 e5, c#5]/3", F: "[[b4,d5]@31 [c#5,e5]@33]/2", G: "[b4@31 ~ a4@32, d5]/2", H: "c5 b4, e5",
})).s("gm_synth_strings_1").gain(0.21).pan(0.4)

// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@26 A@2 B@2 C@2 ~@10 A@2 B@2 C@2 D ~@9 A@2 B@2 C@2 D ~@9 A@2 B@2 C@2 ~@10 A@2 B@2 E
>`.pickRestart({
  A: "[[a5,c#6]@27 ~@3 b5@6 [g5,b5]@16 f#5@6 g5@6]/2", B: "[[a5,c#6]@15 b5@3 [g5,b5]@12 a5@2]/2",
  C: "[[f#5,a5]@26 ~@4 g5@6 [e5,g5]@23 ~@5]/2", D: "f#5 ~@3", E: "[f#5,a5]@13 ~@2 g5",
})).s("gm_electric_guitar_jazz").gain(0.4).pan(0.6)

// other · music box
const music_box = note(`<
  A@2 B C D E F G A@2 B C D E F H I J I J I J I J K@2 L M N M I O I J I J I J I J K@2 L M N M I O I J I J I J I J K@2 L
  M N M I O I J I J I J I J K@2 L M N M I O I J I J I J I J K@2 L M N M P
>`.pickRestart({
  A: "[~@63 e4, e5@3 e4@3 b4@3 d#5@3 e5@17 a4@17 b4@15 a4@3, ~ d#5@3 e5@3 e4@3 b4@3 d#5@17 g#4@17 e4 c#5 a4 g#4 e4 c#5 a4 g#4 e4 c#5 a4 g#4 e4 c#5@4, ~@2 b4@3 d#5@3 e5@3 e4@3 b4@17 e4 e5 d#5 b4 e4 e5 d#5 b4 e4 e5 d#5 b4 e4 e5@18 g#4@2, ~@15 e4 c#5 a4 g#4 e4 c#5 a4 g#4 e4 c#5 a4 g#4 e4 c#5@17 d#5@19]/2",
  B: "~@31 d#4, c#5@3 d#4@3 f#4@3 a4@3 c#5@3 d#4@3 f#4@3 a4@3 c#5@3 d#4@3 f#4@2, ~ a4@3 c#5@3 d#4@3 f#4@3 a4@3 c#5@3 d#4@3 f#4@3 a4@3 c#5@4, ~@2 f#4@3 a4@3 c#5@3 d#4@3 f#4@3 a4@3 c#5@3 d#4@3 f#4@3 a4@3",
  C: "c#5 ~@30 c#4, ~ g#4@3 c#5@3 c#4@3 f4@3 g#4@3 c#5@3 c#4@3 f4@3 g#4@3 c#5@4, ~@2 f4@3 g#4@3 c#5@3 c#4@3 f4@3 g#4@3 c#5@3 c#4@3 f4@3 g#4@3, ~@3 c#4@3 f4@3 g#4@3 c#5@3 c#4@3 f4@3 g#4@3 c#5@3 c#4@3 f4@2",
  D: "~@10 e4 c#4 ~@3 d4 ~@10 e4 c#4 ~@3 d4, c#5@3 c#4@3 e4@3 g#4@2 ~@2 a4@3 ~ g#4@3 c#5@3 c#4@4 ~@3 f#4@2, ~ g#4@3 c#5@3 c#4@4 ~@3 f#4@2 ~@2 e4@3 g#4@3 c#5@3 ~ c#5@4, ~@2 e4@3 g#4@3 c#5@3 ~ c#5@4 c#5@3 c#4@3 e4@3 g#4@2 ~@2 a4@3",
  E: "~@11 c#4 ~@3 d4 ~@11 c#4 ~@3 d4, c#5@3 c#4@3 e4@3 g#4@3 ~ a4@3 ~ g#4@3 c#5@3 c#4@3 e4@2 ~@2 f#4@2, ~ g#4@3 c#5@3 c#4@3 e4@2 ~@2 f#4@2 ~@2 e4@3 g#4@3 c#5@4 c#5@4, ~@2 e4@3 g#4@3 c#5@4 c#5@4 c#5@3 c#4@3 e4@3 g#4@3 ~ a4@3",
  F: "~@7 d4 ~@15 d4 ~@7 d4, c#5@3 d4@3 f#4@4 f#4@3 a4@3 c#5@3 d4@4 ~@4 d4@4 ~, ~ a4@3 c#5@4 b4@3 d4@3 f#4@3 a4@3 c#5@3 ~ b4@4 b4@3 ~, ~@2 f#4@3 a4@3 ~ a4@3 b4@9 a4@2 ~@2 a4@4 a4@2 ~, ~@15 d4@3 f#4@4 f#4@2 ~@2 f#4@4 f#4@2",
  G: "~@31 e4, c#5@3 e4@3 g#4@3 a4@3 c#5@3 e4@3 g#4@3 a4@3 c#5@3 e4@3 g#4@2, ~ a4@3 c#5@3 e4@3 g#4@3 a4@3 c#5@3 e4@3 g#4@3 a4@3 c#5@4, ~@2 g#4@3 a4@3 c#5@3 e4@3 g#4@3 a4@3 c#5@3 e4@3 g#4@3 a4@3",
  H: "~@3 d4 ~@3 d4 ~@7 d4 ~@3 d4 ~@3 d4 ~@7 d4, d5@2 g4@2 ~ a4@2 ~ c#5@3 d4@3 g4@2 ~@2 g4@2 ~@2 g4@2 ~@2 g4@3 a4@2 ~, ~ a4@2 ~ d5@2 g4@2 ~ a4@3 c#5@3 ~ d5@2 ~@2 d5@2 ~@2 c#5@3 d4@3 g4@2, ~@10 g4@3 a4@2 ~@2 a4@2 ~@2 a4@2 ~@2 a4@3 c#5@3 ~",
  I: "d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 f#4 a4",
  J: "e5 b4 g4 b4 e5 b4 g4 b4 e5 b4 g4 b4 e5 b4 g4 b4 e5 b4 g4 b4 e5 b4 g4 b4 e5 b4 g4 b4 e5 b4 g4 b4",
  K: "f#5 e5 c#5 a4 f#5 e5 c#5 a4 f#5 e5 c#5 a4 f#5 e5 c#5 a4 f#5 e5 c#5 a4 f#5 e5 c#5 a4 f#5 e5 c#5 a4 f#5 e5 c#5 a4",
  L: "a5 e5 d5 c#5 a5 e5 d5 c#5 a5 e5 d5 c#5 a5 e5 d5 c#5 a5 e5 c#5 e5 a5 e5 c#5 e5 a5 e5 c#5 e5 a5 e5 c#5 e5",
  M: "g5 d5 b4 d5 g5 d5 b4 d5 g5 d5 b4 d5 g5 d5 b4 d5 g5 d5 b4 d5 g5 d5 b4 d5 g5 d5 b4 d5 g5 d5 b4 d5",
  N: "e5 c#5 a4 c#5 e5 c#5 a4 c#5 e5 c#5 a4 c#5 e5 c#5 a4 c#5 e5 c#5 a4 c#5 e5 c#5 a4 c#5 e5 c#5 a4 c#5 e5 c#5 a4 c#5",
  O: "e5 c5 g4 c5 e5 c5 g4 c5 e5 c5 g4 c5 e5 c5 g4 c5 g5 e5 b4 e5 g5 e5 b4 e5 g5 e5 b4 e5 g5 e5 b4 e5",
  P: "d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 f#4 a4 d5 a4 ~@2",
})).s("gm_music_box").gain(0.32).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@32 [x!2]!63>").gain(0.33)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@32 [~@15 x ~@15 x]!62 [~@15 x ~@16]>").gain(0.18)

// drums · snare
const snare = s("sd").struct("<~@32 [~@7 x!2 ~@14 x!2 ~@7]!31 [~@7 x!2 ~@14 x!2 ~@2 x!5] [~@7 x!2 ~@14 x!2 ~@7]!31>")
  .gain(0.22)

// drums · low tom
const low_tom = s("lt").struct("<~@79 [~@28 x!4] ~@15>").gain(0.29)

// drums · mid tom
const mid_tom = s("mt").struct("<~@79 [~@20 x!8 ~@4] ~@15>").gain(0.29)

// drums · open hat
const open_hat = s("oh").struct("<~@32 A B@15 A B@15 C D@14 E C D@13 F>".pickRestart({
  A: "~@3 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x",
  B: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x",
  C: "~@2 x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!2", D: "x ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!2",
  E: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2 ~@16", F: "x ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~@3",
})).gain(0.18)

// drums · high tom
const high_tom = s("ht").struct("<~@79 [~@16 x!4 ~@12] ~@15>").gain(0.29)

// drums · crash
const crash = s("cr").struct("<~@32 A ~@15 A ~@15 A ~@15 A ~@14>".pickRestart({
  A: "x",
})).gain(0.26)

stack(
  bass, lead_3_calliope, lead_3_calliope_soft, epiano1, lead_3_calliope_2, synth_strings_1, electric_guitar_jazz,
  music_box, kick, kick_soft, snare, low_tom, mid_tom, open_hat, high_tom, crash
)

More by Genesis