Strudelify

When I Grow Up

Garbage

KeyB♭ majorTempo130 bpm
0:00/0:00
// When I Grow Up — Garbage
// 130 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · acoustic guitar nylon
const acoustic_guitar_nylon = note("<A@8 ~@109>".pickRestart({
  A: "[~@2 g4@2 a4 bb4@2 d5@3 g4@2 a4 bb4@2 g4@3 g4@2 a4 bb4@2 d5@5 ~@4]/4",
})).s("gm_acoustic_guitar_nylon").gain(0.22)

// other · synth strings 1
const synth_strings_1 = note(`<
  A@2 B@2 A@2 B@2 C D E F C D E F G H I@2 G H J@2 G H I@2 G H J ~@9 G H I@2 G H J ~@9 K L M N K L M N ~@8 F@2 D@2 F@2
  E@2 F@2 D@2 O@2 E@2 K L M N K L M P K L M N K L M P K L M N K L M P ~@5
>`.pickRestart({
  A: "[eb2,bb2]", B: "[g2,d3]", C: "[bb2,bb3]", D: "[g2,g3]", E: "[f2,f3]", F: "[eb2,eb3]", G: "[bb3,d4]", H: "[g3,d4]",
  I: "[eb3,eb4]", J: "[f3,c4]", K: "bb2", L: "g2", M: "f2", N: "eb2", O: "[ab2,ab3]", P: "ab2",
})).s("gm_synth_strings_1").gain(0.22)

// other · fretless bass
const fretless_bass = note("<~@8 A@8 ~@40 A@8 ~@24 A@24 ~@5>".pickRestart({
  A: "[~@2 bb4@2 c5 d5@2 f5@3 bb4@2 c5 d5@2 g5@3 bb4@2 c5 d5@2 f5@3 bb4 c5 ~ d5 c5 bb4]/4",
})).s("gm_lead_8_bass_lead").gain(0.29)

// bass · lead 8 bass lead
const bass = note(`<
  ~@8 A B C D A B C D E F G@2 E F H@2 E F G@2 E F H I J@2 B@2 J@2 C@2 E F G@2 E F H I J@2 B@2 J@2 C@2 A B C D A B C D
  ~@8 K@2 L@2 K@2 M@2 K@2 L@2 N@2 M@2 A B C D A B C O A B C D A B C O A B C D A B C O ~@5
>`.pickRestart({
  A: "bb1@4 bb2@3 bb1 bb1@2 bb1@2 bb2@2 bb1@2", B: "g1@4 g2@3 g1 g1@2 g1@2 g2@2 g1@2",
  C: "f1@4 f2@3 f1 f1@2 f1@2 f2@2 f1@2", D: "eb1@4 eb2@3 eb1 eb1@2 eb1@2 eb2@2 d2@2",
  E: "bb1 bb2 bb1 bb2 ~ bb2 bb1 bb2", F: "g1 g2 g1 g2 ~ g2 g1 g2", G: "eb1 eb2 eb1 eb2 ~ eb2 eb1 eb2",
  H: "f1 f2 f1 f2 ~ f2 f1 f2", I: "f1 ~@7", J: "eb1@4 eb2@3 eb1 eb1@2 eb1@2 eb2@2 eb1@2",
  K: "[eb1,eb2]!5 ~ [eb1,eb2]!5 ~ [eb1,eb2]!4", L: "[g1,g2]!5 ~ [g1,g2]!5 ~ [g1,g2]!4",
  M: "[f1,f2]!5 ~ [f1,f2]!5 ~ [f1,f2]!4", N: "[ab1,ab2]!5 ~ [ab1,ab2]!5 ~ [ab1,ab2]!4",
  O: "ab1@4 ab2@3 ab1 ab1@2 ab1@2 ab2@2 g2@2",
})).s("gm_lead_8_bass_lead").gain(0.22)

// other · lead 1 square
const lead_1_square = note("<~@8 A@8 ~@15 B C D E B C D E ~@8 B C D E B C D E ~ A@8 ~@24 A@28 F>".pickRestart({
  A: "bb4!5 ~ bb4!5 ~ bb4!4", B: "~@3 bb3", C: "eb4 d4", D: "bb3@2 bb3!2", E: "c4@4 c4@2 d4@9 ~", F: "bb3@4 bb4 ~@11",
})).s("gm_lead_1_square").gain(0.1)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@8 A B C D A B C D ~@16 E F E F E F E F ~@8 E F E F E F E F G H I J K L M N ~@16 O@8 G H I J K L M P G H I J K L M P
  G H I J K L M P ~@4 Q
