Strudelify

Boom Boom Boom

Vengaboys

KeyF♯ majorTempo138 bpm
0:00/0:00
// Boom Boom Boom — Vengaboys
// 138 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · drawbar organ
const drawbar_organ = note(`<
  ~@5 A B C ~ D E F G H I J K A L M N O P Q R S B T U V E F ~ H I J W A L X N O Y Z AA A B T U AA AB W AC H I T W A AD M
  ~ O Y Z AA A B T U D E F AE H I J W ~@8 S B T AF D E F ~ AG I J W A L M G O P Z AH S B T U D E F G AG I J ~
>`.pickRestart({
  A: "~@2 [f#2,f#3] ~@3 [f#2,f#3]@2 ~@2 [c#2,c#3] ~@3 [c#2,c#3]@2", // F# C#
  B: "~@2 [d#2,d#3]@2 ~@2 [d#2,d#3] ~@3 [d#2,d#3]@2 ~@2 [d#2,d#3] ~", // D#
  C: "~@2 [b1,b2]@2 ~@2 [b1,b2]@2 ~@2 [c#2,c#3] ~@3 [c#2,c#3]@2", // B C#
  D: "~@2 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@3 [c#2,c#3] ~@3 [c#2,c#3]@2", // F# C#
  E: "~@2 [d#2,d#3] ~@3 [d#2,d#3]@2 ~@2 [d#2,d#3] ~@3 [d#2,d#3] ~", // D#
  F: "~@2 [b1,b2]@2 ~@2 [b1,b2] ~@3 [c#2,c#3]@2 ~@2 [c#2,c#3] ~", // B C#
  G: "~@2 [f#2,f#3] ~@3 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@3 [f#2,f#3]@2", // F#
  H: "~@2 [f#2,f#3] ~@3 [f#2,f#3] ~@3 [c#2,c#3]@2 ~@2 [c#2,c#3] ~", // F# C#
  I: "~@2 [d#2,d#3]@2 ~@2 [d#2,d#3] ~@3 [d#2,d#3] ~@3 [d#2,d#3]@2", // D#
  J: "~@2 [b1,b2] ~@3 [b1,b2]@2 ~@2 [c#2,c#3] ~@3 [c#2,c#3] ~", K: "~@2 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@3 [f#2,f#3]@2 ~@4",
  L: "~@2 [d#2,d#3] ~@3 [d#2,d#3] ~@3 [d#2,d#3]@2 ~@2 [d#2,d#3] ~", // D#
  M: "~@2 [b1,b2]@2 ~@2 [b1,b2] ~@3 [c#2,c#3] ~@3 [c#2,c#3]@2", // B C#
  N: "~@2 [f#2,f#3] ~@3 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@3 [f#2,f#3] ~", // F#
  O: "~@2 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@3 [c#2,c#3]@2 ~@2 [c#2,c#3] ~", // F# C#
  P: "~@2 [d#2,d#3] ~@3 [d#2,d#3]@2 ~@2 [d#2,d#3] ~@3 [d#2,d#3]@2", // D#
  Q: "~@2 [b1,b2] ~@3 [b1,b2]@2 ~@2 [c#2,c#3]@2 ~@2 [c#2,c#3] ~", R: "~@2 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@3 [f#2,f#3] ~@5",
  S: "~@2 [f#2,f#3] ~@3 [f#2,f#3]@2 ~@2 [c#2,c#3] ~@3 [c#2,c#3] ~", // F# C#
  T: "~@2 [b1,b2] ~@3 [b1,b2]@2 ~@2 [c#2,c#3] ~@3 [c#2,c#3]@2", // B C#
  U: "~@2 [f#2,f#3] ~@3 [f#2,f#3] ~@3 [f#2,f#3]@2 ~@2 [f#2,f#3] ~", // F#
  V: "~@2 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@3 [c#2,c#3]@2 ~@2 [c#2,c#3]@2", // F# C#
  W: "~@2 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@3 [f#2,f#3]@2 ~@2 [f#2,f#3] ~", // F#
  X: "~@2 [b1,b2]@2 ~@2 [b1,b2] ~@3 [c#2,c#3]@2 ~@2 [c#2,c#3]@2", // B C#
  Y: "~@2 [d#2,d#3]@2 ~@2 [d#2,d#3]@2 ~@2 [d#2,d#3] ~@3 [d#2,d#3]@2", // D#
  Z: "~@2 [b1,b2] ~@3 [b1,b2] ~@3 [c#2,c#3]@2 ~@2 [c#2,c#3] ~", // B C#
  AA: "~@2 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@3 [f#2,f#3] ~@3 [f#2,f#3]@2", // F#
  AB: "~@2 [f#2,f#3] ~@3 [f#2,f#3]@2 ~@2 [e2,e3] ~@3 [e2,e3] ~", // F# E
  AC: "~@2 [f#2,f#3]@2 ~@2 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@5", // F#
  AD: "~@2 [d#2,d#3] ~@3 [d#2,d#3]@2 ~@2 [d#2,d#3]@2 ~@2 [d#2,d#3] ~", // D#
  AE: "~@2 [f#2,f#3]@2 ~@2 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@3 [f#2,f#3]@2", // F#
  AF: "~@2 [f#2,f#3] ~@3 [f#2,f#3]@2 ~@2 [f#2,f#3]@2 ~@2 [f#2,f#3] ~", // F#
  AG: "~@2 [f#2,f#3] ~@3 [f#2,f#3]@2 ~@2 [c#2,c#3]@2 ~@2 [c#2,c#3] ~", // F# C#
  AH: "~@2 [f#2,f#3]@2 ~@2 [f#2,f#3] ~@3 [f#2,f#3]@2 ~@2 [f#2,f#3]@2", // F#
})).s("gm_drawbar_organ").gain(0.72).pan(0.6)

