Strudelify
KeyD majorTempo100 bpm
0:00/0:00
// 667 — Soundgarden
// 100 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 15 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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.

// bass · electric bass pick · "Bass"
const bass = note("<~ A@3 B@6 ~ C@3 ~>".pickRestart({
  A: "[~@17 a1@13 ~ d2@14 b1@14 e2@12 d#2@12 d2@13]/3",
  B: "[b1@13 e2@13 d#2@12 d2@12 b1@13 e2@12 d#2@13 ~@12 b1@13 e2@11 d#2@11 d2@49 ~@8, ~@88 d2@15 ~@89]/6",
  C: "[~@5 f#1@14 ~@5]/3",
})).s("gm_electric_bass_pick").gain(0.4)

// chords · tremolo strings · "other"
const tremolo_strings = note("<~@12 A@3>".pickRestart({
  A: "[~@53 a4 ~@2 a4@14 ~@26, ~@23 g#3@36 ~@37, ~@23 g#4@33 ~@40, ~@47 a3@30 ~@19]/3",
})).s("gm_tremolo_strings").gain(0.26)

// drums · kick
const kick = s("bd").struct("<~@14 [~ x ~@30]>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@2 A B C D E F G H I J K L M>".pickRestart({
  A: "~@3 x ~ x ~@4 x ~@5", B: "~ x ~@2 x ~@9 x ~@11 x ~@3 x ~", C: "~@7 x ~@11 x ~@3 x ~@8",
  D: "x ~@12 x ~@2 x ~@8 x ~@6", E: "~@5 x ~@3 x ~@8 x ~@11 x ~", F: "~ x ~@9 x ~@11 x ~@2 x ~@5",
  G: "~@3 x ~@10 x ~@3 x ~@8 x ~@4", H: "~@8 x ~@2 x ~@8 x ~@11", I: "x ~@2 x ~@8 x ~@11 x ~@3 x ~@3",
  J: "~@6 x ~@12 x ~@3 x ~@3 x ~@4", K: "~@7 x ~@24", L: "~@16 x ~@6 x ~@2 x ~@3 x ~", M: "~ x ~@30",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@2 A B C D E F G H I J K L ~>".pickRestart({
  A: "~@3 x ~ x ~@4 x ~@5", B: "~ x ~@3 x ~@8 x ~@11 x ~@3 x ~", C: "~@7 x ~@11 x ~@3 x ~@8",
  D: "x ~@12 x ~@2 x ~@8 x ~@6", E: "~@5 x ~@3 x ~@8 x ~@11 x ~", F: "~ x ~@9 x ~@11 x ~@2 x ~@5",
  G: "~@3 x ~@2 x ~@7 x ~@3 x ~@8 x ~@4", H: "~@8 x ~@2 x ~@8 x ~@10 x", I: "~@3 x ~@8 x ~@11 x ~@3 x ~@3",
  J: "~@6 x ~@12 x ~@3 x ~@2 x ~@5", K: "~ x ~@2", L: "~@16 x ~@2 x ~@12",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A B C D E F G H I J K L ~@2>".pickRestart({
  A: "~@31 x", B: "~@3 x ~@9 x ~@3 x ~@5 x ~@3 x ~@2 x ~", C: "~@8 x ~@2 x ~@6 x ~@2 x ~@10",
  D: "~ x ~@2 x ~@5 x ~@2 x ~@3 x ~@8 x ~@2 x ~@2", E: "~@6 x ~@2 x ~@9 x ~@2 x ~@5 x ~@2 x",
  F: "~@3 x ~@8 x ~@2 x ~@5 x ~@2 x ~@2 x ~@4", G: "~@4 x ~@3 x ~@5 x ~@2 x ~@2 x ~@8 x ~@2",
  H: "x ~@8 x ~@2 x ~@8 x ~@2 x ~@5 x ~", I: "~@2 x ~@3 x ~@7 x ~@2 x ~@5 x ~@2 x ~@3 x ~",
  J: "~@6 x ~@2 x ~@8 x ~@4 x ~@8", K: "x ~@2 x ~@5 x ~@2 x ~@4 x ~@14", L: "~ x ~@30",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@12
  [~@12 x ~@3 x ~@5 x ~@2 x ~@2 x ~ x ~]
  [x!2 ~@8 x ~ x!2 ~ x ~ x ~ x ~@2 x!2 ~@8]
  ~
>`).gain(0.4)

stack(bass, tremolo_strings, kick, snare, clap, mid_tom, crash)

More by Soundgarden