Strudelify
The Bad Touch (Eiffel 65 extended mix) cover art

Hooray For Boobies

The Bad Touch (Eiffel 65 extended mix)

Bloodhound Gang

KeyE♭ majorTempo130 bpm
0:00/0:00
// The Bad Touch (Eiffel 65 extended mix) — Bloodhound Gang
// 130 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · lead 2 sawtooth · "THE BAD TOUCH Eiffel65's Remix"
const lead_2_sawtooth = note("<~@32 A@3 B A@3 B ~@24 A@3 B A@3 B ~@24 A@3 B A@3 B A@3 B A@3 B ~@12>".pickRestart({
  A: "~@4 eb4@2 g4 ab4@3 g4@2 ab4@2 g4@2", B: "~@4 eb4@2 ab3@2 ~@2 eb4@2 f4 eb4 f4@2",
})).s("gm_lead_2_sawtooth").gain(0.5)

// other · synth brass 2
const synth_brass_2 = note("<~@16 A B C D A B C D ~@32 A B C D A B C D ~@24 A B C D A B C D ~@28>".pickRestart({
  A: "c3 ~ c3 ~ c3 ~@3 c3 ~ c3 ~ c3 ~ d3 ~", B: "eb3 ~ eb3 ~ eb3 ~ f3 ~ eb3 ~@3 eb3 ~ eb3 ~",
  C: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~", D: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ c3 ~@7",
})).s("gm_synth_brass_2").gain(0.8).pan(0.4)

// bass · synth bass 2
const bass = note(`<
  A@16 ~@8 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C
  D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@12
>`.pickRestart({
  A: "~ c2 ~ c2 ~ c2 ~ c2", B: "~ eb2 ~ eb2 ~ eb2 ~ eb2", C: "~ bb1 ~ bb1 ~ bb1 ~ bb1", D: "~ ab1 ~ ab1 ~ ab1 ~ ab1",
})).s("gm_synth_bass_2").gain(0.8)

// other · brass section · "Arne Mulder"
const brass_section = note("<~@7 A ~@47 A ~@31 A ~@7 A ~@28>".pickRestart({
  A: "[eb4,eb5]", // Eb
})).s("gm_brass_section").gain(0.17)

// other · lead 2 sawtooth
const lead_2_sawtooth_2 = note(`<
  ~@12
  [eb4 ~ eb4 ~ eb4@2 ~@2 eb4 ~ eb4 ~ f4 ~ g4 ~]
  [g4 ~ g4 ~ g4 ~ g4 ~ g4 ~@3 g4 ~ g4 ~]
  [bb4 ~ bb4 ~ bb4 ~ bb4 ~ f4 ~ f4 ~ f4 ~ f4 ~]
  [c5 ~ c5 ~ c5 ~ c5 ~ ab4 ~@7]
  ~@108
>`).s("gm_lead_2_sawtooth").gain(0.43)

// other · piano
const piano = note("<~@16 A@3 B A@3 B A@3 B A@3 B ~@92>".pickRestart({
  A: "~@4 eb4@2 g4 ~@3 g4@2 ~@2 g4@2", B: "~@4 eb4 ~@5 eb4@2 f4 eb4 f4@2",
})).s("gm_piano").gain(0.4).pan(0.1)

// chords · synth strings 1 · "Arne Mulder 2000"
const synth_strings_1 = note(`<
  ~@16 A B C D A B C D ~@8 A B C D A B C D ~@16 A B C D A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D A B
  C D A B C D A B C D A B C D E@4
>`.pickRestart({
  A: "c3!2, [c2,c4]", B: "[eb2,eb3,eb4]", C: "[bb1,bb2,f3,bb3]", D: "eb3 d3, [ab1,ab2,ab3]", E: "[c1,c2,c3]/4",
})).s("gm_synth_strings_1").gain(0.45)

// other · piano
const piano_2 = note("<~@16 A B C D E B C D E B C D E B C D ~@92>".pickRestart({
  A: "~@7 ab4@3 ~@2 ab4@2 ~@2", B: "eb4@2 bb3@2 ~@3 ab4@3 ~@2 ab4@2 ~@2", C: "bb4@2 bb3@2 ~@3 ab4@3 ~@2 ab4@2 ~@2",
  D: "eb4@3 eb4@3 ~ f4", E: "g4@2 c4@2 ~@3 ab4@3 ~@2 ab4@2 ~@2",
})).s("gm_piano").gain(0.4).pan(1)

// other · pad sweep
const pad_sweep = note(`<
  ~@24 A B C D E F G H ~@16 A B C D E F I H A B C D E F G H A B C D E F G H ~@8 A B C D E F G H A B C D E F G H A B C D
  E F G H A B C D E F G H ~@8 J@4
>`.pickRestart({
  A: "c3", B: "eb3", C: "bb2", D: "ab2", E: "[c3,c4]", F: "[eb3,eb4]", G: "[bb2,bb3]", H: "[ab2,ab3]",
  I: "[bb2,bb3,f4]", J: "c4/4",
})).s("gm_pad_sweep").gain(0.64).pan(0.4)

// other · lead 2 sawtooth
const lead_2_sawtooth_3 = note(`<
  ~@32 A B C D A B C D ~@24 A B C D A B C D ~@24 A B C D A B C D A B C D A B C D ~@12
>`.pickRestart({
  A: "g4 c4 ~@6", B: "eb4 bb3 ~@6", C: "bb4 bb3 ~@6", D: "eb4@3 eb4@3 ~ f4",
})).s("gm_lead_2_sawtooth").gain(0.8)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@104 A B C D A B C D A B C D A B C D ~@4>".pickRestart({
  A: "[g4,eb5] [c4,bb4]", B: "[bb4,g5]@2 f5 eb5, ~ bb4", C: "[eb4,d5] [bb3,eb5]", D: "~@2 g5 f5, [eb4,g4,c5]",
})).s("gm_string_ensemble_1").gain(0.48).pan(0.4)

// drums · kick
const kick = s("bd").struct("<[x!4]!16 ~@8 [x!4]!88 ~@12>").gain(0.64)

// drums · rim
const rim = s("rim").struct("<~@16 [x ~@2 x!2 ~@2 x]!8 ~@100>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@7 A ~@7 B ~@43 C ~@3 C ~@27 C ~@3 C ~@28>".pickRestart({
  A: "~@9 x!7", B: "~@8 x!5 ~@3", C: "~@8 x!4 ~@4",
})).gain(0.64)

// drums · clap
const clap = s("cp").struct("<~@8 A@7 B A@43 B A@3 B A@27 B A@3 B A@16 ~@12>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@8 ~@8 A@16 B C@7 A@24 B C@7 A@32 ~@12>".pickRestart({
  A: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", B: "x!2 ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@8 ~@8 A@16 ~@8 A@24 ~@8 A@32 ~@12>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.64)

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

// drums · ride
const ride = s("rd").struct("<~@8 A ~@15 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@19>".pickRestart({
  A: "~ x ~@14",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 [~ x ~ x ~ x ~ x]!8 ~@108>").gain(0.64)

// drums · shaker
const shaker = s("sh").struct("<~@32 [x!16]!8 ~@24 [x!16]!8 ~@24 [x!16]!16 ~@12>").gain(0.64)

stack(
  lead_2_sawtooth, synth_brass_2, bass, brass_section, lead_2_sawtooth_2, piano, synth_strings_1, piano_2, pad_sweep,
  lead_2_sawtooth_3, string_ensemble_1, kick, rim, snare, clap, hihat, open_hat, crash, ride, tambourine, shaker
)

More by Bloodhound Gang