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 16-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, A@4 for four bars: 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] [f2,f3,g#3,c#4]", 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] [a#2,g#3,a#3,c#4,f4]", 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]@5 ~ [c#3,g#3,b3,d#4,f#4]@10", H: "[f#2,f#3,a#3,c#4,f#4] [c#3,f#3,g#3,c#4,f4]",
  I: "[b2,f#3,a#3,b3,d#4]@2 [b2,f#3,a#3,b3,d#4] [b2,g#3,c#4,f4]", J: "[e2,g#3,b3,e4,f#4] [f#2,f#3,a#3,c#4,f#4]",
  K: "[a2,a3,c#4,e4]@2 ~ [b2,b3,d#4,f#4]@3 [f#2,f#3,a#3,c#4]@10", L: "[b2,a#3,b3,d#4,f#4] [a#2,g#3,a#3,c#4,f4]",
  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] [c#3,g#4,c#5,f5]",
  O: "[b2,f#4,a#4,d#5]@15 ~", // Bmaj7
})).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@7 ~ f1@8", B: "f#1 g#1", C: "f#1@2 c#2 c#1", D: "f#1@8 g#1@5 ~ g#1 a#1", E: "f#1@8 c#2@2 ~ c#2!3 c#1@2",
  F: "b1@7 ~ a#1@8", G: "g#1@5 ~ a#1 b1 c#2@8", H: "g#1 b1 d#2 c#2@5", I: "f#1@7 ~ c#2@8", J: "b1!2",
  K: "f#1@5 ~ f1 f#1 c#2@8", L: "e1@7 ~ f#1@8", M: "a1@2 ~ b1 ~@2 f#1@10", N: "d#2@7 ~ c#2@8", O: "b1@6 ~ b1!4 ~@5",
  P: "f#1!2 ~@2 e1 f#1 ~ f#1 ~ e1 f#1!2 ~ f#1 ~ e1", Q: "f#1!2 ~@2 e1 f#1 ~ f#1 ~ e1 f#1!4 ~ e1",
  R: "f#1!2 ~@2 e1 f#1 ~ f#1 ~ e1 f#1!2 ~@4",
})).s("gm_synth_bass_1").gain(0.3)

// chords · string ensemble 1 · "#Vlo.Strn"
const string_ensemble_1 = note(`<
  A B C D E ~@7 F G F H I J K L M ~@3 N O P@2 Q@2 R S R T U V W X M ~@5 Y Z Y AA U V U V AB AC AD X AE ~@5 AF AG AH AI
  AF AG AH AI AF ~
>`.pickRestart({
  A: "f5 c#5", B: "a#4 c#4", C: "f4 f#4 c#5 c#4 g#4@4", D: "f4 f#4 g#4 a#4 b4 c#5 d#5 f#5", E: "f5@15 ~", F: "d#4 f4",
  G: "f#4", H: "f#4@4 ~@2 f#4@6 f#4@2 [g#4,a#4,b4] [c#5,d#5,f5]", I: "f#5 c#5", J: "b4", K: "f#5@6 f5 f#5 c#6@6 b5 a#5",
  L: "f#5", M: "[e4,b4] [f#4,c#5]", N: "f4", O: "f#4@8 g#4@6 f5 f#5", P: "[f5@8 c#5@22 f5 f#5]/2", Q: "[f5@3 c#6@13]/2",
  R: "[b4,d#5] ~@3 [b4,d#5] ~@3 [c#5,f5] ~@3 [c#5,f5] ~@3", S: "[b4,d#5] ~@3 [b4,d#5] ~@3 [c#5,f#5] ~@3 [c#5,f#5] ~@3",
  T: "[b4,d#5]@6 [c#5,f#5]@6 [f#4,f#5] [g#4,g#5] [a#4,b4,c#5,a#5,b5,c#6] [d#5,f5,d#6,f6]", U: "[f#5,f#6] [c#5,c#6]",
  V: "[b4,b5]", W: "f#6@6 f6 f#6 c#7@6 b6 a#6, f#5 c#5", X: "f#6@12 [f6,f#6] [b5,c#6,d#6] [g#5,a#5] [d#5,f#5], b4",
  Y: "f#5 f5", Z: "d#5 g#5", AA: "f#5@5 ~ f#5@6 [f#4,f#5] [g#4,g#5] [a#4,b4,c#5,a#5,b5,c#6] [d#5,f5,d#6,f6]",
  AB: "f#5@8 ~@6 b5 a#5, c#6@7 ~, ~ g#5", AC: "[b4,f#5]", AD: "[f#5,f#6]@8 c#7@6 b6 a#6, ~ c#5",
  AE: "[e4,b4,b5] [f#4,c#5,c#6]", AF: "e5 f#5 ~@14", AG: "e5 d#5 ~@14", AH: "a4 g#4 ~@14", AI: "e4 f#4 ~@14",
})).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]@3 [b1,b2]@3 [f#1,f#2]@9 ~", 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]@2 ~ [b1,b2]@2 ~ [f#1,f#2]@9 ~",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.6)

// other · pad sweep · "#Shwimmer" · F#sus2 A#m C#sus2 G#sus2 A#m C#sus2 G#sus2 A#m …
const pad_sweep = note(`<
  ~@40
  [[f#4,g#4] [a#4,c#5] [c#5,d#5] [g#4,a#4]!2 [a#4,c#5] [c#5,d#5] [g#4,a#4]!2 [a#4,c#5] [c#5,d#5] [g#4,a#4]!2 [a#4,c#5] [c#5,d#5] [g#4,a#4]]!4
  ~@8
  [[f#4,g#4] [a#4,c#5] [c#5,d#5] [g#4,a#4]!2 [a#4,c#5] [c#5,d#5] [g#4,a#4]!2 [a#4,c#5] [c#5,d#5] [g#4,a#4]!2 [a#4,c#5] [c#5,d#5] [g#4,a#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@4 C D C E F G F G H I A@8 C D C E F G F G H I ~@4 J K J L F G F G F G F G H I@14 ~
>`.pickRestart({
  A: "[f#3 g#3 a#3 b3, c#4]/2", B: "[f#3 g#3 a#3 b3 a#3 ~, c#4@47 ~]/3", C: "[f#3,a#3] [g#3,c#4]",
  D: "[b3,d#4]@7 ~ [b3,d#4]@8", E: "[b3,d#4]@5 ~ [g#3,c#4]@10", F: "[a#3,c#4] [g#3,f4]", G: "[f#3,d#4]",
  H: "[f#3,b3] [c#3,a#3]", I: "e3@2 ~ f#3@2 ~ [c#3,f#3]@10, a3 ~@2 b3 ~@12", J: "[a#4,d#5] [g#4,c#5]",
  K: "[f#4,b4] [c#5,f5]", L: "[f#4,b4]@3 f#4@5, ~@3 b4@3 ~@2",
})).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: "~@11 a#3 ~ d3 g2 ~",
})).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: "~ c#6 f#5 ~ c#6 ~@4 c#6 ~ f#5 ~ c#6 ~@2", B: "~ c#6 f#5 ~ c#6 ~ c#6 ~@2 c#6 ~ f#5 ~ c#6 ~@2",
  C: "~ c#6 f#5 ~ c#6 ~@4 c#6 ~ f#5 ~@4",
})).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