Strudelify
Afterglow cover art

Wind & Wuthering

Afterglow

Genesis

KeyG majorTempo110 bpm
0:00/0:00
// Afterglow — Genesis
// 110 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 115 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.

// other · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note(`<
  A B C D A B C E A B C D A B C E A B C D F G H I J K L@2 M@2 N@2 O P Q R S T U V A B C D A B C E A B C D F G H I W X
  R@2 Y Z AA@2 O AB M@2 N AC AD@2 AE@2 AF AG AH AI AJ AK AL@2 AI@2 AJ AE AM AN AI@2 AJ@2 AG@2 AH AO AP AQ AR AS AT AU AR
  AS AT AV AR AS AT AU AR AS AT AV ~
>`.pickRestart({
  A: "g4 b3 g4 b3", B: "f#4 b3 f#4 b3", C: "e4 c4 e4 c4", D: "g4 d#4 g4 d#4", E: "f4 c4 f#4 d4", F: "b3 e4 g#3 a3",
  G: "b3 c#4 a3 g#3", H: "f#3 b3 d#4 f#4", I: "g4 b3 g3@2 a4 d#4 c4@2", J: "g3 a#4 d#4 g4", K: "d#4 a#3 d#4 a#3",
  L: "f4 c4 g#3 c4", M: "f4 g#3 c#4 g#3", N: "g4 a#3 d#4 a#3", O: "f4 g#3 c4 g#3", P: "g#3 c4 f4 g#3", Q: "c#4 g#3",
  R: "f4 g#3", S: "g4 a#3", T: "f4 a#3", U: "e4 c4", V: "f#4 d4", W: "d#4 g3 a#3 d#4", X: "g4 g3 a#3 d#4",
  Y: "f4@2 c#4 g#3", Z: "f4 c#4", AA: "g4@2 d#4 a#3", AB: "f4 g#3 f4 g#3", AC: "f4 a#3 d4 a#3", AD: "e4 g3 c4 g3",
  AE: "f4 d4 a3 d4", AF: "d4 a#3 f4 a#3", AG: "d4 a#3 f4 a3", AH: "c4 g3 e4 g3", AI: "c4 g3 e4 c4", AJ: "d4 a3 f4 d4",
  AK: "f4 d4 a3 e4", AL: "d4 a#3 f4 d4", AM: "d4@2 a#3 d4 f4@2 d4@2", AN: "f4 d4 f4 d4", AO: "b3 g3 d4 g3",
  AP: "~@2 c#4@2 e4 a4@3", AQ: "c#5", AR: "[a4,d5,f#5]", AS: "[a4,c#5,f#5]", AT: "[b4,d5,g5]",
  AU: "g5 [e5,g5], [a#4,d5]", AV: "c5 c#5, [e5,g5]",
})).s("gm_acoustic_guitar_nylon").gain(0.26)

// chords · rock organ · "Organ"
const rock_organ = note(`<
  A B C D A B C E A B C D A B C E A B C D F G H I J@2 K@2 L@2 J@2 K@2 L@2 M N O P A B Q R A B Q E A B Q R F G H I J@2
  K@2 L@2 J@2 K@2 L@2 M N S@2 T@2 U@2 V@2 T@2 U@2 V@2 T@2 U@2 V@2 T@2 U@2 C A W@2 X Y A Z X Y A AA X Y A Z X Y A AA ~
>`.pickRestart({
  A: "[d5,g5,b5]", B: "[d5,f#5,b5]", C: "[e5,g5,c6]", D: "[d#5,a5,c6]", E: "f5 f#5, [a5,c6]", F: "[b4,e5,g#5]",
  G: "[c#5,e5,a5]", H: "[d#5,f#5,b5]", I: "[e5,g5,b5] [d#5,f#5,a5,c6]", J: "[a#4,d#5,g5]/2", K: "[c5,f5,g#5]/2",
  L: "[c#5,f5,g#5]/2", M: "[a#4,d#5,g5]", N: "[a#4,d5,f5]", O: "[g4,c5,e5]", P: "[f#4,a4,c5]",
  Q: "d6 c6 d6 c6, [e5,g5]", R: "d6 c6 d6 c6, [d#5,a5]", S: "[g4,c5,e5]/2", T: "[a4,d5,f5,a5]/2", U: "[a#4,d5,f5,a5]/2",
  V: "[c5,e5,g5,c6]/2", W: "[a4,c#5,e5,a5]/2", X: "[d5,f#5,a5]", Y: "[c#5,f#5,a5]", Z: "[d5,g5,a#5]",
  AA: "[g5,c6] [a5,c#6], e5", // C5 A
})).s("gm_rock_organ").gain(0.2)

// chords · synth strings 2 · "Chorale"
const synth_strings_2 = note(`<
  ~@24 A@2 B@2 C@2 A@2 B@2 C@2 D E F G H I J K H I J L H I J K M N O P A@2 B@2 C@2 A@2 B@2 C@2 D E Q@2 R@2 S@2 T@2 R@2
  S@2 T@2 R@2 S@2 T@2 R@2 S@2 U H V@2 W X H Y W X H Z W X H Y W X H Z ~
