Strudelify

Sock It 2 Me

Missy Elliott

KeyG minorTempo83 bpm
0:00/0:00
// Sock It 2 Me — Missy Elliott
// 83 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(83/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// 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 B A B A B A C D E D E D E D E A B A B A B A F D E D E D E D G A B A B A B A C A B A B A B A B A B A B A B A B A B A
  B A B A B D E D E D E D G D E D E ~@4 A B A B A B A C
>`.pickRestart({
  A: "[g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~", // Gm Bb
  B: "[eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~", // Eb
  C: "[eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~@9", // Eb
  D: "[g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~", // Gm
  E: "[c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~", // Cm F
  F: "[eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [f4,a4,c5] ~ [f4,a4,c5] ~", // Eb F
  G: "[c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~@9", // Cm
})).s("gm_piano").gain(0.13).pan(0.4)

// chords · synth strings 2 · "synstr2"
const synth_strings_2 = note("<~@8 A B A B A B A B ~@8 A B A B A B A C ~@32 A B A B A B A C A B A B ~@12>".pickRestart({
  A: "[g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] ~", // Gm
  B: "[c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~", // Cm F
  C: "[c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~@9", // Cm
})).s("gm_synth_strings_2").gain(0.06)

// other · brass section · "brass1"
const brass_section = note(`<
  A B A B A B A B ~@8 A B 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 A B A B A B A B A B ~@16 A B A B A
  B A B
>`.pickRestart({
  A: "~@2 [g2,g3]@6 ~@2 [g2,g3] [a2,a3] [bb2,bb3] ~ [f2,f3] ~", B: "[eb2,eb3] ~",
})).s("gm_brass_section").gain(0.4)

// other · trombone
const trombone = note(`<
  A B A B A B A B ~@8 A B 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 A B A B A B A B A B ~@16 A B A B A
  B A B
>`.pickRestart({
  A: "~@2 g2@6 ~@2 g2 a2 bb2 ~ f2 ~", B: "eb2 ~",
})).s("gm_trombone").gain(0.34).pan(0.8)

// bass · electric bass finger · "fingerbas"
const bass = note(`<
  A B C D A B C D E F E D E F E D A B C D A B C D E F E D E F E D 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
  D A B C D E F E D E F E D E F E D E F E D A B C D A B C D
>`.pickRestart({
  A: "g2 ~ g2@6 g2 ~@5 f2 ~", B: "g2 ~@7 g2 ~@6 f2", C: "g2 ~ g2@6 g2 ~ g2 a2 bb2 ~ f2 ~", D: "g2 ~@7 g2 ~ f2 ~ g2!4",
  E: "g2 ~@7 g2 ~@7", F: "g2 ~@7 g2 ~@6 g2",
})).s("gm_electric_bass_finger").gain(0.22)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B C A@2 D A@3 B C A@2 D A@3 B C A@2 D A@3 B C A@2 D A@3 B C A@2 D A E F B C A@2 G A@3 B C A@2 G A@3 B C A@2 G A@3
  H F A@2 G A@3 B C A@2 D A@3 B C A@2 D
>`.pickRestart({
  A: "x ~ x ~@2 x ~@2 x ~ x ~@3 x ~", B: "x ~ x ~@2 x ~@2 x ~@3 x ~ x ~", C: "~ x!2 ~@2 x ~@2 x ~ x ~@3 x ~",
  D: "x ~ x ~@2 x ~@6 x ~ x ~", E: "x ~ x ~@2 x ~@10", F: "x ~@4 x ~@2 x ~ x ~@3 x ~", G: "x ~ x ~@2 x ~@4 x ~ x ~ x ~",
  H: "~ x ~@4 x!2",
})).gain(0.23)

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

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

stack(piano, synth_strings_2, brass_section, trombone, bass, kick, snare, hihat)