Strudelify
Stop cover art

1997 · Spiceworld

Stop

Spice Girls

KeyC majorTempo130 bpm
0:00/0:00
// Stop — Spice Girls
// 130 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// chords · piano
const piano = note(`<
  ~ A@2 B@2 A@2 B@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2 G@5 H@4 I A@2 B@2 A@2 B@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2 G@5 H@4 I A@2 B@2
  A@2 B@2 ~@4 J@2 K@2 J@2 L M A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 N@2
>`.pickRestart({
  A: "[[e3,g3,c4]@13 ~ [d3,f3,a#3]@17 ~]/2", B: "[[c3,e3,a3]@13 ~ [b2,d3,g3]@17 ~]/2",
  C: "[[g3,c4,e4]@13 ~ [g3,a#3,d4,f4]@17 ~]/2", D: "[[a3,c4,e4]@12 ~@2 [b3,d4,f4]@17 ~]/2",
  E: "[[g3,c4,e4]@12 ~@2 [g3,a#3,d4,f4]@17 ~]/2", F: "[[a3,c4,e4]@13 ~ [b3,d4,f4]@15 ~@3]/2",
  G: "[[a3,c4,e4]@13 ~ f4@10 [a3,c4] ~ [g3,b3,e4]@3 ~ [f3,a3,d4]@24 ~@2 [a3,c4,f4]@2 [g3,b3,e4]@2 ~@2 [f3,a3,d4]@18, ~@14 d4@15 ~@51, ~@7 b3@6 ~@27, ~@6 f4 ~@13]/5", // Am Em Dm F Em Dm
  H: "[~@8 [a3,c4,f4] ~ [g3,b3,e4]@2 ~@2 [f3,a3,d4]@15 ~ [g3,b3,e4]@15 ~ [a3,c4,f4]@17 ~]/4", // F Em Dm Em F
  I: "[b3,d4,g4]@2 ~@2 [b3,d4,g4]@3 ~ g3@2 a3@2 c4@2 a3@2", J: "[[g3,c4,e4]@13 ~ [f3,a#3,d4]@17 ~]/2",
  K: "[[f3,a3,c4]@13 ~ [f3,a#3,d4]@16 ~@2]/2", L: "[f3,a3,c4]@15 ~", M: "[b3,d4,g4] ~ [b3,d4,g4] ~ g3 a3 c4 a3",
  N: "[[c3,e3,a3]@13 ~ [b2,d3,g3]@16 [g3,c4]@2]/2", // Am G C5
})).s("gm_piano").gain(0.36)

// bass · fretless bass
const bass = note(`<
  ~ A@2 B C A@2 B C D E B C D E B C D E B C D E B F@2 G@2 H@4 I A@2 B C A@2 B C D E B C D E B C D E B C D E B F@2 G@2
  H@4 I A@2 B C A@2 B C J K J K L M N O L K P Q A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B R
>`.pickRestart({
  A: "[c2 ~ c2 ~ c2 g1 a1 a#1@2 f1 g1 a#1@2 f1 g1 a#1]/2", B: "a1 ~ a1 ~ a1 f1 a1 g1", C: "~ g1 ~ g1@2 a1 c2 a1",
  D: "c2 ~ c2 ~ c2 g1 a1 a#1", E: "~@2 a#1 ~ a#1@6 g1@2 a#1@2 c2@2",
  F: "[~@2 g1@2 ~@2 g1@2 f2@2 e2@2 ~@2 d2@5 ~ d2@3 ~ d2 ~ d2@3 ~ d2 ~]/2",
  G: "[d2@2 ~@2 d2@3 ~ f2@2 e2@2 ~@2 d2@9 ~ d2 ~ d2@3 ~ d2 ~]/2",
  H: "[d2@2 ~@2 d2@2 ~@2 f2@2 e2@2 ~@2 d2@9 ~ d2 ~ d2@2 ~@2 e2@9 ~ e2 ~ e2@3 ~ f2@9 ~ f2 ~ f2@3 ~ f2@2]/4",
  I: "g1 ~ g1 ~ g1 a1 c2 a1", J: "c2@3 ~ c2@2 ~@2 c2@2 a1@2 g1@2 c2@2", K: "~ c2 ~ c2@2 g1 a1@2",
  L: "c2 ~ c2 ~ c2 a1 g1 c2", M: "~ c2 ~ c2 ~ g1 a1@2", N: "c2@3 ~ c2@3 ~ c2@2 a1@2 g1@2 c2@2",
  O: "~@2 c2@2 ~@2 c2@3 ~ g1@2 a1@3 ~", P: "c2@2 ~@2 c2@3 ~ c2@2 a1@2 g1 ~ g1@2",
  Q: "~@2 g1@2 ~@2 g1 ~ g1@2 a1@2 c2@2 a1@2", R: "~@2 g1@2 ~@2 g1@4 a1@2 c2 ~ c2@2",
})).s("gm_fretless_bass").gain(0.5)

