Strudelify
2 Become 1 cover art

1996 · Spice

2 Become 1

Spice Girls

KeyF♯ majorTempo73 bpm
0:00/0:00
// 2 Become 1 — Spice Girls
// 73 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 72 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Jazz Gtr.
setcpm(73/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 · epiano2 · "#E.Piano"
const epiano2 = note(`<
  A B A B A B A C A B A D E F E G H I H I J K A B A C A B A D L M L G H I H I J K N O N O L F L G H I H I H I H I J K@14
  ~
>`.pickRestart({
  A: "[d#2,f#3,a#3,c#4]@15 ~ [f2,f3,g#3,c#4]@16", B: "[f#2,f#3,a#3,c#4] [g#2,f#3,b3,c#4]",
  C: "[f#2,f#3,a#3,c#4] [c#2,g#3,b3,c#4]", D: "[f#2,f#3,a#3,c#4] [c#3,g#3,b3,c#4]",
  E: "[b2,f#3,a#3,b3,d#4]@15 ~ [a#2,g#3,a#3,c#4,f4]@16", F: "[g#2,g#3,b3,d#4,f#4] [c#3,g#3,b3,d#4,f#4]",
  G: "[g#2,g#3,b3,d#4,f#4]@9 ~@3 [c#3,g#3,b3,d#4,f#4]@19 ~", H: "[f#2,f#3,a#3,c#4,f#4]@15 ~ [c#3,f#3,g#3,c#4,f4]@16",
  I: "[b2,f#3,a#3,b3,d#4]@16 [b2,f#3,a#3,b3,d#4]@8 [b2,g#3,c#4,f4]@7 ~", // Bmaj7 C#7
  J: "[e2,g#3,b3,e4,f#4]@15 ~ [f#2,f#3,a#3,c#4,f#4]@16", // E F#
  K: "[a2,a3,c#4,e4]@5 ~ [b2,b3,d#4,f#4]@5 ~ [f#2,f#3,a#3,c#4]@19 ~", // A B F#
  L: "[b2,a#3,b3,d#4,f#4]@15 ~ [a#2,g#3,a#3,c#4,f4]@16", M: "[g#2,g#3,b3,d#4,f#4] [c#3,d#4,f#4,g#4,b4,c#5]",
  N: "[d#3,a#4,c#5,f#5]@15 ~ [c#3,g#4,c#5,f5]@16", O: "[b2,f#4,a#4,d#5]@31 ~",
})).s("gm_epiano2").gain(0.33)

// bass · synth bass 1 · "#Reso Bas"
const bass = note(`<
  A B A B A B A C A D A E F G F H I J K J L M A B A C A D A E F G F H I J K J L M N O N O F G F H I J K J I J K J L M@5
  P Q P Q P Q P Q R ~
>`.pickRestart({
  A: "d#1@15 ~ f1@15 ~", B: "f#1@15 ~ g#1@15 ~", C: "f#1@15 ~ c#2@7 ~ c#1@7 ~", D: "f#1@15 ~ g#1@11 ~ g#1 ~ a#1@2",
  E: "f#1@15 ~ c#2@5 ~ c#2 ~ c#2 ~ c#2@2 c#1@3 ~", F: "b1@15 ~ a#1@15 ~", G: "g#1@11 ~ a#1@2 b1@2 c#2@15 ~",
  H: "g#1@3 ~ b1@4 d#2@3 ~ c#2@19 ~", I: "f#1@15 ~ c#2@15 ~", J: "b1@15 ~ b1@15 ~", K: "f#1@11 ~ f1@2 f#1@2 c#2@15 ~",
  L: "e1@15 ~ f#1@15 ~", M: "a1@4 ~@2 b1@3 ~@3 f#1@19 ~", N: "d#2@15 ~ c#2@15 ~",
  O: "b1@12 ~@2 b1@2 b1 ~ b1 ~ b1@2 ~@10",
  P: "f#1 ~ f#1 ~@5 e1@2 f#1@2 ~@2 f#1@2 ~@2 e1@2 f#1 ~ f#1 ~@3 f#1@2 ~@2 e1@2",
  Q: "f#1 ~ f#1 ~@5 e1@2 f#1@2 ~@2 f#1@2 ~@2 e1@2 f#1@2 f#1 ~ f#1@2 f#1 ~@3 e1@2",
  R: "f#1 ~ f#1 ~@5 e1@2 f#1@2 ~@2 f#1@2 ~@2 e1@2 f#1 ~ f#1 ~@9",
})).s("gm_synth_bass_1").gain(0.3)

// chords · string ensemble 1 · "#Vlo.Strn"
const string_ensemble_1 = note(`<
  A@5 ~@7 B@2 C D@3 E@3 ~@3 F@2 G@2 H@2 I J I K@6 ~@5 L@2 M N@3 O@7 ~@5 P Q R S P Q R S P ~
>`.pickRestart({
  A: "[f5@16 c#5@15 a#4@16 ~ c#4@15 f4@5 f#4@4 c#5@4 c#4@4 g#4@15 f4@5 f#4@4 g#4@4 a#4@4 b4@4 c#5@4 d#5@4 f#5@3 f5@29 ~@4]/5",
  B: "[d#4@15 f4@16 f#4@32 ~]/2", C: "d#4@15 f4@16 ~",
  D: "[f#4@9 ~@3 f#4@12 f#4@3 ~@2 c#5 d#5 f#5@16 c#5@16 b4@32 ~, ~@27 g#4@2 ~@67, ~@28 [a#4,b4]@2 ~ f5@2 ~@63]/3", // Bmaj7
  E: "[f#5@12 ~ f#5@2 c#6@13 b5@2 ~ f#5@32 ~ b4@16 [f#4,c#5]@16, ~@12 f5@2 ~@16 a#5@2 ~@31 e4@17 ~@16]/3", // F#5
  F: "[f4@31 f#4@17 g#4@12 f5@2 f#5@2]/2", G: "[f5@8 c#5@22 f5 f#5]/2", H: "[f5@3 c#6@13]/2",
  I: "[b4,d#5] ~@7 [b4,d#5] ~@7 [c#5,f5] ~@7 [c#5,f5] ~@7", J: "[b4,d#5] ~@7 [b4,d#5] ~@7 [c#5,f#5] ~@7 [c#5,f#5] ~@7",
  K: "[[b4,d#5]@11 ~ f#5@12 [f#4,f#5]@2 [g#4,g#5] [a#4,a#5] [b4,b5] [c#5,d#5,c#6,d#6]@2 [f#5,f#6]@16 [c#5,c#6]@16 [b4,b5]@32 ~ f#6@12 ~ f#6@2 c#7@13 b6@2 ~ f#6@24 ~ [f6,f#6] d#6 c#6 [a#5,b5] g#5 f#5 d#5 ~ b4@16 [f#4,c#5]@16, ~@11 c#5@13 ~@7 [f5,f6] ~@63 f#5@17 ~@14 a#6@2 ~@64, ~@108 f6@2 ~ c#5@16 b4@32 e4@17 ~@16]/6", // B F# G# A# B C#sus2 F# C# …
  L: "[f#5@15 f5@16 d#5@16 ~ g#5@16]/2", M: "f#5@15 f5@16 ~",
  N: "[f#5@11 ~ f#5@12 [f#4,f#5]@2 [g#4,g#5] [a#4,a#5] [b4,b5] [c#5,d#5,c#6,d#6]@2 [f#5,f#6]@16 [c#5,c#6]@16 [b4,b5]@32 ~, ~@31 [f5,f6] ~@64]/3", // F# G# A# B C#sus2 F# C# B …
  O: "[[f#5,f#6]@15 [c#5,c#6]@16 [b4,b5]@32 f#5@16 ~@12 b5@2 a#5@2 ~ f#5@31 ~ f#6@15 c#7@13 b6@2 ~ f#6@24 ~ [f6,f#6] d#6 c#6 [a#5,b5] g#5 f#5 d#5 ~ [b4,b5]@15 ~ [f#4,c#5]@16, ~@63 c#6@29 ~@35 f#5@17 ~@14 a#6@2 ~@47 c#6@16 ~, ~@79 g#5@16 b4@32 ~@16 c#5@16 b4@32 e4@17 ~@16]/7", // F# C# B F#maj7 Bmaj7 B F#5
  P: "e5@2 f#5 ~@29", Q: "e5@2 d#5 ~@29", R: "a4@2 g#4 ~@29", S: "e4@2 f#4 ~@29",
})).s("gm_string_ensemble_1").gain(0.19).pan(0.3)

// other · string ensemble 1 · "#Vlo.Strn"
const string_ensemble_1_2 = note(`<
  A B A B A B A C A B A D E F E G H I J I K L A B A C A B A D E F E M H I J I K L ~@4 N O N P H I J I H I J I K Q@14 ~
>`.pickRestart({
  A: "d#2 f2", B: "f#2 g#2", C: "f#2 c#2", D: "f#2 c#3", E: "b2 a#2", F: "g#2 c#3", G: "g#2@3 c#3@5",
  H: "[f#1,f#2] [c#2,c#3]", I: "[b1,b2]", J: "[f#1,f#2]@6 [f1,f2] [f#1,f#2] [c#2,c#3]@8", K: "[e1,e2] [f#1,f#2]",
  L: "[a1,a2]@6 [b1,b2]@6 [f#1,f#2]@19 ~", M: "g#2@3 c#2@5", N: "[b1,b2] [a#1,a#2]", O: "[g#1,g#2] [c#2,c#3]",
  P: "[g#1,g#2]@3 [c#1,c#2]@5", Q: "[a1,a2]@5 ~ [b1,b2]@5 ~ [f#1,f#2]@19 ~",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.6)

// other · pad sweep · "#Shwimmer"
const pad_sweep = note(`<
  ~@40
  [f#4 g#4 a#4 c#5 d#5 c#5 a#4 g#4 a#4 g#4 a#4 c#5 d#5 c#5 a#4 g#4 a#4 g#4 a#4 c#5 d#5 c#5 a#4 g#4 a#4 g#4 a#4 c#5 d#5 c#5 a#4 g#4]!4
  ~@8
  [f#4 g#4 a#4 c#5 d#5 c#5 a#4 g#4 a#4 g#4 a#4 c#5 d#5 c#5 a#4 g#4 a#4 g#4 a#4 c#5 d#5 c#5 a#4 g#4 a#4 g#4 a#4 c#5 d#5 c#5 a#4 g#4]!4
  ~@16
>`).s("gm_pad_sweep").gain(0.4)

// other · french horn · "Fr.Horns"
const french_horn = note("<~@43 c#4 ~@17 c#4 ~@10>").s("gm_french_horn").gain(0.1)

// chords · string ensemble 1 · "#Vlo.Strn"
const string_ensemble_1_3 = note(`<
  A@2 B@3 ~@3 A@2 C@3 D@2 E F@2 G@3 H A@6 C@3 D@2 E F@2 G@3 H ~@3 I@2 J@2 K F@6 G@3 H@14 ~
>`.pickRestart({
  A: "[f#3@15 g#3@16 ~ a#3@15 b3@16 ~, c#4]/2", B: "[f#3@15 g#3@16 ~ a#3@15 b3@16 a#3@17 ~@16, c#4@31 ~]/3",
  C: "[f#3@15 g#3@16 ~ a#3@15 b3@16 [f#3,a#3]@16 [g#3,c#4]@17, c#4@2 ~]/3", // F# C#5
  D: "[[b3,d#4]@14 ~@2 b3@15 [f#3,a#3]@16 [g#3,c#4]@17, ~@15 d#4@16 ~@33]/2", E: "[b3,d#4]@9 ~@2 [g#3,c#4]@20 ~",
  F: "[[a#3,c#4]@15 ~ g#3@15 [f#3,d#4]@32 ~, ~@15 f4@16 ~@33]/2", // A#m D#m
  G: "[[a#3,c#4]@15 ~ g#3@15 [f#3,d#4]@32 [f#3,b3]@16 ~ c#3@16, ~@15 f4@16 ~@48 a#3@16 ~]/3", // A#m D#m B5
  H: "e3@4 ~@2 [f#3,b3]@3 ~@3 [c#3,f#3]@19 ~, a3 ~@15", I: "[~@31 [a#4,d#5]@16 [g#4,c#5]@17]/2",
  J: "[[f#4,b4]@15 ~ c#5@15 [a#4,d#5]@16 [g#4,c#5]@17, ~@15 f5@16 ~@33]/2", K: "[f#4,b4]@11 f#4@20 ~, ~@11 b4@12 ~@9",
})).s("gm_string_ensemble_1").gain(0.2)

// other · melodic tom · "#Real Tom"
const melodic_tom = note("<~@3 A ~@7 A ~@3 A ~@13 A ~@3 A ~@9 A ~@3 A ~@7 A ~@16>".pickRestart({
  A: "~@22 a#3 ~@3 d3 ~ g2 ~@3",
})).s("gm_melodic_tom").gain(0.48)

// other · marimba · "#Log Drum"
const marimba = note(`<
  A B A B ~@12 A B A B A B ~@12 A B A B A B ~@8 A B A B A B A B A B A B A B A B A B A B A B C ~
>`.pickRestart({
  A: "~@2 c#6 ~ f#5 ~@3 c#6 ~@9 c#6 ~@3 f#5 ~@3 c#6 ~@5",
  B: "~@2 c#6 ~ f#5 ~@3 c#6 ~@3 c#6 ~@5 c#6 ~@3 f#5 ~@3 c#6 ~@5", C: "~@2 c#6 ~ f#5 ~@3 c#6 ~@9 c#6 ~@3 f#5 ~@9",
})).s("gm_marimba").gain(0.24)

// drums · kick
const kick = s("bd").struct("<[x ~@6 x ~@2 x ~@2 x ~ x]!70 [x ~@6 x ~@2 x ~@5] ~>").gain(0.48)

// drums · snare
const snare = s("sd").struct("<[~@4 x ~@4 x ~@2 x ~@3]!71 ~>").gain(0.32)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<[~@9 x ~@6]!71 ~>").gain(0.24)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@3 A B@7 A B@3 A B@5 A B@7 A B@3 A B@3 A B A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B C ~
>`.pickRestart({
  A: "~ x ~@2 x!12", B: "x!2 ~@2 x!12", C: "x!2 ~@2 x!9 ~@3",
})).gain(0.16)

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

// drums · tambourine
const tambourine = s("tb").struct("<[x!8]!70 [x!7 ~] ~>").gain(0.4)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<[~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!70 [~ x ~ x ~ x ~ x ~ x ~ x ~@4] ~>")
  .gain(0.16)

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

// drums · claves
const claves = s("clave:2").struct("<~@4 [~ x ~@6]!12 ~@6 [~ x ~@6]!12 ~@6 [~ x ~@6]!8 ~@24>").gain(1.57)

// drums · triangle
const triangle = s("triangles:30").struct("<[~ x ~@4 x ~ x ~@7]!71 ~>").gain(3.48)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<[x ~@4 x ~ x ~@8]!71 ~>").gain(3.48)

// drums · shaker
const shaker = s("sh").struct("<[~@3 x ~@9 x ~@2]!70 [~@3 x ~@12] ~>").gain(0.32)

stack(
  epiano2, bass, string_ensemble_1, string_ensemble_1_2, pad_sweep, french_horn, string_ensemble_1_3, melodic_tom,
  marimba, kick, snare, snare_soft, hihat, open_hat, tambourine, tambourine_soft, crash, claves, triangle, triangle_2,
  shaker
)

More by Spice Girls