Strudelify

The World Is Not Enough

Garbage

KeyF minorTempo86 bpm
0:00/0:00
// The World Is Not Enough — Garbage
// 86 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 9 "Bass 2" electric bass finger (copy of ch 6 "Bass 1" fretless bass)
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/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 · lead 1 square · "Thing"
const bass = note("<A@2 ~@15 B ~@23 B ~@42>".pickRestart({
  A: "[~@3 f2@5]/2", B: "f2",
})).s("gm_lead_1_square").gain(0.4)

// other · pad poly · "Thing"
const pad_poly = note("<A@2 ~@15 B ~@23 B ~@42>".pickRestart({
  A: "[~@3 c5@5]/2", B: "c5",
})).s("gm_pad_poly").gain(0.17)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@2 A B C D E F G H ~@9 I J K L@2 M N A B C D E F G H ~@8 O P Q@2 R@2 S ~ A B C D E F G H ~@8 A B C D E F G D T U V
  W@5 X ~
>`.pickRestart({
  A: "g5@3 f5 c5@3 ~", B: "~ f4 g4 ab4 ab5 g5 f5 c5", C: "ab5@6 g5@2 db5@6 c5 bb4", D: "c5@4 ~ c6 db6 c6",
  E: "[g5,g6]@6 [f5,f6]@2 [c5,c6]@7 ~", F: "~ [f4,f5] [g4,g5] [ab4,ab5] [ab5,ab6] [g5,g6] [f5,f6] [c5,c6]",
  G: "[ab5,ab6]@6 [g5,g6]@2 [db5,db6]@6 [c5,c6] [bb4,bb5]", H: "[c5,c6] ~", I: "~ c5 db5 d5 eb5 d5 db5 c5",
  J: "bb4 bb5", K: "c6@3 ~@5", L: "[bb4@7 c5@5 db5@4]/2", M: "c5!8", N: "c5 ~@7", O: "bb2@2 f3 bb2, [db4,bb4]",
  P: "[f2,c4,c5]", Q: "[~@4 db6@3 ~ c3@8, bb2 ~, ~@7 c6@7 ~@2]/2", R: "[bb4@7 eb5@7 db5@2]/2", S: "c5",
  T: "~@2 [f4,f5] [g4,g5] [ab4,ab5] [g4,g5] [f4,f5] [g4,g5] [ab4,ab5] [g4,g5] [f4,f5] [g4,g5] [ab4,ab5] [g4,g5] [f4,f5] [g4,g5]", // F G Ab G F G Ab G …
  U: "[f4,f5] [g4,g5] [f4,f5] [g4,g5] [ab4,ab5] [g4,g5] [f4,f5] [g4,g5] [ab4,ab5] [g4,g5] [f4,f5] [g4,g5] [ab4,ab5] [g4,g5] [f4,f5] [g4,g5]", // F G F G Ab G F G …
  V: "[f4,f5] [g4,g5] [f4,f5,f6] [g4,g5,g6] [ab4,ab5,ab6] [g4,g5,g6] [f4,f5,f6] [g4,g5,g6] [ab4,ab5,ab6] [g4,g5,g6] [f4,f5,f6] [g4,g5,g6] [ab4,ab5,ab6] [g4,g5,g6] [f4,f5,f6] [g4,g5,g6]", // F G F G Ab G F G …
  W: "[f4,f5,f6] [g4,g5,g6] [f4,f5,f6] [g4,g5,g6] [ab4,ab5,ab6] [g4,g5,g6] [f4,f5,f6] [g4,g5,g6] [ab4,ab5,ab6] [g4,g5,g6] [f4,f5,f6] [g4,g5,g6] [ab4,ab5,ab6] [g4,g5,g6] [f4,f5,f6] [g4,g5,g6]", // F G F G Ab G F G …
  X: "[f4,f5] ~", // F
})).s("gm_string_ensemble_1").gain(0.53)

// other · orchestral harp · "Harp"
const orchestral_harp = note(`<
  ~ A B ~@2 A C B ~ D ~@15 A B ~@2 A C B ~@11 D ~ D ~@3 A B ~@2 A C B ~@9 A B ~@2 E@2 ~@2 A B A B A B A B A B ~
>`.pickRestart({
  A: "~@13 [f2,ab2,c3] [f3,ab3,c4,f4] [ab4,c5,f5,ab5]", B: "c6 ~@15",
  C: "c6 ~@12 [f2,ab2,c3] [f3,ab3,c4,f4] [ab4,c5,f5,ab5]", // Fm
  D: "~@8 [g6,ab6] [eb6,f6] [c6,db6] [ab5,bb5] [eb5,f5] c5 ~@2", // Abmaj7 Ebsus2 Dbmaj7 Absus2 Ebsus2
  E: "~@13 [f2,ab2,c3,f3] [ab3,c4,f4,ab4] [c5,f5,ab5,c6]", // Fm
})).s("gm_orchestral_harp").gain(0.39).pan(0.3)

// other · orchestral harp · "Harp" · soft notes · F5 Fm F5 Fm F5 Fm
const orchestral_harp_soft = note(`<
  ~@9
  [~@13 ab4 [c4,f4] [f3,ab3]]
  ~@33
  [~@13 ab4 [c4,f4] [f3,ab3]]
  ~
  [~@13 ab4 [c4,f4] [f3,ab3]]
  ~@38
