Strudelify

Vow

Garbage

KeyA minorTempo126 bpm
0:00/0:00
// Vow — Garbage
// 126 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 29.
setcpm(126/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 · overdriven guitar
const overdriven_guitar = note(`<
  A B C@2 A B C@2 A B C@2 A B C@2 ~@68 D@3 E ~@28 A B C@2 F B C@2 G H I@2 G H I@2 ~
>`.pickRestart({
  A: "[a2,e3,a3,b3,e4] [c3,e3,g3,b3,e4] ~ [a2,e3,a3,b3,e4] [c3,e3,g3,b3,e4] ~ [c3,e3,g3,b3,e4] ~", // Asus2 Cmaj7 Asus2 Cmaj7
  B: "[c3,e3,g3,b3,e4] [f2,f3,a3,c4,e4] ~ [c3,e3,g3,b3,e4] [f2,f3,a3,c4,e4] ~ [f2,f3,a3,c4,e4] ~", // Cmaj7 Fmaj7 Cmaj7 Fmaj7
  C: "[f2,f3,a3,c4,e4]!2 ~ [f2,f3,a3,c4,e4]!2 ~ [f2,f3,a3,c4,e4] ~", D: "a3/3", E: "a3@5 b3 a3 b3",
  F: "[a2,e3,a3,b3,e4] [c3,e3,g3,b3,e4,g#4] ~ [a2,e3,a3,b3,e4] [c3,e3,g3,b3,e4] ~ [c3,e3,g3,b3,e4] ~", // Asus2 Cmaj7 Asus2 Cmaj7
  G: "[a2,e3,a3,b3] [c3,e3,g3,b3] ~ [a2,e3,a3,b3] [c3,e3,g3,b3] ~ [c3,e3,g3,b3] ~", // Asus2 Cmaj7 Asus2 Cmaj7
  H: "[c3,e3,g3,b3] [f2,f3,a3,c4] ~ [c3,e3,g3,b3] [f2,f3,a3,c4] ~ [f2,f3,a3,c4] ~", // Cmaj7 F Cmaj7 F
  I: "[f2,f3,a3,c4]!2 ~ [f2,f3,a3,c4]!2 ~ [f2,f3,a3,c4] ~", // F
})).s("gm_overdriven_guitar").gain(0.09)

// other · overdriven guitar
const overdriven_guitar_2 = note("<~@19 A@8 B@8 ~@24 C@8 B@8 ~@16 A@8 D@8 B@8 ~@18>".pickRestart({
  A: "[~@7 a4@2 a4 b4 a4@4 a4@2 a4 b4 a4 b4 a4@2 a4@2 a4 b4 a4@4 g4@2 g4 a4 g4 a4 g4@2 g4@2 g4 a4 g4@4 g4@2 g4 a4 g4 a4 g4@2 c5@2 e5 c5@2 e5 c5@2 c5]/8",
  B: "[~ e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 c5@9]/8",
  C: "[~@7 a4@2 ~ b4 a4@4 a4@2 a4 b4 a4 b4 a4@2 a4@2 a4 b4 a4@4 g4@2 g4 a4 g4 a4 g4@2 g4@2 g4 a4 g4@4 g4@2 g4 a4 g4 a4 g4@2 c5@2 e5 c5@2 e5 c5@2 c5, ~@9 a4 ~@54, ~@19 g#3@4 ~@105]/8",
  D: "[~ e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 c5@2 e5 c5@2 e5 c5 e5 ~@2 e5 ~@2 e5 c5@2 c5, ~@55 c5@3 c5@3 ~@3]/8",
})).s("gm_overdriven_guitar").gain(0.26)

// chords · overdriven guitar
const overdriven_guitar_3 = note(`<
  ~@12 A B C@2 A B D@8 E@8 F@2 A B C@2 A B G@2 A B C@2 A B G@2 A B C@2 A B H@8 E@8 F@2 ~@8 I J K J I J K L@8 M@7 E@8 F@2
  ~@17
>`.pickRestart({
  A: "[a2,e3,a3,b3,e4]", B: "[c3,e3,g3,b3,e4]", C: "[f2,f3,a3,c4,e4]/2",
  D: "[[f2,f3,a3,c4,e4]@14 [f2,f3,a3,c4,e4] [d3,a3,d4]@6 [d3,a3,d4]@2 [a#2,f3,a#3]@8 [a2,e3,a3]@6 [a2,e3,a3]@2 [g2,a#2,e3]@8 [d3,a3,d4]@6 [d3,a3,d4]@2 [a#2,f3,a#3]@8 [a2,c3,f3]]/8", // Fmaj7 D5 A#5 A5 Edim D5 A#5 F
  E: "[~@2 [a2,c3,f3]@2 [a2,c3,f3] [a2,c3,f3]@2 [c3,g3,c4]@3 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [d3,a3,d4]@3 [d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@2 [g2,d3,g3]@3 [g2,d3,g3]@2 [g2,d3,g3] [g2,d3,g3]@2 [f2,c3,f3]@3 [f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@2 [c3,g3,c4]@3 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [d3,a3,d4]@3 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4] [g2,d3,g3]@3 [g2,d3,g3]@2 [g2,d3,g3] [g2,d3,g3]@3]/8", // F C5 D5 G5 F5 C5 D5 G5
  F: "[f2,c3,f3]/2", G: "[[f2,f3,a3,c4,e4]@14 [f2,f3,a3,c4,e4] [d3,e3,d4]]/2",
  H: "[[f2,f3,a3,c4,e4]@14 [f2,f3,a3,c4,e4] [d3,a3,d4]@6 [d3,a3,d4]@2 [a#2,f3,a#3]@8 [a2,e3,a3]@6 [a2,e3,a3]@2 [g2,a#2,e3]@8 [d3,a3,d4]@6 [d3,a3,d4]@2 [a#2,f3,a#3]@8 [a2,c3,f3], ~@15 e3 ~@48]/8", // Fmaj7 D5 A#5 A5 Edim D5 A#5 F
  I: "[f#2,c#3,f#3]", J: "a3", K: "b3",
  L: "[a3@6 [f2,f3,a3,c4,e4] [d3,a3,d4]@6 [d3,a3,d4]@2 [a#2,f3,a#3]@8 [a2,e3,a3]@6 [a2,e3,a3]@2 [g2,a#2,e3]@8 [d3,a3,d4]@6 [d3,a3,d4]@2 [a#2,f3,a#3]@8 [a2,c3,f3]@3 [a2,c3,f3]@2 [a2,c3,f3] [a2,c3,f3]@2 [c3,g3,c4]]/8", // Fmaj7 D5 A#5 A5 Edim D5 A#5 F …
  M: "[~@2 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [d3,a3,d4]@3 [d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@2 [g2,d3,g3]@3 [g2,d3,g3]@2 [g2,d3,g3] [g2,d3,g3]@2 [f2,c3,f3]@3 [f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@2 [c3,g3,c4]@3 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [d3,a3,d4]@3 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4] [g2,d3,g3]@3 [g2,d3,g3]@2 [g2,d3,g3] ~@2 [a2,c3], ~@53 [g2,d3,g3]@3, ~@110 f3 ~]/7", // C5 D5 G5 F5 C5 D5 G5 Am …
})).s("gm_overdriven_guitar").gain(0.32)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@36 A B A B A B A B C@2 A B C@2 A B C@2 A B C@2 A B ~@46 A B A B A B A B C@2 ~@17
>`.pickRestart({
  A: "a4@2 e4@2 g4@2 e4 b4", B: "~ c5 b4@2 e4@2 g4@2", C: "a4/2",
})).s("gm_distortion_guitar").gain(0.4)

// other · piano
const piano = note("<~@76 A@2 B C A@2 B C A@2 B C A@2 B C ~@28 D E F@2 D E F@2 D E F@2 ~>".pickRestart({
  A: "a4@2 g#4 a4@2 g#4@3", B: "d5@3 d5@3 d5@2", C: "b4", D: "g4 e4 f#4 g4@5", E: "f#4 c4 e4 f#4@5",
  F: "[g4 e4 f#4 g4 g4@12]/2",
})).s("gm_piano").gain(0.26)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@76 A B@3 A B@3 A B@3 A B@3 ~@41>".pickRestart({
  A: "[f#2,c#3,f#3,a3]", B: "f#3",
})).s("gm_acoustic_guitar_nylon").gain(0.26)

stack(overdriven_guitar, overdriven_guitar_2, overdriven_guitar_3, distortion_guitar, piano, acoustic_guitar_nylon)

More by Garbage