Strudelify

Boss Drum

The Shamen

KeyG minorTempo121 bpm
0:00/0:00
// Boss Drum — The Shamen
// 121 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(121/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.

// bass · synth bass 2 · "SYN BASS 2"
const bass = note("<~@4 A@3 ~ A@15 ~ A@23 ~ A@7 B A@15 ~ A@7 C A@32 D>".pickRestart({
  A: "g1 ~@2 bb0 ~@2 f1 ~@3 g1 ~ e1 ~ f1 ~", B: "g1 ~@2 bb0 ~@2 f1 ~@3 g1 ~@5", C: "g1 ~@2 bb0 ~@2 f1 ~@9",
  D: "g1 ~@15",
})).s("gm_synth_bass_2").gain(0.45)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note("<A B A B A B A ~@73 A B A B A B C@2 ~@25>".pickRestart({
  A: "[ab3,c4,eb4,g4]", B: "[eb3,g3,bb3,d4]", C: "[ab3,c4,eb4,g4]/2",
})).s("gm_synth_strings_2").gain(0.35)

// chords · lead 5 charang · "CHARANG"
const lead_5_charang = note(`<
  ~@4 A B A ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C A B A B A
  B A B A B A B A B A ~ A B A B A B A D ~@8 A B A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "[d4,g4] ~@2 [d4,g4] ~@2 [d4,g4] ~@3 [d4,g4] ~@2 [d4,g4] ~@2", // G5
  B: "[d4,g4] ~@2 [d4,g4] ~@2 [d4,g4] ~@3 [d4,g4] ~@2 [c4,f4] ~@2", // G5 F5
  C: "[d4,g4] ~@2 [d4,g4] ~@2 [d4,g4] ~@3 [d4,g4] ~@5", D: "[d4,g4] ~@2 [d4,g4] ~@2 [d4,g4] ~@9",
})).s("gm_lead_5_charang").gain(0.3)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@11 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A
  B ~@2 A B ~@2 A B ~@2 A ~@11 A B ~@2 A ~@3 A B ~@2 A B ~@2 A B ~@2 A B
>`.pickRestart({
  A: "~@3 [c3,f3]", B: "[d3,g3] ~@15",
})).s("gm_distortion_guitar").gain(0.3).pan(0.3)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@8 A B A B A B A B A B A B A B A B ~@24 A B A B A B A C ~@16 A B A B A B A D ~@8 A B A B A B A B A B A B A B A B A B
  A B A B A B ~
>`.pickRestart({
  A: "g3 ~ d4 ~ g4 ~ g3 ~ d4 ~ g4 ~ g3 ~ d4 ~", B: "f3 ~ c4 ~ f4 ~ g3 ~ d4 ~ g4 ~ g3 ~ d4 ~",
  C: "f3 ~ c4 ~ f4 ~ g3 ~ d4 ~ g4 ~@5", D: "f3 ~ c4 ~ f4 ~ g3 ~@9",
})).s("gm_lead_2_sawtooth").gain(0.25).pan(0.6)

// other · lead 8 bass lead · "BASS&LEAD"
const lead_8_bass_lead = note("<~@23 A ~@15 A B@15 C ~@15 A B@7 D E F E F E F E@2 ~@25>".pickRestart({
  A: "[f5,bb5,d6]!16", B: "~ g7 d7 g6 d6 g5 ~@3 g5 ~@3 d6 ~ g5", C: "~ g7 d7 g6 d6 g5 ~@3 g5 ~@6",
  D: "~ g7 d7 g6 d6 g5 ~@10", E: "g4 ~@2 g4 ~@2 g5 ~@9", F: "g4 ~@2 g4 ~@2 f5 ~@9",
})).s("gm_lead_8_bass_lead").gain(0.25).pan(0.3)

// other · lead 8 bass lead · "BASS&LEAD" · soft notes
const lead_8_bass_lead_soft = note("<~@40 [~@7 g4 ~@3 d5 ~@4]!16 ~@16 [~@7 g4 ~@3 d5 ~@4]!7 [~@7 g4 ~@8] ~@33>")
  .s("gm_lead_8_bass_lead").gain(0.15).pan(0.3)

// bass · synth bass 1 · "SYN BASS 1"
const bass_2 = note("<~@71 [g2!16] ~@41>").s("gm_synth_bass_1").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 A@3 ~ A@15 ~ A@15 ~ A@31 ~ A@7 B A@8 ~@4 A@3 C A@7 ~ A@7 ~ D>".pickRestart({
  A: "x!4", B: "x!2 ~ x", C: "~@3 x", D: "x",
})).gain(0.5)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@8 A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~@5 A@4 ~@4 A@3 ~ A@7 ~ A@7 ~@2
>`.pickRestart({
  A: "~@7 x ~@8",
})).gain(0.2)

// drums · clap
const clap = s("cp").struct("<~@8 A@63 ~ A@7 B ~@4 A@4 ~@4 A@3 ~ A@16 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct(`<
  A B A B A B A ~ A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A ~ A B A B A B A@3 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~@2
>`.pickRestart({
  A: "x ~@2 x ~@12", B: "x ~@2 x ~@6 x ~@5",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@15 B A@47 B A@7 C ~@12 A@3 B A@15 B ~>".pickRestart({
  A: "x!4", B: "x", C: "x!2 ~@2",
})).gain(0.2)

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

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

// drums · tambourine
const tambourine = s("tb").struct("<A@7 ~ A@15 ~ A@31 B A@15 ~ A@7 C D@4 A@4 ~@4 A@3 ~ A@15 ~@2>".pickRestart({
  A: "x!16", B: "x!12 ~@4", C: "x!8 ~@8", D: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3",
})).gain(0.3)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@80 x!8 ~@25>").gain(2.91)

// drums · claves
const claves = s("clave:2").struct("<~@8 A@15 ~ A@47 ~ A@16 ~@4 A@3 ~ A@15 ~@2>".pickRestart({
  A: "~@2 x ~@2 x ~ x ~@8",
})).gain(0.97)

// drums · shaker
const shaker = s("sh").struct("<~@80 [x!16]!8 ~@25>").gain(0.2)

stack(
  bass, synth_strings_2, lead_5_charang, distortion_guitar, lead_2_sawtooth, lead_8_bass_lead, lead_8_bass_lead_soft,
  bass_2, kick, snare, snare_soft, clap, low_tom, hihat, open_hat, crash, tambourine, vibraslap, claves, shaker
)

More by The Shamen