Strudelify
I Can't Dance cover art

1991 · We Can't Dance

I Can't Dance

Genesis

KeyE♭ majorTempo107 bpm
0:00/0:00
// I Can't Dance — Genesis
// 107 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 12 "E.PIANO 2" epiano2 (copy of ch 3 "E.PIANO 2" epiano2); ch 9 "DISTORTION" distortion guitar (copy of ch 4 "DISTORTION" distortion guitar, 0.115 beats late)
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(107/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@27 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C D E F G@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C D E F G@2 H I J@2 A@2 B@2 A@2 B@2
  K@2 L@2 A@2 B@2 A@2 B@2 K@2 L@2 A@2 B@2 K@2 M@3
>`.pickRestart({
  A: "[bb1@4 bb1 ~@9 bb1@6 bb1 ~@11]/2", B: "[bb1@4 bb1 ~@9 ab1@8 eb1@10]/2", C: "bb1@4 bb1 ~@5 eb1@2 ~@2 ab1@2",
  D: "~@2 eb1@2 ~@2 ab1@2 ~@2 eb1@3 ~@3", E: "gb1", F: "f1", G: "[eb1@15 ~]/2", H: "db2@14 gb2 ab2", I: "b1",
  J: "[ab1@15 ~]/2", K: "[bb1@7 ~@7 bb1@8 ~@4 ab1@2 bb1@2 db2@2]/2", L: "[bb1@8 ~@6 ab1@8 eb1@9 ~]/2",
  M: "[bb1@8 ~@6 ab1@8 eb1@8 bb1@5 ~ ab1@2 ~@2 bb1@2 ~@6]/3",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@43 A B C@2 D E F G H I J K H I J K L M N O P Q R@2 S T U@2 V W X@2 D E F G Y@2 Z@2 AA@2 AB@2 AC AD@3 Y AD@3 AE AF
  AG@2 AH@2 AI@2 AJ AK@4
>`.pickRestart({
  A: "[gb2,gb3,bb3,db4]", B: "[f2,f3,ab3,c4]",
  C: "[bb3@14 bb3@4 ~@4 eb2@2 [eb3,bb3]@2 eb3@2 eb3@2 eb2 ~, g3@13 ~@3, eb2@11 ~ eb2@3 ~, eb3@5 eb3 ~@2, ~@18 bb3@6 ~@2 bb3@5 ~]/2", // Eb5
  D: "~@4 [ab3,eb4] ~@3 ab3@2 g3@4 bb3@2, bb2@14 f3 ~, ~ eb4", // Ab5
  E: "~@2 f3 ~ [ab3,eb4] ~@3 ab3@2 g3@4 bb3@2, bb2@14 f3 ~, ~@8 eb4@7 ~", // Ab5
  F: "~@2 f3 ~ [ab3,eb4] ~@3 ab3@2 g3@4 bb3@2, bb2@15 ~, ~@4 eb4@3 ~", // Ab5
  G: "~@4 bb3@2 eb2 ~ [eb2,eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3]@3 ~, ab2@3 ~@5", // Eb5
  H: "~@4 [ab3,eb4] ~@3 ab3@2 g3@3 ~ [f3,bb3]@2, [bb1,bb2]@7 ~, ~ eb4", // Ab5 Bb5 Bb
  I: "~@4 [ab3,eb4] ~@3 ab3@2 g3@3 ~ [f3,bb3]@2, [bb1,bb2]@7 ~, ~@4 eb4@3 ~", // Ab5 Bb5 Bb
  J: "~@2 eb3 ~ eb4@2 ~@2 ab3@2 g3@2 ~@2 [eb3,bb3]@2, [bb1,bb2]@15 ~, ~@4 ab3 ~@3 eb4@4 ~@4", // Eb5 Bb
  K: "~@4 eb3 ~ eb3@2 ~@2 [eb3,bb3] ~ [eb3,bb3]@3 ~, [ab1,ab2]@7 ~ [eb1,eb2]@8, ~ bb3 ~@2", // Eb5 Ab Eb
  L: "~@4 [ab3,eb4] ~@3 ab3@2 g3@3 ~ [f3,bb3] ~, [bb1,bb2]@7 ~, ~@4 eb4@3 ~", // Ab5 Bb5 Bb
  M: "~@2 eb3 ~ [ab3,eb4] ~@3 [ab3,eb4] ~ [bb3,f4] ~@3 [f3,bb3] ~, [bb1,bb2]@7 ~", // Ab5 Bb5 Bb
  N: "~@2 eb3 ~ [ab3,eb4] ~@3 ab3@2 g3@2 ~@2 [eb3,ab3]@2, [bb1,bb2]@15 ~, ~@8 eb4@5 ~@3", // Ab5 Bb
  O: "~@4 [eb3,bb3] ~ [eb3,bb3]@2 ~@2 eb3 ~ [eb3,bb3]@3 ~, [ab1,ab2]@7 ~ [eb1,eb2]@7 ~", // Eb5 Ab Eb
  P: "~@4 [ab3,eb4] ~@3 ab3@2 g3@3 ~ bb3@2, [bb1,bb2]@7 ~, ~@8 eb4@6 f3 ~", // Ab5 Bb
  Q: "~@2 bb3 ~ [ab3,eb4] ~@3 [ab3,eb4]@2 [bb3,f4]@4 bb3@2, [bb1,bb2]@15 ~", // Ab5 Bb5 Bb
  R: "[~@4 [ab3,eb4] ~@3 ab3 ~ g3@2 ~@6 [eb3,bb3] ~@7 eb3 ~ [eb3,bb3]@2 ~@2, [bb1,bb2]@15 ~ [ab1,ab2]@7 ~ [eb1,eb2]@7 ~, ~@4 eb4@2 ~ [eb3,ab3]@2 ~@2 [eb3,bb3]@2 ~@3]/2", // Ab5 Eb5 Bb Ab Eb Ab5 Eb5
  S: "[gb2,db3,gb3,bb3]", T: "[f2,c3,f3,ab3]",
  U: "[bb3@9 bb3!2 ~@3 bb3@2, [eb3,g3], eb2@3 eb2, ~@11 bb3@3 ~@2, ~@13 eb4@3]/2", V: "[db3,ab3,db4,f4]",
  W: "[b2,gb3,b3,eb4]", X: "[ab2@4 ~@9 ab3@2 bb3, eb4@11 eb4@5, ab3@9 ab3@4 ~@3, c4@14 c4@17 ~, ~ ab2@3]/2",
  Y: "~@4 [ab3,eb4] ~@3 ab3@2 ~@4 [f3,bb3]@2, [bb1,bb2], ~ eb4, ~@5 g3@3", // Ab5 Bb5 Bb
  Z: "[~@2 f3 ~ [ab3,eb4] ~@3 ab3@2 ~@8 eb3 ~ bb3@2 ~@4 db4@2 ~@2 [f3,bb3]@2, [bb1,bb2]@2 [ab1,ab2] [eb1,eb2], ~ eb4 ~@2, ~@5 g3@3 ~@8, ~@7 [eb3,bb3]@2 ~@2 [eb3,bb3]@2 eb3@3]/2", // Ab5 Bb5 Bb Ab Eb Eb5
  AA: "~@2 f3 ~ [ab3,eb4] ~@3 ab3@2 ~@4 [f3,bb3]@2, [bb1,bb2], ~ eb4, ~@5 g3@3", // Ab5 Bb5 Bb
  AB: "[~@2 f3 ~ [ab3,eb4] ~@3 ab3@2 ~@4 eb3@2 ~@4 bb3@2 eb3@2 ~@2 eb3@2 ~@2 [f3,bb3]@2, [bb1,bb2]@16 [ab1,ab2]@9 ~@7, ~ eb4 ~@2, ~@10 g3@6 ~@2 eb3@4 ~@2 [eb1,eb2]@7 ~, ~@7 bb3@3 ~ bb3@4 ~]/2", // Ab5 Bb5 Bb Ab Eb
  AC: "bb1@2 ~@2 [ab3,eb4] ~@3 ab3@2 ~@4 [f3,bb3]@2, bb2, ~ eb4, ~@5 g3@3", // Ab5 Bb5
  AD: "[~@4 [ab3,eb4]@2 g3 ~ [ab3,eb4]@2 [bb3,f4] ~@7 f3 ~ [ab3,eb4] ~@3 ab3@2 g3@4 ~@6 bb3@2 ~@4 [eb3,db4]@4 [eb3,bb3]@2, [bb1,bb2]@7 [f3,bb3]@2 ~@3 eb4@3 [eb3,bb3]@2 eb3@2 [eb3,bb3]@2 ~@3, ~@16 [bb1,bb2]@15 ~ [ab1,ab2]@8 eb2@7 ~]/3", // Ab5 Bb5 Ab5 Eb7 Eb5 Bb Bb5 Eb5 …
  AE: "~@4 [ab3,eb4] ~@3 [ab3,eb4] ~ [ab3,db4] ~@3 [f3,bb3]@2, [bb1,bb2]@13 ~@3", // Ab5 Db5 Bb5 Bb
  AF: "~@4 [f3,bb3] ~@3 [ab3,db4] ~ [ab3,db4] ~@3 bb3@2, [bb1,bb2]@14 f3 ~", // Bb5 Db5 Bb
  AG: "[~@4 [ab3,eb4] ~@3 db4@2 [ab3,eb4] ~@7 eb3 ~@7 db4@2 bb3@2 [eb3,bb3] ~, [bb1,bb2]@15 ~ [ab1,ab2]@8 eb2@7 ~, ~@8 ab3 ~@5 [eb3,bb3]@4 ~@4 [eb3,bb3]@4 eb3 ~ eb3 ~@3]/2", // Ab5 Eb5 Bb Ab Eb5
  AH: "[~@4 [f3,bb3] ~@3 [ab3,db4]@2 [bb3,eb4] ~@9 [f3,bb3] ~@3 [ab3,db4]@2 [bb3,eb4] ~@3 [f3,bb3]@2, [bb1,bb2]@7 [ab3,db4]@3 ~@6, ~@16 [bb1,bb2]@15 ~]/2", // Bb5 Db5 Eb5 Bb5 Db5 Eb5 Bb5 Bb …
  AI: "[~@4 [f3,bb3] ~@3 [ab3,db4]@2 [bb3,eb4] ~@7 ab3@2 [eb3,bb3]@4 [ab3,db4] ~ [ab3,db4]@2 bb3@2 ~@2, [bb1,bb2]@12 ~@2 [eb3,bb3]@4 db3 ~@13, ~@8 [ab1,ab2]@4 [eb1,eb2]@3 ~]/2", // Bb5 Db5 Eb5 Db5 Bb Eb5 Ab Eb
  AJ: "~@4 [f3,bb3] ~@3 db4@2 [ab3,db4] ~@3 [f3,bb3] ~, [bb1,bb2]@15 ~, ~@8 ab3 ~@7", // Bb5 Db5 Bb5 Bb
  AK: "[~@4 [f3,bb3] ~@3 [ab3,db4]@2 [bb3,eb4] ~@9 [f3,bb3] ~@3 [ab3,db4] ~ [ab3,db4] ~@3 [ab1,ab2,eb3,bb3]@8 [eb1,eb2,eb3,bb3]@8 [bb2,f3,bb3]@5 ~ [ab2,eb3,ab3] ~@3 [bb2,f3,bb3]@2 ~@6, [bb1,bb2]@7 [ab3,db4]@3 ~@22, ~@16 [bb1,bb2]@15 ~@33]/4", // Bb5 Db5 Eb5 Bb5 Db5 Absus2 Eb5 Bb5 …
})).s("gm_epiano2").gain(0.31).pan(0.3)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  A B@2 C@2 B@2 C@2 B@2 D@2 E@2 D@2 F@2 G@2 H@2 I J K@2 B@2 D@2 H@2 D@2 F@2 G@2 H@2 L M N O P@2 B@2 D@2 B@2 D@2 H@2 Q@2
  F@2 G@2 H@2 L M N O R@2 S T U@2 B@2 D@2 B@2 D@2 H@2 Q@2 F@2 G@2 B@2 D@2 H@2 Q@2 B@2 D@2 H@2 V@3
