Strudelify
Fly Away cover art

1995 · The Drive

Fly Away

Haddaway

KeyE minorTempo144 bpm
0:00/0:00
// Fly Away — Haddaway
// 144 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 138 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 · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@19 A B A B C D E B A B A B A B A B C D E B A B A B C D E ~ A B A B C D E B A B A B C D E B A B A B C D E B A B A B C
  D E ~ A B A B C D E B A B A B C D E B ~@9 A B A B A B A B C D E B A B A B C D E B A B A B C D E B ~@6
>`.pickRestart({
  A: "e2 e3 e2 e3 e2 e3 e2 e3", B: "b1 b2 b1 b2 b1 b2 b1 b2", C: "c2 c3 c2 c3 c2 c3 c2 c3",
  D: "g1 g2 g1 g2 g1 g2 g1 g2", E: "a1 a2 a1 a2 a1 a2 a1 a2",
})).s("gm_synth_bass_1").gain(0.54)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@7 A@4 B C D E B C D E F G F G H I J G K L K L ~@8 K L K L M N O L F G F G H I J G F G F G H I J G P Q P Q R S T Q K
  L K L M N O L F G F G H I J G P Q P Q R S T Q U V W X Y X Z AA@2 K L K L F G F G H I J G F G F G H I J G P Q P Q R S T
  Q AB@5 ~
>`.pickRestart({
  A: "[e1@63 ~]/4", B: "[g3,g4] [e3,e4] [a3,a4] [e3,e4] [b3,b4] [e3,e4] [c4,c5] [b3,b4], [e1,e2]",
  C: "b2 [b3,b4] [c4,c5] b2 [b3,b4] b2 [a3,a4] b2, f#1", // B C B A
  D: "[g3,g4] [e3,e4] [a3,a4] [e3,e4] [b3,b4] [e3,e4] [c4,c5] [b3,b4], [g1,g2]", // G E A E B E C B …
  E: "b2 [b3,b4] [c4,c5] b2 [b3,b4] b2 [a3,a4] b2, b1", // B C B A
  F: "[g3,g4] [e3,e4] [a3,a4] [e3,e4] [b3,b4] [e3,e4] [c4,c5] [b3,b4], e2", // G E A E B E C B
  G: "b2 [b3,b4] [c4,c5] b2 [b3,b4] b2 [a3,a4] b2", // B C B A
  H: "[g3,g4] [e3,e4] [a3,a4] [e3,e4] [b3,b4] [e3,e4] [c4,c5] [b3,b4], c3", // G E A E B E C B
  I: "g3 [b3,b4] [c4,c5] g3 [b3,b4] g3 [a3,a4] g3", // B C B A
  J: "[g3,g4] [e3,e4] [a3,a4] [e3,e4] [b3,b4] [e3,e4] [c4,c5] [b3,b4], a2", K: "e3!16", L: "b2!16", M: "c3!16",
  N: "g2!16", O: "a2!16", P: "~@2 [b3,e4] ~ [b3,e4]@2 ~@2 [b3,e4]@2 ~ [b3,e4]!2 ~ [b3,f#4]@2",
  Q: "~@2 [b3,f#4] ~ [b3,f#4]@2 ~@2 [b3,f#4]@2 ~@2 [b3,f#4]@3 ~", // B5
  R: "~@2 [c4,e4] ~ [c4,e4]@2 ~@2 [c4,e4]@2 ~ [c4,e4]!2 ~ [d4,g4]@2", // C G5
  S: "~@2 [d4,g4] ~ [d4,g4]@2 ~@2 [d4,g4]@2 ~@2 [d4,g4]@3 ~", // G5
  T: "~@2 [a3,e4] ~ [a3,e4]@2 ~@2 [a3,e4]@2 ~ [a3,e4]!2 ~ [b3,f#4]@2", U: "e1", V: "f#1", W: "g1", X: "b1", Y: "c2",
  Z: "a1", AA: "b1/2", AB: "[e1@77 ~@3]/5",
})).s("gm_lead_2_sawtooth").gain(0.26)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@19 A@4 B@2 C D ~@4 E@4 F@2 G H@5 F@2 G I A@4 B@2 C J@5 B@2 C J@5 B@2 C D E@4 F@2 G I K@3 L M@2 N O@5 M@2 N P ~@13
  A@4 B@2 C Q@5 M@2 N O@5 M@2 N P ~@6
