Strudelify
Too Much cover art

1997 · Spiceworld

Too Much

Spice Girls

KeyA majorTempo80 bpm
0:00/0:00
// Too Much — Spice Girls
// 80 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 16 piano (copy of ch 5 choir aahs)
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · synth bass 2
const bass = note(`<
  ~@4 A B C D A B C E A B C F G H I J A B C K A B C K A B C K A B C K G H I J A B C K A B C K L M N O A B C K A B C K A
  B C K A B C K A B C K A B C K A B C P Q@2
>`.pickRestart({
  A: "a1@3 ~@2 a1@4 ~ a1!2", B: "f1@7 ~@3 f1@10 f1@2 f1@2", C: "d1@7 ~@3 d1@10 d1 ~ d1@2",
  D: "g1@6 ~@2 g1@11 ~ g1@2 g#1@2", E: "g1@4 ~ g1@4 ~ g1 g#1", F: "g1@3 ~@2 g1@4 ~ g1 g#1", G: "b1@3 ~@2 b1@5 ~ b1",
  H: "e1@7 ~@3 e1@11 ~ e1@2", I: "d2@7 ~@3 d2@10 ~@2 d2@2", J: "c#2@6 ~@4 c#2@11 ~ c#2@2",
  K: "g1@9 ~ g1@8 ~@2 g1@2 g#1@2", L: "b1@6 ~@4 b1@9 ~ b1@2 c2@2", M: "c#2@6 ~@4 c#2@9 ~ e2@2 f#2@2",
  N: "g1@7 ~@3 g1@10 ~@2 g1@2", O: "f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1@2 ~@10", P: "g1@10 g1@9 ~@3 g1@2",
  Q: "[g#1@2 a1@41 ~@5]/2",
})).s("gm_synth_bass_2").gain(0.64)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A B C D E F G H ~@8 I J K L M N O P M N O P ~@3 Q@2 ~@3 R S T U V@2 W X Y@2 Z AA AB AC AD AE ~@4 M N O P V@2 W X Y@2 Z
  AA M N O P M N O P V@2 W AF@3
