Strudelify
No Son of Mine cover art

1991 · We Can't Dance

No Son of Mine

Genesis

KeyE minorTempo110 bpm
0:00/0:00
// No Son of Mine — Genesis
// 110 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 11 "Bassheno" synth bass 2 (copy of ch 9 "Bassheno" electric bass finger)
// note: Full arrangement: all 170 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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 · string ensemble 1 · "LowStrin"
const string_ensemble_1 = note(`<
  ~@2 A@2 B@3 C@2 D A@2 B@3 C@2 D E@5 F@3 A@2 B@3 C@2 D E@5 F@3 G H I J K J L M N@3 O P Q P Q R S@2 T R U@3 V W@2 X Y@2
  Z@2 AA@2 AB@2 A@2 B@3 C@2 D A@2 B@3 C@2 D E@5 F@3 G H I J K J L M N@3 O P Q P Q R S@2 T R U@3 V W@2 X Y@2 Z@2 AA@2
  AB@2 A@2 AC@2 AD@2 AC@2 AD@2 AC@2 AD@2 AC@2 AD@2 AC@2 AD@2 AC@2 AE ~@7
>`.pickRestart({
  A: "[[b3,b4] [c3,c4], [e3,g3,e4,g4]]/2", B: "[[d3,a3,d4,a4] [b2,b3] [g3,b3,g4,b4], [f#3,f#4]@2 ~, ~ [e3,e4]@2]/3",
  C: "[[a3,a4]@16 [b2,b3]@15 ~, [d3,f#3,d4,f#4]]/2", D: "[c3,e3,g3,c4,e4,g4]",
  E: "[[b3,b4]@16 [c3,c4]@16 [d3,a3,d4,a4]@16 [e3,e4]@16 [d3,d4]@15 ~, [e3,g3,e4,g4]@2 [f#3,f#4]@3, ~@3 [b2,b3]@2]/5", // B C D5 E D Em F# B
  F: "[[a2,c#3,a3,c#4] [c3,c4] [b2,d3,b3,d4], [e3,e4]@2 ~, ~ [g2,g3]@2]/3", G: "[a2,f#3,a3,f#4], [d3,d4]@7 ~",
  H: "[b2,e3,g#3,b3,e4,g#4]", I: "[d3,f#3,a3,d4,f#4,a4]", J: "[e3,g#3,b3,e4,g#4,b4]", K: "[f#3,a3,f#4,a4], [d3,d4]@7 ~",
  L: "[f#3,a3,d4,f#4,a4,d5]", M: "[g#3,b3,e4,g#4,b4,e5]@15 ~",
  N: "[[c4,e4,c5,e5] [b3,b4] [a3,f#4,a4,f#5], [g3,g4]@2 ~, ~ [d4,d5]@2]/3", O: "[g3,c4,e4,g4,c5,e5]",
  P: "[a2,d3,f#3,a3,d4,f#4] [g2,c3,e3,g3,c4,e4]", Q: "[f#2,b2,d3,f#3,b3,d4] [g2,c3,e3,g3,c4,e4]",
  R: "[g3,b3,g4,b4] [f#3,a3,f#4,a4], [d3,d4]@15 ~", // G F#m D
  S: "[[c3,e3,c4,e4]@2 [d3,b3,d4,b4] [d3,f#3,a3,d4,f#4,a4], [g3,g4]@3 ~]/2", // C G D G
  T: "[c3,e3,g3,c4,e4,g4]@12 [d3,f#3,a3,d4,f#4,a4]@3 ~", // C D
  U: "[[e3,c4,e4,c5] [b3,b4] [f#3,a3,f#4,a4] [c3,e3,g3,c4,e4,g4]@2 [d3,f#3,a3,d4,f#4,a4], [g3,g4] ~@2, ~@8 [d3,d4]@15 ~@25]/3", // C B F#m C D G D
  V: "[e3,g3,b3,e4,g4,b4] [d3,f#3,a3,d4,f#4,a4]", W: "[c3,e3,g3,c4,e4,g4] [d3,f#3,a3,d4,f#4,a4]",
  X: "[c3,e3,g3,c4,e4,g4]@8 [d3,f#3,a3,d4,f#4,a4]@7 ~", Y: "[[b3,b4] [c3,c4], [d3,g3,d4,g4]]/2",
  Z: "[[d3,f#3,a3,d4,f#4,a4]@6 [c3,e3,g3,c4,e4,g4] [d3,f#3,a3,d4,f#4,a4]]/2", // D C D
  AA: "[[b3,b4]@16 [c3,c4]@15 ~, [e3,g3,e4,g4]]/2", // B C Em
  AB: "[[d3,f#3,a3,d4,f#4,a4]@6 [c3,e3,g3,c4,e4,g4] [a2,d3,f#3,a3,d4,f#4]]/2", // D C D
  AC: "[[d3,a3,d4,a4] [b2,e3,b3,e4], [f#3,f#4]]/2", AD: "[[e3,b3,e4,b4] [c3,c4], [g3,g4]]/2",
  AE: "[b2,e3,b3,e4], [g2,g3] ~@3", // E5 G
})).s("gm_string_ensemble_1").gain(0.24).pan(0.6)

