Strudelify
Spice Up Your Life cover art

1997 · Spiceworld

Spice Up Your Life

Spice Girls

KeyC majorTempo123 bpm
0:00/0:00
// Spice Up Your Life — Spice Girls
// 123 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// 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(123/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 · fretless bass · "FRETLESSB"
const bass = note(`<
  ~@4 A B A C A B A C A B A B A C A B A C A B A C A B A B A C A B A C A B A C A B A C A B A C A B A C ~@11 A B A C A B A
  C A B A C A B A C A B D ~@2
>`.pickRestart({
  A: "g#1@3 f1@3 c1@3 g#1@3 f1@2 c1@2", B: "g1@3 e1@3 c1@3 g1@3 e1@2 c1@2", C: "g1@3 e1@3 c1@2 a#0@3 c1@3 e1@2",
  D: "g#1@3 ~@13",
})).s("gm_fretless_bass").gain(0.46)

// chords · epiano1 · "ELECPIANO"
const epiano1 = note(`<
  ~@8 A B C D E F G H I J I K ~@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 L ~@10 A B C D A B C D A B C D A B C D
  L ~@4
>`.pickRestart({
  A: "[c4,f4,g#4]@5 ~ [c4,f4,g#4]@3 [c4,f4,g#4]@5 [c4,g#4] ~, ~@7 f4", // Fm
  B: "[c4,e4,g4]@5 ~ [c4,e4,g4]@3 [c4,e4,g4]@5 [c4,g4] ~, ~@7 e4", // C C5
  C: "[c4,f4,g#4]@5 ~ [c4,f4,g#4]@3 [c4,f4,g#4]@4 ~ [c4,g#4] ~, ~@7 f4", D: "[c4,e4,g4]@6 [c4,e4,g4]@9 ~",
  E: "[c4,f4,g#4]@5 ~ [c4,f4,g#4]@2 ~ [c4,f4,g#4]@4 ~ [c4,f4,g#4] ~", // Fm
  F: "[c4,e4,g4]@5 ~ [c4,e4,g4]@3 [c4,e4,g4]@4 ~ [c4,g4] ~, ~@7 e4", // C C5
  G: "[c4,f4,g#4]@5 ~ [c4,f4,g#4]@3 [c4,f4,g#4]@4 ~ [c4,f4,g#4]@2", H: "[c4,e4,g4]@3 [c4,e4,g4]@5",
  I: "g#1@3 f1@3 c1@3 g#1@3 f1@2 c1@2", J: "g1@3 e1@3 c1@3 g1@3 e1@2 c1@2", K: "g1@3 e1@3 c1@2 a#0@3 c1@3 e1@2",
  L: "[c4,f4,g#4]@5 ~@11", // Fm
})).s("gm_epiano1").gain(0.26)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@8 A B C ~ A B D ~ E F G F ~@8 A B C ~ A B C ~@9 A B C ~ A B C ~ A B C ~ A B C ~@4 A B C ~ A B C ~ A B C ~ A B C ~@6
>`.pickRestart({
  A: "~@6 c5!5 c#5 ~ c5@3", B: "~@6 a#4!5 c5 ~ a#4@3", C: "~@6 c5 ~@3 c5 ~@5", D: "~@3 c5 ~ c5 ~@2",
  E: "c4@3 c6@2 ~ c6@3 c#6@3 c6@2 a#5@2", F: "c6@2 ~ g5@3 e5@10", G: "~@3 c6@2 ~ c6@3 c#6@3 c6@2 a#5@2",
})).s("gm_lead_2_sawtooth").gain(0.41)

// chords · acoustic guitar steel · "STEELSTR"
const acoustic_guitar_steel = note(`<
  ~@8 A B C D A B C D A B E F G H E F G H E F A B C D A B C D G H E F G H E F A B C D A B C D ~@4 G H E F@4 A B C D A B
  C D A B C D A B C D ~@5