// other · string ensemble 1
const string_ensemble_1 = note("<~@5 A@4 ~@40 A@4 ~@24 A@4 ~@8 A@4 ~@20 B@4>".pickRestart({
  A: "[[f#6,f#7]@31 ~]/4", B: "[[f#6,f#7]@25 ~@7]/4",
})).s("gm_string_ensemble_1").gain(0.32)

// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~ A B C D A B C ~ A B C D A B C D ~@8 A B C D A B C ~ A B C D A B C D A B C D A B C D@2 E D@2 A B C D A B C ~ A B C D
  A B C D A B C D A B C D@2 E D@3 E D@2 A B C D A B C ~ A B C D A B C D A B C D A B C D A B C D A B C ~
>`.pickRestart({
  A: "[c#4,f#4] ~ [c#4,f#4] ~ [c#4,f#4] ~@2 [c#4,f#4] [g#3,c#4] ~ [g#3,c#4] ~ [g#3,c#4] ~@3", // F#5 C#5
  B: "[a#3,d#4] ~ [a#3,d#4] ~ [a#3,d#4] ~@2 [a#3,d#4]!2 ~ [a#3,d#4] ~ [a#3,d#4] ~@3", // D#5
  C: "[f#3,b3] ~ [f#3,b3] ~ [f#3,b3] ~@2 [f#3,b3] [g#3,c#4] ~ [g#3,c#4] ~ [g#3,c#4] ~@3", // B5 C#5
  D: "[c#4,f#4] ~ [c#4,f#4] ~ [c#4,f#4] ~@2 [c#4,f#4]!2 ~ [c#4,f#4] ~ [c#4,f#4] ~@3", // F#5
  E: "[c#4,f#4] ~ [c#4,f#4] ~ [c#4,f#4] ~@2 [c#4,f#4] [b3,e4] ~ [b3,e4] ~ [b3,e4] ~@3", // F#5 E5
})).s("gm_lead_8_bass_lead").gain(0.64)

// other · agogo
const agogo = note("<~ A@4 ~@19 B ~@28 A@7 ~@16 B ~@40>".pickRestart({
  A: "f#4 ~ f#5 ~@5 f#4 ~ f#5 ~@3 f#5 ~", B: "f#4!2 f#3!2 f#4!2 f#3!2 f#5!2 f#4!2 f#6!2 f#5!2",
})).s("gm_agogo").gain(0.54)

// other · synth brass 2
const synth_brass_2 = note(`<
  ~@24 A B C D E B C D ~ B C D F B C D E B C D E B C D E@2 G E H ~@4 I J K ~ B C D E B C D E B C D E B C D E ~@4 F L F M
  B C D F B C D ~ B C D E B C D E B C D E B C D E B C D E B C D ~