// other · overdriven guitar · "HeavyGui"
const overdriven_guitar = note("<~@2 A ~ B ~ B ~ A ~ A ~ B ~ B ~ A ~ B ~ B C A ~ D ~@55 B ~ B ~ E ~@85>".pickRestart({
  A: "a2@15 ~", B: "a2", C: "b2 ~@15", D: "a2@7 ~", E: "a2@13 ~@3",
})).s("gm_overdriven_guitar").gain(0.46).pan(0.4)

// chords · overdriven guitar · "HeavyGui"
const overdriven_guitar_2 = note(`<
  ~@53 A B@2 C@2 D@4 ~@22 E@3 F G H I G H F I F G H G J F K ~@11 A B@2 C@2 D@4 ~ L@2 ~ M@2 N O I F G@2 I F G@2 P Q R S P
  F R T I U G H I F V S W F G T X F G H Y ~@7
>`.pickRestart({
  A: "~ d4!7", B: "[d4@31 ~]/2", C: "[d4@29 ~ d4@2]/2", D: "[d4@29 ~ d4@32 ~@2]/4",
  E: "[~@5 d4!2 d4@2 e4!2 d4 e4@6 e4@3 e4@3, ~@18 b3 ~@2 b3 ~@2]/3", F: "~@2 [g3,c4] ~@2 [g3,c4] ~@2",
  G: "~@2 [a3,d4] ~@2 [a3,d4] ~@2", H: "~@2 [f#3,b3] ~@2 [f#3,b3] ~@2", I: "~@2 [b3,e4] ~@2 [b3,e4] ~@2",
  J: "~@2 [e3,a3] ~@2 [e3,a3] ~@2", K: "~@4 [d3,g3]@3 ~@3 [d3,g3]@3 ~@3", L: "[~ a4@2 g4 a4 g4 d4 d5@8 ~]/2",
  M: "[~@2 d5@8 b4@2 a4@2 b4@6 ~@2 a4@4 g4@2 e4 ~ d4@2]/2", N: "e4@9 ~@7", O: "~@5 a4@2 g4",
  P: "~@4 [b3,e4]@3 ~@3 [b3,e4]@2 ~@4", Q: "~@4 [g3,c4]@3 ~@3 [g3,c4]@2 ~@4", R: "~@4 [a3,d4]@2 ~@4 [a3,d4]@3 ~@3",
  S: "~@4 [f#3,b3]@2 ~@4 [f#3,b3]@3 ~@3", T: "~@4 [f#3,b3]@3 ~@3 [f#3,b3]@3 ~@3", U: "~@4 [g3,c4]@3 ~@3 [g3,c4]@3 ~@3",
  V: "~@4 [a3,d4]@3 ~@3 [a3,d4]@3 ~@3", W: "~@4 [b3,e4]@2 ~@4 [b3,e4]@3 ~@3", X: "~@4 [b3,e4]@3 ~@3 [b3,e4]@3 ~@3",
  Y: "[b3,e4]@7 ~@9", // E5
})).s("gm_overdriven_guitar").gain(0.41)

// other · lead 1 square · "Syntheno"
const lead_1_square = note("<~@58 A B C D E F G H I J@2 H K ~@47 A B C D E F G H I J@2 H K ~@39>".pickRestart({
  A: "b4@7 ~ a4@8", B: "g4@7 ~ a4@7 ~", C: "b4 a4", D: "g4@7 ~ a4@5 ~@3", E: "b5@2 d5@2 g5@2 b5 ~ a5@2 d5@2 f#5@2 a5@2",
  F: "c6 e5 g5 c6 b5 d5 g5 b5", G: "a5 d5 f#5 a5 g5 c5 e5 g5", H: "g5 c5 e5 g5 a5 d5 f#5 a5",
  I: "g5 b4 e5 g5 f#5 a4 d5 f#5", J: "e5 g4 c5 e5 f#5 a4 d5 f#5", K: "g4@3 ~@13",
})).s("gm_lead_1_square").gain(0.36).pan(0.6)