>`.pickRestart({
  A: "e4@5 e4@4 a4@3, [a2,c#4]", B: "f4@5 f4@4 a4@3, [f2,c#4]", C: "f#4@5 f#4@4 a4@3, [d2,c#4]",
  D: "~@12 e5 d#5 d5 c#5 c5 b4 a#4 a4 g#4 g4 f#4 f4, [g2,c#4,f4]", E: "[e3,e4]@5 [b3,e4]@4 [a3,a4]@3, c#4",
  F: "[f3,f4]@5 [b3,f4]@4 [a3,a4]@3, c#4", G: "[f#3,f#4]@5 [b3,f#4]@4 [a3,a4]@3, c#4",
  H: "e5@6 d5@6 e5 d#5 d5 c#5 c5 b4 a#4 a4 g#4 g4 f#4 f4, c#4", I: "[d3,f#4]", J: "[e3,g#4]", K: "[f#3,a4]",
  L: "[f3,g#4]", M: "e4@5 e4@4 a4@3, c#4", N: "f4@5 f4@4 a4@3, c#4", O: "f#4@5 f#4@4 a4@3, c#4",
  P: "~@12 e5 d#5 d5 c#5 c5 b4 a#4 a4 g#4 g4 f#4 f4, [c#4,f4]", Q: "[~@7 a4 g#4@2 ~@6, ~@7 c#5@3 ~@6]/2",
  R: "~ e5 f#5 a5 ~@3 e5 f#5 a5 e5 a5, [d3,f#4]", S: "g#5@3 ~@9 g#5@2 g5 f#5 e5@2 c#5@2 e5@2 f#5@2, [e3,g#4]",
  T: "c#5 ~ c#5 ~ c#5@2 c#5@2 a4@16, f#3, a4 ~@2", U: "c#5@18 b4 c#5 d5 e5 f#5 g#5, [f3,g#4]",
  V: "[e4@5 e4@4 a4@3 f4@5 ~ [e5,e6]@3 [a4,f#5,f#6]@3, a5@3 ~, c#4 c#4, ~@17 f4@4 ~@3]/2", // E D
  W: "f#4@5 f#4@4 a4@3, [c#4,a5,a6]", X: "[e5,e6] [d5,d6] [a4,a5] [b4,b5], [c#4,f4]",
  Y: "[e4@5 e4@4 a4@3 f4@5 f4@4 a4@3, [c#5,c#6], c#4 c#4]/2", // C#
  Z: "[f#5,f#6] ~ [b4,b5] [a4,a5], c#4, f#4@5 f#4@4 ~@3, ~ [c#5,c#6] ~@2", // F# B A C#
  AA: "[e5,e6]@6 [d5,d6]@6 [a4,a5]@6 [b4,b5]@4 [a4,a5] [g4,g#4,g5,g#5], [c#4,f4]", // E D A B A G#maj7 C#
  AB: "f#5@10 d5@8 b5@4 a#5 a5, [d4,f#4]", AC: "g#5@10 e5@8 c#6@3 c6 b5 a#5, [e4,g#4]",
  AD: "a5@5 f#5@4 a5@2 f#5, [d4,f#4]", AE: "a5 ~ a5 ~ a5 ~ a5 ~ a5 ~ a5 ~ a#3@3 ~@9, d4@5 ~@3, b3@12 a5 ~@11",
  AF: "[[e5,e6]@6 [d5,d6]@6 ~ [a4,a5]@6 ~ b5@6 ~ [a3,e4,c#6]@41 ~@4, [c#4,f4]@26 ~ c#4@7 ~@38, ~@19 b4@7 c#5@7 ~@39]/3", // E D A C#
})).s("gm_string_ensemble_2").gain(0.34).pan(0.7)

// other · violin
const violin = note(`<
  A B C D E F G H I ~@11 A B C D A B C D I ~@7 J K L M N O P Q R ~ S T U V W X I ~@3 A B C Y N O P Q R ~ S T A B C Y A B
  C Y N O P Z@3
