Strudelify

Temptation Waits

Garbage

KeyE majorTempo125 bpm
0:00/0:00
// Temptation Waits — Garbage
// 125 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 146 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(125/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.

// chords · tinkle bell · F
const tinkle_bell = note(`<
  [~@8 f5 [f5,a5]!5 f5 [f5,a5]]
  [[f5,a5]!6 f5 [f5,a5]!7 f5 [f5,a5]]!13
  [e4 ~ a5 ~, a5 ~@15]
  [e4 ~ a5 ~]!7
  ~@64
  [e4 ~@3 a5 ~@3]!6
  ~@54
>`).s("gm_tinkle_bell").gain(0.41)

// bass · electric bass finger
const bass = note(`<
  ~@13 A ~ A ~ A ~ A ~@2 B@2 C D E F G H B@2 C D E F G H I@4 ~ A ~ A ~ A ~@3 A ~ A ~ A ~@2 B@2 C D E F G H B@2 C D E F G
  H J@4 K@8 ~@8 B@2 C D E F G H L M B N E O P Q I@24 R@8 S ~@3
>`.pickRestart({
  A: "~@14 d2 e2", B: "c#2@3 c#2 c#2@2 c#2@6 g#1@2 b1@2", C: "f#1@3 f#1 f#1@2 f#1@6 c#1@2 e1@2",
  D: "f#1@3 f#1 f#1@2 f#1@6 f#1 a0 g#1@2", E: "a1@3 a1 a1@2 a1@6 e1@2 g#1@2", F: "a1@3 a1 a1@2 a1@6 a1 g#1 b1@2",
  G: "e1@3 e1 e1@2 e1@6 e1@2 f#1@2", H: "g#1@3 g#1 g#1@2 g#1@6 g#1@2 b1@2", I: "e1", J: "~@2 g3 ~ g2 ~ g1 ~", K: "a1",
  L: "a1@3 a1 a1@2 a1@6 f1@2 g#1@2", M: "a1@3 a1 a1@2 a1@6 g#1@2 b1@2", N: "c#2@3 c#2 c#2@2 c#2@6 c#2 g#1 b1@2",
  O: "a1@3 a1 a1@2 a1@6 a1 g#1 e1@2", P: "f#1@3 f#1 f#1@2 f#1@6 f#1@2 g#1@2", Q: "b1@3 b1 b1@2 b1@6 b1@2 d2@2",
  R: "e1@2 ~@2 e2@2 ~ e1!2 ~ e1 ~ e2 ~ d2 e2", S: "e1@2 ~@2 e2@2 ~ e1 ~@8",
})).s("gm_electric_bass_finger").gain(0.41)

// chords · lead 3 calliope · E G#m E5 E G#m Bm E5 E …
const lead_3_calliope = note(`<
  ~@21
  [~ [e3,g#3] [g#3,b3] [b3,e4] [e4,g#4] [g#4,b4] [b4,d5] [b4,e5]]
  ~@35
  [~ [e3,g#3] [g#3,b3] [b3,e4] [e4,g#4] [g#4,b4] [b4,d5] [b4,e5]]
  ~@35
  [~ [e3,g#3] [g#3,b3] [b3,e4] [e4,g#4] [g#4,b4] [b4,d5] [b4,e5]]
  ~@52
>`).s("gm_lead_3_calliope").gain(0.19)

// bass · slap bass 2
const bass_2 = note(`<
  ~@14 A@8 B@2 C@2 D@2 E F B@2 C@2 D@2 E F G@4 A@16 B@2 C@2 D@2 E F B@2 C@2 D@2 E F H@4 I@8 J ~ K ~ L ~@3 B@2 C@2 D@2 E
  F D@2 B@2 C M D N G@24 ~@12
>`.pickRestart({
  A: "e1!6 ~@2", B: "c#2!5 ~ c#2!5 ~ c#2!4", C: "f#1!5 ~ f#1!5 ~ f#1!4", D: "a1!5 ~ a1!5 ~ a1!4",
  E: "e1!5 ~ e1!5 ~ e1!4", F: "g#1!5 ~ g#1!5 ~ g#1!4", G: "e1 e2 e1 e2", H: "~@2 g4 ~ g4 ~ g4 ~", I: "a1 a2 a1 a2",
  J: "e2", K: "c2", L: "a1", M: "f#1!5 ~ f#1!5 ~ g#1!4", N: "b1!5 ~ b1!5 ~ b1!4",
})).s("gm_slap_bass_2").gain(0.41)

