Strudelify

Crossfire

Bellamy Brothers

KeyF♯ majorTempo120 bpm
0:00/0:00
// Crossfire — Bellamy Brothers
// 120 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 16-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): MUTED GTR.
setcpm(120/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A@2 B@2 C@2 D E F G H I J K L M F G H I J K L E F N O P Q R S T F N O P Q U V W F G H I J K L M F G H I J K L E F N O
  P Q R S T F N O P Q U F G H I J K L M F G H I J K L E F N O P Q R S T F N O P Q U F N O P F N O P F N O P X@2
>`.pickRestart({
  A: "[f#2@31 ~]/2", B: "[c#2@31 ~]/2", C: "[g#1@31 ~]/2", D: "b1 a#1", E: "c#2 ~ c#2@6",
  F: "f#2@4 ~@2 f#2 ~ c#2@4 ~@2 c#2@2", G: "f#2@5 ~ f#2@2 f2@2 ~@2 d#2@2 ~@2", H: "c#2@5 ~ c#2@2 g#1@4 ~@2 g#1@2",
  I: "c#2@2 ~ c2 c#2 ~ d#2 ~", J: "g#1@4 ~@2 g#1 ~ d#2@4 ~@2 d#2@2", K: "g#1@5 ~ g1@2 g#1@2 ~@2 a#1@2 ~@2",
  L: "b1@5 ~ b1@2 a#1@4 ~@2 a#1@2", M: "c#2@2 ~ c#2 d#2 ~ f2 ~", N: "f#2@5 ~ c#2@2 f#2@2 c#2@2 f#2@4",
  O: "d#2@5 ~ d#2@2 a#1@4 ~@2 a#1@2", P: "d#2@2 ~ a#1 d#2@2 c#2@2", Q: "b1@4 ~@2 b1 ~ f#1@4 b1@4",
  R: "f#2@5 ~ f#2@2 f2@4 d#2@4", S: "c#2@5 ~ c#2@2 b1@4 ~@2 b1@2", T: "a#1@5 ~ a#1@2 g#1@4 c#2@4",
  U: "c#2@5 ~ c#2@2 d#2@4 f2@4", V: "f#2@3 c#2", W: "f#1", X: "[f#1@3 ~]/2",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A@2 B@2 C@2 D E F@2 G@2 H I D J F@2 G@2 H I D K F@2 L@2 M N O@2 F@2 L@2 M P Q ~ F@2 G@2 H I D J F@2 G@2 H I D K F@2
  L@2 M N O@2 F@2 L@2 M P F@2 G@2 H I D J F@2 G@2 H I D K F@2 L@2 M N O@2 F@2 L@2 M P F@2 L@2 F@2 L@2 F@2 L@2 R@2
>`.pickRestart({
  A: "[[a#3,c#4,f#4]@29 ~@3]/2", B: "[[g#3,c#4,f4]@15 ~]/2", C: "[[g#3,b3,d#4]@15 ~]/2",
  D: "[f#3,b3,d#4]@7 ~ [f#3,a#3,c#4]@7 ~", E: "[g#3,c#4,f4] ~@3 [g#3,c#4,f4]@11 ~",
  F: "~@2 [a#3,c#4,f#4]@2 ~ [a#3,c#4,f#4]@3", // F#
  G: "[~@2 [g#3,c#4,f4]@2 ~ [g#3,c#4,f4]@4 ~ [g#3,c#4,f4]@2 ~ [g#3,c#4,f4]@3]/2", // C#
  H: "~@4 [g#3,b3,d#4]@5 ~ [g#3,b3,d#4]@6", I: "~@4 [g#3,b3,d#4]@4 ~@2 [g#3,b3,d#4]@5 ~",
  J: "[f3,g#3,c#4]@7 ~ [f#3,a#3,c#4]@3 ~ [f3,g#3,c#4]@3 ~", K: "[f3,g#3,c#4]@3 ~ [f3,g#3,c#4]@11 ~",
  L: "[~@2 [a#3,d#4,f#4]@2 ~ [a#3,d#4,f#4]@4 ~ [a#3,d#4,f#4]@2 ~ [a#3,d#4,f#4]@3]/2", // D#m
  M: "~@4 [b3,d#4,f#4]@5 ~ [b3,d#4,f#4]@6", N: "~@4 [a#3,c#4,f#4]@4 ~@2 [a#3,c#4,f#4]@5 ~",
  O: "~@2 [g#3,c#4,f4]@2 ~ [g#3,c#4,f4]@3", P: "~@4 [c#4,f4,g#4]@4 ~@2 [c#4,f4,g#4]@5 ~", Q: "[a#3,c#4,f#4]",
  R: "[[a#3,c#4,f#4]@3 ~]/2", // F#
})).s("gm_piano").gain(0.31).pan(0.8)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  A@2 B@2 C@2 D E ~@7 F G ~@13 H@2 ~@15 F G ~@13 H@2 ~@6 I J K J K L M N O P K Q K L M R ~@6 S@2 ~@7 T@3 U V W X Y V Z X
  AA@2
