Strudelify

Fading Lights

Genesis

KeyB♭ majorTempo109 bpm
0:00/0:00
// Fading Lights — Genesis
// 109 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 202 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Distorted Guitar.
setcpm(109/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 · pad warm · "Warm Pad"
const pad_warm = note(`<
  ~@4 A B C D E F G H I@2 J@4 K@2 I@2 J@4 K@2 I@2 J@4 K@2 L M N@2 L M O@2 L M N@2 L M O@2 P@2 Q@2 R@2 S@2 I@2 J@4 K@2
  I@2 J@4 K@2 L M N@2 L M O@2 L M N@2 L M O@2 P@2 Q@2 R@2 S@2 T U T U T U T U ~@26 J@4 K@2 I@2 J@4 K@2 I@2 J@4 K@2 L M
  N@2 L M O@2 L M N@2 L M O@2 P@2 Q@2 R@2 A B C D E F G H V@2 W@4 X@2 ~@8
>`.pickRestart({
  A: "[d4,g4] [f4,bb4]", B: "[g4,c5] [f4,bb4]", C: "[g4,c5] [bb4,d5]", D: "[c5,f5] [bb4,d5]", E: "[c5,f5] [d5,g5]",
  F: "[f5,bb5] [d5,g5]", G: "[f5,bb5] [g5,c6]", H: "[bb5,d6] [g5,c6]",
  I: "[[bb4,d5] [a4,c5], [d4,f4], ~@32 bb4 ~@31]/2", J: "[[g4,bb4]@2 [a4,c5] [g4,bb4], [c4,eb4]]/4",
  K: "[bb3,d4,f4,bb4]/2", L: "[ab4,c5,g5]", M: "[ab4,c5,eb5]", N: "[ab4,d5,f5]", O: "[f4,bb4,d5]/2",
  P: "[f4,g4,bb4,d5]/2", Q: "[c4,eb4,g4,a4]/2", R: "[~ c4, [eb4,g4,bb4]]/2", S: "[d4,f4,bb4]/2", T: "[f4,bb4,d5]",
  U: "~@2 [f4,bb4,d5]!2", V: "[[f5,bb5]@13 ~ [g4,c5]@2]/2", W: "[[bb4,d5]@13 ~ [g4,c5]@2]/2", X: "[[bb4,d5]@13 ~@3]/2",
})).s("gm_pad_warm").gain(0.4)

// chords · pad warm · "Warm Pad" · soft notes
const pad_warm_soft = note("<~@132 A@2 ~@52 B@2 ~@5 C D@6 E@2>".pickRestart({
  A: "[[bb4,d5] [a4,c5], [d4,f4], ~@32 bb4 ~@31]/2", B: "[d6@13 ~@3]/2", C: "~@3 [g4,c5]",
  D: "[[bb4,d5]@13 ~ [g4,c5]@2]/2", E: "[[bb4,d5]@13 ~@3]/2",
})).s("gm_pad_warm").gain(0.15)

// bass · fretless bass
const bass = note(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D E F G H A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D E F G H A I J K J K J K J K J K J K J L M N J K J K
  J L M N A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D E F G H A
  B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "bb1!2 bb1@6", B: "bb1@7 bb1", C: "g1!2 g1@6", D: "g1@7 g1", E: "f1!2 f1@6", F: "f1@7 f1", G: "eb2!2 eb2@6",
  H: "c2@7 c2", I: "bb1 bb2@2 bb1 bb2@4", J: "bb1@3 bb1 bb2@2 bb1@2", K: "bb1 bb2@2 bb1 bb2@2 bb1@2",
  L: "gb2@3 gb2 gb2@2 gb2@2", M: "ab2@3 ab2 ab2@2 ab2@2", N: "ab2 ab2@2 ab2 ab2@2 ab2@2",
})).s("gm_fretless_bass").gain(0.38)

// chords · lead 2 sawtooth · "Synth Lead 2 (Horns)"
const lead_2_sawtooth = note("<~@108 A B C@2 D E F@2 A B C@2 D E F@2 G@2 H@4 I@2 G@2 H@4 I@2 ~@62>".pickRestart({
  A: "[f4,bb4,eb5]@11 ~ [f4,bb4,eb5]@17 ~@3", B: "[f4,bb4,eb5]@10 ~@2 [f4,bb4,eb5]@11 ~ [f4,bb4,d5]@7 ~",
  C: "[[f4,bb4,c5]@31 ~]/2", D: "[f4,bb4,eb5]@11 ~ [f4,bb4,eb5]@18 ~@2",
  E: "[gb4,bb4,eb5]@11 ~ [gb4,bb4,eb5]@10 ~@2 [gb4,bb4,db5]@7 ~", F: "[db5@3 c5@13, [eb4,ab4]]/2",
  G: "[[bb3,d4] [a3,c4], [d3,f3], ~@32 bb3 ~@31]/2", H: "[[g3,bb3]@2 [a3,c4] [g3,bb3], [c3,eb3]]/4",
  I: "[bb2,d3,f3,bb3]/2", // Bb
})).s("gm_lead_2_sawtooth").gain(0.38)

