Strudelify

Illegal Alien

Genesis

KeyB♭ majorTempo144 bpm
0:00/0:00
// Illegal Alien — Genesis
// 144 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 4 lead 2 sawtooth (copy of ch 3 distortion guitar, 0.142 beats late)
// note: Full arrangement: all 184 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(144/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 pick
const bass = note(`<
  ~@3 A B A C A D A E F G@2 H F G@2 H F G@2 H F G@2 H I J I K L@3 M A B A C A D A E F G@2 H F G@2 H I J I K A B A C A D
  A E A B A C A D A E A B N@2 O@7 P@8 Q R S T U V S W X R S T U V S W Y Z AA AB AA Z AA AB AC R S T U V S W X R S T U V
  S W Y Z AA AB AA Z AA AB AD I J I K L@3 M A B A C A D A E A B A C A D A E ~@7 AE A B A C A D A E A D A E ~
>`.pickRestart({
  A: "bb1@2 ~@2 bb1!4", B: "bb1@2 bb2 bb1@2 bb1!3", C: "bb1@2 ~ bb1 d2!2 f2 bb1", D: "bb1@3 bb1@2 bb1 d2 f2",
  E: "bb1@2 ~ bb1 d2!2 f2!2", F: "~@2 d2@3 d2@2 ~", G: "[bb1 c2 d2 f2@2 f2!2 c2@3 ~@3 c2@3]/2", H: "c2@3 bb1@2 bb1!3",
  I: "f2@2 f2 f2@5", J: "f2!3 f2@3 f2!2", K: "f2@4 d2@2 eb2@4 f2 ~@3 f2@2",
  L: "[f2@4 f2!2 d2 f2@3 ~ f2!3 d2 f2@2 ~@2 f2!3 d2 f2]/3", M: "f2 f1@2 g1@2 a1 a1@2", N: "ab1@2 ~@2 ab1!4",
  O: "[g1@15 f1@16 c2@16 eb2@9]/7", P: "[d2@4 f1@3 g1@16 f1@16 c2@16 eb2@9]/8", Q: "d2", R: "d2@2 ~@12 d2 ~",
  S: "a1 b1 d2 ~@5", T: "d2 ~ g1 ~@4 d2", U: "g1 ~ g1 ~@4 d2", V: "c2 b1 c2 ~@4 c2", W: "a1 ~ d2 ~@4 a1", X: "d2 ~@7",
  Y: "d2 ~@3 d2 ~ e2 ~", Z: "gb2 ~@2 gb2 ~ d2 ~ e2", AA: "e2 ~@3 d2 ~ e2 ~", AB: "gb2 ~@2 gb2 ~ g2 ~ e2", AC: "e2 ~@7",
  AD: "e2 ~@4 e2@3", AE: "~@5 f1@2 g1",
})).s("gm_electric_bass_pick").gain(0.62)

// chords · epiano2
const epiano2 = note(`<
  ~@3 A B A B A B A B C D E F C D E F C D E F C D E F G H G H G H G I A B A B A B A B C D E F C D E F G H G H A B A B A
  B A B A B A B A B A B J K L@2 M@7 N@8 O ~@47 P G H G H G H G I A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B
  A B ~
>`.pickRestart({
  A: "[f3,bb3,d4]@3 [g3,bb3]@3 [g3,bb3]@2, ~@3 eb4@5", B: "[bb3,d4]@2 c4 [eb3,g3,bb3]@3 [f3,a3,c4]@2, f3@3 ~@5",
  C: "~@2 [g3,b3,d4]@3 [gb3,a3,d4]@3, [g2,d3]", D: "[f3,bb3,d4]@3 [f3,a3,c4,f4]@5", E: "~@2 [f3,a3,c4]@3 [e3,g3,c4]@3",
  F: "[eb3,g3,c4]@3 [d3,f3,bb3]@3 ~@2", G: "[f3,bb3,d4]@3 [g3,bb3]@4 ~, ~@3 eb4@5",
  H: "[f3,bb3,d4]@3 [g3,bb3,eb4]@3 [f3,a3,c4]@2", I: "[f3,bb3,d4]@3 [g3,bb3,eb4]@3 [a3,c4,f4]@2",
  J: "[f3,bb3,d4]@3 [f3,bb3,d4]@4 [f3,bb3]", K: "[f3,bb3,d4]@2 [f3,bb3,d4] [f3,bb3,d4]@3 [f3,bb3,d4] ~",
  L: "[eb3,ab3,c4]@3 [eb3,ab3,c4]@4 [eb3,ab3]", M: "[[g3,b3,d4]@14 ~ [f3,a3,c4,f4]@16 [g3,c4,e4]@16 [eb4,g4,bb4]@9]/7",
  N: "[[a3,d4]@4 [f3,a3]@3 [g3,b3,d4]@16 [f3,a3,c4,f4]@16 [g3,c4,e4]@16 [eb4,g4,bb4]@9]/8", O: "[a3,d4]",
  P: "~@5 [e3,a3,db4,e4]@3", // A
})).s("gm_epiano2").gain(0.22).pan(0.6)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@3 A B A C A B A C ~@16 D E F E F E F E A B A C A B A G H ~@7 D E F E A B A C A B A C A B A C A B A C A B A B ~ I@6
  J@8 K ~@48 D E F E F E F E A B A C A B A C A B A C A B A C ~@8 A B A C A B A C A B A C ~
