Strudelify

No. 1 Crush

Garbage

KeyD minorTempo94 bpm
0:00/0:00
// No. 1 Crush — Garbage
// 94 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(94/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 · epiano1 · "Rhodes" · Dm7
const epiano1 = note(`<
  [c3 ~ bb2@2 [c4,d4,f4]@4 c3 ~ bb2 ~@5]!32
  ~@16
  [c3 ~ bb2@2 [c4,d4,f4]@4 c3 ~ bb2 ~@5]!4
  ~@24
  [c3 ~ bb2@2 [c4,d4,f4]@4 c3 ~ bb2 ~@5]!32
  ~
>`).s("gm_epiano1").gain(0.06)

// other · timpani · "Fills Timpani"
const timpani = note("<~@3 A ~@27 A ~@7 A ~@11 A ~@57>".pickRestart({
  A: "~@8 d2 ~ d2!2 d3 ~ d2 ~",
})).s("gm_timpani").gain(0.46).pan(1)

// other · timpani · "Fills Timpani" · soft notes
const timpani_soft = note("<~@3 A ~@27 A ~@7 A ~@11 A ~@57>".pickRestart({
  A: "~@9 d2 ~@6",
})).s("gm_timpani").gain(0.23).pan(1)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@4 A@8 B C A@6 D E A@6 F G A H A@4 D I A@2 J K L M N O P Q A@6 R A S T A@6 U V A@2 J K L M N O P Q A@12 D W A@2 D W
  A@2 D X A@2 D X A@6 ~
>`.pickRestart({
  A: "d1@2 ~ d1 d2@2 e1@2 ~@2 f1@2 g1@2 a1@2", B: "[bb0,bb1]@3 bb0 bb1@2 bb0@2 ~@2 bb1@2 c2@2 bb1@2",
  C: "[g0,g1]@3 g0 g1@2 g0@2 ~@2 g0@2 g1@2 ~@2", D: "bb0@2 ~ bb0 bb1@2 bb0@2 ~@2 bb1@2 c2@2 bb1@2",
  E: "[g0,g1]@3 g0 g1@2 g0@2 ~@2 g0@2 g1@3 ~", F: "[bb0,bb1]@2 ~ bb0 bb1@2 bb0@2 ~@2 bb1@2 c2@2 bb1@2",
  G: "[g0,g1]@2 ~ g0 g1@2 g0@2 ~@2 g0@2 g1@2 ~@2", H: "d1@2 ~ d1 d2@2 e1@2 ~@2 e1@2 f1 ~@3",
  I: "g0@2 ~ [g0,a0] g1@2 g0@2 ~@2 g0@2 g1@4", J: "bb1@2 ~ bb1 bb2@2 bb1@2 ~@2 c2@2 bb1@2 a1@2, ~@14 b1 ~",
  K: "bb1@2 ~ bb1 bb2@2 bb1@2 ~@2 c2@2 bb1@2 a1@2", L: "g1@3 g1 g2@2 g1@2 ~@2 a1@5 ~",
  M: "g1@2 ~ g1 g2@2 g1@2 ~@2 a1@2 g1@2 ~@2", N: "eb1@2 ~ eb1 eb2@2 eb1@3 ~ f1@2 eb1@2 d1@2",
  O: "eb1@2 ~ eb1 eb2@2 eb1@2 ~@2 eb1@2 eb2@2 d1@2", P: "c1@2 ~ c1 c2@2 c1@3 ~ c1@2 c2@2 d1@2",
  Q: "c1@2 ~ c1 c2@2 c1@2 ~@2 c1@2 c2@2 eb1@2", R: "d1 ~ d2 e1 ~ f1 g1 a1, ~@3 d1@2 ~@11",
  S: "eb1@2 ~ eb1 eb2@2 eb1@2 ~@2 eb2@2 f2@2 eb2@2", T: "c1@2 c2 c1 c2@2 c1@2 ~@2 c1@2 c2@2 c1@2",
  U: "eb1@2 ~ eb1 eb2@2 eb1@2 ~@2 eb1@2 eb2@2 eb1@2", V: "c1@2 ~ c1 c2@2 c1@2 ~@2 c1@2 c2@2 c1@2",
  W: "g0@2 ~ g0 g1@2 g0@2 ~@2 g0@2 g1@4", X: "g0@2 ~ g0 g1@2 g0@2 ~@2 g0@2 g1@3 ~",
})).s("gm_fretless_bass").gain(0.32)

// chords · distortion guitar · "Dist Guit Right"
const distortion_guitar = note("<~@12 A B ~@25 C@3 D@4 E@2 F ~@20 G D@4 E@2 H ~@32>".pickRestart({
  A: "[bb2,f3,bb3]", B: "[g2,d3,g3]", C: "[~@4 a4@14 ~@3 bb4@3]/3", D: "[g4@10 ~@2 f4@14 ~@3 eb4@3]/4", E: "[c4@7 ~]/2",
  F: "~ d4@11 ~@4", G: "~@5 bb4@3", H: "[d2,a2,d3] d4@11 ~@4",
})).s("gm_distortion_guitar").gain(0.29).pan(1)

// chords · distortion guitar · "Dist Guit Right" · soft notes
const distortion_guitar_soft = note("<~@14 A ~@33 B ~@27 C@3 ~@30>".pickRestart({
  A: "[d2,a2,d3]@7 ~@9", B: "~ [d2,a2,d3]@14 ~", C: "[~ d3@47, ~ d2@27 ~@20, ~ a2@23 ~@24]/3",
})).s("gm_distortion_guitar").gain(0.13).pan(1)

// chords · distortion guitar · "Dist Guit Left"
const distortion_guitar_2 = note("<~@12 A B ~@26 C@2 D@2 E@2 F@2 G ~@19 C@2 D@2 E@2 F@2 H@4 ~@29>".pickRestart({
  A: "[bb2,f3,bb3]", B: "[g2,d3,g3]", C: "[[bb2,f3,bb3]@15 ~]/2", D: "[[g2,d3,g3]@29 ~@3]/2",
  E: "[[eb2,bb2,eb3]@29 ~@3]/2", F: "[[c2,g2,c3]@7 ~]/2", G: "[d2,a2,d3]",
  H: "[[d2,d3]@17 ~@47, a3@25 ~@7, a2@13 ~@19]/4", // D
})).s("gm_distortion_guitar").gain(0.25).pan(0)

// chords · distortion guitar · "Dist Guit Left" · soft notes · D5
const distortion_guitar_soft_2 = note("<~@14 [[d2,a2,d3]@9 ~@7] ~@61 [~@3 e3 ~@12] ~@32>")
  .s("gm_distortion_guitar").gain(0.16).pan(0)

// other · string ensemble 1 · "String (fast)"
const string_ensemble_1 = note(`<
  ~@24 A B A C A D A E ~@8 F@2 G@2 H@2 I@2 J ~@19 F@2 G@2 H@2 I@2 J ~@3 K L K M K M K M K N K O K P K L K Q K M ~@9
