Strudelify
The Final Countdown cover art

1988 · The Final Countdown

The Final Countdown

Europe

KeyA majorTempo118 bpm
0:00/0:00
// The Final Countdown — Europe
// 118 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 6 "bass pedals" named as a bass, played on electric bass finger (its pad poly patch is not one); ch 8 "lead guitar" named as a guitar, played on overdriven guitar (its piano patch is not one); ch 9 "whistle" named as a pipe, played on whistle (its pad bowed patch is not one)
// note: duplicate parts dropped: ch 13 "drive guitar" overdriven guitar (copy of ch 11 "drive guitar" electric guitar muted, 0.083 beats late)
// note: Full arrangement: all 158 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(118/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 · synth brass 1 · "leadbrass"
const synth_brass_1 = note(`<
  ~@4 A B@2 C D E@2 C F B@2 C F B@2 C G H I J A B@2 C F B@2 C K H L@2 ~@15 M N ~ O@2 A B@2 C F B@2 C P ~@10 M Q ~ O@2 A
  B@2 C F B@2 C K H L@2 R@2 ~@16 A B@2 C F B@2 C K H L@2 A B@2 C F B@2 C K H L@2 A B@2 C F B@2 C K H S T A B@2 C F B@2 C
  K H S T
>`.pickRestart({
  A: "~@6 c#5 b4 c#5@3 ~ f#4@4", B: "[~@6 d5 c#5 d5 ~ c#5 ~ b4@6 ~@4 d5 c#5 d5@4 f#4@4]/2",
  C: "~@6 b4 a4 b4 ~ a4 ~ g#4 ~ b4 ~", D: "a4@5 ~ c#5 b4 c#5@3 ~ f#4@4",
  E: "[~@6 d5 c#5 d5 ~ c#5 ~ b4@6 ~@4 d5 c#5 d5@3 ~ f#4@4]/2", F: "a4@6 c#5 b4 c#5@4 f#4@4",
  G: "a4@6 ~ a4 b4@6 a4 b4, ~@3 g#4 ~@4", H: "c#5 b4 a4 g#4 f#4@2 d5@2", I: "c#5@7 ~ c#5@3 d5@3 c#5 b4", J: "c#5@3 ~",
  K: "a4@5 ~ g#4 a4 b4@6 a4 b4", L: "[c#5@11 ~ c#5 d5 c#5 ~ c#5@13 ~@3, ~@15 b4@2 ~@15]/2", M: "~@2 a4 b4",
  N: "a4@3 g#4 f#4@12",
  O: "[~@2 [b3,e4,g#4] ~ [b3,e4,g#4]@3 ~ [b3,g#4] ~ [b3,e4,g#4]@2 ~@2 [b3,e4,g#4]@6 ~@12, ~@4 e4 ~@11]/2", // E
  P: "a4@5 ~@11", Q: "a4@3 g#4 f#4@11 ~", R: "[f#3@31 ~]/2", S: "c#5@11 ~@5", T: "c#5@13 ~@3",
})).s("gm_synth_brass_1").gain(0.8)

// chords · church organ · "organ"
const church_organ = note("<~@12 A B C D A B C D E F G H ~@90 A B C I E F J K ~@36>".pickRestart({
  A: "[f#4,a4,c#5]", B: "[f#4,a4,d5]", C: "[f#4,b4,d5]", D: "[e4,g#4,b4] [f4,g#4,b4]", E: "[f#4,a4,c#5] [g#4,b4,e5]",
  F: "[a4,c#5,e5] [f#4,a4,d5]", G: "[f#4,g#4,c#5]", H: "[f4,g#4,c#5]", I: "[e4,g#4,b4]", J: "[g#4,c#5,f#5]",
  K: "[g#4,c#5,f5]", // C#
})).s("gm_church_organ").gain(0.48)