>`.pickRestart({
  A: "f#3 ~ [f#3,f#4] ~ f#3 ~ [f#3,f#4] ~ f#3 ~ [f#3,f#4] ~ f#3 ~ [f#3,f#4] ~", // F#
  B: "f#3 ~ f#4 ~ f#3 ~ f#4!2 c#3 ~ c#4 ~ c#3 ~ c#4 ~", C: "d#3 ~ d#4 ~ d#3 ~ d#4!2 d#3 ~ d#4 ~ d#3 ~ d#4 ~",
  D: "b2 ~ b3 ~ b2 ~ b3!2 c#3 ~ c#4 ~ c#3 ~ c#4 ~", E: "f#3 ~ f#4 ~ f#3 ~ f#4!2 f#3 ~ f#4 ~ f#3 ~ f#4 ~",
  F: "f#3 ~ f#4 ~ f#3 ~ f#4 ~ f#3 ~ f#4 ~ f#3 ~ f#4 ~", G: "f#3 ~ f#4 ~ f#3 ~ f#4!2 e3 ~ e4 ~ e3 ~ e4 ~",
  H: "f#3 ~ f#4 ~ f#3 ~ f#4!2 f#3 ~ f#4 ~ f#3 ~@3", I: "f#3 ~ f#4 ~ f#3 ~ f#4 ~ c#3 ~ c#4 ~ c#3 ~ c#4 ~",
  J: "d#3 ~ d#4 ~ d#3 ~ d#4 ~ d#3 ~ d#4 ~ d#3 ~ d#4 ~", K: "b2 ~ b3 ~ b2 ~ b3 ~ c#3 ~ c#4 ~ c#3 ~ c#4 ~",
  L: "f#3 ~ f#4 ~ f#3 ~ f#4 ~ e3 ~ e4 ~ e3 ~ e4 ~", M: "f#3 ~ f#4 ~ f#3 ~ f#4 ~ f#3 ~ f#4 ~ f#3 ~@3",
})).s("gm_synth_brass_2").gain(0.42)

// other · synth drum
const synth_drum = note("<~@24 A ~@7 B ~@27 B ~@15 A ~@40>".pickRestart({
  A: "~@12 a3 ~@3", B: "g7 ~@15",
})).s("gm_synth_drum").gain(0.45)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@40 A B C D E F C D G ~@12 B C D E F C H I B C D E B C H J ~@15 A K C D E K C D E B C D E F C H L B C D E K C H J
>`.pickRestart({
  A: "~@6 [a#3,a#4]!3 ~ [a#3,a#4]@2 [g#3,g#4] ~ [g#3,g#4] ~", // A# G#
  B: "[f#3,f#4]@2 ~ [c#3,c#4] ~@2 [c#3,c#4] ~ [c#3,c#4] ~ [c#3,c#4] ~ [g#3,g#4] ~ [g#3,g#4] ~", // F# C# G#
  C: "[f#3,f#4]@3 [d#3,d#4] ~@2 [d#3,d#4]!3 ~ [d#3,d#4] ~ [f#3,f#4] ~ [g#3,g#4] ~", // F# D# F# G#
  D: "[a#3,a#4]@3 [f#3,f#4] ~@2 [b2,b3] ~ [b2,b3] ~ [b2,b3] ~ [b2,b3] ~ [b2,b3] ~", // A# F# B
  E: "[a#2,a#3]@3 [f#3,f#4] ~@2 [a#3,a#4]!3 ~ [a#3,a#4]@2 [g#3,g#4] ~ [g#3,g#4] ~", // A# F# A# G#
  F: "[f#3,f#4]@3 [c#3,c#4] ~@2 [c#3,c#4]@2 [c#3,c#4] ~ [c#3,c#4] ~ [g#3,g#4] ~ [g#3,g#4] ~", // F# C# G#
  G: "[a#2,a#3]@3 [f#3,f#4] ~@12", // A# F#
  H: "[a#3,a#4]@3 [f#3,f#4] ~@2 [b2,b3]@2 [a#3,a#4] ~ [a#3,a#4] ~ [g#3,g#4] ~ [g#3,g#4] ~", // A# F# B A# G#
  I: "[f#3,f#4]@2 ~@2 [a#3,a#4]@3 ~ [a#3,a#4]@3 ~ [g#3,g#4]@3 ~", J: "[f#3,f#4] ~@7",
  K: "[f#3,f#4]@2 ~ [c#3,c#4] ~@2 [c#3,c#4]@2 [c#3,c#4] ~ [c#3,c#4] ~ [g#3,g#4] ~ [g#3,g#4] ~", // F# C# G#
  L: "[f#3,f#4]@2 ~@4 [a#3,a#4]!3 ~ [a#3,a#4]@2 [g#3,g#4] ~ [g#3,g#4] ~", // F# A# G#
})).s("gm_lead_2_sawtooth").gain(0.72)