>`.pickRestart({
  A: "e4@5 e4@4 a4@3", B: "f4@5 f4@4 a4@3", C: "f#4@5 f#4@4 a4@3", D: "f4@12 e5 d#5 d5 c#5 c5 b4 a#4 a4 g#4 g4 f#4 f4",
  E: "e3@5 b3@4 a3@3, e4 ~@7", F: "f3@5 b3@4 a3@3", G: "f#3@5 b3@4 a3@3",
  H: "e5@6 d5@6 e5 d#5 d5 c#5 c5 b4 a#4 a4 g#4 g4 f#4 f4", I: "e4 ~@5", J: "~ e5 f#5 a5 ~@3 e5 f#5 a5 e5 a5",
  K: "g#5@3 ~@9 g#5@2 g5 f#5 e5@2 c#5@2 e5@2 f#5@2", L: "c#5 ~ c#5 ~ c#5@2 c#5@2 a4@3 ~@13",
  M: "c#5@18 b4 c#5 d5 e5 f#5 g#5", N: "a5@19 ~@5", O: "~@12 e6@6 f#6@5 ~", P: "a6@5 ~", Q: "e6 d6 a5 b5",
  R: "c#6@7 ~@5", S: "f#6@5 ~ c#6@6 b5@6 a5@5 ~", T: "e6@5 ~ d6@6 a5@6 b5@3 ~ a5 [g5,g#5]",
  U: "f#5@10 d5@8 b5@4 a#5 a5", V: "g#5@10 e5@8 c#6@2 ~ c6 b5 a#5", W: "a5@5 f#5@4 a5@2 f#5",
  X: "a5 ~ a5 ~ a5 ~ a5 ~ a5 ~ a5 ~ a5 ~@11", Y: "f4@12 e6 d#6 d6 c#6 c6 b5 a#4 a4 g#4 g4 f#4 f4",
  Z: "[e6@6 d6@7 a5@6 b5@7 ~ c#6@41 ~@4]/3",
})).s("gm_violin").gain(0.34).pan(0.3)

// chords · trumpet
const trumpet = note("<~@39 A ~@3 B ~@3 B ~@3 C D@2 E F@2 G H ~@4 B ~@3 B ~@5 G H ~@7>".pickRestart({
  A: "f4", B: "~@10 [a3,d4]@3 ~@5 [d4,a4]@4 ~@2",
  C: "[f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~@11", // F#m
  D: "[~@6 e5@2 ~@4 c5@4 b4 ~ a4@3 ~ b4@6 c#5@2 ~@4 a4@11 ~@3]/2", E: "~@6 f#5@6 c5@4 b4@2 a4@3 ~@3",
  F: "[~@6 b4@5 ~ a4@5 ~ f4@3 e4@6 ~@21]/2", G: "~@14 b4@2 c#5 ~ c#5 ~ e5@2 f#5 ~", H: "a5@17 ~@7",
})).s("gm_trumpet").gain(0.57).pan(0.7)

// chords · alto sax
const alto_sax = note("<~@16 A B C@2 ~@16 A B C@2 ~@8 D E F G ~@3 H@2 I J ~@9 K L M N ~ I J ~@7>".pickRestart({
  A: "a3", B: "b3", C: "[c#4@36 b3@5 ~ c#4@5 ~]/2", D: "c#4 b3", E: "c#4@23 ~", F: "[b3,d4]@23 ~",
  G: "b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ a#3@2 ~@10", H: "[~@6 [d4,f4]@5 ~ [c4,f4]@5 ~ [b3,d4]@3 ~ [a3,c#4]@6 ~@20]/2",
  I: "~@14 f#4@2 a4 ~ a4 ~ c#5@2 e5 ~", J: "a4@23 ~",
  K: "[e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~@3 [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~@5", // A5
  L: "[f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~@3 [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~@5", // F
  M: "[f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~@3 [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4]@2 ~@4", // F#m
  N: "[d4,f4]@6 [d4,g4] ~", // Dm G5
})).s("gm_alto_sax").gain(0.38).pan(0.3)

// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
  A B C B A B C B A B C B A B C B ~@3 D ~@8 A B C B A B C B ~@3 E ~@12 A B C B ~@26
>`.pickRestart({
  A: "[c#4,e4]", B: "[c#4,f4]", C: "[c#4,f#4]", D: "~@18 g#3 ~ g#3 ~ [f3,g#3] ~", E: "~@18 g#3 ~@5",
})).s("gm_electric_guitar_jazz").gain(0.29).pan(0.7)