>`.pickRestart({
  A: "~ [bb2,bb3] a3 bb3 ~ bb3 a3 bb3", B: "~ [g2,bb3] a3 bb3 ~ bb3 a3 bb3", C: "~ [f2,bb3] a3 bb3 ~ bb3 a3 bb3",
  D: "~ [eb2,bb3] a3 bb3 c4 bb3 a3 bb3", E: "[bb2,bb3]@2 [bb2,bb3] [a2,a3] [bb2,bb3]@2 [bb2,bb3] [a2,a3]",
  F: "[bb2,bb3]@2 [bb2,bb3] [a2,a3] [bb2,bb3] [c3,c4] [bb2,bb3] [a2,a3]", // Bb A Bb C Bb A
  G: "bb2 bb3 a3 bb3 ~ bb3 a3 bb3, bb1, ~ bb2@7", H: "g2 bb3 a3 bb3 ~ bb3 a3 bb3, g1, ~ g2@7",
  I: "f2 bb3 a3 bb3 ~ bb3 a3 bb3, f1, ~ f2@7", J: "eb2 bb3 a3 bb3 c4 bb3 a3 bb3, eb1, ~ eb2@7",
  K: "[bb2,bb3] ~ a3 bb3@2 ~ a3 bb3, bb1, ~ bb2@7, ~ bb3@2 ~@2 bb3@2 ~", // Bb
  L: "g2 bb3 a3 bb3 ~ bb3 a3 bb3, [g1,g3], ~ g2@7", M: "f2 bb3 a3 bb3 ~ bb3 a3 bb3, [f1,f3], ~ f2@7",
  N: "eb2 bb3 a3 bb3 c4 bb3 a3 bb3, [eb1,eb3], ~ eb2@7", O: "f4 bb4 f4 bb4 f4 bb4 f4 bb4",
  P: "~ [eb2,bb3] a3 bb3 c4 bb3 a3 bb3, [ab1,ab2,ab3]", Q: "[bb0,bb1] ~@3",
})).s("gm_overdriven_guitar").gain(0.4)

// other · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~@56 A B C D A B C D ~@24 A B C D A B C E A B C D A B C E A B C D A B C E ~@4 F
>`.pickRestart({
  A: "[bb2,bb3,bb4]", B: "[g2,g3,g4]", C: "[f2,f3,f4]", D: "[eb2,eb3,eb4]", E: "[ab2,ab3,ab4]", F: "[bb0,bb1] ~@3",
})).s("gm_lead_8_bass_lead").gain(0.41)

// other · timpani · Eb
const timpani = note("<~@67 [~@7 [eb2,eb3]] [[eb2,eb3] ~@7] ~@48>").s("gm_timpani").gain(0.41)

// other · tinkle bell
const tinkle_bell = note("<~@80 [bb4@2 eb5@2 bb4 eb5 bb4 eb5]!8 ~@29>").s("gm_tinkle_bell").gain(0.16)

// drums · kick
const kick = s("bd").struct("<A@8 B@8 C@15 D B@8 C@7 D B@16 ~@3 E A ~@3 C@16 B@24 C@4 ~>".pickRestart({
  A: "x", B: "x ~@3 x!2 ~@2", C: "x ~@6 x!2 ~ x ~@5", D: "x ~@2 x ~@2 x!5 ~ x ~@3", E: "~@7 x",
})).gain(0.64)

// drums · clap
const clap = s("cp").struct("<A@8 ~@8 B@15 C ~@8 B@7 C ~@19 D E ~@3 B@16 ~@24 B@4 ~>".pickRestart({
  A: "~ x", B: "~ x ~ x", C: "~@2 x ~ x!2 ~@2 x ~ x!3 ~@3", D: "~@7 x", E: "x",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@31
  [~ x ~@2 x ~@2 x ~@2 x ~@5]
  ~@15
  [~ x ~@2 x ~@2 x ~@2 x ~@5]
  ~@19
  [~@7 x]
  x
  ~@48
>`).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@23 A ~@15 A ~@7 A ~@31 A ~@7 A ~@7 A ~@5>".pickRestart({
  A: "x!5 ~ x!5 ~ x!4",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<A@8 B@8 ~@16 B@8 ~@8 B@16 C@8 D C@7 D C@7 B@24 C@4 ~>".pickRestart({
  A: "x!4", B: "~ x ~ x", C: "~ x ~ x ~ x ~ x", D: "x!2 ~ x ~ x ~ x",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<A@8 B@7 C D@15 E B@7 C D@7 E B@7 C B@7 C ~@24 B@7 C B@7 C B@7 C ~@5>".pickRestart({
  A: "x!4", B: "~ x ~ x", C: "x!5 ~ x!5 ~ x!4", D: "x!8", E: "x!5 ~ x!2",
})).gain(0.64)

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

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~ A ~ A ~ A ~ A ~@64 B@16 ~@29>".pickRestart({
  A: "x!2", B: "~ x ~ x ~ x ~ x",
})).gain(7.52)

// drums · bongos
const bongos = s("bongo:4").struct("<~@31 [x ~@2 x ~@2 x ~@2 x ~@2 x ~@3] ~@15 [x ~@2 x ~@2 x ~@2 x ~@2 x ~@3] ~@69>")
  .gain(1.68)

// drums · congas
const congas = s("conga:13").struct("<~@16 A@16 ~@8 A@8 ~@24 B ~@7 B ~@36>".pickRestart({
  A: "~ x ~ x", B: "x",
})).gain(2.05)

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

// drums · shaker
const shaker = s("sh").struct("<~@8 A@8 B@15 C A@8 B@7 C A@16 D@8 A@40 D@4 ~>".pickRestart({
  A: "x!16", B: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", C: "~ x!4 ~ x!2 ~@2 x!2 ~@2 x!2", D: "x ~ x ~@4 x!2 ~ x ~@5",
})).gain(0.64)

// drums · claves
const claves = s("clave:2").struct("<~@31 [~@2 x ~@2 x ~@2 x ~@2 x ~@4] ~@15 [~@2 x ~@2 x ~@2 x ~@2 x ~@4] ~@69>")
  .gain(3.14)

stack(
  acoustic_guitar_nylon, synth_strings_1, fretless_bass, bass, lead_1_square, overdriven_guitar, lead_8_bass_lead,
  timpani, tinkle_bell, kick, clap, low_tom, mid_tom, open_hat, ride, china, vibraslap, bongos, congas, cabasa, shaker,
  claves
)

More by Garbage