>`.pickRestart({
  A: "[[e4,g4] [d4,f#4] [e4,g4] [d4,f#4], b3]/4", B: "[[c4,e4] [b3,d4], g4]/2", C: "[c4,e4,a4]", D: "[b3,d#4,f#4]",
  E: "[[e4,g4] [d4,f#4] [e4,g4] [d4,f#4], b4]/4", F: "[[e4,c5] [d4,b4], g4]/2", G: "[e4,a4,c5]",
  H: "[[d#4,f#4] [e4,g4] [d4,f#4] [e4,g4] [d4,f#4], b4]/5", I: "[d#4,f#4,b4]",
  J: "[[d#4,f#4] [e4,g4] [d4,f#4] [e4,g4] [d4,f#4], b3]/5", K: "[[e4,g4] [d4,f#4] [e4,g4], [b3,b5]]/3", L: "[d4,f#4]",
  M: "[[c4,e4,c6] [b3,d4,b5], g4]/2", N: "[c4,e4,a4,a5]", O: "[[d#4,f#4] [e4,g4] [d4,f#4] [e4,g4] [d4,f#4], [b3,b5]]/5",
  P: "[b3,d#4,f#4,b5]", Q: "[[d#4,f#4] [e4,g4] [d4,f#4] [e4,g4] [d4,f#4], b3, ~ b5@4]/5",
})).s("gm_synth_strings_1").gain(0.22)

// chords · pad halo · "HALO PAD"
const pad_halo = note("<A@8 B C@3 ~@83 D@4 E@3 F@2 ~@27 G@7>".pickRestart({
  A: "[~@5 f#4 a4@2, ~@15 e2@113, ~ a3@7, ~@3 b3@13, ~@32 f#4@8 a4@39 e4@49]/8", B: "f#4",
  C: "[~@15 f#4@25 ~@8, a4@17 ~@31]/3",
  D: "[[e4,g4,b4]@2 f#5 ~@3 [d4,f#4]@2, b3, ~ [d4,f#4] [e4,g4] ~, ~@12 b5@9 ~@11, ~@10 f#6@5 ~]/4", // Em D Em
  E: "[[c4,e4]@15 ~ [b3,d4]@16 [a3,c4,e4]@16, g4@2 ~, ~@15 g5@20 ~@13]/3", F: "[e5@15 f#5@17, [b3,d#4,f#4]]/2",
  G: "[~@56 a5@8 ~@15 e4@29 ~@4, ~@15 e2@25 a4@24 b5@20 ~@28, ~@4 a3@23 ~, ~@6 b3@21 ~, ~@8 f#4@19 ~]/7",
})).s("gm_pad_halo").gain(0.18).pan(0.4)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@27 A B A C ~@73 A B A C ~@30>".pickRestart({
  A: "~ [b2,b3,b4] ~ [a2,a3,a4] [b2,b3,b4] ~ [a2,a3,a4] [b2,b3,b4]", B: "~ [b2,b3,b4] ~ [b2,b3,b4] ~@2 [a2,a3,a4] ~",
  C: "~ [b2,b3,b4] ~ [b2,b3,b4]!2 ~ [a2,a3,a4] ~", // B A
})).s("gm_overdriven_guitar").gain(0.22).pan(0.4)

// bass · synth bass 1 · "SYN BASS 1"
const bass_2 = note(`<
  ~@31 A B A B C D E B A B A B C D E B ~@24 A B A B C D E B ~@29 A B A B C D E B A B A B C D E B A B A B C D E B ~@6