// other · pad choir
const pad_choir = note(`<
  ~@23 A B C D ~ E F G A B C D ~ E F G ~@20 A B C D ~ E F G A B C D ~ E F ~@21 A B C D ~ E F G H I H I ~ J K ~@36
>`.pickRestart({
  A: "~@5 [b3,b4] ~ [b3,b4] ~ [c#4,c#5] ~ [c#4,c#5] ~ [b3,b4] ~ [b3,b4]", // B C# B
  B: "~ [a#3,a#4] ~ [a#3,a#4] ~ [a#3,a#4] ~ [a#3,a#4] ~ [a#3,a#4] ~ [a#3,a#4] ~@4", // A#
  C: "~@5 [a#3,a#4] ~ [a#3,a#4] ~ [b3,b4] ~ [b3,b4] ~ [c#4,c#5] ~ [c#4,c#5]", // A# B C#
  D: "~ [a3,a4] ~ [a3,a4] ~ [a3,a4] ~ [a3,a4] ~ [a3,a4] ~ [a3,a4] ~@4", // A
  E: "~@5 [e4,e5] ~ [e4,e5] ~ [e4,e5] ~ [e4,e5] ~ [e4,e5] ~@2", // E
  F: "~@5 [d#4,d#5] ~ [d#4,d#5] ~ [d#4,d#5] ~ [e4,e5] ~ [d#4,d#5] ~ [d#4,d#5]", G: "~ d#4 ~@14",
  H: "~@5 [c#4,c#5] ~ [c#4,c#5] ~ [d#4,d#5] ~ [d#4,d#5] ~ [e4,e5] ~ [e4,e5]", // C# D# E
  I: "~ [c#4,c#5] ~ [c#4,c#5] ~ [c#4,c#5] ~ [c#4,c#5] ~ [c#4,c#5] ~ [c#4,c#5] ~@4", // C#
  J: "~ [e4,e5] ~ [e4,e5] ~ [e4,e5] ~ [e4,e5] ~ [e4,e5] ~ [e4,e5] ~ [e4,e5] ~ [e4,e5]", // E
  K: "~ [d#4,d#5] ~ [d#4,d#5] ~ [d#4,d#5] ~ [d#4,d#5] ~@8", // D#
})).s("gm_pad_choir").gain(0.41)

