Strudelify

Queer

Garbage

KeyG minorTempo90 bpm
0:00/0:00
// Queer — Garbage
// 90 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 13 "Bass Drum" (taiko drum patch on one pitch) is played as the kit's kick
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar Harmonics.
setcpm(90/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.

// bass · electric bass finger · "Bass"
const bass = note(`<
  A B C D A B C D ~@8 A B C D A B C D ~@2 A B C D A B C D A B A B A B A B A B C D A B C D ~@2 E B E B E B E B E B E B E
  B E ~ F G H I J G H I J G H I J G H I K F G L G L G L G L G L G L G L G L G M
>`.pickRestart({
  A: "g1@7 g1 g1@2 g1@6", B: "eb1@7 eb1 eb1@2 eb1@6", C: "c2@7 c2 c2@2 c2@6", D: "f1@7 f1 f1@2 f1@6",
  E: "bb1@7 bb1 bb1@2 bb1@6", F: "~@6 g1@7 g1 g1@2", G: "g1@6 eb1@7 eb1 eb1@2", H: "eb1@6 c2@7 c2 c2@2",
  I: "c2@6 f1@7 f1 f1@2", J: "f1@6 g1@7 g1 g1@2", K: "f1@3 ~@5", L: "eb1@6 g1@7 g1 g1@2", M: "eb1@3 ~@5",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · epiano1 · "Ele.piano"
const epiano1 = note(`<
  A B C D A B C D ~@8 A B C D A B C D ~@2 A B C D A B C D ~@8 A B C D A B C D ~@2 E F E F E F E F E F E F E F E ~ G@8
  H@8 I J@7 K@8 L@4
>`.pickRestart({
  A: "g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@4, g2, ~@2 g3@2 g3 g3@3", // Gm
  B: "~@4 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4, [eb2,eb3]", // Eb
  C: "c4@4 [g3,eb4,g4]@2 ~@2 [g3,eb4,g4] ~ [g3,eb4,g4]@2 ~@4, c3, ~@2 c4@2 c4 c4@3", // Cm
  D: "f3@4 [a3,c4,f4]@2 ~@2 [a3,c4,f4] ~ [a3,c4,f4]@2 ~@4, f2, ~@2 f3@2 f3 f3@3", // F
  E: "~@4 [f3,bb3,d4,bb4]@2 ~@2 [f3,bb3,d4,bb4] ~ [f3,bb3,d4,bb4]@2 ~@4, [bb1,bb2]", // Bb
  F: "eb3@4 [bb3,eb4,g4]@2 ~@2 [bb3,eb4,g4] ~ [bb3,eb4,g4]@2 ~@4, eb2, ~@2 eb3@2 eb3 eb3@3", // Eb
  G: "[~@6 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 c4@4 [g3,eb4,g4]@2 ~@2 [g3,eb4,g4] ~ [g3,eb4,g4]@2 ~@4 f3@4 [a3,c4,f4]@2 ~@2 [a3,c4,f4] ~ [a3,c4,f4]@2 ~@4 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 c4@4 [g3,eb4,g4]@2 ~@2 [g3,eb4,g4] ~ [g3,eb4,g4]@2 ~@4 f3@4 [a3,c4,f4]@2 ~@2 [a3,c4,f4] ~, ~@3 g2@8 [eb2,eb3]@8 ~@2 c4@2 c4 c4@3 ~@2 f3@2 f3 f3@3 ~@2 g3@2 g3 g3@3 ~@8 c3@8 f2@5, ~@5 g3@2 g3 g3@3 ~@8 c3@8 f2@8 g2@8 [eb2,eb3]@8 ~@2 c4@2 c4 c4@3 ~@2 f3@2 f3]/8", // Gm Eb Cm F Gm Eb Cm F …
  H: "[[a3,c4,f4]@2 ~@4 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 c4@4 [g3,eb4,g4]@2 ~@2 [g3,eb4,g4] ~ [g3,eb4,g4]@2 ~@4 f3@4 [a3,c4,f4]@2 ~@2 [a3,c4,f4] ~ [a3,c4,f4]@2 ~@4 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 c4@4 [g3,eb4,g4]@2 ~@2 [g3,eb4,g4] ~ [g3,eb4,g4]@2 ~@4 f3@4 [a3,c4,f4]@2 ~@2 [a3,c4,f4] ~, f3@3 g2@8 [eb2,eb3]@8 ~@2 c4@2 c4 c4@3 ~@2 f3@2 f3 f3@3 ~@2 g3@2 g3 g3@3 ~@8 c3@8 f2@5, ~@5 g3@2 g3 g3@3 ~@8 c3@8 f2@8 g2@8 [eb2,eb3]@8 ~@2 c4@2 c4 c4@3 ~@2 f3@2 f3]/8", // F Gm Eb Cm F Gm Eb Cm …
  I: "[a3,c4,f4] ~@7, f3@3 ~@5", // F
  J: "[~@6 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~, ~@3 g2@8 [eb2,eb3]@8 g2@8 [eb2,eb3]@8 g2@8 [eb2,eb3]@8 g2@5, ~@5 g3@2 g3 g3@3 ~@10 g3@2 g3 g3@3 ~@10 g3@2 g3 g3@3 ~@10 g3@2 g3]/7", // Gm Eb Gm Eb Gm Eb Gm Eb
  K: "[[bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~, g3@3 [eb2,eb3]@8 g2@8 [eb2,eb3]@8 g2@8 [eb2,eb3]@8 g2@8 [eb2,eb3]@8 g2@5, ~@13 g3@2 g3 g3@3 ~@10 g3@2 g3 g3@3 ~@10 g3@2 g3 g3@3 ~@10 g3@2 g3]/8", // Gm Eb Gm Eb Gm Eb Gm Eb …
  L: "[[bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@4 g3@4 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@8 [g3,bb3,eb4,g4]@2 ~@2 [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4]@2 ~@14, g3@3 [eb2,eb3]@8 g2@8 [eb2,eb3]@8 ~@5, ~@13 g3@2 g3 g3@3 ~@13]/4", // Gm Eb Gm Eb
})).s("gm_epiano1").gain(0.49).pan(0.2)

// other · alto sax · "Shirley Manson"
const alto_sax = note(`<
  ~@8 A B@2 ~ A B@2 C@7 D@2 ~ E@2 ~@7 A B@2 ~ A B@2 C@7 D@2 ~ E@2 ~@7 F@2 G@2 H@2 I J K L M N O P O Q K L M N O P O R S
  T U V W X U V W V Y Z ~@8
>`.pickRestart({
  A: "c4@2 bb3@2 c4@2 bb3 c4@2 bb3 g3@5 ~", B: "[~@6 c4 bb3 c4@2 bb3@2 c4@2 bb3 c4@3 d4@3 ~@11]/2",
  C: "[~@6 g3@2 d4@2 c4 ~ c4 ~@2 c4@2 bb3 g3@6 d4@2 c4 ~ c4 bb3@2 c4@3 d4@5 g3 d4@2 c4 ~ c4 bb3@2 c4@2 bb3 g3@5 g3 d4@2 c4 ~ c4 bb3@2 c4@3 d4@4 ~ g3 d4@2 c4 ~ c4 bb3@2 c4@2 bb3 g3@4 ~ g3 d4@2 c4 ~ c4 bb3@2 c4@3 d4@4 ~@2 d4@2 c4 ~ c4 bb3@2 c4, ~@7 bb3 ~@48]/7",
  D: "[~ bb3 g3@4 ~ g3 d4@2 c4 ~ c4 bb3@2 c4@3 d4@3 ~@11]/2", E: "[~@6 g3@2 d4@2 c4 ~ c4 bb3@2 c4@2 bb3 g3@3 ~@11]/2",
  F: "[~@3 db4 c4@2 bb3 c4@3 db4!2 ~@4]/2", G: "[~@3 db4 c4@2 bb3 c4@3 bb3 bb3@4 ~]/2",
  H: "[~@3 db4 c4@2 bb3 c4@3 db4 db4@4 ~]/2", I: "~@3 c4!2 db4@3", J: "f3@2 ~@4 g3 d4",
  K: "c4 ~ c4 ~@2 c4@2 bb3 g3@6 d4@2, ~@2 bb3 ~@5", L: "c4 ~ c4 bb3@2 c4@3 d4@5 g3 d4@2",
  M: "c4 ~ c4 bb3@2 c4@2 bb3 g3@5 g3 d4@2", N: "c4 ~ c4 bb3@2 c4@3 d4@4 ~ g3 d4@2",
  O: "c4 ~ c4 bb3@2 c4@2 bb3 g3@4 ~ g3 d4@2", P: "c4 ~ c4 bb3@2 c4@3 d4@4 ~@2 d4@2",
  Q: "c4 ~ c4 bb3@2 c4@3 d4@3 ~ g3@2 d4@2", R: "c4 ~ c4 bb3@2 c4@3 d4@3 ~@5", S: "~@6 g3 d4",
  T: "c4 ~ c4 bb3@2 c4@2 bb3 g3@3 ~ g4 bb4 c5 ~", U: "db5@2 c5@2 bb4 g4@4 ~@7", V: "~@12 g4 bb4 c5@2",
  W: "db5 c5@3 bb4 g4@3 ~@8", X: "~@12 g4 bb4 c5 ~", Y: "db5 c5@2 bb4@2 ~@7 c5 ~ c5@2", Z: "bb4 d4 ~@2",
})).s("gm_alto_sax").gain(0.72)

// chords · clarinet · "Clarinet Loop"
const clarinet = note("<~@15 A ~@8 A B ~@15 C ~@8 A B ~@32 D E ~@18>".pickRestart({
  A: "[db4,f4]@3 [c4,e4]@3 [b3,eb4]@2 [bb3,d4,f4]@3 [a3,db4,e4]@3 [ab3,c4,eb4]@2", B: "[g3,c4,e4]",
  C: "[b3,f4]@3 [bb3,e4]@3 [g3,c4]@2 [f3,b3]@3 [e3,bb3]@3 [c3,g3]@2", D: "~@6 [b3,f4]@3 [bb3,e4]@3 [g3,c4]@2 [f3,b3]@2",
  E: "~ [e3,bb3]@3 [c3,g3]@2 ~@10", // Edim C5
})).s("gm_clarinet").gain(0.16).pan(0.7)

// chords · overdriven guitar · "Fuzz Guitar"
const overdriven_guitar = note(`<
  ~@16 A B C D A B C D ~@18 A B C D A B C D ~@2 E F G H E F G H@8 ~ I@8 J@8 ~@20
>`.pickRestart({
  A: "[g2,d3,g3]", B: "[eb3,bb3,eb4]", C: "[c3,g3,c4]", D: "[f2,c3,f3]",
  E: "[e3,e4] ~ [e3,e4] ~ [e3,e4]@2 [f3,f4]@2 [bb3,bb4]@8", F: "[e3,e4] ~ [e3,e4] ~ [e3,e4]@2 [f3,f4] ~ [eb4,eb5]@8",
  G: "[e3,e4] ~ [e3,e4] ~ [e3,e4]@2 [f3,f4]@2 [c4,c5]@4 [db4,db5]@4", H: "[e3,e4] ~ [e3,e4] ~ [e3,e4]@2 [f3,f4]@4 ~@6",
  I: "[~@3 g5@6 ab5@2 g5@6 ab5@2 g5@6 ab5@2 g5@6 ab5@2 g5@6 ab5@2 g5@6 ab5@2 g5@6 ab5@2 [f2,c3,f3,g5]@5, ~@3 [g2,d3,g3]@8 [eb3,bb3,eb4]@8 [c3,g3,c4]@8 [f2,c3,f3]@8 [g2,d3,g3]@8 [eb3,bb3,eb4]@8 [c3,g3,c4]@8 ~@5]/8", // Fsus2 G5 Eb5 C5 F5 G5 Eb5 C5
  J: "[~ ab5@2 g5@6 ab5@2 g5@6 ab5@2 g5@6 ab5@2 g5@6 ab5@2 [g2,d3,g3]@8 [eb3,bb3,eb4]@8 [c3,g3,c4]@8 [f2,c3,f3]@5, ~@3 [g2,d3,g3]@8 [eb3,bb3,eb4]@8 [c3,g3,c4]@8 [f2,c3,f3]@8 ~@29]/8", // G5 Eb5 C5 F5 G5 Eb5 C5 F5
})).s("gm_overdriven_guitar").gain(0.45)

// other · agogo · "FX Loop"
const agogo = note(`<
  [~ g4 bb4 ~@2 g4 bb4 ~]!31
  ~@3
  [~ g4 bb4 ~@2 g4 bb4 ~]!33
  ~
  [~@4 g4 bb4 ~@2]
  [g4 bb4 ~@2 g4 bb4 ~@2]!15
  [g4 bb4 ~@6]
  ~@19
>`).s("gm_agogo").gain(0.13)

// other · overdriven guitar · "Guitar Harmonics"
const overdriven_guitar_2 = note(`<
  A B C D A B C D ~@9 B ~ D ~ B ~ D ~@2 A B C D A B C D ~@9 B ~ D ~ B ~ D ~@21 E@2 ~@2 E@2 ~@2 E@2 F@2 E@2 ~@19
>`.pickRestart({
  A: "g6", B: "g5", C: "g4", D: "bb3", E: "[~@3 bb3@8 ~@5]/2", F: "[~@3 g5@8 ~@5]/2",
})).s("gm_overdriven_guitar").gain(0.08)

// bass · acoustic bass · "Additional Bass"
const bass_2 = note(`<
  ~@10 A@2 ~@2 A B C D E F C D E F ~@12 A@2 ~@2 A B ~@26 G H I J K H I J K H I J K H I J L ~@19
>`.pickRestart({
  A: "~@6 g3 bb3 c4 ~ c4 db4 c4@2 bb3@2", B: "~@4 c2@3 bb1", C: "g1@7 g1 g1@2 g1@6", D: "eb1@7 eb1 eb1@2 eb1@6",
  E: "c2@7 c2 c2@2 c2@6", F: "f1@7 f1 f1@2 f1@6", G: "~@6 g1@7 g1 g1@2", H: "g1@6 eb1@7 eb1 eb1@2",
  I: "eb1@6 c2@7 c2 c2@2", J: "c2@6 f1@7 f1 f1@2", K: "f1@6 g1@7 g1 g1@2", L: "f1@3 ~@5",
})).s("gm_acoustic_bass").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  [x ~@6 x!2 ~ x ~@5]!67
  ~
  [~@6 x ~@6 x!2 ~]
  [x ~@5 x ~@6 x!2 ~]!15
  x
  [~@6 x ~@6 x!2 ~]
  [x ~@5 x ~@6 x!2 ~]!17
  x
>`).gain(0.53)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@8 [~@7 x]!18 ~@8 [~@7 x]!33 ~@2 [~ x ~@2]!16 ~@19>").gain(0.26)

// drums · snare
const snare = s("sd").struct(`<
  [~ x ~ x]!67
  ~
  [~@5 x ~@2]
  [~ x ~@3 x ~@2]!15
  [~ x ~@6]
  [~@5 x ~@2]
  [~ x ~@3 x ~@2]!17
  [~ x ~@6]
>`).gain(0.53)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 A@18 ~@8 A@33 ~ B C@15 D ~@19>".pickRestart({
  A: "~@9 x ~@5 x", B: "~@15 x", C: "~@5 x ~@9 x", D: "~@5 x ~@10",
})).gain(0.26)

// drums · low tom
const low_tom = s("lt").struct(`<
  [x ~@6 x!2 ~ x ~@5]!67
  ~
  [~@6 x ~@6 x!2 ~]
  [x ~@5 x ~@6 x!2 ~]!15
  x
  [~@6 x ~@6 x!2 ~]
  [x ~@5 x ~@6 x!2 ~]!17
  x
>`).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct("<~@15 [~@2 x!2] ~@25 [~@2 x!2] ~@62>").gain(0.53)

// drums · crash
const crash = s("cr").struct("<~@67 x ~@36>").gain(0.53)

// drums · tambourine
const tambourine = s("tb").struct(`<
  [~ x ~ x]!67
  ~
  [~@5 x ~@2]
  [~ x ~@3 x ~@2]!15
  [~ x ~@6]
  [~@5 x ~@2]
  [~ x ~@3 x ~@2]!17
  [~ x ~@6]
>`).gain(0.53)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@8 A@7 ~ A@7 ~ A@2 ~@8 A@7 ~ A@7 ~ A@7 ~ A@9 ~ B C@6 D ~@28>".pickRestart({
  A: "~@9 x ~@5 x", B: "~@15 x", C: "~@5 x ~@9 x", D: "~@5 x ~@10",
})).gain(0.26)

stack(
  bass, epiano1, alto_sax, clarinet, overdriven_guitar, agogo, overdriven_guitar_2, bass_2, kick, kick_soft, snare,
  snare_soft, low_tom, open_hat, crash, tambourine, tambourine_soft
)

More by Garbage