>`.pickRestart({
  A: "g#5@2 [c6,f6,g#6]@2 [c5,g#5]@2 [c6,f6,g#6,c7]@4 [c6,f6,g#6] c7 ~@2 [c6,f6,g#6,c7] ~, c5 ~@3, ~@2 c7 ~@13", // Fm
  B: "[e5,g5]@2 [c6,e6,g6,a#6] ~@3 [c6,e6,g6,a#6] ~ [e5,g5]@2 [c6,e6,g6,a#6] ~ [e5,g5]@2 [c6,e6,g6,a#6] ~", // Em C7 Em C7 Em C7
  C: "~@2 [c6,f6,g#6,c7]@3 ~ [c6,f6,g#6,c7] ~ [f5,g#5]@2 [c6,f6,g#6] ~ [f5,g#5]@2 [c6,f6,g#6] ~, [f5,g#5]@3 ~@5", // Fm
  D: "~@2 [c6,e6,g6,a#6]@3 ~ [c6,e6,g6,a#6] ~ [e5,g5]@2 [c6,e6,g6,a#6] ~ [e5,g5]@2 [c6,e6,g6,a#6] ~, [e5,g5]@3 ~@5", // C7 Em C7 Em C7 Em
  E: "~@2 [c4,f4,g#4,c5]@3 ~ [c4,f4,g#4,c5] ~ [f3,g#3]@2 [c4,f4,g#4] ~ [f3,g#3]@2 [c4,f4,g#4] ~, [f3,g#3]@3 ~@5", // Fm
  F: "~@2 [c4,e4,g4,a#4]@3 ~ [c4,e4,g4,a#4] ~ [e3,g3]@2 [c4,e4,g4,a#4] ~ [e3,g3]@2 [c4,e4,g4,a#4] ~, [e3,g3]@3 ~@5", // C7 Em C7 Em C7 Em
  G: "[c3,g#3]@2 [c4,f4,g#4,c5]@2 [c3,g#3]@2 [c4,f4,g#4,c5]@4 [c4,f4,g#4] c5 ~@2 [c4,f4,g#4,c5] ~", // Fm
  H: "[e3,g3]@2 [c4,e4,g4,a#4] ~@3 [c4,e4,g4,a#4] ~ [e3,g3]@2 [c4,e4,g4,a#4] ~ [e3,g3]@2 [c4,e4,g4,a#4] ~", // Em C7 Em C7 Em C7
})).s("gm_acoustic_guitar_steel").gain(0.31)

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

// drums · rim
const rim = s("rim").struct("<~@52 [~@5 x ~ x ~@3 x ~@3 x]!11 ~@21>").gain(0.52)

// drums · snare
const snare = s("sd").struct(`<
  A@7 ~ B@3 C B@4 A@4 ~@8 B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@2 D@2 B@2 D@5 B@3 C B@3 C B@3 C B@3 C ~@5
>`.pickRestart({
  A: "x!16", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "~@2 x ~@3 x!2",
})).gain(0.46)

// drums · low tom
const low_tom = s("lt").struct("<~@52 [x ~@3 x ~@2 x ~ x ~@4 x ~]!11 ~@16 [~@4 x!4]!4 ~>").gain(0.52)

// drums · hihat
const hihat = s("hh").struct("<A@7 ~ B@8 A@4 ~@8 B@24 A@11 B@16 ~@5>".pickRestart({
  A: "x!7 ~", B: "x!6 ~ x!9",
})).gain(0.46)

// drums · mid tom
const mid_tom = s("mt").struct("<~@52 [x!2]!11 ~@16 [x ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x]!4 ~>").gain(0.46)

// drums · open hat
const open_hat = s("oh").struct("<A@7 ~ B@8 A@4 ~@8 B@24 A@11 B@16 ~@5>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4",
})).gain(0.46)

// drums · high tom
const high_tom = s("ht").struct("<~@79 [~ x ~ x ~ x ~ x ~@8]!4 ~>").gain(0.46)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!7
  ~@9
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!4
  ~@32
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!11
  ~@21
>`).gain(0.26)