>`.pickRestart({
  A: "[~ a#4@7 [c#4,f#4]@24, f#4@7 ~@25]/2", B: "[[c#5,f5]@7 ~ [g#4,c#5]@23 ~]/2",
  C: "[[g#4,c#5]@7 ~ [d#4,g#4]@23 ~]/2", D: "d#4 c#4", E: "f4 ~@3 f4@11 ~", F: "~@2 a#3 b3", G: "c#4 ~",
  H: "[c#4@2 d#4@3 ~ f4@4 f#4@4 a#4@4 g#4@8 ~@6]/2", I: "f#4@11 ~ f#4@4", J: "d#5@6 c#5@6 a#4@2 b4 a#4",
  K: "g#4@11 ~ f#4@4", L: "d#5@3 c#5@3 a#4@2", M: "b4@6 c#5 b4 a#4@6 b4 a#4, d#4 c#4",
  N: "g#4@6 a#4 g#4 [a#3,f#4]@4 [b3,g#4]@4, b3 ~", O: "[c#4,f#4]@12 f#4 ~@3",
  P: "d#5@6 ~@2 d#5@2 c#5@2 a#4@2 b4 a#4, ~@3 f#5@3 ~@2", Q: "d#5@4 ~@2 d#5@4 c#5@2 a#4@2 b4 a#4, ~@2 f#5@3 ~@3",
  R: "[f4,g#4] ~@3 [f4,g#4]@10 ~@2", S: "[c#4@2 d#4@3 ~ f4@4 f#4@4 a#4@4 g#4@10 ~@4]/2",
  T: "[~@8 d#5@2 c#5@2 a#4 ~ d#5@19 ~@7 a#4@4 f#4@2 g#4@2]/3", U: "f#4", V: "~@8 d#5@2 c#5@2 a#4 ~ d#5@2", W: "d#5",
  X: "~@4 f#4 g#4 a#4 b4", Y: "a#4@15 ~", Z: "d#5 f#5@3", AA: "[a#4@19 ~@13]/2",
})).s("gm_overdriven_guitar").gain(0.5).pan(0.4)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@24 A@2 B@2 C D ~@2 A@2 B@2 C E ~@18 A@2 B@2 C D ~@2 A@2 B@2 C E ~@16 A@2 F@2 C D ~@2 G@2 F@2 C E ~@14
>`.pickRestart({
  A: "[~@4 [c#3,f#3] [f3,g#3] a#3 [g#3,b3]@2 [f#3,a#3]@3 ~@4]/2", B: "[~@5 f#3 [f#3,a#3] [f3,g#3]@2 [d#3,f#3]@3 ~@4]/2",
  C: "~@3 [d#3,f#3] [f#3,a#3] [g#3,b3]@3", D: "[f#3,a#3] ~", E: "[g#3,c#4] ~",
  F: "[~@5 [d#3,f#3] [f#3,a#3] [f3,g#3]@2 [d#3,f#3]@3 ~@4]/2", // D#m F# Fm D#m
  G: "[~@4 [c#3,f#3] [f3,g#3] [f#3,a#3] [g#3,b3]@2 [f#3,a#3]@3 ~@4]/2", // F#5 Fm F# G#m F#
})).s("gm_electric_guitar_clean").gain(0.36).pan(0.6)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note("<~@24 A ~ B ~@5 A ~ B ~@21 A ~ B ~@5 A ~ B ~@19 A ~@27>".pickRestart({
  A: "~@6 f#3 ~", B: "~@5 d#3 ~@2",
})).s("gm_electric_guitar_clean").gain(0.21).pan(0.6)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@8 A@2 B@2 C@2 D E A@2 B@2 C@2 D F G@2 H@2 I G J@2 G@2 H@2 I J K@2 A@2 B@2 C@2 D E A@2 B@2 C@2 D F G@2 H@2 I G J@2
  G@2 H@2 I J A@2 B@2 C@2 D E A@2 B@2 C@2 D F G@2 H@2 I G J@2 G@2 H@2 I J G@2 H@2 G@2 H@2 G@2 H@2 L@2