// chords · trumpet
const trumpet = note("<~@108 A B C@2 D E F@2 A B C@2 D E F@2 ~@78>".pickRestart({
  A: "[f4,bb4,eb5]@11 ~ [f4,bb4,eb5]@17 ~@3", B: "[f4,bb4,eb5]@10 ~@2 [f4,bb4,eb5]@11 ~ [f4,bb4,d5]@7 ~",
  C: "[[f4,bb4,c5]@31 ~]/2", D: "[f4,bb4,eb5]@11 ~ [f4,bb4,eb5]@18 ~@2",
  E: "[gb4,bb4,eb5]@11 ~ [gb4,bb4,eb5]@10 ~@2 [gb4,bb4,db5]@7 ~", F: "[db5@3 c5@13, [eb4,ab4]]/2",
})).s("gm_trumpet").gain(0.53)

// other · electric guitar clean · "Clean Electric Guitar"
const electric_guitar_clean = note(`<
  ~@60 A@2 B@2 C B A@4 B@2 C B A@2 D E F G D E F G D E F G D E F G H@2 I J K L ~@42 A@2 B@2 C B A@4 B@2 C B A@2 D E F G
  D E F G D E F G D E F G H@2 I J K L M@16 N ~@7
>`.pickRestart({
  A: "bb3 c4 d4 bb3 c4 d4 bb3@2", B: "c4 d4 eb4 c4 d4 eb4 c4@2", C: "d4 eb4 f4 d4 eb4 f4 d4@2",
  D: "bb3 d4 eb4 d4 g4 f4 eb4 d4", E: "bb3 d4 eb4 bb3 g4 eb4 f4 g4", F: "ab3 d4 eb4 d4 g4 f4 eb4 d4",
  G: "ab3 d4 eb4 ab3 g4 eb4 f4 g4", H: "[f4,g4,bb4,d5]!2", I: "[c4,g4,a4]!2", J: "[c4,g4,a4] [c4,eb4,g4,a4]",
  K: "[c4,eb4,g4,bb4]!2", L: "[bb3,eb4,g4,bb4]!2", M: "bb3 c4 d4 bb3 c4 d4 bb3 c4", N: "bb3 c4 ~@6",
})).s("gm_electric_guitar_clean").gain(0.08)

// other · electric guitar clean · "Clean Electric Guitar" · soft notes
const electric_guitar_clean_2 = note("<~@94 A B ~@78 A B ~@18 C D@7>".pickRestart({
  A: "eb4!2", B: "eb4 ~", C: "~@2 d4 bb3 c4 d4 bb3 c4", D: "bb3 c4 d4 bb3 c4 d4 bb3 c4",
})).s("gm_electric_guitar_clean").gain(0.03)

