Strudelify

Catch A Fire

Haddaway

KeyG minorTempo133 bpm
0:00/0:00
// Catch A Fire — Haddaway
// 133 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 147 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(133/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
const bass = note(`<
  ~@8 A B@2 C A B@2 C ~@16 D E A@2 D E F@2 D E A@2 D E F@2 A B@2 C A B@2 C ~@16 D E A@2 D E F@2 D E A@2 D E F@2 ~@16 A@8
  D E A@2 D E F@2 D E A@2 D E F@2 D E A@2 D E F@2 D E A@2 D E F@2 A G ~
>`.pickRestart({
  A: "g2 ~@2 g2!5 ~ g2 ~@2 g2!4", B: "d3 ~@2 d3!5 ~ d3 ~@2 d3!4", C: "c3 ~@2 c3!5 ~ c3 ~@2 c3!4",
  D: "ab2 ~@2 ab2!5 ~ ab2 ~@2 ab2!4", E: "eb3 ~@2 eb3!5 ~ eb3 ~@2 eb3!4", F: "bb2 ~@2 bb2!5 ~ bb2 ~@2 bb2!4",
  G: "g2 ~@2 g2!4 ~@9",
})).s("gm_synth_bass_1").gain(0.13).pan(0.3)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@8 A B C D A B C E F G H@2 F I J@2 F G H@2 F I J@2 K@2 J@2 K@2 L@2 M N O@2 M N P@2 A B C D A B C E F G H@2 F I J@2 F
  G H@2 F I J@2 K@2 J@2 K@2 L@2 M N O@2 M N P@2 H@2 Q@4 R@2 H@2 Q@4 R@2 F G H@2 F I J@2 K@2 J@2 K@2 L@2 M N O@2 M N P@2
  K@2 J@2 K@2 L@2 M N O@2 M N P@2 S@2 ~
>`.pickRestart({
  A: "d5", B: "f5", C: "c5", D: "bb4@3 c5", E: "bb4@15 ~", F: "[g4,bb4]", G: "[f4,a4]", H: "[g4,bb4]/2", I: "[a4,c5]",
  J: "[bb4,d5]/2", K: "[c5 g4, eb5]/2", L: "[bb5,d6]/2", M: "[ab5,ab6]", N: "[g5,g6]", O: "[g5,g6]/2", P: "[f5,f6]/2",
  Q: "[f4,a4]/2", R: "[eb4,g4]/2", S: "[[g5,g6]@3 ~]/2",
})).s("gm_synth_strings_1").gain(0.19).pan(0.4)

// chords · synth strings 1
const synth_strings_1_2 = note(`<
  A@4 B@2 C@2 D E F G D E F G H@4 I J K@2 H@4 I J K@2 A@4 B@2 C@2 A@4 B@2 C@2 D E F G D E F G H@4 I J K@2 H@4 I J K@2
  A@4 B@2 C@2 A@4 B@2 C@2 L@2 M@2 N@2 O@2 L@2 M@2 N@2 O@2 H@4 I J K@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2
  P@2 ~
>`.pickRestart({
  A: "[[ab3,c4] ~ d4@2, eb4 ~, ~@8 [g3,bb3]@23 ~]/4", B: "[[ab3,c4] [g3,bb3], eb4]/2", C: "[f3,bb3,d4]/2",
  D: "[bb3,d4,g4]", E: "[a3,d4,f4]", F: "[a3,c4,f4]", G: "[g3,c4,eb4]", H: "[[g3,bb3] [f3,a3] [g3,bb3]@2, d4]/4",
  I: "[g3,bb3,d4]", J: "[g3,a3,c4]", K: "[g3,bb3,d4]/2", L: "[bb3,d4,g4]/2", M: "[a3,d4,f4]/2", N: "[a3,c4,f4]/2",
  O: "[g3,c4,eb4]/2", P: "[[bb3,d4,g4]@10 [a3,c4,f4] [bb3,d4,g4] ~@4]/2",
})).s("gm_synth_strings_1").gain(0.14)

// other · blown bottle
const blown_bottle = note(`<
  ~@32 A B C@2 A B D@2 A B E@2 A B F@2 ~@24 A B C@2 A B D@2 A B E@2 A B F@2 ~@24 A B C@2 A B D@2 A B E@2 A B F@2 A B C@2
  A B D@2 A B E@2 A B F@2 E G ~