>`.pickRestart({
  A: "~ eb5@2 c5 d5@2 ~ bb4", B: "c5 d5 eb5 d5@4 ~", C: "c5 d5 c5 bb4@4 ~", D: "~@2 a4 bb4@3 ~ a4",
  E: "bb4@2 a4 bb4@2 f4 g4 a4", F: "~ bb4 a4 bb4@3 ~ a4", G: "c5 d5 c5 ~@3 c5@2, ~@3 bb4@4 ~", H: "d5 ~",
  I: "[~@7 [f3,c4,f4]@16 [c3,g3,c4]@16 [eb3,bb3,eb4]@9]/6", // F5 C5 Eb5
  J: "[[d3,a3,d4]@4 [f3,c4]@3 [g2,d3,g3]@16 [f3,c4,f4]@16 [c3,g3,c4]@16 [eb3,bb3,eb4]@9]/8", K: "[d3,a3,d4]",
})).s("gm_distortion_guitar").gain(0.1).pan(0)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@11 A B C D A B C D A B C D A B C D E@8 F G F G F G F G A B C D A B C D E@4 F G F G F G F G F G F G F G F G H I J@2
  K@2 ~@14 L M N@2 O P Q R@2 M N@2 O P Q S@2 ~@7 L M N@2 O P Q R@2 M N@2 O P Q S@2 ~@7 E@8 F G F G F G F G F G F G F G F
  G ~@8 F G F G F G F G F G F G ~
>`.pickRestart({
  A: "~@2 [d4,g4,b4] [d4,g4,b4]@2 [d4,gb4,a4]@3", B: "[d4,f4,bb4]!2 ~ [c4,f4,a4]@2 [c4,f4,a4]!3",
  C: "~@2 [c4,f4,a4] [c4,f4,a4]@2 [c4,e4,g4]@3", D: "[c4,eb4,g4]!2 ~ [d4,f4,bb4]@2 [d4,f4,bb4]!3",
  E: "[f3,bb3,d4]@3 [f3,bb3,eb4]@3 ~@2", F: "[f3,bb3,d4]@3 [g3,bb3]@3 [g3,bb3]@2, ~@3 eb4@5",
  G: "[bb3,d4]@2 ~ [eb3,g3,bb3]@3 [f3,a3,c4]@2, f3@3 ~@5", H: "[f3,bb3,d4]@3 [f3,bb3,d4]@4 [f3,bb3]",
  I: "[f3,bb3,d4]@2 [f3,bb3,d4] [f3,bb3,d4]@3 [f3,bb3,d4] ~", J: "[eb3,ab3,c4]@3 [eb3,ab3,c4]@4 [eb3,ab3]",
  K: "[[g3,b3,d4]@7 ~]/2", L: "~@4 [a3,d4,gb4]!4", M: "~@4 [a3,d4,gb4]!2 [a3,db4,e4] [a3,d4,gb4]",
  N: "~@4 [b3,d4,g4]!4", O: "~@3 [g3,c4,e4]@2 [g3,c4,e4]!3", P: "~@4 [g3,c4,e4]!4", Q: "~@4 [a3,c4,d4]!4",
  R: "[~@5 [c4,d4,g4]@4 ~@3 [a3,d4,gb4]!4]/2", S: "[~@5 [c4,d4,g4]@4 ~@7]/2",
})).s("gm_acoustic_guitar_steel").gain(0.09).pan(0)

// chords · cello
const cello = note("<~ [g4 d5 g4 ~ g5 ~ g4 ~, d4] [g4 ~ g4 d5 g4 ~@3] ~@181>").s("gm_cello").gain(0.04).pan(0)

// bass · lead 8 bass lead
const bass_2 = note("<~@75 A@7 B@8 C ~@93>".pickRestart({
  A: "[g1@15 f1@16 c2@16 eb2@9]/7", B: "[d2@4 f1@3 g1@16 f1@16 c2@16 eb2@9]/8", C: "d2",
})).s("gm_lead_8_bass_lead").gain(0.57)