// chords · synth strings 1 · "warmstrings"
const synth_strings_1 = note(`<
  ~@4 A B C D A B C D A B C D A B C D E F G H A B C I A B C I E F G H J@4 K@3 C L@3 M N O P Q N R S@2 A B C I A B C I
  K@3 C L@3 M N O P Q N R S@2 A B C I A B C I E F G H T@2 U R N V W R U X U R N V W R U Y A B C I A B C I E F G H A B C
  I A B C I E F G H A B C I A B C I E F G H A B C I A B C I E F G H
>`.pickRestart({
  A: "[f#4,a4,c#5]", B: "[f#4,a4,d5]", C: "[f#4,b4,d5]", D: "[e4,g#4,b4] [f4,g#4,b4]", E: "[f#4,a4,c#5] [g#4,b4,e5]",
  F: "[a4,c#5,e5] [f#4,a4,d5]", G: "[g#4,c#5,f#5]", H: "[g#4,c#5,f5]", I: "[e4,g#4,b4]", J: "[[f#2,f#4]@31 ~]/4",
  K: "[a4,c#5,f#5]/3", L: "[[a4,c#5,f#5]@5 [g#4,b4,e5]]/3", M: "[a4,c#5,e5]", N: "[a3,d4,f#4]", O: "[b3,e4,g#4]",
  P: "[c#4,e4,a4] [b3,e4,g#4]", Q: "[c#4,f#4,a4] [b3,e4,g#4]", R: "[a3,c#4,e4]",
  S: "[~@2 [b3,e4,g#4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~@3 [b3,e4,g#4]@6 ~@12]/2", T: "f#3/2",
  U: "[b3,d4,f#4]", V: "[g3,b3,d4] [f#3,b3,d4]", W: "[g3,b3,e4]", X: "[a3,c#4,f#4]", Y: "[c#4,f4,g#4]",
})).s("gm_synth_strings_1").gain(0.64)

// bass · electric bass finger · "bass pedals"
const bass = note("<A@4 B C D E B C D E B C D E B C D E F G H@2 ~@134>".pickRestart({
  A: "b1", B: "f#2@3 e2", C: "d2", D: "b2", E: "e2 f2", F: "f#2 g#2", G: "a2 d2", H: "[c#2@31 ~]/2",
})).s("gm_electric_bass_finger").gain(0.8)

// bass · fretless bass · "slapbass"
const bass_2 = note(`<
  ~@24 A B C D A B C D E F G@2 A@4 H@3 I H@2 J K B L M N B O P@2 A B C D A B C D H@3 I H@2 J K B L M N B O P@2 A B C D A
  B C D E F G@2 Q R@2 K B S D K C A C K B S D K C O T U V W X Y Z AA AB@2 AC@2 A B C D A B C D E F G AD A B C D A B C D
  E F G AD A B C D A B C D E F G AD
>`.pickRestart({
  A: "f#1@2 f#1!2 f#1@2 f#1@2 f#1@2 f#1!2 f#1@2 f#1@2", B: "d2@2 d2!2 d2@2 d2@2 d2@2 d2!2 d2@2 d2@2",
  C: "b1@2 b1!2 b1@2 b1@2 b1@2 b1!2 b1@2 b1@2", D: "e1@2 e1!2 e1@2 e1@2 e1@2 e1!2 e1@2 e1@2",
  E: "f#1@2 f#1!2 f#1@2 f#1!2 g#1@2 g#1!2 g#1@2 g#1!2", F: "a1@2 a1!2 a1@2 a1!2 d2@2 d2!2 d2@2 d2!2",
  G: "c#2@2 c#2!2 c#2@2 c#2!2 c#2@2 c#2!2 c#2@2 c#2!2", H: "f#1@2 f#1!2 f#1@2 e1@2 f#1@2 f#1!2 f#1@2 e1@2",
  I: "b1@2 b1!2 b1@2 a1@2 b1@2 b1!2 b1@2 a1@2", J: "f#1@2 f#1!2 f#1@2 e1@2 g#1@2 g#1!2 g#1@2 e1@2",
  K: "a1@2 a1!2 a1@2 a1@2 a1@2 a1!2 a1@2 a1@2", L: "e2@2 e2!2 e2@2 e2@2 e2@2 e2!2 e2@2 e2@2",
  M: "a1@2 a1!2 a1@2 a1@2 g#1@2 g#1!2 g#1@2 g#1@2", N: "f#1@2 f#1!2 f#1@2 f#1@2 e1@2 e1!2 e1@2 e1@2",
  O: "c#2@2 c#2!2 c#2@2 c#2@2 c#2@2 c#2!2 c#2@2 c#2@2", P: "[~@2 e2 ~ e2@3 ~ e2 ~ e2@3 ~ e2@6 ~@12]/2",
  Q: "f#1@4 f#1 ~ f#1!2 ~ f#1!2 ~ f#1 ~ f#1 ~",
  R: "[f#1@4 f#1 ~ f#1 ~ f#1 ~ f#1!2 ~ f#1 ~@2 b1@2 b1!2 b1@2 b1@2 b1@2 b1!2 b1@2 b1@2, ~@15 f#1@2 ~@15]/2",
  S: "g1@2 g1!2 g1@2 g1@2 f#1@2 f#1!2 f#1@2 f#1@2", T: "f#1@2 ~@5 c#2", U: "d2@3 ~@13", V: "b1@2 ~@5 d2",
  W: "e2@2 ~@5 e2", X: "f#1@5 ~@9 c#2@2", Y: "d2@3 ~@5, d#2 ~@15", Z: "b1@3 ~@4 d2", AA: "e2@3 ~@5",
  AB: "[f#1@8 g#1@7 a1@3 g#1@2 f#1@2 e1@2 d2@4 d2@4]/2", AC: "c#2/2", AD: "c#2@2 ~ c#2@2 c#2@2 ~ c#2@3 ~ c#2@4",
})).s("gm_fretless_bass").gain(0.8)