>`.pickRestart({
  A: "ab4!2 c5 ab4 ~ ab4 c5 eb5", B: "eb4!2 g4 eb4 ~ eb4 g4 bb4", C: "g4!2 bb4 g4 ~ g4 bb4 d5",
  D: "bb4!2 d5 bb4 ~ bb4 d5 f5", E: "g4!2 bb4 g4 ~@4", F: "bb4!2 d5 bb4 ~@4", G: "g4!2 f4 g4 ~@4",
})).s("gm_blown_bottle").gain(0.23).pan(0.6)

// bass · electric bass finger
const bass_2 = note(`<
  ~@8 A B C D A B C D E@16 F G E@2 F G H@2 F G E@2 F G H@2 A B C D A B C ~ E@16 F G E@2 F G H@2 F G E@2 F G H@2 I J K L
  M N O P I J K L M N O P E@8 F G E@2 F G H@2 F G E@2 F G H@2 F G E@2 F G H@2 F G E@2 F G H@2 E Q ~
>`.pickRestart({
  A: "g1@2 ~ g1@2 ~ g1@2 ~ g1@2 ~ g1@2 g1!2", B: "d1@2 ~ d1@2 ~ d1@2 ~ d1@2 ~ d1@2 d1!2",
  C: "f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 f1!2", D: "c1@2 ~ c1@2 ~ c1@2 ~ c1@2 ~ c1@2 c1!2",
  E: "g1@2 ~ g1@2 ~ g1@2 ~ g1@2 ~ g1 ~ g1!2", F: "ab1@2 ~ ab1@2 ~ ab1@2 ~ ab1@2 ~ ab1 ~ ab1!2",
  G: "eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1 ~ eb1!2", H: "bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1 ~ bb1!2",
  I: "g1 ~@4 g1 ~@2", J: "g1@2 ~@8 g1@2 ~ g1@2 ~", K: "d1 ~@4 d1 ~@2", L: "d1@2 ~@8 d1@2 ~ d1@2 ~", M: "f1 ~@4 f1 ~@2",
  N: "f1@2 ~@8 f1@2 ~ f1@2 ~", O: "c2 ~@4 c2 ~@2", P: "c2@2 ~@8 c2@2 ~ c2@2 ~", Q: "g1 ~ g1 ~ f1 ~ g1 ~@9",
})).s("gm_electric_bass_finger").gain(0.52)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@2 A@6 B C@2 D B C@2 D ~@32 B C@2 D B C@2 D ~@34 E@3 ~@3 F@4 ~@5 G@3 ~ H@2 ~@36
>`.pickRestart({
  A: "[~@3 [g4,d5]@29 bb4@55 ~@9]/6", B: "a3 bb3 d4@6", C: "a3 bb3 [bb3,f4]@6", D: "a3 bb3 g3@6",
  E: "[~@8 d5@6 c5@7 f4@27]/3", F: "[d5@49 ~@15]/4", G: "[~@14 c4@31 ~@3]/3", H: "[~@4 c4 e4 d4@8 ~@2]/2",
})).s("gm_distortion_guitar").gain(0.38).pan(0.4)

// other · electric guitar muted
const electric_guitar_muted = note("<~@88 [~@2 g3 ~@2 f3 ~@2 g3 ~@2 f3 ~ f3 g3 ~]!16 ~@43>")
  .s("gm_electric_guitar_muted").gain(0.48).pan(0.7)

// chords · percussive organ
const percussive_organ = note("<A B C@2 A B D@2 ~@137 E ~>".pickRestart({
  A: "[ab4,c5,eb5]", B: "[g4,bb4,eb5]", C: "[g4,bb4,d5]/2", D: "[bb4,d5,f5]/2",
  E: "[bb4,d5,g5]!2 [a4,c5,f5] [bb4,d5,g5] ~@4", // Gm F Gm
})).s("gm_percussive_organ").gain(0.2).pan(0.6)

// chords · percussive organ · soft notes
const percussive_organ_soft = note("<A B C@2 A B D@2 ~@139>".pickRestart({
  A: "ab5", B: "g5", C: "g5/2", D: "bb5/2",
})).s("gm_percussive_organ").gain(0.11).pan(0.6)

// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~@8 A B@2 C A B@2 C ~@16 D E A@2 D E F@2 D E A@2 D E F@2 A B@2 C A B@2 ~@17 D E A@2 D E F@2 D E A@2 D E F@2 ~@8 A@2
  B@4 C@2 ~@8 D E A@2 D E F@2 D E A@2 D E F@2 D E A@2 D E F@2 D E A@2 D E F@2 A G ~