// chords · distortion guitar · "Distorted Guitar"
const distortion_guitar = note(`<
  ~@100 A B A C D E F G H I J K L M N O H I P K L M N O Q R S T U V W@2 X Y Z AA AB AC AD@2 ~@62
>`.pickRestart({
  A: "[f3,bb3]@10 ~@2 [f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3] ~ [f3,bb3]@3 ~ [f3,bb3]@4", // Bb5
  B: "[f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@3 ~ [f3,bb3]@7 ~ [bb3,f4]@7 ~", // Bb5
  C: "~@2 [f3,bb3] ~ [f3,bb3]@3 ~ [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@7 ~ [bb3,f4]@6 ~@2", // Bb5
  D: "[f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@3 ~ [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@3 ~ [f3,bb3]@6 [f3,bb3]@2", // Bb5
  E: "[f3,bb3]@3 ~ [f3,bb3]@5 ~ [f3,bb3] ~ [f3,bb3]@3 ~ [f3,bb3]@6 ~@2 [bb3,f4]@6 ~@2", // Bb5
  F: "[f3,bb3]@5 ~ [f3,bb3] ~ [f3,bb3]@3 ~ [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3] ~", // Bb5
  G: "[f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3] ~ [f3,bb3]@2 ~@2 [f3,bb3]@6 ~@2 [bb3,f4]@7 ~", // Bb5
  H: "[f3,bb3]@5 ~ [f3,bb3] ~ [f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3] ~ [f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3]@2", // Bb5
  I: "[f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3] ~ [f3,bb3]@3 ~ [f3,bb3]@6 ~@2 [f3,bb3]@6 ~@2", // Bb5
  J: "[f3,bb3]@5 ~ [f3,bb3] ~ [f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3]@2", // Bb5
  K: "[f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3] ~ [f3,bb3]@2 ~@2 [f3,bb3]@6 ~@2 [f3,bb3]@6 ~@2", // Bb5
  L: "[f3,bb3]@6 [f3,bb3] ~ [f3,bb3]@3 ~ [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@2 ~@2 [f3,bb3]@7 ~", // Bb5
  M: "[gb3,bb3]@5 ~ [gb3,bb3] ~ [gb3,bb3]@3 ~ [gb3,bb3]@5 ~ [gb3,bb3]@2 [gb3,bb3]@3 ~ [gb3,bb3]@6 ~@2", // Gb
  N: "[ab3,db4]@5 ~ [ab3,db4] ~ [ab3,db4]@3 ~ [ab3,c4]@5 ~ [ab3,c4] ~ [ab3,c4]@3 ~ [ab3,c4]@5 ~ [ab3,c4]@2", // Db5 Ab
  O: "[ab3,c4]@2 ~@2 [ab3,c4]@5 ~ [ab3,c4]@2 [ab3,c4]@2 ~@2 [ab3,c4]@7 ~ [ab3,c4]@7 ~", // Ab
  P: "[f3,bb3]@5 ~ [f3,bb3] ~ [f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3] ~", // Bb5
  Q: "[f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@3 ~ [f3,bb3]@5 ~ [f3,bb3]@2", // Bb5
  R: "[f3,bb3]@3 ~ [f3,bb3]@4 ~@2 [f3,bb3]@2 [f3,bb3]@3 ~ [f3,bb3]@6 ~@2 [bb3,d4]@7 ~", // Bb5 Bb
  S: "[f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@3 ~ [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@3 ~ [f3,bb3]@5 ~ [f3,bb3] ~", // Bb5
  T: "[f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@3 ~ [f3,bb3]@6 ~@2 [f3,bb3]@6 ~@2", // Bb5
  U: "[f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@3 ~ [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@2 ~@2 [f3,bb3]@5 ~ [f3,bb3]@2", // Bb5
  V: "[f3,bb3]@2 ~@3 bb3@4 ~ [f3,bb3]@2 [f3,bb3]@2 ~@2 [f3,bb3]@6 ~@2 [f3,bb3]@6 ~@2, ~ f3 ~@6", // Bb5
  W: "[[f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@3 ~ [f3,bb3]@5 ~ [f3,bb3]@2 [f3,bb3]@2 ~@3 [f3,bb3]@5 ~ bb3@2 [f3,bb3]@2 ~@2 [f3,bb3]@4 ~ [f3,bb3]@2 [f3,bb3]@2 ~@3 [f3,bb3]@5 ~@2 [f3,bb3]@6 ~@2, ~@15 f3 ~@16]/2", // Bb5
  X: "~@21 d4@6 eb4@5", Y: "~ f4@2 g4@2 f4@23 g4@4", Z: "~@16 d4@6 c4@5 bb3@5", AA: "~ c4@2 d4@3 c4@21 ~@5",
  AB: "eb4@6 d4@5 c4@6 bb3@15", AC: "~ c4@2 d4@3 c4@10 ~@4 g3@4 bb3@4 c4@4", AD: "[bb3@63 ~]/2",
})).s("gm_distortion_guitar").gain(0.44)