>`.pickRestart({
  A: "~@6 [bb2,eb3,ab3] [bb2,eb3,g3]", // Ebsus4 Eb
  B: "[[bb2,f3]@4 [bb2,f3] ~@7 bb2 ~ [bb2,f3]@4 [bb2,eb3]@2 [bb2,f3] ~@7 [bb2,eb3,ab3]@2 [bb2,eb3,g3]@2]/2", // Bb5 Eb5 Bb5 Ebsus4 Eb
  C: "[[bb2,f3]@4 [bb2,f3] ~@9 [ab2,eb3]@4 [db3,ab3]@2 ~@2 [bb2,eb3,g3]@4 [bb2,eb3,g3]@2 [bb2,eb3,ab3]@2 [bb2,eb3,g3]@2]/2", // Bb5 Ab5 Db5 Eb Ebsus4 Eb
  D: "[[bb2,f3]@4 [bb2,f3] ~@9 [ab2,eb3]@4 [db3,ab3,db4]@2 ~@2 [bb2,eb3,g3]@4 [bb2,eb3,g3]@2 [bb2,eb3,ab3]@2 [bb2,eb3,g3]@2]/2", // Bb5 Ab5 Db5 Eb Ebsus4 Eb
  E: "[[bb2,f3]@4 [bb2,f3] ~@9 [bb2,f3]@4 [bb2,eb3]@2 [bb2,f3] ~@7 [bb2,eb3,ab3]@2 [bb2,eb3,g3]@2]/2", // Bb5 Eb5 Bb5 Ebsus4 Eb
  F: "[[bb2,f3]@4 [bb2,f3] ~@7 bb2 ~ [bb2,f3]@4 [bb2,eb3,bb3]@2 [bb2,f3] ~@7 [bb2,eb3,ab3]@2 [bb2,eb3,g3]@2]/2", // Bb5 Eb5 Bb5 Ebsus4 Eb
  G: "[[bb2,f3]@4 [bb2,f3] ~@9 [ab2,eb3]@4 [db3,ab3,db4]@2 ~@2 [bb2,eb3,g3]@4 [bb2,eb3,g3]@2 [bb2,eb3,ab3]@2 [bb2,eb3,g3,bb3]@2]/2", // Bb5 Ab5 Db5 Eb Ebsus4 Eb
  H: "[[bb2,f3,bb3]@4 [bb2,f3,bb3] ~@9 [bb2,f3,bb3]@4 [bb2,eb3,bb3]@2 [bb2,f3,bb3] ~@7 [bb2,eb3,ab3]@2 [bb2,eb3,g3]@2]/2", // Bb5 Eb5 Bb5 Ebsus4 Eb
  I: "[bb2,f3,bb3]@4 [bb2,f3,bb3] ~@5 [bb2,eb3,g3]@2 ~@2 [c3,eb3,ab3]@2", // Bb5 Eb Ab
  J: "~ [bb2,eb3,g3] ~ [c3,eb3,ab3]@3 [c3,eb3,ab3] [bb2,eb3,g3]", K: "[[bb2,f3]@27 ~ [bb2,eb3,ab3]@2 [bb2,eb3,g3] ~]/2",
  L: "[bb2,f3,bb3]@4 [bb2,f3,bb3] ~@5 [bb2,eb3,g3,bb3]@2 ~@2 [c3,eb3,ab3,c4]@2", // Bb5 Eb Ab
  M: "~ [bb2,eb3,g3,bb3] ~ [c3,eb3,ab3,c4] ~ [bb2,eb3,g3,bb3] ~@2", N: "[gb2,db3,gb3]@3 [gb2,db3,gb3]",
  O: "[f2,c3,f3]@3 [f2,c3,f3]", P: "[[eb2,bb2,eb3]@28 [eb2,bb2,eb3]@2 bb2 ~]/2",
  Q: "[[bb2,f3]@4 [bb2,f3] ~@9 [ab2,eb3]@4 [db3,ab3,db4]@2 ~@2 [bb2,eb3,g3]@4 [bb2,eb3,ab3]@2 [bb2,eb3,g3]@3 ~]/2", // Bb5 Ab5 Db5 Eb Ebsus4 Eb
  R: "[[eb2,bb2,eb3]@14 [eb2,bb2,eb3] bb2]/2", S: "[ab2,db3]", T: "[gb2,b2]", U: "[[ab2,eb3]@28 [ab2,eb3]@2 bb2 ~]/2",
  V: "[[bb2,f3]@4 [bb2,f3] ~@9 [ab2,eb3]@4 [db3,ab3,db4]@2 ~@2 [bb2,eb3,g3]@4 [bb2,eb3,ab3]@2 [bb2,eb3,g3]@2 [bb2,f3,bb3]@6 [ab2,eb3,ab3]@2 ~@2 [bb2,f3,bb3]@2 ~@6]/3", // Bb5 Ab5 Db5 Eb Ebsus4 Eb Bb5 Ab5 …
})).s("gm_distortion_guitar").gain(0.22).pan(0.9)

// other · celesta
const celesta = note("<~@5 A@3 ~ A@3 ~ A@3 ~@11 A@3 ~ A@3 ~@74>".pickRestart({
  A: "~@8 eb6@3 ~@5",
})).s("gm_celesta").gain(0.19)

// other · pad halo · "HALO PAD"
const pad_halo = note(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ B ~@3 A ~@2 A ~@4 B ~@3 C ~@7 A ~@3 A ~@3 A ~@3 B ~@3 B ~@11 A ~@11 A ~@17
>`.pickRestart({
  A: "~@8 bb6 ~@7", B: "~@10 bb6 ~@5", C: "~@6 bb6 ~@9",
})).s("gm_pad_halo").gain(0.21).pan(0.9)