>`.pickRestart({
  A: "~@2 [d3,d5] [f3,f5]@3 [a3,a5]@2", B: "[ab3,ab5]@3 [a3,a5]@3 ~@2", C: "[ab3,ab5]@6 [a3,a5]@5 ~@5",
  D: "[g3,g5]@3 ~", E: "[ab3,ab5]@3 [a3,a5]@2 ~@3", F: "[bb3,f4,bb4]/2", G: "[g3,d4,g4]/2", H: "[eb3,bb3,eb4]/2",
  I: "[c3,g3,c4]/2", J: "[d3,a3,d4]@3 ~", K: "~@2 d3 f3@3 a3@2", L: "ab3@3 a3@3 ~@2", M: "ab3@6 a3@5 ~@5",
  N: "g3@7 ~@9", O: "ab3@3 a3@2 ~@3", P: "g3 ~", Q: "g3@9 ~@7",
})).s("gm_string_ensemble_1").gain(0.28).pan(0.8)

// chords · electric guitar clean · "Clean Elec"
const electric_guitar_clean = note("<~@23 A@2 B@7 C@5 D@3 ~@69>".pickRestart({
  A: "[~@5 d4 ~ d4, ~@6 a3@5 ~ ab3@4, ~@8 d3@7 ~]/2",
  B: "[~ d4 ab3 ~@2 d4 ~ d4 ~ d4 ab3 ~@2 d4 ~ d4 ~ d4 ab3 ~@2 d4 ~ d4 ~ d4 ab3 ~, d3@12 a3@12 ab3@14 ~@6 a3@12 ab3@15 ~@5 a3@12 ab3@14 ~@10, ~@8 d3@7 ~ d3@7 ~ d3@7 ~ d3@6 ~@2 d3@7 ~ d3@6 ~@2]/7",
  C: "[~ d4 ~ d4 ~ d4 ab3 ~@2 d4 ~ d4 ~ d4 ab3 ~@2 d4 ~ d4, d3@14 ~@2 d3@13 ~@3 d3@14 ~@2 d3@12 ~@4 d3@14 ~@2, ~@8 ab3@15 ~@5 a3@6 ~@6 ab3@14 ~@6 a3@12 ab3@8]/5",
  D: "[~@4 d4@4 ab3@4 ~@8 d4@4 ~@4 d4@4 ~@4 d4@4 ab3@4 a3@3 ~, d3@6 a3@6 ab3@7 ~@5, ~@16 d3@14 ~@2 d3@15 ~]/3",
})).s("gm_electric_guitar_clean").gain(0.23).pan(1)

// other · lead 7 fifths · "fifths"
const lead_7_fifths = note("<~@12 A B C ~@25 D@2 E@2 F@2 G@2 H ~@19 D@2 E@2 F@2 G@2 H ~@32>".pickRestart({
  A: "bb3", B: "g3", C: "d3@9 ~@7", D: "bb4/2", E: "g4/2", F: "eb4/2", G: "c4/2", H: "d4@7 ~",
})).s("gm_lead_7_fifths").gain(0.31).pan(0)

// other · string ensemble 2 · "String (slow)"
const string_ensemble_2 = note("<~@52 A@6 B@5 C ~ D@3 ~@12 E F E G E F E F E H E G E I E F E J E F ~@9>".pickRestart({
  A: "[~@20 a5@23 ~@5, ~@11 a6@42 ~@43]/6", B: "[~@2 a5@3, ~@2 a6@25 ~@13]/5", C: "a6",
  D: "[~@5 a6, a6@3 ~, ~@32 a5@13 ~@3]/3", E: "~@2 d4 f4@3 a4@2", F: "ab4@6 a4@5 ~@5", G: "ab4@3 a4@3 ~@2",
  H: "g4@9 ~@7", I: "g4@13 ~@3", J: "g4@11 ~@5",
})).s("gm_string_ensemble_2").gain(0.28).pan(0.2)

// chords · electric guitar clean · "Clean Elec"
const electric_guitar_clean_2 = note("<~@23 A@2 B@7 C@8 ~@69>".pickRestart({
  A: "[~@5 d4 ~ d4, ~@6 a3@5 ~ ab3@4, ~@8 d3@7 ~]/2",
  B: "[~ d4 ab3 ~@2 d4 ~ d4 ~ d4 ab3 ~@2 d4 ~ d4 ~ d4 ab3 ~@2 d4 ~ d4 ~ d4 ab3 ~, d3@12 a3@12 ab3@14 ~@6 a3@12 ab3@15 ~@5 a3@12 ab3@14 ~@10, ~@8 d3@7 ~ d3@7 ~ d3@7 ~ d3@6 ~@2 d3@7 ~ d3@6 ~@2]/7",
  C: "[~@5 d4@4 ~@4 d4@4 ~@4 d4@4 ab3@4 ~@8 d4@4 ~@4 d4@4 ~@4 d4@4 ab3@4 ~@8 d4@4 ~@4 d4@4 ~@4 d4@4 ab3@4 ~@8 d4@4 ~@4 d4@4 ~@4 d4@4 ab3@4 a3@3, d3@14 ~@3 d3@13 ~@3 d3@14 ~@2 d3@12 ~@4 d3@14 ~@2 d3@13 ~@3 d3@14 ~@2 d3@15, ~@9 ab3@15 ~@5 a3@6 ~@6 ab3@14 ~@6 a3@12 ab3@9 ~@11 a3@12 ab3@14 ~@9]/8",
})).s("gm_electric_guitar_clean").gain(0.12).pan(0)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x ~@4 x ~@2 x ~@4]!31 [x ~@2 x ~@12] [x!4]!76 ~>").gain(0.44)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<[~ x ~@3 x ~@2]!31 [~ x ~@6] [~@2 x!2 ~@6 x!2 ~@4]!76 ~>").gain(0.27)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!31 [~ x ~@2] [~ x ~ x]!76 ~>").gain(0.55)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@32 [x!8]!76 ~>").gain(0.49)

// drums · mid tom
const mid_tom = s("mt").struct("<~@52 A@4 B C D E F@2 G H I@2 J I ~@41>".pickRestart({
  A: "~ x ~ x!2 ~@2 x ~ x ~ x!2 ~@3", B: "~@2 x!3 ~ x!2 ~ x ~ x!2 ~@3", C: "~@2 x!2 ~@3 x ~ x ~ x!2 ~@3",
  D: "x ~@3 x ~@2 x ~ x ~@2 x ~@2 x", E: "~@4 x ~@2 x ~ x ~@2 x ~@3", F: "x ~@3 x ~@2 x ~ x ~ x!2 ~@3",
  G: "x ~@3 x ~@2 x ~ x ~ x!2 ~ x ~", H: "~@2 x ~ x ~@2 x ~ x ~ x!2 ~ x ~", I: "~@2 x ~ x ~@2 x ~ x ~ x!2 ~@3",
  J: "x ~ x ~@3 x!2 ~ x!2 ~@3 x ~",
})).gain(0.27)

// drums · open hat
const open_hat = s("oh").struct("<~@52 [~@7 x]!16 ~@41>").gain(0.55)

// drums · ride
const ride = s("rd").struct("<[x!8]!31 [x!4 ~@4] [x!8]!76 ~>").gain(0.49)

// drums · shaker
const shaker = s("sh").struct("<[~@3 x ~@3 x]!3 [~@3 x ~@4] [~@3 x ~@3 x]!27 [~@3 x ~@4] [x!16]!76 ~>").gain(0.44)

stack(
  epiano1, timpani, timpani_soft, bass, distortion_guitar, distortion_guitar_soft, distortion_guitar_2,
  distortion_guitar_soft_2, string_ensemble_1, electric_guitar_clean, lead_7_fifths, string_ensemble_2,
  electric_guitar_clean_2, kick, kick_soft, snare, pedal_hat, mid_tom, open_hat, ride, shaker
)

More by Garbage