>`).s("gm_orchestral_harp").gain(0.2).pan(0.3)

// other · electric guitar clean · "Bondy guitar"
const electric_guitar_clean = note(`<
  ~@2 A B C D A B E F ~@14 G H A B C D A B E F ~@14 G H A B C D A B E F ~@8 A B C D A B E ~ I J I J I J I K L@2
>`.pickRestart({
  A: "eb3@5 f2 g2 f3", B: "eb3@9 ~@7", C: "bb2 g3 ab3@4 ~@2", D: "c3 g3 ab3 c4@5", E: "bb2 g3 ab3@6", F: "c3",
  G: "~ c3 g3 c3 ab3@2 g3@2", H: "c3@7 ~@9", I: "[c3,c4]", J: "[eb3,eb4]@2 [d3,d4] [db3,db4]",
  K: "[eb3,eb4]@8 [d3,d4]@4 [db3,db4]@2 [db3,db4]!2", L: "[f1,c2,f2,c3,f3,c4]/2",
})).s("gm_electric_guitar_clean").gain(0.8)

// bass · fretless bass · "Bass 1"
const bass_2 = note(`<
  ~@2 A B C D A B C E F G F G F H I J F G F G F H K L A B C D A B C E F G F G F H I J F G F G F H K L A B C D A B C D M
  N M O M O P Q A B C D A B C Q A R A R A R A R ~@2
>`.pickRestart({
  A: "f1!2 f1@4 f1!2 f1@4 f1@2 f1@2", B: "f1!2 f1@4 f1!2 g1@2 f1@2 g1@2 ab1@2",
  C: "bb1!2 bb1@4 bb1!2 bb1@4 bb1@2 bb1@2", D: "c2!2 c2@4 c2!2 db2@2 c2@2 bb1@2 c2@2", E: "c2", F: "bb1@4 ~ f2!2 bb1",
  G: "f1@4 ~ c2!2 f1", H: "gb1@4 ~ db2!2 gb1", I: "c2@4 ~ g2!2 c2", J: "f1", K: "c2@3 c2 ab2@2 g2@2",
  L: "c2@4 ~@8 [b1,c2] [a1,bb1] [g1,ab1] gb1", M: "bb1@4 ~ bb1!3", N: "c2@9 ~ c2!2 g2@2 c2@2", O: "c2@8 g2!4 g2@2 c2@2",
  P: "bb1@6 bb1!2 f2!2 f2@2 f2@2 bb1@2", Q: "c2@8 g2!4 [b1,c2] [a1,bb1] [g1,ab1] gb1, ~@6 g2 c2",
  R: "f1!2 f1@4 f1!2 bb1@2 ab1@2 bb1@2 c2@2",
})).s("gm_fretless_bass").gain(0.49).pan(0.7)

// chords · muted trumpet · "Trumpets"
const muted_trumpet = note(`<
  ~@6 A B C ~@17 A B C ~ A B C ~@17 A B C ~ A B C ~@9 A B C ~ A B C ~ A B C ~ A B C D E ~
>`.pickRestart({
  A: "~@2 [c5,eb5] ~ [c5,eb5] ~@5 [c5,eb5]@3 ~@3", B: "~@2 [c5,d5]!3 ~@5 [c5,d5]@3 ~@3",
  C: "~@10 f5 e5 eb5 d5 ~@2, ~@5 db5@2 ~", D: "~@13 [f4,f5]!3", E: "[f4,f5] ~@15",
})).s("gm_muted_trumpet").gain(0.39).pan(0.7)

// chords · pad bowed · "Thing"
const pad_bowed = note(`<
  ~@10 A B C B A D E ~ A B C B A D E ~@9 A B C B A D E ~ A B C B A D E ~@9 A B C B A B C B ~@18
>`.pickRestart({
  A: "[db4,bb4]", B: "[c4,ab4]", C: "[bb3,g4]", D: "[bb3,gb4]", E: "[c4,g4]",
})).s("gm_pad_bowed").gain(0.08).pan(1)

// other · pad halo · "Thing"
const pad_halo = note(`<
  ~@10 A B C B A D C ~ A B C B A D C ~@9 A B C B A D C ~ A B C B A D C ~@9 A B C B A B C B ~@18
>`.pickRestart({
  A: "bb4", B: "ab4", C: "g4", D: "gb4",
})).s("gm_pad_halo").gain(0.08).pan(0)

// drums · kick
const kick = s("bd").struct("<~@2 A@7 B ~@16 A@7 B ~@16 A@31 C B ~>".pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", B: "x", C: "x ~ x!3 ~ x ~ x ~ x ~ x!4",
})).gain(0.54)

// drums · low tom
const low_tom = s("lt").struct("<~@48 [~@14 x!2] x ~@31 [~@15 x] x ~>").gain(0.48)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@2 A@7 B A@15 B A@7 B A@15 B A@32 B ~>".pickRestart({
  A: "x!8", B: "x",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<~@48 [~@14 x!2] x ~@31 [~@15 x] x ~>").gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@3 A ~@19 A ~@3 A ~@19 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "x",
})).gain(0.54)

// drums · ride
const ride = s("rd").struct("<~@2 A@7 B A@15 B A@7 B A@15 B A@32 B ~>".pickRestart({
  A: "x!8", B: "x",
})).gain(0.38)

stack(
  bass, pad_poly, string_ensemble_1, orchestral_harp, orchestral_harp_soft, electric_guitar_clean, bass_2,
  muted_trumpet, pad_bowed, pad_halo, kick, low_tom, pedal_hat, high_tom, crash, ride
)

More by Garbage