// other · pad sweep
const pad_sweep = note("<~@22 A@6 B C A@6 B C ~@20 A@6 B C A@6 B C ~@20 A@6 B C D@2 A@2 E@2 D B ~@36>".pickRestart({
  A: "c#5", B: "b4", C: "c5", D: "a4", E: "f#4",
})).s("gm_pad_sweep").gain(0.41)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@38 A B A B A B A B A B A C A B A B A B A C ~@16 D@4 E@2 F@2 E@2 F@2 ~@60
>`.pickRestart({
  A: "e3@2 e4 b3 d4@2 e4 e3", B: "~ e3 e4 b3 d4@2 e4@2", C: "~ e3 e4 f#4 f#4@2 f#4 e4",
  D: "[d#5,d#6]@2 [f#4,f#5] [f#5,f#6]@3 [c6,c7]@2", E: "[a3 a4@2 e4 g4@2 e4 a4@2 a4 b4@2 b4 a4@3]/2",
  F: "[a3 a4@2 e4 g4@2 e4 a4@2 e4 f#4@2 f#4 e4@3]/2",
})).s("gm_distortion_guitar").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@2 A@12 B@8 C@20 B@16 C@28 D@6 ~ E C@48 F ~@3>".pickRestart({
  A: "x ~ x!2", B: "x ~ x!2 ~@2 x!3 ~ x!2 ~@2 x!2", C: "x ~@6 x!2 ~ x ~@5", D: "x", E: "x!16", F: "x ~@6 x!2 ~@7",
})).gain(0.57)

// drums · rim
const rim = s("rim").struct("<~@37 A ~@3 A ~@31 A ~@3 B ~@7 A ~@6 C ~@16 A ~@7 A ~@23 A ~@4>".pickRestart({
  A: "~@12 x!4", B: "~@8 x!2 ~@2 x!4", C: "x!8",
})).gain(0.57)

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~@2]!12 ~@78 [x!8] ~@53>").gain(0.57)

// drums · clap
const clap = s("cp").struct(`<
  ~@14 A@23 B A@3 C A@31 B A@3 C A@3 D A@3 C E@6 ~ F G A@14 B A@7 C A@7 C A@7 C A@7 C H ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "x!5 ~ x!5 ~ x!4", C: "~@4 x ~@3 x!2 ~ x!5", D: "~ x ~@2", E: "~ x", F: "x!16", G: "x!2 ~ x",
  H: "~ x!2 ~",
})).gain(0.57)

// drums · low tom
const low_tom = s("lt").struct("<~@2 [x ~@3 x!2 ~@2]!12 ~@132>").gain(0.57)

// drums · hihat
const hihat = s("hh").struct("<~@14 [x!2]!8 ~@20 [x!2]!16 ~@35 [x!16] x ~@51>").gain(0.57)

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 A@12 B@7 C D ~@19 B@15 C D ~@87>".pickRestart({
  A: "x!2", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "x ~ x ~ x ~ x ~ x!8", D: "x",
})).gain(0.57)

// drums · crash
const crash = s("cr").struct(`<
  ~@14 A ~@7 A ~ A ~ A ~ A@3 ~ A ~ A ~ A@2 B C@3 A ~@7 A ~@7 A ~ A ~ A ~ A@3 ~ A ~ A ~ A@2 D@4 B C@3 B C@3 ~@8 A ~ A ~ A
  ~ A@3 ~ A ~ A ~ A@2 B C B C B C@3 A ~@7 A ~@7 B C B C B C@3 E ~@3
>`.pickRestart({
  A: "x", B: "x!2 ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x", D: "x!8", E: "x!2 ~ x!2 ~@3",
})).gain(0.57)

// drums · ride
const ride = s("rd").struct("<A B@13 ~@8 B@16 ~@20 B@16 ~@12 C@6 ~@2 B@16 ~@8 B@16 ~@12>".pickRestart({
  A: "~@8 x!8", B: "x!16", C: "~ x ~ x ~ x ~ x",
})).gain(0.57)

// drums · tambourine
const tambourine = s("tb").struct("<~@14 [x!5 ~@3]!8 ~@20 [x!5 ~@3]!16 ~@88>").gain(0.57)

// drums · congas
const congas = s("conga:13").struct("<~@2 [~ x ~@7 x ~@6]!12 ~@132>").gain(1.83)

// drums · congas
const congas_2 = s("conga:18").struct("<~@14 [~ x ~ x ~@4]!8 ~@20 [~ x ~ x ~@4]!16 ~@88>").gain(1.83)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@2 A@20 B@20 A@16 B@28 C@6 ~@2 B@48 D ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x!16", C: "x!4", D: "x!8 ~@8",
})).gain(2.9)

// drums · shaker
const shaker = s("sh").struct("<~@22 [x!16]!20 ~@16 [x!16]!28 ~@7 [x!16]!49 [x!8 ~@8] ~@3>").gain(0.57)

stack(
  tinkle_bell, bass, lead_3_calliope, bass_2, pad_choir, pad_sweep, distortion_guitar, kick, rim, snare, clap, low_tom,
  hihat, mid_tom, crash, ride, tambourine, congas, congas_2, cabasa, shaker
)

More by Garbage