// chords · overdriven guitar · "lead guitar"
const overdriven_guitar = note("<~@94 A B C D E F G H A B C I J K L M ~@48>".pickRestart({
  A: "[f#4,b4] [b4,d5] [d5,f#5] [f#4,b4] [b4,d5] [d5,f#5] [f#4,b4] [b4,d5] [d5,f#5] [f#4,b4] [b4,d5] [d5,f#5] [f#4,b4] [b4,d5] [d5,f#5]@2", // B5 Bm D B5 Bm D B5 Bm …
  B: "[a4,c#5] [c#5,e5] [e5,g5] [a4,c#5] [c#5,e5] [e5,g5] [a4,c#5] [c#5,e5] [e5,g5] [a4,c#5] [c#5,e5] [e5,g5] [a4,c#5] [c#5,e5] [e5,g5]@2", // A C#m Em A C#m Em A C#m …
  C: "[a4,d5] [d5,f#5] [f#5,a5] [a4,d5] [d5,f#5] [f#5,a5] [a4,d5] [d5,f#5] [f#5,a5] [a4,d5] [d5,f#5] [f#5,a5] [a4,d5] [d5,f#5] [f#5,a5]@2", // D5 D F#m D5 D F#m D5 D …
  D: "[d4,g4] [d4,a4] [d4,b4] [d4,g4] [d4,a4] [d4,b4] [d4,g4] [e4,a4] [f#4,b4] [e4,a4] [d4,g4] [c#4,f#4] [e4,a4] [d4,g4] [c#4,f#4] [a3,d4]", // G5 D5 G G5 D5 G G5 A5 …
  E: "[b3,e4]@6 g4!2 g4@2 f#4 [f#4,g4] e4@2 d4@2", F: "d4 c#4 b3 a3", G: "b4@4 a4 f#4 a4 f#4@2 b4 a4 f#4 g#4 e4 f#4@2",
  H: "f#4 e4 d4 b3 e4 b3 d4 e4@9",
  I: "[d4,g4] [d4,a4] [d4,b4] [d4,g4] [d4,a4] [d4,b4] [d4,g4] [e4,a4] [f#4,b4] [e4,a4] [d4,g4] [c#4,f#4] [e4,a4]@2 [d4,g4] [c#4,f#4]", // G5 D5 G G5 D5 G G5 A5 …
  J: "[b3,e4]@6 g4!2 g4@2 f#4 g4 [e4,f#4]@2 d4@2", K: "a4!2 d4 e4", L: "f#4", M: "g#4@3 b4 g#4@4",
})).s("gm_overdriven_guitar").gain(0.8)

// other · whistle
const whistle = note("<~@37 [~@2 f#4 e4] [c#4 a4 g#4 e4] f#4 ~@118>").s("gm_whistle").gain(0.8)