// drums · kick
const kick = s("bd").struct("<~ A@74 B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 C B>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~ x!3 ~@3", C: "x!2 ~ x!3 ~ x",
})).gain(0.54)

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

// drums · clap
const clap = s("cp").struct("<~@27 [~@2 x ~@3 x!2]!16 [~ x ~ x]!3 [~@2 x ~@3 x!2] [~ x ~ x]!60 [~ x!2 ~]>").gain(0.42)

// drums · mid tom
const mid_tom = s("mt").struct("<~ [~ x ~@2]!107>").gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.42)

// drums · congas
const congas = s("conga:13").struct("<~@26 [~@3 x ~@4] ~@32 [~ x ~@6]!8 ~@41>").gain(0.96)

// drums · congas
const congas_2 = s("conga:18").struct("<~@59 [~@2 x!3 ~@3]!8 ~@41>").gain(0.96)

// drums · congas
const congas_3 = s("conga:33").struct("<~ [x ~@2 x!2 ~@3]!107>").gain(0.96)

// drums · claves
const claves = s("clave:2").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(1.76)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A ~ A@3 ~ A@2 ~@2 A@3 ~ A@3 ~@8 A ~@8 A@3 ~ A@3 ~@12 A@4 ~ A@3 ~@8 A ~@13
>`.pickRestart({
  A: "~ x ~@6",
})).gain(0.7)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct(`<
  ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@2 ~@2 A ~ A@3 ~ A@2 ~@2 A@3 ~ A@2 ~@18 A@3 ~ A@2 ~@14 A@3 ~ A@3 ~@22
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.7)

// drums · triangle
const triangle = s("triangles:35").struct("<~@25 [~ x] ~@82>").gain(4.7)

// drums · rim
const rim = s("rim").struct("<~ [~ x]!3 ~@104>").gain(0.42)

stack(
  bass, epiano2, distortion_guitar, celesta, pad_halo, kick, snare, clap, mid_tom, tambourine, congas, congas_2,
  congas_3, claves, woodblocks, woodblocks_2, triangle, rim
)

More by Genesis