// chords · electric guitar jazz · soft notes · Fm
const electric_guitar_jazz_2 = note(`<
  ~@19
  [~@12 [f3,g#3] ~ [f3,g#3] ~ [f3,g#3] ~ f3 ~ f3 ~@3]
  ~@19
  [~@12 [f3,g#3] ~ [f3,g#3] ~ [f3,g#3] ~ f3 ~ [f3,g#3] ~ [f3,g#3] ~]
  ~@42
>`).s("gm_electric_guitar_jazz").gain(0.19).pan(0.7)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note("<A B C D ~@3 D ~@3 D E ~@18 D E ~@49>".pickRestart({
  A: "e3@5 b3@4 a3@3", B: "f3@5 b3@4 a3@3", C: "f#3@5 b3@4 a3@3", D: "f3 d4@3 a3@3 f3@3 d3@2", E: "e3 ~@2",
})).s("gm_acoustic_guitar_nylon").gain(0.55)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~@32
  [~@2 e4 ~ a4 ~ c#5 ~ e5 ~ a5 ~@13]
  [~@2 f4 ~ a4 ~ c#5 ~ f5 ~ a5 ~@13]
  [~@2 a3 ~ f#4 ~ a4 ~ f#5 ~ a5 ~@13]
  [a4 ~ e5 ~ a5 ~ a4 ~ e5 ~ a5 ~ a4 ~ e5 ~ a5 ~ a4 ~ e5 ~ a5 ~]
  ~@46
>`).s("gm_pizzicato_strings").gain(0.42).pan(0.4)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@4 A B C D A B C D A B C D E F C G A B C D A B C D A B C D A B C D E F C G A B C D A B C D H I J K A B C D A B C D A
  B C D A B C D A B C D A B C D A B C L ~@2
>`.pickRestart({
  A: "~@6 [e4,a4,c#5]@2 ~@10 [e4,a4,c#5] ~@5", B: "~@6 [f4,a4,c#5] ~@11 [f4,a4,c#5]@2 ~@4",
  C: "~@3 [f#4,a4,c#5] ~@5 [f#4,a4,c#5] ~@2", D: "~@3 [f4,a4,d5] ~@5 [f4,a4,d5] ~@2",
  E: "~@6 [f#4,a4,d5]@2 ~@10 [f#4,a4,d5] ~@5", F: "~@6 [e4,g#4,b4] ~@11 [e4,g#4,b4]@2 ~@4",
  G: "~@3 [f4,g#4,b4] ~@5 [f4,g#4,b4] ~@2", H: "~@6 [d4,a4,b4]@2 ~@10 [d4,a4,b4] ~@5",
  I: "~@6 [f#4,g#4,c#5] ~@11 [e4,g#4,c#5]@2 ~@4", J: "~@3 [b3,f#4,a4] ~@5 [b3,f#4,a4] ~@2",
  K: "[d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4]@3 ~@9", // D
  L: "~@7 d5@2 ~@11 [a4,d5]@2 ~@2, ~@6 [f4,a4]@2 ~@11 f4@2 ~@3", // D5 F
})).s("gm_electric_guitar_muted").gain(0.38).pan(0.3)

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

// drums · clap
const clap = s("cp").struct("<~@48 [~ x ~ x]!4 ~@4 [~ x ~ x]!23 [~@6 x ~@12 x ~@4] ~@2>").gain(0.59)

// drums · snare
const snare = s("sd").struct("<~@3 [~@9 x ~ x] [~ x ~ x]!75 [~@6 x ~@12 x ~@4] ~@2>").gain(0.59)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A@12 B C@3 D E@2 F G E F E A@8 B C@3 D E@2 F G E F E D E@2 H A@4 D E@2 F D E@2 F G E F E D E@2 F D E@2 F D E@2 I J
  ~
>`.pickRestart({
  A: "x ~ x ~@2 x!2 ~ x ~@2 x", B: "~@2 x!2 ~ x!2 ~ x!2 ~ x", C: "x ~ x!2 ~ x!2 ~ x!2 ~ x", D: "~ x!3 ~ x!6 ~",
  E: "x!4 ~ x!6 ~", F: "x!11 ~", G: "x!3 ~ x!7 ~", H: "x!7 ~@5", I: "x ~ x ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x ~ x ~@2 x ~",
  J: "~ x ~@6",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@80 [~ x ~@6] ~>").gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<~@79 [~@11 x] x ~>").gain(0.59)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@20 A B@2 C@2 B C B ~@12 A B@2 C@2 B C B A B@2 ~@5 A B@2 C A B@2 C@2 B C B A B@2 C A B@2 C A B@2 ~ D ~
>`.pickRestart({
  A: "x ~@3 x ~@6 x", B: "~@4 x ~@6 x", C: "~@11 x", D: "x",
})).gain(0.3)

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

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@42 [~ x] ~@3 [~@3 x] ~@3 [~ x] ~@31>").gain(2.2)

stack(
  bass, string_ensemble_2, violin, trumpet, alto_sax, electric_guitar_jazz, electric_guitar_jazz_2,
  acoustic_guitar_nylon, pizzicato_strings, electric_guitar_muted, kick, clap, snare, hihat, low_tom, mid_tom, open_hat,
  crash, bell_tree
)

More by Spice Girls