// other · electric guitar muted · "drive guitar"
const electric_guitar_muted = note(`<
  ~@24 A B C D A B C D E F G@2 H@4 I@3 J K@3 L M N O P M G Q@2 A B C D A B C D I@3 J K@3 L M N O P M G Q@2 A B C D A B C
  D E F G@2 R@3 S T U D S C A C S T U D S C V W X Y Z AA AB AC AD AE AF AG@2 A B C D A B C D E F G AH A B C D A B C D E
  F G AH A B C D A B C D E F G AH
>`.pickRestart({
  A: "f#2 ~ f#2!3 ~ f#2!3 ~ f#2!3 ~ f#2 ~", B: "d2 ~ d2!3 ~ d2!3 ~ d2!3 ~ d2 ~", C: "b2 ~ b2!3 ~ b2!3 ~ b2!3 ~ b2 ~",
  D: "e2 ~ e2!3 ~ e2!3 ~ e2!3 ~ e2 ~", E: "f#2 ~ f#2!3 ~ f#2!2 g#2 ~ g#2!3 ~ g#2!2",
  F: "a2 ~ a2!3 ~ a2!2 d3 ~ d3!3 ~ d3!2", G: "c#3 ~ c#3!3 ~ c#3!3 ~ c#3!3 ~ c#3!2", H: "[f#2@31 ~]/4", I: "f#2/3",
  J: "b2", K: "[f#2@5 g#2]/3", L: "a2", M: "d3 ~ d3!3 ~ d3!3 ~ d3!3 ~ d3!2", N: "e3 ~ e3!3 ~ e3!3 ~ e3!3 ~ e3!2",
  O: "a2 ~ a2!3 ~ a2!2 g#2 ~ g#2!3 ~ g#2!2", P: "f#2 ~ f#2!3 ~ f#2!2 e2 ~ e2!3 ~ e2!2",
  Q: "[~@2 e3 ~ e3@3 ~ e3 ~ e3@3 ~ e3@5 ~@13]/2", R: "[f#2@32 b2 ~ b2!3 ~ b2!3 ~ b2!3 ~ b2 ~]/3",
  S: "a2 ~ a2!3 ~ a2!3 ~ a2!3 ~ a2 ~", T: "d3 ~ d3!3 ~ d3!3 ~ d3!3 ~ d3 ~", U: "g2 ~ g2!3 ~ g2!2 f#2 ~ f#2!3 ~ f#2 ~",
  V: "c#3 ~ c#3!3 ~ c#3!3 ~ c#3!3 ~ c#3 ~", W: "f#2@2 ~@5 c#3", X: "d3 ~@3", Y: "b2@2 ~@5 d3", Z: "e3@2 ~@5 e2",
  AA: "f#2@3 ~@4 c#3", AB: "d3@3 ~@5", AC: "b2@7 ~@7 d3@2", AD: "e3@3 ~@5", AE: "f#2 g#2",
  AF: "a2 g#2 f#2 e2 d2@2 d2@2", AG: "c#2/2", AH: "c#3@15 ~",
})).s("gm_electric_guitar_muted").gain(0.72).pan(0.3)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@23 A B@11 C B@17 D E A B@21 D E A B@11 C F G B@16 ~@4 B@4 H ~@2 A B@11 I B@11 I B@11 I
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@7 x ~ x!2", D: "~@2 x ~@3 x!2", E: "~ x!2 ~ x!2 ~ x",
  F: "~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~", G: "x ~ x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~", H: "~@6 x!2 ~@6 x!2", I: "x ~@2 x",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@55 [~@3 x] ~@23 [~@3 x] ~@12 [~@11 x ~@4] [~@8 x!4 ~@4] ~@64>").gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@23
  [~@4 x!2 ~@2 x!2 ~@6]
  ~@68
  [~@5 x ~ x!3 ~@6]
  [~@4 x!4 ~@8]
  ~@27
  [~@4 x!2 ~@2 x!2 ~@6]
  ~@36
>`).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@23 A B@30 C ~ B@22 C ~ B@12 ~@2 B@16 D@8 E F G A B@11 H B@11 H B@11 H
>`.pickRestart({
  A: "~@3 x", B: "x ~@2 x!2 ~@3", C: "~ x!2 ~ x!2 ~ x", D: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3",
  E: "x ~@3 x ~ x!3 ~@3 x ~ x!2", F: "x!5 ~ x ~", G: "x!2 ~ x", H: "x ~@2 x",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@23 [x!2 ~@14] ~@68 [x!2 ~ x!2 ~@11] [x!4 ~@12] ~@27 [x!2 ~@14] ~@36>").gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@24 A ~@7 B@2 A ~ A ~@3 A ~@5 B A ~@8 A ~@7 A ~@5 B A ~@16 B@2 A ~ A ~ A ~@2 B A ~@3 A ~@2 B A ~@3 C A C A C A C A B
  D A@3 ~@7 B@2 A E ~@8 B@2 A E ~@8 B@2 A E
>`.pickRestart({
  A: "x", B: "x!2", C: "x ~@6 x", D: "x!5 ~ x ~", E: "~@2 x ~@2 x ~@2 x ~@7",
})).gain(0.8)

stack(
  synth_brass_1, church_organ, synth_strings_1, bass, bass_2, overdriven_guitar, whistle, electric_guitar_muted, kick,
  snare, low_tom, mid_tom, open_hat, high_tom, crash
)

More by Europe