// chords · trumpet · Abm Db Dm Em Gbdim
const trumpet = note("<[~ [ab4,b4] ~ [ab4,b4] ~@4, [db5,f5]@3 ~] [~ [d4,f4] ~ [e4,g4] ~@2 [gb4,c5] ~] [g4 ~@7] ~@181>")
  .s("gm_trumpet").gain(0.16).pan(0)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@75 A B A B A B A B A B A B A B A B ~@93>".pickRestart({
  A: "~ g3 d4 g3 g4 g3 ~ g3", B: "d4 g3 ~ g4 ~ g3 ~@2",
})).s("gm_lead_2_sawtooth").gain(0.1).pan(1)

// other · lead 2 sawtooth · soft notes
const lead_2_sawtooth_soft = note("<~@107 A B C D A B C D ~@16 A B C D A B C D ~@45>".pickRestart({
  A: "[b3,d4,gb4]", B: "[b3,e4,g4]", C: "[a3,d4,gb4]", D: "[a3,db4,e4]",
})).s("gm_lead_2_sawtooth").gain(0.04).pan(1)

// other · lead 2 sawtooth
const lead_2_sawtooth_2 = note("<~@75 A B A B A B A B A B A B A B A B ~@93>".pickRestart({
  A: "~ g4 d5 g4 g5 g4 ~ g4", B: "d5 g4 ~ g5 ~ g4 ~@2",
})).s("gm_lead_2_sawtooth").gain(0.1).pan(0)

// other · lead 2 sawtooth · soft notes
const lead_2_sawtooth_soft_2 = note("<~@107 A B C D A B C D ~@16 A B C D A B C D ~@45>".pickRestart({
  A: "[b4,d5,gb5]", B: "[b4,e5,g5]", C: "[a4,d5,gb5]", D: "[b4,db5,e5]",
})).s("gm_lead_2_sawtooth").gain(0.04).pan(0)

// other · trumpet
const trumpet_2 = note(`<
  ~@83
  [~@3 d5@2 d5@2 ~ d5@2 ~ c5@2 c5@2 ~]
  [c5@2 ~ c5@2 c5@2 ~ c5@2 ~ b4@2 b4@2 ~]
  [b4@2 ~ a4@2 g4@2 ~ g4@2 ~@6]
  [~@3 d5@2 d5@2 ~ d5@2 ~ c5@2 c5@2 ~]
  [c5@2 ~ c5@2 c5@2 ~ c5@2 ~ b4@2 b4@2 ~]
  [b4@2 ~ a4@2 g4@2 ~ g4@2 ~@6]
  ~@95
>`).s("gm_trumpet").gain(0.48)