>`.pickRestart({
  A: "[a#3,c#4]@2 [a#3,c#4]@2 [a#3,c#4,f#4] ~ [a#3,c#4]@2 [a#3,c#4]@2 [a#3,c#4]@2 [a#3,c#4,f#4] ~ [a#3,c#4]@2, f#4 ~ f#4 ~", // A#m F# A#m F# A#m
  B: "[g#3,c#4]@2 [g#3,c#4]@2 [g#3,c#4,f4] ~ [g#3,c#4]@2 [g#3,c#4]@2 [g#3,c#4]@2 [g#3,c#4,f4] ~ [g#3,c#4]@2, f4 ~ f4 ~", // C#5 C# C#5 C# C#5
  C: "[b3,d#4]@2 [b3,d#4]@2 [b3,d#4,g#4] ~ [b3,d#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4,g#4] ~ [b3,d#4]@2, g#4 ~ g#4 ~", // B G#m B G#m B
  D: "[b3,d#4]@2 [b3,d#4]@2 [b3,d#4,f#4] ~ [b3,d#4]@2 [a#3,c#4]@2 [a#3,c#4]@2 [a#3,c#4,f#4] ~ [a#3,c#4]@2, f#4 ~ f#4 ~", // B A#m F# A#m
  E: "[g#3,b3]@2 [g#3,b3]@2 [g#3,b3,f4] ~ [g#3,b3]@2 [a#3,c#4]@2 [a#3,c#4]@2 [c#4,f4,g#4]@2 [c#4,f4]@2, f4 ~ f#4 ~", // G#m Fdim G#m A#m C#
  F: "[g#3,c#4,f4] ~@4 f4@11, ~ [g#3,c#4]@3", // C# C#5
  G: "[a#3,c#4]@2 [a#3,c#4]@2 [a#3,c#4,f#4] ~ [a#3,c#4,f#4]@2 [a#3,c#4]@2 [a#3,c#4]@2 [a#3,c#4,f#4] ~ [a#3,c#4,f#4]@2, f#4 ~ f#4 ~", // A#m F# A#m F#
  H: "[a#3,d#4]@2 [a#3,d#4]@2 [a#3,d#4,f#4] ~ [a#3,d#4,f#4]@2 [a#3,d#4]@2 [a#3,d#4]@2 [a#3,d#4,f#4] ~ [a#3,d#4,f#4]@2, f#4 ~ f#4 ~", // D#5 D#m D#5 D#m
  I: "[b3,d#4]@2 [b3,d#4]@2 [b3,d#4,f#4] ~ [b3,d#4,f#4]@2 [b3,d#4]@2 [b3,d#4]@2 [b3,d#4,f#4] ~ [b3,d#4,f#4]@2, f#4 ~ f#4 ~", // B
  J: "[g#3,c#4]@2 [g#3,c#4]@2 [g#3,c#4,f4] ~ [g#3,c#4,f4]@2 [g#3,c#4]@2 [g#3,c#4]@2 [g#3,c#4,f4] ~ [g#3,c#4,f4]@2, f4 ~ f4 ~", // C#5 C# C#5 C#
  K: "[[f#3,a#3,c#4,f#4]@2 ~@2 [f#3,a#3,c#4,f#4]@8 [f#3,a#3,c#4,g#4]@2 [f#3,a#3,f#4,a#4]@6 [f#3,a#3,c#4]@6 [a#3,c#4]!2 [f#3,a#3,c#4,f#4] ~ [f#3,a#3,c#4,f#4]@2, ~@5 f#4@2 ~]/2", // F# A#m F#
  L: "[~ f#4@19 ~@12, [f#3,a#3,c#4]@5 ~@3]/2", // F#
})).s("gm_acoustic_guitar_steel").gain(0.22).pan(0.3)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A@2 B@2 C@2 D E F@2 G@2 H@2 I J F@2 G@2 H@2 I K L@2 M@2 N O P@2 L@2 M@2 N Q R@2 F@2 G@2 H@2 I J F@2 G@2 H@2 I K L@2
  M@2 N O P@2 L@2 M@2 N Q F@2 G@2 H@2 I J F@2 G@2 H@2 I K L@2 M@2 N O P@2 L@2 M@2 N Q L@2 M@2 L@2 M@2 L@2 M@2 S@2
>`.pickRestart({
  A: "[a#4,f#5]/2", B: "[c#5,g#5]/2", C: "[b4,g#5]/2", D: "[f#4,b4]@8 [f#4,a#4]@7 ~", E: "[f4,c#5] ~@3 [f4,c#5]@12",
  F: "[a#3,c#4,f#4]/2", G: "[c#4,f4,g#4]/2", H: "[b3,d#4,g#4]/2", I: "[b3,d#4,f#4] [a#3,c#4,f#4]",
  J: "[g#3,c#4,f4]@2 [a#3,c#4,f#4] [c#4,f4,g#4]", K: "[g#3,c#4,f4]@3 ~ [g#3,c#4,f4]@12", L: "[f#3,c#4,a#4]/2",
  M: "[f#3,d#4,a#4]/2", N: "[f#3,d#4,b4]", O: "[f#3,c#4,a#4]", P: "[f3,c#4,g#4]/2", Q: "[g#3,f4,c#5]",
  R: "[[f#3,a#3,f#5]@5 ~@3]/2", S: "[[a#3,f#4]@3 ~, f#3 ~]/2",
})).s("gm_synth_strings_1").gain(0.18)