>`.pickRestart({
  A: "[a#4,d#5,g5]/2", B: "[c5,f5,g#5]/2", C: "[c#5,f5,g#5]/2", D: "[a#4,d#5,g5]", E: "[a#4,d5,f5]", F: "[g4,c5,e5]",
  G: "[f#4,a4,c5]", H: "[d5,g5,b5]", I: "[d5,f#5,b5]", J: "d6 c6 d6 c6, [e5,g5]", K: "d6 c6 d6 c6, [d#5,a5]",
  L: "f5 f#5, [a5,c6]", M: "[b4,e5,g#5]", N: "[c#5,e5,a5]", O: "[d#5,f#5,b5]", P: "[e5,g5,b5] [d#5,f#5,a5,c6]",
  Q: "[g4,c5,e5]/2", R: "[a4,d5,f5,a5]/2", S: "[a#4,d5,f5,a5]/2", T: "[c5,e5,g5,c6]/2", U: "[e5,g5,c6]",
  V: "[a4,c#5,e5,a5]/2", W: "[d5,f#5,a5]", X: "[c#5,f#5,a5]", Y: "[d5,g5,a#5]", Z: "[g5,c6] [a5,c#6], e5",
})).s("gm_synth_strings_2").gain(0.26)

// bass · slap bass 2 · "Bass"
const bass = note(`<
  A@8 ~@2 B@2 C@2 B@2 D@3 E F G@2 H I@8 ~@5 J K L C@2 M@2 C@2 B@2 C@2 B@2 F G@2 H I@8 ~@5 J M@2 N@8 ~@14 O F P@2 Q@2 C@2
  Q@2 C@2 Q@2 C@2 Q@2 C@2 ~
>`.pickRestart({
  A: "g2/8", B: "c2/2", C: "g2/2", D: "g2/3", E: "c2", F: "b2", G: "e2/2", H: "g2 a2", I: "d#2/8", J: "d2", K: "c3",
  L: "d3", M: "c3/2", N: "c2/8", O: "~ c3", P: "a2/2", Q: "d2/2",
})).s("gm_slap_bass_2").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  A@14 B@5 C A@3 D A@3 E A@10 F D A@11 D A@3 ~ A@9 B A B A@2 D ~ A E A@15 E A@6 G ~ A@3 D A@3 ~ A@3 D A@3 ~@2
>`.pickRestart({
  A: "x!2", B: "x ~@3 x ~@2 x", C: "x ~@4 x ~@2", D: "x", E: "x!3 ~", F: "x ~ x!2", G: "x ~ x ~@2 x ~@2",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  A@23 B A@15 ~ A@7 ~ A@3 ~ A@3 ~ A@14 C D A@16 E@2 A@6 E ~ A@3 F A@3 ~ A@3 F A@3 ~@2
>`.pickRestart({
  A: "~ x", B: "~@5 x ~@2", C: "~ x!3", D: "~@7 x", E: "~@4 x ~@2 x", F: "~ x ~@2",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<A B@21 C B ~@16 A B@6 ~ D B@2 E ~@63>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x ~@3 x ~@3 x ~@3 x ~ x!2", D: "~@2 x!2", E: "x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@23 A ~@15 B ~@11 C ~@2 D E ~@14 F G ~@25 H ~@3 I ~@2 J K ~@3 I ~@2 J K ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~ x ~@4 x!2 ~@3", C: "~@4 x ~@3 x ~ x!3 ~@3", D: "~@3 x", E: "~ x!2 ~ x!3 ~", F: "~ x!3",
  G: "~@2 x!2 ~@2 x!2", H: "x ~ x!3 ~ x ~ x!3 ~ x ~ x!2", I: "~@8 x ~ x!3 ~@3", J: "~@7 x",
  K: "x ~ x!3 ~@3 x ~ x ~ x ~ x ~",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  A ~@23 B C D E F E F B F B F B G@2 B@2 A ~@6 E ~@3 H G B I J G B F B F B F B F B F B F B@3 G B@4 K B@12 G B@5 L ~ G E
  G B G@2 B I G E G B G@2 B I ~
>`.pickRestart({
  A: "x", B: "x!4", C: "x!3 ~", D: "~ x!3", E: "x!2", F: "x ~@3 x ~ x!3 ~@3 x ~@3", G: "x ~ x!2", H: "~ x ~@2",
  I: "x ~ x!3 ~@3 x ~@3 x ~@3", J: "x!2 ~@2", K: "x ~ x ~ x ~ x!2", L: "x ~ x ~@2 x ~@2",
})).gain(0.4)

stack(acoustic_guitar_nylon, rock_organ, synth_strings_2, bass, kick, snare, hihat, mid_tom, crash)

More by Genesis