>`.pickRestart({
  A: "e2!16", B: "b2!16", C: "c3!16", D: "g2!16", E: "a2!16",
})).s("gm_synth_bass_1").gain(0.21).pan(0.6)

// other · synth bass 1 · "SYN BASS 1"
const synth_bass_1 = note("<~@39 A@4 B C D ~@25 A@4 B C D ~@24 E F ~@34>".pickRestart({
  A: "~@2 b5 ~@3 b4 ~@3 b4 ~@3 b4 ~", B: "~@2 c6 ~@3 c5 ~@3 c5 ~@3 c5 ~", C: "~@2 g5 ~@3 g4 ~@3 g4 ~@3 g4 ~",
  D: "~@2 a5 ~@3 a4 ~@3 a4 ~@3 a4 ~", E: "e3 f#3 b3 e4 f#4 b4 e5 b4 f#4 e4 b3 f#3 e3 b2 e3 f#3",
  F: "b3 e4 f#4 b4 e5 b4 f#4 e4 b3 f#3 e3 b2 e3 f#3 b3 e4",
})).s("gm_lead_8_bass_lead").gain(0.26).pan(0.3)

// chords · lead 3 calliope · "CALLIOPE"
const lead_3_calliope = note("<~@6 A@6 ~@126>".pickRestart({
  A: "[~@24 e5@8 d5@63 ~, e4@79 ~@17, ~@4 a4@33 ~@11, ~ b4@4 ~]/6",
})).s("gm_lead_3_calliope").gain(0.14).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@11 A ~@3 A@4 B@8 A@4 B@15 A B@23 A B@7 A B@15 A ~@9 A@4 B@24 A ~@5>".pickRestart({
  A: "x", B: "x!4",
})).gain(0.7)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@15 A@4 B@8 A@4 ~@15 A B@23 A ~@7 A B@15 A ~@9 A@4 B@24 ~@6>".pickRestart({
  A: "~ x ~ x!3 ~@2", B: "~@3 x ~ x ~@2",
})).gain(0.28)

// drums · snare
const snare = s("sd").struct("<~@15 A@3 B A@27 B A@31 B A@16 ~@8 B A@28 ~@6>".pickRestart({
  A: "~@4 x ~@2 x ~ x ~@2 x ~@3", B: "x!16",
})).gain(0.35)

// drums · clap
const clap = s("cp").struct("<~@19 A@8 ~@20 A@23 ~@9 A@15 ~@14 A@24 ~@6>".pickRestart({
  A: "~ x ~ x",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct("<~@19 A@27 B A@23 B A@7 B A@16 C@9 A@28 ~@6>".pickRestart({
  A: "x!4", B: "x", C: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2",
})).gain(0.21)

// drums · open hat
const open_hat = s("oh").struct("<~@19 A@27 ~ A@23 ~ A@7 ~ A@53 ~@6>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.42)

// drums · crash
const crash = s("cr").struct(`<
  ~@11 A ~@7 A ~@7 A ~@3 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@8 A ~@3 A ~@7 A ~@7 A ~@7 A ~@5
>`.pickRestart({
  A: "x",
})).gain(0.42)

// drums · tambourine
const tambourine = s("tb").struct("<~@15 [x!16]!80 ~@9 [x!16]!28 ~@6>").gain(0.35)

// drums · ht
const ht = s("ht").struct("<~@30 A ~@39 A ~@23 A ~@12 A ~@30>".pickRestart({
  A: "~@4 x ~ x!2 ~ x ~@6",
})).gain(0.42)

// drums · mt
const mt = s("mt").struct("<~@30 A ~@39 A ~@23 A ~@12 A ~@30>".pickRestart({
  A: "~@11 x!5",
})).gain(0.42)

stack(
  bass, lead_2_sawtooth, synth_strings_1, pad_halo, overdriven_guitar, bass_2, synth_bass_1, lead_3_calliope, kick,
  kick_soft, snare, clap, hihat, open_hat, crash, tambourine, ht, mt
)

More by Haddaway