// other · ocarina
const ocarina = note(`<
  ~@40 A B C D E F C D G ~@12 B C D E F C H I B C D E B C H J ~@15 A F C D E F C D E B C D E F C H K B C D E F C H J
>`.pickRestart({
  A: "~@6 a#6!3 ~ a#6@2 g#6 ~ g#6 ~", B: "f#6@3 c#6 ~@2 c#6 ~ c#6 ~ c#6 ~ g#6 ~ g#6 ~",
  C: "f#6@3 d#6 ~@2 d#6!3 ~ d#6 ~ f#6 ~ g#6 ~", D: "a#6@3 f#6 ~@2 b5 ~ b5 ~ b5 ~ b5 ~ b5 ~",
  E: "a#5@3 f#6 ~@2 a#6!3 ~ a#6@2 g#6 ~ g#6 ~", F: "f#6@3 c#6 ~@2 c#6@2 c#6 ~ c#6 ~ g#6 ~ g#6 ~", G: "a#5@3 f#6 ~@12",
  H: "a#6@3 f#6 ~@2 b5@2 a#6 ~ a#6 ~ g#6 ~ g#6 ~", I: "f#6@2 ~@2 a#6@3 ~ a#6@3 ~ g#6@3 ~", J: "f#6 ~@7",
  K: "f#6@2 ~@4 a#6!3 ~ a#6@2 g#6 ~ g#6 ~",
})).s("gm_ocarina").gain(0.36)

// other · lead 3 calliope
const lead_3_calliope = note("<~@92 A B C D E B C D E B C D E B C F G B C D E B C F H>".pickRestart({
  A: "~@6 c#5!3 ~ c#5 ~ b4 ~ b4 ~", B: "a#4 ~@2 f#4 ~@2 f#4 ~ f#4 ~ f#4 ~ b4 ~ b4 ~",
  C: "a#4 ~@2 f#4 ~@2 f#4!3 ~ f#4 ~ a#4 ~ b4 ~", D: "c#5 ~@2 a#4 ~@2 d#4 ~ d#4 ~ d#4 ~ d#4 ~ d#4 ~",
  E: "c#4@2 ~ a#4 ~@2 c#5!3 ~ c#5 ~ b4 ~ b4 ~", F: "c#5@3 a#4 ~@2 f#4@2 c#5 ~ c#5 ~ b4 ~ b4 ~",
  G: "a#4@2 ~@4 c#5!3 ~ c#5 ~ b4 ~ b4 ~", H: "a#4 ~@7",
})).s("gm_lead_3_calliope").gain(0.28).pan(0.6)