// other · steel drums
const steel_drums = note("<~@91 A B C D E F G H I J K L M N O ~@9 A B C D E F P H Q R K L M N O ~@54>".pickRestart({
  A: "d5@2 ~ d5@2 d5@2 ~ d5@2 ~@2 b4@2 b4@2", B: "~@2 a4 ~ a4 b4 a4 b4", C: "d5@2 ~ d5@2 d5@2 ~ d5@2 ~@2 b4@2 a4@2",
  D: "~@8 e4@2 ~ gb4@2 g4@2 ~", E: "b4 ~ a4!2 ~@3 b4", F: "a4@2 ~@6 e4@2 ~ gb4@2 g4@2 ~", G: "a4 ~ g4 gb4 ~ d4 g4 d4",
  H: "~@4 a4 b4 a4 b4", I: "d5@2 ~ d5@2 d5@2 ~ g5@2 ~@2 gb5@2 e5@2", J: "d5 b4 d5 ~ b4 ~ a4 ~",
  K: "d5@2 ~ g5@2 gb5@2 ~ g5@2 ~@4 d5@2", L: "~@8 d5@2 ~ e5@2 gb5@2 ~", M: "g5 ~ gb5!2 ~@2 g5 gb5",
  N: "~ d5 ~@2 d5 e5 gb5 g5", O: "a5 ~ d5!2 ~ d5 e5 d5", P: "b4 ~ a4!2 ~@2 b4 a4",
  Q: "d5@2 ~ g5@2 gb5@2 ~ g5@2 ~@2 gb5@2 e5@2", R: "~ d5 ~@2 b4 ~ a4 ~",
})).s("gm_steel_drums").gain(0.1).pan(0)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~@91 A B C D E F G H I J K L M N O P Q R S R Q R S T A B C D E F U H V W K L M N O P Q R S R Q R S T ~@45
>`.pickRestart({
  A: "d5@2 ~ d5@2 d5@2 ~ d5@2 ~@2 b4@2 b4@2", B: "~@2 a4 ~ a4 b4 a4 b4", C: "d5@2 ~ d5@2 d5@2 ~ d5@2 ~@2 b4@2 a4@2",
  D: "~@8 e4@2 ~ gb4@2 g4@2 ~", E: "b4 ~ a4!2 ~@3 b4", F: "a4@2 ~@6 e4@2 ~ gb4@2 g4@2 ~", G: "a4 ~ g4 gb4 ~ d4 g4 d4",
  H: "~@4 a4 b4 a4 b4", I: "d5@2 ~ d5@2 d5@2 ~ g5@2 ~@2 gb5@2 e5@2", J: "d5 b4 d5 ~ b4 ~ a4 ~",
  K: "d5@2 ~ g5@2 gb5@2 ~ g5@2 ~@4 d5@2", L: "~@8 d5@2 ~ e5@2 gb5@2 ~", M: "g5 ~ gb5!2 ~@2 g5 gb5",
  N: "~ d5 ~@2 d5 e5 gb5 g5", O: "a5 ~ d5!2 ~ d5 e5 d5", P: "~@4 d4 ~ e4 ~", Q: "gb4@2 ~@4 gb4@2 ~@2 d4@2 ~@2 e4 ~",
  R: "e4 ~@3 d4 ~ e4 ~", S: "gb4@2 ~@4 gb4@2 ~@2 g4@2 ~@2 e4 ~", T: "e4 ~@7", U: "b4 ~ a4!2 ~@2 b4 a4",
  V: "d5@2 ~ g5@2 gb5@2 ~ g5@2 ~@2 gb5@2 e5@2", W: "~ d5 ~@2 b4 ~ a4 ~",
})).s("gm_pizzicato_strings").gain(0.4).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A@39 B A@7 C A@11 B A@7 B A D A D E F G F G F G H G F G F G F G ~ I@7 J I@7 A K L K L K L K ~ I@3 K I@3 J I@7 A K
  L K L K L K M I A@14 B A@7 B A@7 B A@7 B A@3 B ~
>`.pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x ~@3 x!2 ~ x", C: "x!2", D: "x ~@2 x ~ x ~@2", E: "x ~@6 x!2 ~ x ~@5", F: "x!2 ~@2 x!2 ~ x",
  G: "~@2 x ~@4 x!2 ~ x ~@5", H: "x!2 ~@2 x ~@2 x", I: "x ~@4 x ~ x", J: "x", K: "x ~@6 x", L: "~@5 x ~ x",
  M: "x ~ x!2 ~@3 x",
})).gain(0.7)

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

// drums · clap
const clap = s("cp").struct(`<
  ~@91 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~@44
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.39)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~@2 B@23 C B@16 D B@6 E D B@6 F D B@6 F D B@5 D C G C G C G H G C G C G C G C G B I@7 A I@5 B I J B@3 K B@3 ~ I@7 A
  I@5 B I J B@3 K B@4 I B@43 ~
>`.pickRestart({
  A: "x", B: "x!8", C: "x!6 ~@2", D: "~ x!7", E: "x!4 ~ x!2 ~", F: "x!6 ~ x", G: "~@3 x!5", H: "x!7 ~", I: "x ~ x!6",
  J: "~@2 x!2", K: "x!4 ~@2 x!2",
})).gain(0.62)

// drums · mid tom
const mid_tom = s("mt").struct("<~@50 [~@7 x] ~@47 [~@3 x ~@4] ~@23 [~@3 x ~@4] ~@61>").gain(0.7)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@26 A ~@23 B ~@7 A ~@7 A ~@8 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@20 B ~@23 B ~@49
>`.pickRestart({
  A: "~@3 x", B: "~ x", C: "~ x ~@2",
})).gain(0.62)

// drums · high tom
const high_tom = s("ht").struct("<~@90 A ~@7 B ~@7 B ~@7 C ~@7 B ~@7 B ~@7 D ~@45>".pickRestart({
  A: "x!5 ~ x ~ x ~ x ~@5", B: "~ x!2 ~@5", C: "x ~@2 x ~ x ~@2 x ~@7", D: "~ x",
})).gain(0.7)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@7 A ~@15 A ~@7 A ~@6 B A ~@7 A ~@3 A ~@3 A ~@2 B A ~@3 A ~@5 A B A C ~ C ~ C ~ C ~ C ~ C ~ C ~ B A ~@6 B A ~@6
  B A ~@6 B A ~@6 B ~@7 B A ~@7 A ~@7 A ~@6 B A ~@6 B A ~@7 A ~@7 A ~@2 B ~
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~@7 x",
})).gain(0.7)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@13 A ~@3 A ~@3 A ~@3 A ~ B ~ B ~ B ~ B ~ C ~@3 C ~@11 B ~ B ~ C ~@3 C ~@3 C ~@3 C ~@71 B ~ B ~ B ~ B ~ C ~@3 C ~@3 C
  ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@4
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@4 x ~", C: "~ x ~ x",
})).gain(0.7)

// drums · cowbell
// … 17 more lines

More by Genesis