// drums · cowbell
const cowbell = s("cb").struct(`<
  [x ~ x ~ x!2 ~ x ~@3 x ~@2 x ~]!7
  ~@9
  [x ~ x ~ x!2 ~ x ~@3 x ~@2 x ~]!4
  ~@32
  [x ~ x ~ x!2 ~ x ~@3 x ~@2 x ~]!11
  ~@21
>`).gain(0.39)

// drums · bongos
const bongos = s("bongo:4").struct("<A B A B A B A C D@8 A B A B ~@8 D@24 A B@3 A B@3 A@3 D@16 E@4 ~>".pickRestart({
  A: "~ x ~@6", B: "x!2 ~@6", C: "x", D: "x!2 ~@2", E: "~ x!3 ~ x!3 ~ x!3 ~ x!3",
})).gain(1.21)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<A B A B A B A ~ C@8 A B A B ~@8 C@24 A B A@3 B A@5 C@16 D@4 ~>".pickRestart({
  A: "~ x ~@2", B: "~@4 x ~@6 x ~@4", C: "~ x ~ x ~@2 x ~@5 x ~ x!2", D: "x!4",
})).gain(1.21)

// drums · congas
const congas = s("conga:13").struct("<A@7 ~ B@8 A@4 ~@8 B@24 A@11 B@16 ~@5>".pickRestart({
  A: "~@2 x ~@5 x!2 ~ x ~@4", B: "~@7 x ~ x ~ x ~@4",
})).gain(1.68)

// drums · congas
const congas_2 = s("conga:18").struct("<[~@6 x ~@6 x ~@2]!7 ~@9 [~@6 x ~@6 x ~@2]!4 ~@32 [~@6 x ~@6 x ~@2]!11 ~@21>")
  .gain(1.68)

// drums · congas
const congas_3 = s("conga:33").struct("<[~@7 x]!7 ~@9 [~@7 x]!4 ~@32 [~@7 x]!11 ~@21>").gain(1.68)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct(`<
  ~@8
  [x!3 ~ x ~ x!2 ~ x ~ x ~ x!2 ~]!8
  ~@12
  [x!3 ~ x ~ x!2 ~ x ~ x ~ x!2 ~]!24
  ~@11
  [x!3 ~ x ~ x!2 ~ x ~ x ~ x!2 ~]!16
  ~@5
>`).gain(2.51)

// drums · agogo bells · soft notes
const agogo_bells_soft = s("agogo:4").struct("<~@8 [~@3 x ~@12]!8 ~@12 [~@3 x ~@12]!24 ~@11 [~@3 x ~@12]!16 ~@5>")
  .gain(1.26)

// drums · shaker
const shaker = s("sh").struct("<[x!16]!7 ~@9 [x!16]!4 ~@32 [x!16]!11 ~@21>").gain(0.26)

// drums · claves
const claves = s("clave:2").struct(`<
  ~@8
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~]!8
  ~@12
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~]!24
  ~@11
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~]!16
  ~@5
>`).gain(1.93)

// drums · triangle
const triangle = s("triangles:30").struct("<A B A B A B A ~@9 A B A B ~@64>".pickRestart({
  A: "~ x!5 ~ x ~ x!7", B: "~ x!15",
})).gain(2.86)

// drums · triangle · soft notes
const triangle_soft = s("triangles:30").struct("<A B A B A B A B ~@8 A B A B ~@64>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x",
})).gain(1.71)

stack(
  bass, epiano1, lead_2_sawtooth, acoustic_guitar_steel, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, high_tom,
  crash, tambourine, cowbell, bongos, bongos_2, congas, congas_2, congas_3, agogo_bells, agogo_bells_soft, shaker,
  claves, triangle, triangle_soft
)

More by Spice Girls