// other · percussive organ
const percussive_organ = note(`<
  ~@5 A B C ~ D E F G H I J K A L M N O P Q R S B T U V E F ~ H I J W A L X N O Y Z AA A B T U AA AB W AC H I T W A AD M
  ~ O Y Z AA A B T U D E F AE H I J W ~@8 S B T AF D E F ~ AG I J W A L M G O P Z AH S B T U D E F G AG I J ~
>`.pickRestart({
  A: "~@2 f#3 ~@3 f#3@2 ~@2 c#3 ~@3 c#3@2", B: "~@2 d#3@2 ~@2 d#3 ~@3 d#3@2 ~@2 d#3 ~",
  C: "~@2 b2@2 ~@2 b2@2 ~@2 c#3 ~@3 c#3@2", D: "~@2 f#3@2 ~@2 f#3 ~@3 c#3 ~@3 c#3@2",
  E: "~@2 d#3 ~@3 d#3@2 ~@2 d#3 ~@3 d#3 ~", F: "~@2 b2@2 ~@2 b2 ~@3 c#3@2 ~@2 c#3 ~",
  G: "~@2 f#3 ~@3 f#3@2 ~@2 f#3 ~@3 f#3@2", H: "~@2 f#3 ~@3 f#3 ~@3 c#3@2 ~@2 c#3 ~",
  I: "~@2 d#3@2 ~@2 d#3 ~@3 d#3 ~@3 d#3@2", J: "~@2 b2 ~@3 b2@2 ~@2 c#3 ~@3 c#3 ~",
  K: "~@2 f#3@2 ~@2 f#3 ~@3 f#3@2 ~@4", L: "~@2 d#3 ~@3 d#3 ~@3 d#3@2 ~@2 d#3 ~",
  M: "~@2 b2@2 ~@2 b2 ~@3 c#3 ~@3 c#3@2", N: "~@2 f#3 ~@3 f#3@2 ~@2 f#3 ~@3 f#3 ~",
  O: "~@2 f#3@2 ~@2 f#3 ~@3 c#3@2 ~@2 c#3 ~", P: "~@2 d#3 ~@3 d#3@2 ~@2 d#3 ~@3 d#3@2",
  Q: "~@2 b2 ~@3 b2@2 ~@2 c#3@2 ~@2 c#3 ~", R: "~@2 f#3@2 ~@2 f#3 ~@3 f#3 ~@5",
  S: "~@2 f#3 ~@3 f#3@2 ~@2 c#3 ~@3 c#3 ~", T: "~@2 b2 ~@3 b2@2 ~@2 c#3 ~@3 c#3@2",
  U: "~@2 f#3 ~@3 f#3 ~@3 f#3@2 ~@2 f#3 ~", V: "~@2 f#3@2 ~@2 f#3 ~@3 c#3@2 ~@2 c#3@2",
  W: "~@2 f#3@2 ~@2 f#3 ~@3 f#3@2 ~@2 f#3 ~", X: "~@2 b2@2 ~@2 b2 ~@3 c#3@2 ~@2 c#3@2",
  Y: "~@2 d#3@2 ~@2 d#3@2 ~@2 d#3 ~@3 d#3@2", Z: "~@2 b2 ~@3 b2 ~@3 c#3@2 ~@2 c#3 ~",
  AA: "~@2 f#3@2 ~@2 f#3 ~@3 f#3 ~@3 f#3@2", AB: "~@2 f#3 ~@3 f#3@2 ~@2 e3 ~@3 e3 ~",
  AC: "~@2 f#3@2 ~@2 f#3@2 ~@2 f#3 ~@5", AD: "~@2 d#3 ~@3 d#3@2 ~@2 d#3@2 ~@2 d#3 ~",
  AE: "~@2 f#3@2 ~@2 f#3@2 ~@2 f#3 ~@3 f#3@2", AF: "~@2 f#3 ~@3 f#3@2 ~@2 f#3@2 ~@2 f#3 ~",
  AG: "~@2 f#3 ~@3 f#3@2 ~@2 c#3@2 ~@2 c#3 ~", AH: "~@2 f#3@2 ~@2 f#3 ~@3 f#3@2 ~@2 f#3@2",
})).s("gm_percussive_organ").gain(0.54).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~ A ~@3 A ~@2 A B@7 C B@7 D B@7 A B@7 A B@11 A E@4 B@3 F B@7 C B@8 E@4 B@11 A B@23 A
>`.pickRestart({
  A: "x", B: "x ~@3 x ~@3 x ~@2 x!2 ~ x ~", C: "x!16", D: "x ~ x ~ x!3 ~", E: "x!4", F: "~ x!3",
})).gain(0.8).pan(0.6)

// drums · rim
const rim = s("rim").struct("<~@24 A ~@15 B ~@11 B A@4 ~@28 A@7 B ~@23 B>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.48).pan(0.6)

// drums · snare
const snare = s("sd").struct("<~@16 A ~@51 A ~@8 B C B D B C B E B C B D B C B ~@25>".pickRestart({
  A: "~@8 x!7 ~", B: "x ~ x!3 ~ x!3 ~ x ~ x ~ x!2", C: "x ~ x!7 ~ x ~ x ~ x!2", D: "x ~ x!7 ~ x ~ x ~@3",
  E: "x ~ x!7 ~ x ~ x ~ x ~",
})).gain(0.48).pan(0.6)

// drums · clap
const clap = s("cp").struct("<~@24 A ~@56 B C B C B@7 ~@25>".pickRestart({
  A: "~@4 x!2 ~@2", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~",
})).gain(0.64).pan(0.6)

// drums · hihat
const hihat = s("hh").struct("<A ~@8 A@15 ~ A@7 ~ A@7 ~ A@11 ~@9 A@16 ~@16 A@23 B>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.8).pan(0.6)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@24 A ~@15 B ~@11 B ~@24 B ~@3 C A@10 B ~@24>".pickRestart({
  A: "x!4", B: "x", C: "~ x!3",
})).gain(0.08).pan(0.6)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A@15 B A@7 ~ A@7 ~ A@11 ~@9 A@16 ~@4 A@11 ~ A@23 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.8).pan(0.6)

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

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@24 A ~@15 A ~@7 B ~@3 A ~@15 B ~@7 B ~@7 A ~@3 A ~@28>".pickRestart({
  A: "~@3 x", B: "x ~@2 x",
})).gain(0.32).pan(0.6)

// … 9 more lines

More by Vengaboys