// chords · celesta
const celesta = note("<A@2 B@2 C@2 D E ~@106>".pickRestart({
  A: "[~ c#7, ~@15 [f#6,a#6]@17]/2", B: "[~@15 [g#6,c#7]@16 ~, ~@7 f6@8 ~]/2", C: "[~@15 [g#6,b6,d#7]@16 ~]/2",
  D: "[b5,d#6]@7 ~ [a#5,c#6]@5 ~@3", E: "[c#6,f6] ~@3 [c#6,f6]@10 ~@2",
})).s("gm_celesta").gain(0.26).pan(0.8)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note("<~@13 A ~ B ~@5 A ~@23 A ~ B ~@5 A ~@21 A ~ B ~@5 A ~@30>".pickRestart({
  A: "f#4 ~@15", B: "c#4 ~@5 c#4 ~@9",
})).s("gm_electric_guitar_muted").gain(0.26).pan(0.8)

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

// drums · snare
const snare = s("sd").struct("<~@7 A B@15 C B@13 D ~@2 B@7 E B@7 C B@13 D B@15 C B@13 D B@12 ~@2>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@5 x!2 ~", D: "~@2 x ~@3 x!2", E: "~@2 x ~@2 x!2 ~",
})).gain(0.52)

// drums · low tom
const low_tom = s("lt").struct("<~@6 [~@6 x!2] x ~@99 [~@7 x] ~@3 [~@7 x] ~@2>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@6 C D E D@3 E D@3 E D@3 E D F D E D@3 E D G D E D@4 F ~ D E D@3 E D@3 E D@3 E D F D E D@3 E D G D E D@5 E D@3 E
  D@3 E D@3 E D F D E D@3 E D G H@3 I H I H@3 I H@3 I H@3 I F ~
>`.pickRestart({
  A: "~ x ~ x!3 ~ x", B: "x!2 ~ x!3 ~ x", C: "x ~@6 x", D: "x!4", E: "x ~ x ~ x ~ x!2", F: "x", G: "x!2 ~@2", H: "x!8",
  I: "x!7 ~",
})).gain(0.32)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A@7 ~ B C B C B C B C B C B C B C B ~ B C B C B C B D B C B C B C ~@2 B C B C B C B C B C B C B C B ~ B C B C B C B D
  B C B C B C B C B C B C B C B C B C B C B ~ B C B C B C B D ~@20
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~@2", D: "~@3 x ~ x ~@2",
})).gain(0.19)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@6 A ~@8 B ~@6 C D ~@7 E ~@7 B ~@7 B ~@6 C D ~@7 E ~@13 B ~@6 C D ~@7 E ~@13 F ~@3 G ~@2
>`.pickRestart({
  A: "~@2 x!2 ~ x!2 ~", B: "~@7 x", C: "~@5 x ~ x", D: "x", E: "~@2 x ~@2 x ~ x", F: "~@6 x ~@3 x!3 ~@3", G: "~@3 x",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@7 ~@4 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 C ~@3 B ~ B ~ B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 C ~@3 B ~ B ~@3 B ~@3 B ~@3 B
  ~@3 B ~@3 B ~@3 C ~@3 B ~ B ~@3 B ~@3 B ~@3 B ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@7 x", C: "~ x ~@2 x ~@2 x",
})).gain(0.19)

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

