Strudelify

Move It

Cliff Richard

KeyE majorTempo164 bpm
0:00/0:00
// Move It — Richard Cliff
// 164 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 95 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(164/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@6 A@18 B@4 A@4 C@2 B@2 A@6 B@2 A@2 C@2 B@2 A@4 ~@2 A@14 D ~ A@2 B@4 A@4 C@2 B@2 A@8 E
>`.pickRestart({
  A: "e2@2 g#2@2 b2@2 c#3 b2", B: "a1@2 c#2@2 e2@2 f#2 e2", C: "b1@2 d#2@2 f#2@2 g#2 f#2", D: "e2 ~@3",
  E: "e2@4 g#2@4 b2@4 c#3 ~@3",
})).s("gm_acoustic_bass").gain(0.38)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A@2 B ~ C@5 D E F ~ G H I@2 ~ J K ~ L M N ~ O P Q ~@2 R S ~ T@2 U V W@2 X Y@2 Z AA Y@2 AB@2 AC AD AE AF ~@3 C@3 ~ G E
  F ~ G H I@2 ~ AG AH AI ~ AJ AK ~ O AL@2 ~@2 AM AN ~ T@2 U V W@2 X AO AP AQ AR AS
>`.pickRestart({
  A: "[~ [d4,g4] [c#4,f#4]@2 [b3,e4]@2 [c#4,f#4] [b3,e4]@2 [a3,c#4] [g3,b3]@2 [e3,a3]@2 [d3,g3]@2]/2", B: "e3@7 ~",
  C: "e3!8", D: "e3!7 [e3,b4]", E: "c#5!4", F: "c#5@2 b4 g#4 b4@2 ~@2", G: "~@7 b4", H: "c#5@2 b4 c#5@2 b4 c#5@2",
  I: "[b4 c#5@2 b4 c#5@2 b4@3 ~@7]/2", J: "[c#5,g5] ~ [c#5,g5] ~ [c#5,g5]@4 ~@2 [c#5,g5] ~ [c#5,g5]@4",
  K: "~ e5 c#5 b4@2 c#5 b4@2", L: "~@14 b4 ~", M: "c#5@2 b4 a4 g4 a4 g4@2", N: "e4@5 ~@11", O: "~@14 [c#4,e4] ~",
  P: "[c#4,e4]@3 ~ [c#4,e4] ~ [c#4,e4] ~ [c#4,e4]@3 ~ [c#4,e4] ~ [c#4,e4] ~", // C#m
  Q: "[c#4,e4]@3 ~ [c#4,e4] ~ [c#4,e4] ~ [c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2", // C#m
  R: "[g#4,b4]@4 [g#4,b4]@2 [g#4,b4] ~ [g#4,b4]@4 [g#4,b4]@2 [g#4,b4] ~", // G#m
  S: "[g#4,b4]@4 [g#4,b4]@2 [g#4,b4] ~ [g#4,b4]@2 [g#4,b4]@2 [g#4,b4]@2 [g#4,b4]@2", // G#m
  T: "[~@10 [b3,d#4,f#4]@2 ~@2 [a3,c#4,e4]@11 ~@7]/2", U: "~@7 f#4", V: "g4@2 e5 g4@2 e5 g4@2",
  W: "[e5 g4@2 e5 g4@2 e5 g4@2 e5 g4@2 e5!4]/2", X: "e5!6 g4!2", Y: "[g#4,b4,e5]@2 [g#4,b4,e5]!6",
  Z: "[a4,c#5] [a4,c#5,f#5]!7", AA: "[a4,c#5,f#5] [a4,c#5,f5]@2 [a4,c#5,f#5]@2 [a4,c#5,f#5]!3",
  AB: "d#4@2 d#4!2 [d#4,f#4,b4]!4, b3@9 ~@7, ~ f#4 ~@2", AC: "[a3,c#4,e4]@2 [c#4,e4,a4]!2 [a3,c#4,e4]@2 [c#4,e4,a4]!2",
  AD: "[a3,c#4,e4]@2 [c#4,e4,a4]!6", AE: "[g#4,b4]@2 [g#4,b4,e5]!6", AF: "~ e5 [g#4,b4,e5]!6, [g#4,b4] ~@3",
  AG: "~ c#5@2 b4 c#5@2 b4 e5", AH: "~ e5!7", AI: "e5 ~@7", AJ: "~ [g4,a#4] [g#4,b4] ~ [g4,a#4] [g#4,b4] ~ [g4,a#4]",
  AK: "[g#4,b4] ~ [g4,a#4] [g#4,b4] [e4,g#4]!2 [e4,g#4]@2", AL: "[c#4,e4]@2 [c#4,e4]!6",
  AM: "[b4,e5]!2 [e5,g5] [b4,e5] [e5,g5] [b4,e5]!3", AN: "[e5,g5] [b4,e5] [e5,g5] [b4,e5] [e5,g5] [b4,e5]!3",
  AO: "~@4 b4@7 ~ b4 ~ b4@2", AP: "d5@4 b4 ~ d5@4 b4 ~ d5@4", AQ: "b4 ~ d5@4 b4 ~ d5@3 ~ b4@4",
  AR: "~@2 e5@3 ~ e5@3 ~ e5@3 ~ e5@2", AS: "~@2 b4 ~ a4 ~ b4@2 a4 ~ b4@2 ~@4",
})).s("gm_electric_guitar_clean").gain(0.34).pan(0.6)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean_2 = note(`<
  ~@2 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 D A B A B E F C D A B A B A B C D A B E F C D A B A B A B A B A
  B A B A B A B A B A B G ~ A B C D C D A B A B E F C D A B A B A B A B H
>`.pickRestart({
  A: "e2!3 [e2,b2] e2!2 [e2,b2]!2, b2@3 ~ b2@2 ~@2", B: "e2!8, b2@3 b2@3 b2@2",
  C: "a2!3 [a2,e3] a2!2 [a2,e3]!2, e3@3 ~ e3@2 ~@2", D: "a2!8, e3@3 e3@3 e3@2",
  E: "b2!3 [b2,f#3] b2!2 [b2,f#3]!2, f#3@3 ~ f#3@2 ~@2", F: "b2!8, f#3@3 f#3@3 f#3@2", G: "[e2,b2] ~@7",
  H: "e2!3 [e2,b2] e2!2 ~@2, b2@3 ~ b2@2 ~@2", // E5
})).s("gm_electric_guitar_clean").gain(0.29).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@6 [x!2]!48 x ~ [x!2]!14 x ~ [x!2]!23>").gain(0.52)

// drums · snare
const snare = s("sd").struct("<~@5 A B@33 C B@13 D E A B@13 F E A B@23>".pickRestart({
  A: "~@5 x!3", B: "~ x ~ x", C: "~@2 x ~@3 x!2", D: "~@2 x ~@2 x!3", E: "x", F: "~@4 x ~@6 x!2 ~ x ~",
})).gain(0.52)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@5 A ~@33 A ~@13 A ~ A ~@15 A ~@23>".pickRestart({
  A: "~@11 x ~@4",
})).gain(0.29)

// drums · ride
const ride = s("rd").struct("<~@6 A@47 B ~@2 A@14 C ~ A@22 D>".pickRestart({
  A: "x ~ x!3 ~ x!2", B: "x ~ x!3 ~@3", C: "x", D: "x ~ x!3 ~ x ~",
})).gain(0.4)

stack(bass, electric_guitar_clean, electric_guitar_clean_2, kick, snare, snare_soft, ride)

More by Cliff Richard