Strudelify

I Think I'm Paranoid

Garbage

KeyB♭ majorTempo115 bpm
0:00/0:00
// I Think I'm Paranoid — Garbage
// 115 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 103 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 3 (Overdrive) Right.
setcpm(115/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 · electric guitar clean · "Guitar 1 (Clean)"
const electric_guitar_clean = note(`<
  A B A B A B A B A B ~@9 C@2 D@2 E@2 D@2 F@2 G A B A B A B A B A B ~@9 C@2 D@2 E@2 D@2 F@2 G ~@7 H@2 D@2 E@2 D@2 F@2 G
  ~@16 A B A B A B A ~@2
>`.pickRestart({
  A: "d4 b3 g4 g3 f4 g3 c4 d4", B: "g3 g4 g3 b3 f4 g3 c4 d4", C: "[eb4@2 a4@2 bb4@2 eb4 a4@2 bb4@2 eb4 a4@2 bb4@2]/2",
  D: "[e4@2 f4@2 e4@2 f4 e4@2 f4 e4 f4 e4@2 f4@2]/2", E: "[e4@2 f4@2 e4@2 f4 d4@2 e4!7]/2",
  F: "[e4@2 f4@2 e4@2 f4 d4@2 d4!7]/2", G: "d4!8", H: "[eb4@4 a4@4 bb4@4 eb4@2 a4@4 bb4@4 eb4@2 a4 ~@7]/2",
})).s("gm_electric_guitar_clean").gain(0.25).pan(0)

// other · electric guitar clean · "Guitar 2 (Trippy/Clean)"
const electric_guitar_clean_2 = note(`<
  A B A B A B A B A B ~@9 C@2 D@2 E@2 D@2 F@2 G A B A B A B A B A B ~@9 C@2 D@2 E@2 D@2 F@2 G ~@7 H@2 D@2 E@2 D@2 F@2 G
  ~@16 A B A B A B A ~@2
>`.pickRestart({
  A: "g4@2 b4 g4 a4@2 f4 c4", B: "d4 g4 ~ d4 f4@2 a4@2", C: "[eb4@2 a4@2 bb4@2 eb4 a4@2 bb4@2 eb4 a4@2 bb4@2]/2",
  D: "[e4@2 f4@2 e4@2 f4 e4@2 f4 e4 f4 e4@2 f4@2]/2", E: "[e4@2 f4@2 e4@2 f4 d4@2 e4!7]/2",
  F: "[e4@2 f4@2 e4@2 f4 d4@2 d4!7]/2", G: "d4!8", H: "[eb4@4 a4@4 bb4@4 eb4@2 a4@4 bb4@4 eb4@2 a4 ~@7]/2",
})).s("gm_electric_guitar_clean").gain(0.4).pan(1)

// chords · overdriven guitar · "Guitar 3 (Overdrive) Left"
const overdriven_guitar = note(`<
  ~@12 A B A B A B A C@2 D E D F D E D F G H@2 I@2 ~@8 A B A B A B A C@2 D E D F D E D F G J@3 K J@3 L M N O N P N O N
  Q@2 R S R S R S R S R S R S R S R S ~@9
>`.pickRestart({
  A: "[g2,d3,g3]!2 ~ [g2,d3,g3] [c3,f3]@2 ~ [f2,c3,f3], ~@4 f2@3 ~", // G5 F5
  B: "[eb2,bb2,eb3]!2 ~ [eb2,bb2,eb3] [c2,g2,c3]!2 ~ [c2,g2,c3]", // Eb5 C5
  C: "[[eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3] [c2,g2,c3]@2 [c2,g2,c3]@2 [c2,g2,c3] [c2,g2,c3]@2 [c2,g2,c3]@2]/2", // Eb5 C5
  D: "[bb2,f3,bb3]@3 [bb2,f3,bb3] [bb2,f3,bb3]@2 [bb2,f3,bb3]@2", // Bb5
  E: "[f2,c3,f3]@3 [f2,c3,f3] [f2,c3,f3]@2 [f2,c3,f3]@2", F: "~ [d3,a3,d4]!7", G: "[d3,a3,d4]!8",
  H: "[~@3 d5, ~ d5@2 ~, ~@5 g5@8 ~@3, ~ f5]/2", I: "[~ f5, ~ d5@2 ~, ~@5 g5@8 ~@3]/2",
  J: "a5 ~ a5 ~ a5 ~ a5 ~ [d3,d4] [d3,d4,a5]!2 [eb3,eb4,a5] [e3,e4,a5]!4, ~@7 a5@2 ~@7", // D D5 Ebdim A5
  K: "a5 ~ a5 ~ a5 ~ a5 ~ [gb3,gb4,a5] [gb3,gb4] [gb3,gb4,a5]!2 [g3,g4,a5]!4", L: "~@8 [f3,f4]!3 [gb3,gb4] [g3,g4]!4",
  M: "[g3,g4]!9 ~@7", N: "[bb2,f3,bb3]", O: "[f2,c3,f3]", P: "[d3,a3,d4]", Q: "[d3,a3,d4]/2",
  R: "[g2,d3,g3]@2 ~ [g2,d3,g3] [f2,c3,f3]@2 ~ [f2,c3,f3]", S: "[eb2,bb2,eb3]!8",
})).s("gm_overdriven_guitar").gain(0.5).pan(0)

// chords · overdriven guitar · "Guitar 3 (Overdrive) Left" · soft notes
const overdriven_guitar_soft = note("<~@24 A ~@3 A ~@25 A ~@3 A ~@27 B C ~@2 B C ~@11>".pickRestart({
  A: "[d3,a3,d4] ~@7", B: "~@8 [db4,db5] [d4,d5] [g4,g5]!4 ~ [g4,g5], ~@7 [g4,g5]",
  C: "~@9 [d4,d5] ~ [g4,g5] ~ [g4,g5] ~ [g4,g5], ~@4 [db4,db5] [g4,g5]!3", // D G Db G
})).s("gm_overdriven_guitar").gain(0.3).pan(0)

// chords · overdriven guitar · "Guitar 3 (Overdrive) Right"
const overdriven_guitar_2 = note(`<
  ~@13 A ~ A ~ A ~@25 A ~ A ~ A ~@12 B@3 C B@3 D ~ E F E G E F E G H ~@25
>`.pickRestart({
  A: "~@7 bb2", B: "[e2,e3]@3 [e2,e3] ~@4", C: "[c2,c3]@2 ~ [d2,d3]", D: "[c2,c3] ~",
  E: "~@3 [bb2,f3,bb3] [bb2,f3,bb3]@2 [bb2,f3,bb3]@2", F: "~@3 [f2,c3,f3] [f2,c3,f3]@2 [f2,c3,f3]@2",
  G: "~ [d3,a3,d4]!7", H: "[d3,a3,d4]!8",
})).s("gm_overdriven_guitar").gain(0.5).pan(1)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@4 A@6 B ~ A C A C A C A D@2 E F E G E F E H@2 I@4 A@6 B ~ A C A C A C A D@2 E F E G E F E H@2 J@3 K J@3 K ~ E F E G
  E F E H@2 A L A L A L A L A L A L A L A L I@4 ~@5
>`.pickRestart({
  A: "g1@2 ~ g1 f1@2 ~ f1", B: "g1 ~@3", C: "eb1@2 ~ eb1 c1@2 ~ c1",
  D: "[eb1@2 eb1@2 eb1@2 eb1 c1@2 c1@2 c1 c1@2 c1@2]/2", E: "bb1@3 bb1 bb1@2 bb1@2", F: "f1@3 f1 f1@2 f1@2",
  G: "d2@2 ~ d2!2 e2 d2 bb1", H: "d2!8", I: "g2@2 ~ g2 f2@2 ~ f2", J: "e2 ~", K: "c2 ~", L: "eb1!8",
})).s("gm_electric_bass_finger").gain(0.51).pan(0.6)

// other · distortion guitar
const distortion_guitar = note("<~@42 A@6 B@3 ~@29 C D ~@2 C D ~@2 E F ~@2 E D ~@9>".pickRestart({
  A: "[~@8 a4@23 ~]/2", B: "[~@8 a4@39 ~]/3", C: "~@2 g4@2 bb4@2 g4@2 c5@4 g5@3 ~", D: "~ g4 bb4 g4 eb5@4",
  E: "~ g4 bb4 g4 c5@2 g5 ~", F: "~@2 g4 ~ bb4@2 g4@2 eb5@7 ~",
})).s("gm_distortion_guitar").gain(0.46).pan(0.4)

// other · pad metallic · "Ambient Sounds Track 1"
const pad_metallic = note("<A@4 ~@6 B C ~@18 A@4 ~@6 B C ~@21 D ~@4 E ~@25 A@7 ~@2>".pickRestart({
  A: "d6@2 ~ d6 d6@4", B: "[g5,b6] d6 g5 d6 g5 d6@3", C: "g5 d6 g5 d6 g5 d6@3", D: "[c5,e5,g5,c6]@3 [bb4,d5,f5,bb5]",
  E: "~@9 [g4,bb4]@4 ~@3, ~@8 [f4,a4,c5,d5,e5]@5 ~@3", // Gm Fmaj7
})).s("gm_pad_metallic").gain(0.2)

// other · lead 2 sawtooth · "Ambient Sounds Track 3"
const lead_2_sawtooth = note("<~@34 A@6 ~@63>".pickRestart({
  A: "g5/6",
})).s("gm_lead_2_sawtooth").gain(0.25).pan(1)

// other · clavinet · "Ambient Sounds Track 3"
const clavinet = note("<~@40 [~ g2@5 ~ g2 ~ g2@7, b2 ~@2 b2!2 ~@3]!2 ~@61>").s("gm_clavinet").gain(0.4)

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

// drums · snare
const snare = s("sd").struct(`<
  A@4 B@6 A@2 B@6 C B D B@9 A@4 B@6 A@2 B@6 C B D B@8 E F@8 G B@8 E B@3 E B@3 E B@3 E B@3 E A@7 ~@2
>`.pickRestart({
  A: "~@4 x!2 ~@6 x!2 ~@2", B: "~ x ~ x", C: "~@4 x ~@7 x ~ x!2", D: "~@2 x ~@2 x!3", E: "~ x!7",
  F: "~@4 x ~@2 x ~@4 x ~@3", G: "~@4 x ~@2 x ~@8",
})).gain(0.2)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!60 [~ x ~ x ~ x ~ x]!8 [~ x ~ x ~@4] [x!8]!32 x ~>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@60 [x ~@3 x ~@2 x ~@4 x ~@3]!8 [x ~@3 x ~@2 x ~@8] ~@34>").gain(0.4)

// drums · china
const china = s("cr").struct("<~@12 x ~@90>").gain(0.4)

// drums · ride bell
const ride_bell = s("rd").struct("<~@69 [x!16]!25 ~@9>").gain(0.25)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@12 A@9 B@9 ~@12 A@9 B@9 ~@9 B@25 ~@9>".pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", B: "x!16",
})).gain(1.26)

stack(
  electric_guitar_clean, electric_guitar_clean_2, overdriven_guitar, overdriven_guitar_soft, overdriven_guitar_2, bass,
  distortion_guitar, pad_metallic, lead_2_sawtooth, clavinet, kick, snare, hihat, open_hat, china, ride_bell, cabasa
)

More by Garbage