Strudelify

Boot Camp

Soundgarden

KeyD minorTempo125 bpm
0:00/0:00
// Boot Camp — Soundgarden
// 125 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 6 "Bass Helper" named as a bass, played on electric bass finger (its recorder patch is not one)
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Clean.
setcpm(125/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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 · alto sax · "Cornell"
const alto_sax = note(`<
  ~@39 A B@10 C@2 B@2 D E F@2 G@2 B@2 H@3 I@2 J@2 I@2 K@2 L@2 J@2 M@2 N@2 ~@6 O@2 ~@2
>`.pickRestart({
  A: "~@7 c4", B: "[e4@3 ~ c4@2 e4@5 ~ c4@2 e4@5 ~@11 c4@2]/2", C: "[eb4@3 ~ eb4@2 eb4@5 ~ d4@2 eb4@5 ~@11 c4@2]/2",
  D: "eb4@3 ~ eb4@5 ~ eb4@2 d4@3 ~", E: "eb4@3 ~@11 c4@2", F: "[eb4@3 ~ c4@2 eb4@5 ~ c4@2 eb4@5 ~@11 c4@2]/2",
  G: "[eb4@3 ~ c4@2 eb4@5 ~ c4@2 eb4@4 c4@3 ~@9 c4@2]/2",
  H: "[e4@3 ~ c4@2 e4@5 ~ c4@2 e4@5 ~@5 c4@2 d4@2 e4@2 e4@5 ~@13]/3",
  I: "[~@8 c4@2 d4@2 e4@2 e4@5 ~ d4@3 ~ d4@6 ~@2]/2", J: "[~@8 c4@2 d4@2 e4@2 e4@5 ~@13]/2",
  K: "[~@4 g4 e4!2 e4@4 ~@5]/2", L: "[~@8 g4@2 e4@2 e4@2 e4@5 ~ d4@3 ~ d4@3 ~@5]/2",
  M: "[~@8 c4@2 d4@2 e4@2 e4@5 ~ d4@3 ~ d4@5 ~ c4@2]/2", N: "[eb4@3 ~ d4@2 d4@5 ~ c4@2 c4@5 ~@13]/2",
  O: "[~@6 c4 e4@4 ~@5]/2",
})).s("gm_alto_sax").gain(0.48)

// chords · electric guitar clean · "Clean"
const electric_guitar_clean = note("<~@20 A@2 ~@18 A@2 ~@18 A@2 ~@18 A@2 ~@9>".pickRestart({
  A: "[a2@29 ~@3]/2",
})).s("gm_electric_guitar_clean").gain(0.48)

// other · overdriven guitar · "Overdrive"
const overdriven_guitar = note("<~@20 A@3 ~@2 B C@2 D@2 E@2 F@2 G@2 H@2 I@2 ~@51>".pickRestart({
  A: "[f4@23 ~]/3", B: "~@3 f4", C: "[e4@5 ~ d4@21 ~ e4@2 d4@2]/2", D: "[c4@13 c4@2 d4]/2", E: "[eb4@13 eb4@2 d4]/2",
  F: "[d4@13 f4@2 e4]/2", G: "[eb4@13 eb4@2 f4]/2", H: "[f4@27 ~ bb4@2 c5@2]/2", I: "[c5@15 ~]/2",
})).s("gm_overdriven_guitar").gain(0.32)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A@8 B@4 C@2 D@2 E@2 F@2 G@6 H@2 I@2 J@2 C@2 J@2 K@2 L@2 G@2 M@2 G@2 H@2 I@2 J@2 C@2 J@2 K@2 L@2 G@2 N O P Q R S P Q R
  S P Q R S P Q R S A@8 T@3
>`.pickRestart({
  A: "[d2@125 ~@3]/8", B: "[~@32 f1@29 ~@3, c2@61 ~@3]/4", C: "[d2@29 ~@3]/2", D: "[f1@29 ~@3]/2", E: "[ab1@29 ~@3]/2",
  F: "[bb1@29 ~@3]/2", G: "[d2@7 ~ g2@2 a2@19 ~@3]/2", H: "[d2@7 ~ g2@2 f2@16 ~@2 d2@3 ~]/2", I: "[c2@29 ~@3]/2",
  J: "[f2@29 ~@3]/2", K: "[ab2@29 ~@3]/2", L: "[bb2@29 ~@3]/2", M: "[d2@7 ~ d3@2 a2@19 ~@3]/2", N: "d2@7 ~ a2@2 d2@5 ~",
  O: "a2@2 d2@5 ~ a2@2 d2@5 ~", P: "c2@13 ~@3", Q: "e2@13 ~@3", R: "f2@13 ~@3", S: "ab2@13 ~@3", T: "[c2@15 ~]/3",
})).s("gm_electric_bass_pick").gain(0.48)

// bass · electric bass finger · "Bass Helper"
const bass_2 = note(`<
  A@8 B@4 C@2 D@2 E@2 F@2 G@6 H@2 I@2 D@2 J@2 D@2 E@2 F@2 G@2 K@2 G@2 H@2 I@2 D@2 J@2 D@2 E@2 F@2 G@2 L M N O P Q N O P
  Q N O P Q N O P Q A@8 R@3
>`.pickRestart({
  A: "[d3@125 ~@3]/8", B: "[~@32 f2@29 ~@3, c3@61 ~@3]/4", C: "[d3@29 ~@3]/2", D: "[f2@29 ~@3]/2", E: "[ab2@29 ~@3]/2",
  F: "[bb2@29 ~@3]/2", G: "[d2@7 ~ g2@2 a2@19 ~@3]/2", H: "[d2@7 ~ g2@2 f2@16 ~@2 d2@3 ~]/2", I: "[c2@29 ~@3]/2",
  J: "[d2@29 ~@3]/2", K: "[d2@7 ~ d3@2 a2@19 ~@3]/2", L: "d3@7 ~ a3@2 d3@5 ~", M: "a3@2 d3@5 ~ a3@2 d3@5 ~",
  N: "c2@13 ~@3", O: "e2@13 ~@3", P: "f2@13 ~@3", Q: "ab2@13 ~@3", R: "[c3@15 ~]/3",
})).s("gm_electric_bass_finger").gain(0.42)

// drums · kick
const kick = s("bd").struct(`<
  ~@20 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 B A B A D A B A B E@2 F E@3 F@2 G F G F G F
  G H A B A B A B A D C ~@2
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "x ~@4 x ~ x", C: "x", D: "x ~@2 x ~@4", E: "x ~@2 x ~@2 x ~", F: "x ~@2 x ~ x ~ x",
  G: "x ~@2 x ~ x!2 ~", H: "x ~ x ~@2 x ~@2",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@20 A@19 B A@19 C A@11 D A@3 E A@3 F A@7 G ~@3>".pickRestart({
  A: "~ x", B: "~@3 x!2 ~ x ~", C: "~@8 x ~ x!3 ~@3", D: "~@2 x!2", E: "~@8 x ~@3 x!2 ~@2", F: "~@3 x ~@2 x ~",
  G: "~@5 x ~@2",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@39 [~@6 x!2] ~@19 [~@14 x!2] ~@27 [~@5 x ~@2] ~@3>").gain(0.64)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@39 [~@4 x!2 ~@2] ~@19 [~@13 x ~@2] ~@31>").gain(0.64)

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

// drums · crash
const crash = s("cr").struct("<~@20 A ~@19 A ~@19 A ~@3 A ~@7 A@9 ~@7 A ~@2>".pickRestart({
  A: "x",
})).gain(0.48)

stack(
  alto_sax, electric_guitar_clean, overdriven_guitar, bass, bass_2, kick, snare, low_tom, hihat, mid_tom, open_hat,
  crash
)

More by Soundgarden