// chords · synth drum · "TR808 Beat Box"
const synth_drum = note(`<
  A B C B C B C B C D C B C B C B C B C D C B C B C B C B C D C B C B C B C B C D C B C B C B C B C D C B C B C B C B C
  D C B C B C B C B C D C B C B C B C B C D C B C B C B C B C D C B C B C B C B C D C B C B E ~@28 F G H C B C D C B C B
  C B C B C D C B C B C B C B C D C B C B C B C B C D C B C B C B C B C D C B C B C B C B C D C B C@2 D C B C B C I ~
>`.pickRestart({
  A: "~@4 [c2,a4]@2 ~@2 [c2,a4]@2 ~@2 a4@2 ~@2 a4@2 ~@3 d4!5 ~@2 [d2,d4] ~ d4@2, ~@16 d4 ~@3 a4@2 ~@2 a4@2 ~@2 a4@2 d2 ~", // F D
  B: "[c2,gb2,a4]@3 ~ a4@2 ~@2 a4@2 ~@2 [gb2,a4]@2 ~@2 [d4,a4]@2 ~@3 d4!5 ~@2 [d2,a4]@2 d2!2, ~@20 a4@2 ~@2 a4@2 ~@2 d4 ~@3", // Gbdim Gbm D5
  C: "[c2,a4]@2 ~@2 [c2,a4]@2 ~@2 [c2,a4]@2 ~@2 a4@2 ~@2 a4@2 ~@3 d4!5 ~@2 [d2,d4] ~ d4@2, ~@16 d4 ~@3 a4@2 ~@2 a4@2 ~@2 a4@2 d2 ~", // F D
  D: "[c2,gb2,a4]@3 ~ a4@2 ~@2 a4@2 ~@2 [gb2,a4]@2 ~@2 a4@2 ~@3 d4!5 ~@2 [d2,d4] ~ d2!2, ~@16 d4 ~@3 a4@2 ~@2 a4@2 ~@2 a4@2 ~@2", // Gbdim Gbm D
  E: "[c2,a4] ~@15", F: "~@28 [d2,a4]@2 d2!2, ~@28 d4 ~@3", G: "[c2,a4] ~ [c2,a4] ~@13", H: "~@30 d2!2",
  I: "[c2,gb2,a4]@3 ~ a4@2 ~@2 a4@2 ~@2 [gb2,a4]@2 ~@2 [d4,a4]@2 ~@14", // Gbdim Gbm D5
})).s("gm_synth_drum").gain(0.24)

// chords · synth drum · "TR808 Beat Box" · soft notes
const synth_drum_soft = note(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@29 A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "d2!6 ~@26", B: "d2!3 ~@29",
})).s("gm_synth_drum").gain(0.08)

// drums · kick
const kick = s("bd").struct(`<
  ~@98 A ~ A ~ A ~ A B A B C D ~ E C D F A C D C G C D C A H B H B H B H A H B H B H B H A ~@62
>`.pickRestart({
  A: "x", B: "~ x ~@6", C: "x ~@2 x ~@4", D: "x ~@2 x ~@2 x ~", E: "~ x ~ x ~ x ~ x", F: "x ~@2 x ~@3 x", G: "x!4",
  H: "x!2 ~@2",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct(`<
  ~@99 A ~ A ~ A B C B ~ B@3 ~ B@3 D B@3 ~ B@3 D B C B C B C B ~ B C B C B C B ~@63
>`.pickRestart({
  A: "~@4 x ~@13 x!14", B: "~ x", C: "~@3 x", D: "~ x ~@6",
})).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@99 [~@8 x!10 ~@14] ~ [~@8 x!10 ~@14] ~ [~@8 x!10 ~@14] ~@98>").gain(0.16)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@98 A ~ A ~ A ~@4 B ~@3 C ~@3 D ~@3 E ~@3 F ~@4 G H ~ I G H J H G H ~ I ~@62
>`.pickRestart({
  A: "~ x", B: "~@3 x!3 ~@2", C: "~ x!3 ~@4", D: "~@3 x!2 ~@3", E: "~@9 x!3 ~ x!3", F: "~@4 x!2 ~@2", G: "~@15 x",
  H: "x", I: "~@4 x ~ x!2", J: "~@6 x!2",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@106 A B ~@7 C ~@3 D ~@4 A E ~@5 F ~@7 F ~@62>".pickRestart({
  A: "~@15 x", B: "x!3 ~@5", C: "~ x ~@2", D: "~ x!3 ~ x!3 ~@8", E: "x", F: "~ x ~ x ~@4",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  ~@98 A ~@5 A ~ A ~ B C D E B F A ~ G C D H G C I D@2 J D J D J D J D J D J D J D J ~@62
>`.pickRestart({
  A: "~ x ~@30", B: "~ x ~@10 x ~@19", C: "x ~@2 x ~@2 x ~", D: "x", E: "~ x ~ x ~ x ~ x", F: "~ x ~@11 x ~@11 x ~@6",
  G: "x ~@12 x ~@18", H: "x!4", I: "x ~@10 x ~@20", J: "~ x ~@6",
})).gain(0.64)

// drums · ride bell
const ride_bell = s("rd").struct("<~@104 A B A ~ C D A E C D A E C D A ~ C D C D A@3 F A@3 E A@7 E ~@62>".pickRestart({
  A: "~ x!3", B: "x!4", C: "~ x ~ x", D: "~ x ~@2", E: "x", F: "x ~ x!2",
})).gain(0.56)

stack(
  pad_warm, pad_warm_soft, bass, lead_2_sawtooth, trumpet, electric_guitar_clean, electric_guitar_clean_2,
  distortion_guitar, synth_drum, synth_drum_soft, kick, snare, snare_soft, low_tom, mid_tom, high_tom, crash, ride_bell
)

More by Genesis