// chords · drawbar organ
const drawbar_organ = note("<~ A@4 B@4 ~@23 C D ~@30 C D ~@18 C D ~@23>".pickRestart({
  A: "[c6@14 a#5@18 [a5,c6]@14 [g5,b5,d6]@17 ~, e6@23 ~@9, g5@31 ~@33]/4", // Am G
  B: "[c6@14 a#5@18 [a5,c6]@14 [g5,b5]@17 ~, e6@47 ~@17, g5@31 ~@33]/4", // Am G
  C: "~@10 b1 [c2,d2,e2,f2,g2] [a2,b2,c3,d3,e3,f3,g3,a3] [b3,c4]!2 [d3,e3,f3,g3,a3]", // C Am7 Cmaj7 Dm
  D: "[e2,f2,g2,a2,b2,c3] [b1,c2,d2] ~@14", // Cmaj7 Bm
})).s("gm_drawbar_organ").gain(0.14).pan(0)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A@2 B@2 A@2 C@2 D E F G D E F G A@2 B@2 A@2 C@2 H I@4 J K L A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 H I@4 J
  K L A@2 B@2 A@2 C@2 ~@4 A@2 M@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 N@2
>`.pickRestart({
  A: "[[e4,g4,c5]@3 ~ [e4,g4,c5] ~@5 [e4,g4,c5] ~@3 [d4,f4,a#4]@5 ~ [d4,f4,a#4] ~@5 [d4,f4,a#4] ~@5]/2", // C A#
  B: "[[c4,e4,a4]@4 [c4,e4,a4] ~@5 [c4,e4,a4] ~@3 [b3,d4,g4]@6 [b3,d4,g4] ~@5 [b3,d4,g4] ~@5]/2", // Am G
  C: "[[c4,e4,a4]@4 [c4,e4,a4] ~@5 [c4,e4,a4] ~@3 [b3,d4,g4]@5 ~ [b3,d4,g4] ~@5 [b3,d4,g4] ~@5]/2", // Am G
  D: "~@4 [e4,g4,c5] ~@11", E: "~@4 [d4,f4,a#4] ~@11", F: "~@4 [c4,e4,a4] ~@11", G: "~@4 [b3,d4,g4] ~@11",
  H: "[d3,a4,c5]@2 ~@2 [d3,a4,c5]@2 ~@2 [d3,a4,c5]!3 ~ [d3,a4,c5] ~@3", // D7
  I: "[d3,a4,c5]@2 ~@2 [d3,a4,c5]@2 ~@2 [d3,a4,c5]!3 ~ [d3,a4,c5]@2 ~@2", // D7
  J: "[e3,g4,d5]@2 ~@2 [e3,g4,d5]@2 ~@2 [e3,g4,d5]!2 [e3,g4] ~ [e3,g4,d5]@2 ~@2", // Em7 Em Em7
  K: "[f3,a4,e5]@2 ~@2 [f3,a4,e5]@2 ~@2 [f3,a4,e5]!3 ~ [f3,a4,e5]@2 ~@2", // Fmaj7
  L: "[g3,g4,g5]@2 ~@2 [g3,g4,g5]@2 ~@2 [g3,g4,g5]!3 ~ [g3,g4,g5]!3 ~", // G
  M: "[[c4,e4,a4]@4 [c4,e4,a4] ~@5 [c4,e4,a4] ~@3 [a#3,d4,g4]@6 [a#3,d4,g4] ~@5 [a#3,d4,g4] ~@5]/2", // Am Gm
  N: "[[c4,e4,a4]@4 [c4,e4,a4] ~@5 [c4,e4,a4] ~@3 [b3,d4,g4]@5 ~ [b3,d4,g4] ~@5 [b3,d4,g4] ~@3 [c4,g4,c5]@2]/2", // Am G C5
})).s("gm_electric_guitar_clean").gain(0.35)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  ~@33 A@2 B@4 C@2 ~@24 A@2 B@4 C@2 ~@12 A@2 B@4 C@2 A@2 B@4 C@2 A@2 B@4 D@2
>`.pickRestart({
  A: "[g5@19 ~ c5@4 e5@4 f5@4]/2", B: "[a5@13 g5@38 ~ c5@4 e5@4 f5@4]/4", C: "[a5@7 g5@9]/2", D: "[a5@7 g5@8 c5]/2",
})).s("gm_string_ensemble_2").gain(0.4).pan(0.7)

