Strudelify

Cherry Lips

Garbage

KeyE majorTempo120 bpm
0:00/0:00
// Cherry Lips — Garbage
// 120 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 1 lead 8 bass lead (copy of ch 7 trombone)
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · acoustic bass
const bass = note("<~@68 A B C D A B C D A B C D A B C D A B C D E F G H>".pickRestart({
  A: "c#3 ~ c#3 ~ c#3 ~ c#3@2 f#2 ~ f#2 ~ f#2 ~ f#2@2", B: "b2 ~ b2 ~ b2 ~ b2@2 e2 ~ e2 ~ e2 ~ e2@2",
  C: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~", D: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~",
  E: "[c#2,c#3] ~ [c#2,c#3] ~ [c#2,f#3] ~ c#2@2 [f#1,e3] ~ [f#1,e3] ~ [f#1,c#3] ~ f#1@2, ~@6 f3 ~@7 a#2 ~", // C# F#5 F#7 F#5
  F: "[b1,b2] ~ [b1,b2] ~ [b1,e3] ~ b1@2 [e1,d3] ~ [e1,d3] ~ [e1,b2] ~ e1@2, ~@6 d#3 ~@7 g#2 ~", // B E5 E7 E5
  G: "[a1,a2] ~ [a1,a2] ~ [a1,c#3] ~ [a1,e3] ~ [a1,f#3] ~ [a1,e3] ~ [a1,c#3] ~ [a1,a2] ~", // A A5 D A5 A
  H: "[b1,b2] ~ [b1,b2] ~ [b1,f#3] ~ [b1,f#3] ~ [c2,e3] ~ [c2,e3] ~ [c2,c3] ~ [c2,c3] ~", // B B5 C
})).s("gm_acoustic_bass").gain(0.48).pan(0.3)

// bass · acoustic bass
const bass_2 = note(`<
  ~@4 A B C D A B C D A B C D E F G H E F G H ~@4 A B C D A B C D A B C D E F G H E F G H I J K L I J K L ~@4 A B C D E
  F G H E F G H E F G H E F G H E F G H E F G H ~@4
>`.pickRestart({
  A: "c#3 ~ c#3 ~ c#3 ~ c#3@2 f#2 ~ f#2 ~ f#2 ~ f#2@2", B: "b2 ~ b2 ~ b2 ~ b2@2 e2 ~ e2 ~ e2 ~ e2@2",
  C: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~", D: "b2 ~ b2 ~ b2 ~ b2 ~ c3 ~ c3 ~ c3 ~ c3 ~", E: "c#3!3 a2 f#2!3 a2",
  F: "b2!3 d#3 e3 e2!3", G: "a2!3 e3 g3 e3 g3 a3", H: "b2!3 a3 b3 a3 e3 c#3", I: "c#3!7 e2", J: "f#2!8", K: "b2!4 a2!4",
  L: "c#2!4 c#3!4",
})).s("gm_acoustic_bass").gain(0.64).pan(0.3)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@16 A B C D A B C D ~@16 A B C D A B C D E F G H E F G H ~@8 A B C D A B C D A B C D A B C D A B C D A B C D ~@4
>`.pickRestart({
  A: "[g#2,c#3]!4 [c#2,f#2]!4", B: "[f#2,b2]!4 [b1,e2]!4", C: "[e2,a2]!8", D: "[f#2,b2]!8", E: "[c#2,c#3]!7 [e1,e2]",
  F: "[f#1,f#2]!8", G: "[b1,b2]!4 [a1,a2]!4", H: "c#2!4 [c#2,c#3]!4",
})).s("gm_overdriven_guitar").gain(0.48).pan(0.8)

// bass · electric bass finger
const bass_3 = note(`<
  ~@16 A B C D A B C D ~@16 A B C D A B C D E F G H E F G H ~@8 A B C D A B C D A B C D A B C D A B C D A B C D ~@4
>`.pickRestart({
  A: "c#2!3 a1 f#1!3 a1", B: "b1!3 d#2 e2 e1!3", C: "a1!3 e2 g2 e2 g2 a2", D: "b1!3 a2 b2 a2 e2 c#2", E: "c#2!7 e1",
  F: "f#1!8", G: "b1!4 a1!4", H: "c#1!4 c#2!4",
})).s("gm_electric_bass_finger").gain(0.64).pan(0.3)

// chords · trombone
const trombone = note(`<
  A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D ~@16 A B C D A B C D E F G H ~@20 A B C D
>`.pickRestart({
  A: "[c#2,c#3] ~ [c#2,c#3] ~ [c#2,f#3] ~ c#2@2 [f#1,e3] ~ [f#1,e3] ~ [f#1,c#3] ~ f#1@2, ~@6 f3 ~@7 a#2 ~", // C# F#5 F#7 F#5
  B: "[b1,b2] ~ [b1,b2] ~ [b1,e3] ~ b1@2 [e1,d3] ~ [e1,d3] ~ [e1,b2] ~ e1@2, ~@6 d#3 ~@7 g#2 ~", // B E5 E7 E5
  C: "[a1,a2] ~ [a1,a2] ~ [a1,c#3] ~ [a1,e3] ~ [a1,f#3] ~ [a1,e3] ~ [a1,c#3] ~ [a1,a2] ~", // A A5 D A5 A
  D: "[b1,b2] ~ [b1,b2] ~ [b1,f#3] ~ [b1,f#3] ~ [c2,e3] ~ [c2,e3] ~ [c2,c3] ~ [c2,c3] ~", // B B5 C
  E: "c#3 ~ c#3 ~ c#3 ~ c#3@2 f#2 ~ f#2 ~ f#2 ~ f#2@2", F: "b2 ~ b2 ~ b2 ~ b2@2 e2 ~ e2 ~ e2 ~ e2@2",
  G: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~", H: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~",
})).s("gm_trombone").gain(0.37).pan(0.8)

// bass · acoustic bass
const bass_4 = note("<~@68 A B C D A B C D A B C D A B C D A B C D ~@4>".pickRestart({
  A: "c#3 ~ c#3 ~ c#3 ~ c#3@2 f#2 ~ f#2 ~ f#2 ~ f#2@2", B: "b2 ~ b2 ~ b2 ~ b2@2 e2 ~ e2 ~ e2 ~ e2@2",
  C: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~", D: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~",
})).s("gm_acoustic_bass").gain(0.48).pan(0.3)

// other · tubular bells
const tubular_bells = note("<~@48 A B C D A B C D ~@36>".pickRestart({
  A: "f4 f#4 g#4 c#4", B: "~ a#4@2 g#4 f#4@2 ~@2", C: "f#4 f4 d#4 c#4", D: "~ e4@2 f#4 c#4@2 ~@2",
})).s("gm_tubular_bells").gain(0.64)

// other · electric guitar jazz
const electric_guitar_jazz = note("<~@12 A ~@27 B ~@2 C B ~@2 C ~@44>".pickRestart({
  A: "c#4", B: "f4@3 ~@5", C: "g#4 f#4 ~@6",
})).s("gm_electric_guitar_jazz").gain(0.72).pan(0.8)

stack(bass, bass_2, overdriven_guitar, bass_3, trombone, bass_4, tubular_bells, electric_guitar_jazz)

More by Garbage