>`.pickRestart({
  A: "~@2 [g3,bb3,d4] ~@3 [g3,bb3,d4] ~@3 [g3,bb3,d4] ~@3 [g3,bb3,d4] ~", // Gm
  B: "~@2 [d4,f4,a4] ~@3 [d4,f4,a4] ~@3 [d4,f4,a4] ~@3 [d4,f4,a4] ~", // Dm
  C: "~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~", // Cm
  D: "~@2 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~", // Ab
  E: "~@2 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~", // Eb
  F: "~@2 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~", // Bb
  G: "[bb3,d4,g4] ~ [bb3,d4,g4] ~ [a3,c4,f4] ~ [bb3,d4,g4] ~@9", // Gm F Gm
})).s("gm_lead_8_bass_lead").gain(0.17).pan(0.3)

// other · lead 8 bass lead
const lead_8_bass_lead_2 = note("<A B C D E B F G ~@80 H I J K L M N O H I J K L M N O ~@43>".pickRestart({
  A: "ab2 ~ g3 ~@2 d3 g3 ~ f3 d3 ~ f3!2 ~ d3 ~", B: "g2 ~ d3 ~ g2 bb2 ~@2 eb3 ~@2 eb3!2 ~ bb2 ~",
  C: "g2 ~ bb2 ~@2 d3 ~@2 f3 ~@2 f3 ~@2 bb2 ~", D: "g2 ~ bb2 ~ g2 d3 ~@2 f3 d3 ~ f3!2 ~ bb2 f3",
  E: "ab2 ~@4 d3 g3 ~ f3 d3 ~ f3!2 ~ d3 ~", F: "bb2 ~ bb2 ~@2 d3 ~@2 f3 ~@2 f3 ~@2 bb2 ~",
  G: "bb2 ~ bb2 ~ bb2 d3 ~@2 f3 d3 ~ f3!2 ~ bb2 f3", H: "~@2 g3 ~@2 d3 ~@2 f3 ~@7", I: "~@2 g3 ~@2 g2 ~@2 g3 ~@7",
  J: "~@2 g3 ~@2 d3 ~@6 g2 ~ d3 ~", K: "~@8 g3 ~@5 g3 ~", L: "~@2 f3 ~@2 c3 ~@2 f3 ~@7", M: "~@2 f2 ~@5 f3 ~@7",
  N: "~@2 g3 ~@2 c3 ~@2 g2 ~@7", O: "~@2 g3 ~@13",
})).s("gm_lead_8_bass_lead").gain(0.12).pan(0.3)

// other · lead 8 bass lead · soft notes
const lead_8_bass_lead_soft = note("<A B C D E B F G ~@139>".pickRestart({
  A: "~@4 ab2 ~@10 f3", B: "~@6 g3 ~@2 bb2 ~@5 eb3", C: "~@4 g2 ~ g3 ~@2 d3 ~@2 f3 ~@2 f3", D: "~@6 g3 ~@9",
  E: "~@2 bb2 ~ ab2 ~@10 f3", F: "~@4 bb2 ~ f3 ~@2 d3 ~@2 f3 ~@2 f3", G: "~@6 f3 ~@9",
})).s("gm_lead_8_bass_lead").gain(0.07).pan(0.3)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@18 A@2 ~@2 A@2 ~@2 A@2 ~@3 B ~@26 A@2 ~@2 A@2 ~@2 A@2 ~@3 B ~@39 B ~@35>".pickRestart({
  A: "g2@2 ~ g2@2 ~ g2@2 ~@8", B: "g2 d3 g3 g2 d3!2 g2 a3 d2!2 a2 d3!2 g3 d4 f4",
})).s("gm_lead_2_sawtooth").gain(0.35).pan(0.3)

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

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

// drums · clap
const clap = s("cp").struct("<~@8 A@8 ~@16 A@23 ~@17 A@16 ~@16 A@41 B ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct("<~@6 [x!4]!82 ~@14 [x!4]!43 [x!2 ~@2] ~>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@6 [~ x ~ x ~ x ~ x]!82 ~@14 [~ x ~ x ~ x ~ x]!43 [~ x ~ x ~@4] ~>").gain(0.3)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@2 [x!8]!6 ~@24 [x!8]!24 ~@16 [x!8]!73 [x!3 ~@5] ~>").gain(0.24)

// drums · congas
const congas = s("conga:13").struct("<~@2 [~ x ~ x ~ x ~ x]!4 ~@82 [~ x ~ x ~ x ~ x]!16 ~@43>").gain(1.34)

// drums · congas
const congas_2 = s("conga:18").struct("<~@2 [~@7 x ~@7 x]!4 ~@82 [~@7 x ~@7 x]!16 ~@43>").gain(1.34)

// drums · congas
const congas_3 = s("conga:33").struct("<~@2 [x!2]!4 x ~@81 [x!2]!16 ~@43>").gain(1.34)

// drums · shaker
const shaker = s("sh").struct("<~@2 [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!143 [~ x ~ x ~ x ~@10] ~>").gain(0.18)

stack(
  bass, synth_strings_1, synth_strings_1_2, blown_bottle, bass_2, distortion_guitar, electric_guitar_muted,
  percussive_organ, percussive_organ_soft, lead_8_bass_lead, lead_8_bass_lead_2, lead_8_bass_lead_soft, lead_2_sawtooth,
  kick, snare, clap, hihat, open_hat, crash, tambourine, congas, congas_2, congas_3, shaker
)

More by Haddaway