// other · bassoon
const bassoon = note(`<
  ~@25 A B A B ~@4 C D E F G@2 H I ~@2 J K ~@2 J K ~@8 A B A B ~@4 C D E F G@2 H I ~@3 L M N O P Q R S T C D E F G@2 H I
  C D E F G@2 H I C D E F G@2 H I
>`.pickRestart({
  A: "g3", B: "a3@3 ~ a3@3 ~@9", C: "e4@3 ~ c4@3 ~ g3@4 ~@2 a#3@2", D: "~@2 a#3 ~ a#3@2 a3@2 c4@3 ~@3 g3@2",
  E: "a3@2 ~@2 a3@2 ~@2 a3@2 g3@2 a3@2 g3 ~", F: "g3@3 ~ g3@3 ~ g3@4 f3 ~ e3@2",
  G: "[~@4 e4@4 c4@4 ~@2 a#3@4 a3@2 a#3@2 a3@2 c4@3 ~ f3@2 g3@2]/2", H: "a3@2 g3@2 a3@2 ~@2 a3@2 g3@2 a3 ~ f3@2",
  I: "g3@2 ~@2 g3@3 ~ g3@4 f3@2 e3@2", J: "~@7 d3", K: "~@2 d3 ~ d3@2 c3@2 e3@4 d3@2 c3@2", L: "~@10 g2 ~ a2@2 g2 ~",
  M: "c3 ~ c3 ~ c3@3 ~ c3 ~ g2 ~ a2@2 g2 ~", N: "c3 ~ c3 ~ c3 ~ e3@4 g2@2 a2@2 g2 ~",
  O: "c3 ~ c3 ~ c3@3 ~ c3@2 g2 ~ a2@2 c3 ~", P: "d#3 ~ d3 ~ c3 ~ c3@4 g2 ~ a2@3 ~", Q: "~@2 c3 ~ c3@2 ~@2",
  R: "c3 ~ c3 ~ c3 ~ e3@3 ~ g2 ~ a2@2 g2 ~", S: "c3 ~ c3 ~ c3@2 ~@2 c3@2 g2 ~ a2@2 c3@2", T: "e3@2 d3@2 c3 ~ c3@5 ~@5",
})).s("gm_bassoon").gain(0.32)