// bass · electric bass finger · "Bassheno"
const bass = note(`<
  ~@26 A B C D A C D B A B C D C E B F A G A@2 G A G H F@2 E@2 C@4 F I F I F@4 A C B J K B C@2 A B C@2 A@7 L A B C D A C
  D B A B C D C E B F A G A@2 G A G H F@2 E@2 C@4 F I F I F@4 A C B J K B C@2 A B C@2 A B C D A B C D A B C D A B C D A
  B C D A B C D M ~@7
>`.pickRestart({
  A: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", B: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  C: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", D: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  E: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", F: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  G: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ b1 ~", H: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2!2",
  I: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ d2 ~", J: "c2 ~ c2 ~ c2 ~ c2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  K: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ d2 ~", L: "e2 ~ e2 ~ e2 ~ d2 ~ b1 ~ a1 ~ g1 ~ e1 ~", M: "e1 ~@7",
})).s("gm_electric_bass_finger").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  A@41 B A@12 C@13 D C@9 E F@15 D F@7 B A@12 C@13 D C@9 E C@7 E C@7 E C@7 E ~@8
>`.pickRestart({
  A: "x!2 ~@6", B: "x!2 ~@5 x", C: "x!2 ~@2 x ~@3", D: "x!2 ~@2 x ~@2 x", E: "x!2 ~@2 x ~ x ~", F: "x!2 ~@2 x!2 ~@2",
})).gain(0.38)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@53 A ~@3 A ~@3 B ~@5 C ~ A ~@3 A ~@3 C ~@3 C ~@11 C ~@19 A ~@3 A ~@3 B ~@5 C ~ A ~@3 A ~@3 C ~@3 A ~@3 C ~@3 A ~@3 C
  ~ D ~ A ~@3 C ~@8
>`.pickRestart({
  A: "~@14 x!2", B: "~@5 x ~@2", C: "~@3 x", D: "~@7 x",
})).gain(0.38)

// drums · hihat
const hihat = s("hh").struct("<A@26 B@51 C B@59 C B@7 C B@7 C B@7 D ~@8>".pickRestart({
  A: "x!4", B: "x!8", C: "x!6 ~ x", D: "x!6 ~@2",
})).gain(0.38)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@53 A ~@3 A ~@9 B ~@5 A ~@3 B ~@3 B ~@11 B ~@19 A ~@3 A ~@9 B ~@5 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 A ~@2 C B ~@8
>`.pickRestart({
  A: "~@3 x", B: "~@5 x ~@2", C: "~ x ~@6",
})).gain(0.38)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@53 A ~@3 A ~@11 B ~@3 A ~@3 C ~@3 D ~@31 A ~@3 A ~@11 B ~@3 A ~@3 C ~@3 A ~@3 C ~@3 A ~@3 C ~@3 A ~@2 E C ~@8
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x!2 ~", C: "~ x!4 ~@3", D: "~@6 x!3 ~@7", E: "x",
})).gain(0.38)

// drums · crash
const crash = s("cr").struct(`<
  ~@42 A ~@7 A ~@3 B ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~@25 A ~@7 A ~@3 B ~@3 B ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~
  B ~ A ~ B ~@3 A ~ A ~ B ~ A ~ B ~@3 B ~ A ~ A ~@11
>`.pickRestart({
  A: "x", B: "x!2 ~@2",
})).gain(0.38)

// drums · ride
const ride = s("rd").struct(`<
  ~@54 A B A B A B A B A C A B A B A B A B A B A B A B ~@36 A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B
  D B A B A B A B A B A B A B A B A B ~@8
>`.pickRestart({
  A: "~@2 x!2", B: "x!4", C: "x ~@3 x ~ x!3 ~ x ~ x ~ x ~", D: "~@3 x",
})).gain(0.38)

stack(
  string_ensemble_1, overdriven_guitar, overdriven_guitar_2, lead_1_square, bass, kick, snare, low_tom, hihat, mid_tom,
  high_tom, crash, ride
)

More by Genesis