// drums · crash
const crash = s("cr").struct(`<
  A ~@6 B A ~@7 A ~@6 B A ~@7 A ~@5 A ~ A ~@7 A ~@6 B A ~@7 A ~@5 A ~@7 A ~@6 B A ~@7 A ~@5 A ~@7 A ~@3 A ~
>`.pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct("<~@24 A@14 B ~@17 A@14 B ~@15 A@26 B ~>".pickRestart({
  A: "x!16", B: "x",
})).gain(0.19)

// drums · congas
const congas = s("conga:13").struct("<~@8 A@15 ~ A@14 B C A@15 ~ A@29 ~ A@26 ~@2>".pickRestart({
  A: "~@3 x ~@2 x ~", B: "~@7 x", C: "~@3 x ~@3 x",
})).gain(0.83)

// drums · congas
const congas_2 = s("conga:18").struct("<A@7 ~ B@15 ~ B@14 C D B@15 ~ B@29 ~ B@26 ~@2>".pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@2", C: "~@3 x", D: "~ x ~ x",
})).gain(0.83)

// drums · congas
const congas_3 = s("conga:33").struct("<~@8 A@15 ~ A@14 B C A@15 ~ A@29 ~ A@26 ~@2>".pickRestart({
  A: "~@2 x!2 ~@6 x ~@5", B: "~@5 x ~@2", C: "~ x ~@3 x ~@2",
})).gain(0.83)

stack(
  bass, piano, overdriven_guitar, electric_guitar_clean, electric_guitar_clean_2, acoustic_guitar_steel,
  synth_strings_1, celesta, electric_guitar_muted, kick, snare, low_tom, hihat, hihat_soft, mid_tom, open_hat, high_tom,
  crash, tambourine, congas, congas_2, congas_3
// … 1 more lines

More by Bellamy Brothers