// chords · brass section
const brass_section = note("<~ A B@3 C@3 D ~@15 E@8 F ~@23 E@8 F ~@12 A B@3 C@3 G H ~@23>".pickRestart({
  A: "~@2 [g4,g5] ~ [g4,g5] [c5,c6] ~ [a#4,a#5]", // G C A#
  B: "[~@2 [a4,a5]@2 ~@2 [g4,g5]@2 ~@2 [d#4,d#5]@2 [d4,d5]@2 [c4,c5]@11 ~ [a#3,a#4]@2 [c4,a4]@2 [d4,g4]@14 ~@4]/3", // A G D# D C A# F G5
  C: "[[c4,c5]@4 ~@4 [c4,c5] ~@3 [e4,e5]@2 [f4,f5]@11 ~ [g4,g5] ~ [d#4,d#5] [d4,d5] [c4,c5]@15 ~@3]/3", // C E F G D# D C
  D: "[g4,g5] ~ [g4,g5] ~ [g4,g5] [a4,a5] [c5,c6] ~", // G A C
  E: "[~@8 [f3,c4,f4]@2 [e3,b3,e4]@2 ~@2 [d3,a3,d4]@25 ~ [f3,c4,f4]@2 [e3,b3,e4]@2 ~@2 [d3,a3,d4]@25 ~ [f3,c4,f4]@2 [e3,b3,e4]@2 ~@2 [d3,a3,d4]@15 ~ [e3,b3,e4]@15 ~ [f3,c4,f4]@18]/8", // F5 E5 D5 F5 E5 D5 F5 E5 …
  F: "[d3,g3]@2 ~@2 [d3,g3]@3 ~ [d3,g3]@2 [e3,a3]@2 [g3,c4]@2 [e3,a3]@2", // G5 A5 C5 A5
  G: "[g4,g5] ~ [g4,g5] ~ [g4,g5] [a4,a5] [c5,c6] [a4,a5]", H: "[c5,c6] ~@7",
})).s("gm_brass_section").gain(0.17).pan(0.3)

// other · clarinet
const clarinet = note(`<
  ~@11 A B ~@2 A B C D@2 E ~@4 F G F G ~@4 H I J K L M N O ~@8 C D@2 E ~@4 F G F G ~@4 H I J K L M N O ~@3 P Q R S T U V
  W X H I J K L M N O H I J K L M N O H I J K L M N O
>`.pickRestart({
  A: "~@7 f4", B: "~@2 f4 ~ f4@2 e4 ~ g4@4 f4@2 e4@2", C: "~@4 e4@2 g4 ~ g4@2 e4@2 g4@2 e4@2",
  D: "[g4@2 e4@2 g4@2 e4@2 a4@3 ~ g4@6 ~@2 g4@2 f4 ~ f4@2 e4 ~ e4@2 d4@2]/2", E: "e4@3 ~ e4@2 f4@2 e4@4 d4@2 c4@2",
  F: "~ b4", G: "c5@3 ~ c5@3 ~@9", H: "c5 ~ g4 ~ e4@2 ~ f4", I: "~@2 f4 ~ f4@2 e4 ~ g4@3 ~@3 e4 ~",
  J: "f4 ~ f4 ~ f4 e4 f4 e4", K: "f4 ~ f4 ~ g4@2 f4 e4", L: "~@4 c5@3 ~ g4@4 ~@2 f4@2",
  M: "~@2 f4 ~ f4@2 e4@2 g4@3 ~ c4@2 e4@2", N: "f4@2 e4@2 f4@3 ~ f4@2 e4@2 f4@2 e4@2",
  O: "f4@2 ~@2 f4@3 ~ g4@4 f4@2 e4@2", P: "~@10 g3@2 a3@2 g3 ~", Q: "c4 ~ c4 ~ c4@3 ~ c4@2 g3@2 a3@2 g3 ~",
  R: "c4 ~ c4 ~ c4 ~ e4@3 ~ g3 ~ a3@2 g3 ~", S: "c4 ~ c4 ~ c4@2 ~@2 c4@2 g3 ~ a3@2 c4@2",
  T: "d#4@2 d4@2 c4 ~ c4@4 g3 ~ a3@3 ~", U: "~@4 c4@2 ~@2 c4@3 ~@5", V: "c4 ~ c4 ~ c4 ~ e4@4 g3@2 a3@2 g3 ~",
  W: "c4 ~ c4 ~ c4@2 ~@2 c4@2 g3@2 e4@2 f4@2", X: "g4@2 f4@2 e4 ~ e4@5 ~@5",
})).s("gm_clarinet").gain(0.38)

