Strudelify

I Like to Move It

Reel 2 Real

KeyC minorTempo122 bpm
0:00/0:00
// I Like to Move It — Reel 2 Real
// 122 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 118 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@5 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 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 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 A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "c2 ~ c2 ~ c2 ~ c2 g2", B: "eb2 ~ eb2 ~ d2 f2 d2 g2",
})).s("gm_fretless_bass").gain(0.48)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B A B A B C D C 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 ~@4 C D C
  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 A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "c3 ~ c3 ~ c3 ~ c3 g3", B: "eb3 ~ eb3 ~ d3 f3 d3 g3", C: "c3 ~@5 c3 g3", D: "eb3 ~@5 d3 g3",
})).s("gm_lead_1_square").gain(0.48)

// chords · lead 8 bass lead · "BASS&LEAD"
const lead_8_bass_lead = note(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@27 A ~@3 A ~@27 A ~@3 A ~@3 A ~@3 A ~@23 A ~@3 A B
>`.pickRestart({
  A: "~@6 [c4,g4]!2", B: "[c4,g4] ~@7",
})).s("gm_lead_8_bass_lead").gain(0.48)

// chords · lead 8 bass lead · "BASS&LEAD" · soft notes · C5
const lead_8_bass_lead_soft = note("<~@117 [~ [c4,g4]!3 ~@4]>").s("gm_lead_8_bass_lead").gain(0.24)

// other · lead 3 calliope · "CALLIOPE"
const lead_3_calliope = note("<~@4 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@31 B@8 ~@32 B@8 ~@21>".pickRestart({
  A: "[e5@3 ~]/2", B: "[~ e5@3]/2",
})).s("gm_lead_3_calliope").gain(0.36)

// other · lead 3 calliope · "CALLIOPE" · soft notes
const lead_3_calliope_soft = note("<~@3 A ~@3 A ~@3 A ~@3 A ~@33 B ~ B ~ B ~ B ~@33 B ~ B ~ B ~ B ~@22>".pickRestart({
  A: "~@21 e4 ~@2", B: "~@9 e4 ~@14",
})).s("gm_lead_3_calliope").gain(0.06)

// other · bagpipe · "BAG PIPE"
const bagpipe = note(`<
  ~@41
  [~@6 bb3 ~@3 bb3 ~@2 f4 ~@2 c4 ~@4 c4 ~@2]!16
  ~@16
  [~@6 bb3 ~@3 bb3 ~@2 f4 ~@2 c4 ~@4 c4 ~@2]!16
  [~@3 c4 ~@3 c4 ~@4 c4 ~@3 c4 ~@4 c4 ~@2]
  ~@28
>`).s("gm_bagpipe").gain(0.37)

// drums · kick
const kick = s("bd").struct("<~@9 A@8 ~@8 A@15 ~ A@15 ~ A@15 ~ A@20 ~@4 A@16 ~@5>".pickRestart({
  A: "x!4",
})).gain(0.6)

// drums · clap
const clap = s("cp").struct("<[x ~@3 x ~@4 x ~@2 x ~@3 x ~@4 x ~@2] [x!6 ~@2] ~@116>").gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@9 A@8 ~@8 B@15 ~ B@15 ~ B@15 ~ B@20 ~@8 B@12 ~@5>".pickRestart({
  A: "~@5 x ~@3 x ~@7 x ~@3 x ~@2", B: "~@5 x!2 ~@2 x ~@7 x!2 ~@2 x ~@2",
})).gain(0.42)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9
  [~ x ~ x ~ x ~ x]!8
  ~@8
  [~ x ~ x ~ x ~ x]!68
  [~ x ~ x ~ x ~@2]!2
  ~@2
  [~ x ~ x ~ x ~ x]!19
  ~@2
>`).gain(0.42)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~ [~@3 x!2 ~@4 x!2 ~@4 x!2 ~@4 x!2 ~]!4 ~@113>").gain(0.18)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A B C@2 D C@3 D ~@7 A B C@14 A B C@14 A B C@14 A B C@19 ~@3 A D ~@2 E C ~@2 D C@8 ~@4 D
>`.pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "x!2", D: "x", E: "~@7 x",
})).gain(0.18)

stack(
  bass, lead_1_square, lead_8_bass_lead, lead_8_bass_lead_soft, lead_3_calliope, lead_3_calliope_soft, bagpipe, kick,
  clap, snare, hihat, open_hat, open_hat_soft, crash
)