// other · flute
const flute = note("<~@41 A B C D E F C D ~@60>".pickRestart({
  A: "~@4 [g4,g5]@3 ~ [g4,g5]@2 [c5,c6]@2 ~@2 [d5,d6]@2", B: "~@4 [g5,g6]@3 ~ [e5,e6]@2 [c5,c6]@2 ~@2 [g4,g5]@2",
  C: "~@4 [g4,g5]@3 ~ [g4,g5]@2 [c5,c6]@3 ~ [d5,d6]@2", // G C D
  D: "~@2 [d5,d6] ~ [d5,d6]@2 [c5,c6]@2 [e5,e6]@4 [d5,d6]@2 [c5,c6]@2", E: "~@2 [g4,g5] ~ [g4,g5] [c5,c6] ~ [d5,d6]",
  F: "~@4 [g5,g6]@3 ~ [e5,e6]@2 [c5,c6]@3 ~ [g4,g5]@2", // G E C G
})).s("gm_flute").gain(0.19)

// drums · kick
const kick = s("bd").struct("<A B@15 C B@47 D B@19 E B@15 A B@8>".pickRestart({
  A: "x ~@3 x ~@2 x", B: "x ~@3 x!2 ~ x", C: "x ~@2 x!2 ~@2 x", D: "x ~@3 x!2 ~@2", E: "x!3 ~",
})).gain(0.56)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!8 ~@24 [~ x ~ x]!8 ~@24 [~ x ~ x]!8 ~@4 [~ x ~ x]!32>").gain(0.56)

// drums · snare
const snare = s("sd").struct("<A B@15 A B@47 C B@11 D B@7 ~ B@15 E B@7 F>".pickRestart({
  A: "~@4 x ~@6 x!2 ~@3", B: "~ x ~ x", C: "~@4 x ~@7 x!2 ~@2", D: "~@4 x ~@3 x!2 ~@2 x ~@3",
  E: "~@4 x ~@3 x!3 ~ x ~@3", F: "~@4 x ~@4 x!2 ~ x ~@3",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  A B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A
  C D B A C D B A C D B A C D B A C E B A C D B A C@2 B A C D B A C D B A C D B A C D B A C D B A C D
>`.pickRestart({
  A: "x!3 ~ x ~ x!2", B: "x ~ x!6", C: "x ~ x ~ x!3 ~", D: "x!8", E: "x ~ x ~ x ~ x ~ x ~ x ~@2 x ~@2",
})).gain(0.32)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A
  C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C@2 B A C ~ B A C ~ B A C ~ B A C ~ B A C ~ B A C ~
>`.pickRestart({
  A: "~@3 x ~ x ~@2", B: "~ x ~@6", C: "~ x ~ x ~@3 x",
})).gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@64 [~@7 x] ~@44>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@76 [~@3 x] ~@32>").gain(0.56)

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

// drums · tambourine
const tambourine = s("tb").struct("<A B@72 C@12 D B@7 D B@7 D B@6 E>".pickRestart({
  A: "~@6 x!10", B: "x ~@7 x!8", C: "x!16", D: "~@8 x!8", E: "x ~@7 x!6 ~@2",
})).gain(0.16)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<[x!6 ~@10] [~ x!7 ~@8]!72 ~@12 [~ x!7 ~@8]!24>").gain(0.08)

// drums · congas
const congas = s("conga:13").struct("<~ [~ x!2 ~@2 x!2 ~]!108>").gain(1.02)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~ A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A
  B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3
>`.pickRestart({
  A: "x ~@6 x", B: "~@7 x",
})).gain(1.02)

// drums · congas
const congas_3 = s("conga:33").struct("<~ [~@3 x ~@4]!108>").gain(1.02)

stack(
  piano, bass, drawbar_organ, electric_guitar_clean, string_ensemble_2, bassoon, brass_section, clarinet, flute, kick,
  clap, snare, hihat, hihat_soft, low_tom, open_hat, crash, tambourine, tambourine_soft, congas, congas_2, congas_3
)

More by Spice Girls