Strudelify
Let's Dance cover art

The Best

Let's Dance

Chris Rea

KeyD majorTempo164 bpm
0:00/0:00
// Let's Dance — Chris Rea
// 164 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 "LeadGtr2" distortion guitar (copy of ch 8 "Lead Gtr" distortion guitar, 0.094 beats late)
// note: Full arrangement: all 175 bars on a 16-step grid, each part at one level. 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 · fretless bass · "Bass Gtr"
const bass = note(`<
  ~ A@4 B C D C E F D C E F D G H@2 I J H@2 K J H@2 L@2 H@2 M J H@2 N@2 H@2 I O P Q R S T Q R@2 U V W X H@2 Y@2 H@2 N@2
  Z AA AB AA AC AD AB AA H@2 I O H@2 L@2 H@2 K J H@2 AE O T Q R S T AF R S AG AH AI X H@2 L@2 H@2 AJ@2 Z AA AB AK Z AA
  AB AD H AL H AL H AL H AM AN S AO AG AH S AO AG AH S AO AG V S AP X AQ AR AS AT AU AV AW AX AQ AY AZ BA BB BC BB BD
  H@2 AE O H@2 M J H@2 I J H@2 I BE BF BG@2 BH BI BJ
>`.pickRestart({
  A: "[d1@31 ~]/4", B: "d1@5 ~@10 d1", C: "d1@5 ~@11", D: "d1@5 ~@2 d1 ~@7 d1", E: "d1@4 ~@11 d1", F: "d1 ~@3",
  G: "d2@3 ~@5 a2@4 g2@4", H: "d2 f#2 a2 b2", I: "g2@4 e2@4 d2@4 e2 ~@2 e2", J: "g2@2 ~ g2 e2@4 d2@4 e2@4",
  K: "g2@4 e2@4 d2@4 e2@2 ~ e2", L: "[g2@4 e2@4 d2@4 e2@2 ~@2 g2@2 ~ g2 e2@4 d2@4 e2@4, ~@15 e2@2 ~@15]/2",
  M: "g2@4 e2@4 d2@3 ~ e2@2 ~ e2", N: "[g2@4 e2@4 d2@4 e2 ~@3 g2@2 ~ g2 e2@4 d2@3 ~ e2@4, ~@15 e2@2 ~@15]/2",
  O: "g2@2 ~ g2 e2@4 d2@3 ~ e2@4", P: "d2@3 ~ d2@2 ~@2 d2@2 ~@2 d2@2 ~@2", Q: "f#2@2 ~@2 f#2@2 ~@2 f#2@2 ~@2 f#2@3 ~",
  R: "g2 ~ g2 ~ g2 ~ g2 ~", S: "g2 ~ g2 ~ g2 ~ g2@2", T: "d2 ~ d2 ~ d2 ~ d2 ~", U: "a2@2 ~@2 a2@2 ~@2 a2@2 ~@2 a2@3 ~",
  V: "b2 ~ b2 ~ b2 ~ b2@2", W: "g2@3 ~ g2@2 ~@2 g2@2 ~@2 g2@4", X: "a2 g2 f#2 e2",
  Y: "[g2@4 e2@4 d2@3 ~ e2@2 ~@2 g2@2 ~ g2 e2@4 d2@4 e2@4, ~@15 e2@2 ~@15]/2", Z: "d2@4 ~@11 a1", AA: "d2 ~@3",
  AB: "d2@5 ~@2 d2 ~@7 a1", AC: "d2@5 ~@10 a1", AD: "d2@3 ~@13", AE: "g2@4 e2@4 d2@3 ~ e2 ~@2 e2",
  AF: "f#2 ~ f#2 ~ f#2 ~ f#2@2", AG: "a2 ~ a2 ~ a2 ~ a2@2", AH: "b2@2 ~@2 b2@2 ~@2 b2@2 ~@2 b2@3 ~",
  AI: "g2@2 ~@2 g2@2 ~@2 g2@3 ~ g2@4", AJ: "[g2@4 e2@4 d2@4 e2 ~@3 g2@2 ~ g2 e2@4 d2@4 e2@4, ~@15 e2@2 ~@15]/2",
  AK: "d2@5 ~@11", AL: "d2 ~@2 d2 f#2@4 a2@4 b2@4", AM: "d2 ~@2 d2 f#2@4 a2@4 a#2@4",
  AN: "b2@3 ~ b2@2 ~@2 b2@2 ~@2 b2@4", AO: "a2 ~ a2 ~ a2 ~ a2 ~", AP: "a2@3 ~ a2@2 ~@2 a2@2 ~@2 a2@3 ~",
  AQ: "d2@3 ~ d2@2 ~ a1 d2@2 ~@2 d2@2 ~ a1", AR: "d2@2 ~@2 d2@2 ~ g2 d2@2 ~@2 d2@2 ~ a1",
  AS: "d2@2 ~@2 d2@2 ~ a1 d2@3 ~ d2@2 ~ a1", AT: "d2@2 ~@2 d2@2 ~ b1 d2@3 ~ d2@2 ~ a1",
  AU: "d2@2 ~@2 d2@2 ~ g2 d2@2 ~@2 d2@2 ~ a2", AV: "d2@2 ~@2 d2@2 ~ a1 d2@3 ~ d2@2 ~ b1",
  AW: "d2@3 ~ d2@2 ~ a1 d2@2 ~@2 d2@3 g2", AX: "d2@3 ~ d2@2 ~ b1 d2@3 ~ d2@2 ~ a1",
  AY: "d2@2 ~@2 d2@2 ~ g2 a2@3 ~ a2@2 ~ a1", AZ: "d2@2 ~@2 d2@2 ~ a1 d2@2 ~@2 d2@2 ~ a1",
  BA: "d2@2 ~@2 d2@3 g2 d2@3 ~ d2@2 ~ a1", BB: "d2@3 ~ d2@2 ~ a1 d2@3 ~ d2@2 ~ a1",
  BC: "d2@3 ~ d2@3 g2 a2@3 ~ a2@2 ~ a1", BD: "d2@2 ~@2 d2@3 g2 d2@3 ~ d2@2 ~ g2", BE: "g2 ~@2 g2 e2@4 d2@3 ~ e2@3 ~",
  BF: "~@4 d2@2 ~ d2 ~@8", BG: "[~@3 a1 b1@2 ~@2 d2@2 ~ d2 b1@2 ~ d2@3 ~@2 d2@2 ~ d2 ~@4 d2 ~@2 d2]/2",
  BH: "~@4 d2 ~@2 d2 ~@4 b1@3 ~, ~@11 a1@2 ~@3", BI: "d1", BJ: "d2 ~@15",
})).s("gm_fretless_bass").gain(0.35)

// chords · overdriven guitar · "SustGuitr"
const overdriven_guitar = note(`<
  A B C D E D C D E B C D E D C D F ~@43 A B C D E D C D E ~@35 A B C D E D C D E B C D E D C D G ~@15 A B C D E D C D E
  B C D E D C D G ~@22
>`.pickRestart({
  A: "~@4 [a3,d4] ~ [g3,b3] ~", B: "[a3,d4]@5 ~@2 [a3,d4]@2 ~@3 [g3,b3]@2 ~@2, ~@11 [a3,d4]@2 ~@3",
  C: "[a3,d4] ~ [g3,b3] ~ [a3,d4] ~ [g3,b3] ~", D: "[a3,d4]@5 ~@2 [a3,d4] ~@4 [g3,b3]@2 ~@2, ~@11 [a3,d4]@2 ~@3",
  E: "[a3,d4] ~@3 [a3,d4] ~ [g3,b3] ~", F: "[a3,d4] ~@3 [a3,d4] ~@3", G: "[a3,d4] ~@7",
})).s("gm_overdriven_guitar").gain(0.36).pan(0.2)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@17 A@8 B@2 C@2 A@8 D@4 E@4 F@7 G H@8 ~@8 A@16 E@8 I@3 G A@8 ~@16 J@2 K@2 J@2 L@2 M@2 N@2 O@2 P@3 ~@15 Q@8 R@2 S@2
  T@4 U V W X Y@2
>`.pickRestart({
  A: "[[f#3,a3] [g3,b3] [f#3,a3] [g3,b3], d4]/8", B: "[f#3,a3]/2", C: "[g3,b3]/2", D: "[[f#3,a3] [g3,b3], d4]/4",
  E: "[~ f#4 [b3,g4]@2, d4, [f#3,a3] ~]/4", F: "[~ f#4 [b3,g4]@2 a3 ~ g4, d4, [f#3,a3]@2 ~@2 [f#4,a4]@2 ~, ~@5 b3@2]/7",
  G: "[c#4,e4,a4]", H: "[[a3,f#4]@32 [b3,g4]@32 [a3,f#4]@32 [b3,g4]@31 ~, d4]/8",
  I: "[a3 ~ g4, d4, [f#4,a4]@2 ~, ~ b3@2]/3", J: "[f#4 g4, [b3,d4]]/2", K: "[a3,c#4,e4]/2", L: "[c#4,e4,a4]/2",
  M: "[f#4 g4, [d4,b4]]/2", N: "[e4,a4,c#5]/2", O: "[[f#4,f#5] [g4,g5], [d4,b4,d5]]/2",
  P: "[~@32 [d4,f#4,d5,f#5]@3 ~@13, [a4,a5]@35 ~@13, [e4,c#5,e5]@2 ~, ~@8 a3@9 ~@7]/3", // D A C#m
  Q: "[[f#4,a4] [g4,b4] [f#4,a4] [g4,b4], d5]/8", R: "[f#4,a4]/2", S: "[g4,b4]/2", T: "[[f#4,a4] [g4,b4], d5]/4",
  U: "~@4 [d5,d6]@2 ~ [d5,d6] ~@8", V: "~@3 a5 b5@2 ~@2 d6 ~@2 d6 b5 ~ d6 ~",
  W: "~@4 d5@2 [d5,d6] ~@5 [d5,d6] ~ [d5,d6] ~, ~@4 d6 ~@11", // D
  X: "~@4 d6@2 ~ [d5,d6] ~@3 [a4,a5] [b4,b5]@3 ~, ~@4 d5 ~@11", Y: "[[d5,a5,f#6]@9 ~@7, d6 ~]/2",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.3)

// other · brass section · "Brass"
const brass_section = note(`<
  ~@17 A B C@2 ~ D E@2 A F ~@3 G H@2 A B ~@3 I@3 J K L@2 J K L@2 M@4 ~ N H@2 ~ O P@2 ~@8 A Q ~@3 R S@2 ~ T U ~@2 V W@2 J
  K L@2 J K L@2 M@4 ~ X W@2 ~ Y@3 ~@49 V Z@2 ~ Y@3 ~ X Z@2 ~ AA@2 AB AC AD@2 AE AF ~
>`.pickRestart({
  A: "~@11 [a3,a4] [b3,b4]@2 ~@2", B: "[d4,d5]@7 [b3,b4]@2 ~@7",
  C: "[~@12 [d4,d5,d6]@2 ~ [d5,d6]@2 ~@15, ~@15 d4 ~@16]/2", // D
  D: "~@3 [a3,a4] [b3,b4]@2 ~@2 [d4,d5]@2 ~ d4 [b3,b4]@4, ~@11 d5@2 ~@3", // A B D B
  E: "[[d4,d5]@2 ~@10 [d4,d5,d6]@3 [d4,d5,d6]@2 ~@15]/2", F: "[d4,d5]@7 b4@2 ~@7, ~@7 b3 ~@8",
  G: "~@3 [a3,a4] [b3,b4]@2 ~@2 [d4,d5]@2 ~ [d4,d5] [b3,b4]@4", // A B D B
  H: "[[d4,d5]@2 ~@10 [d4,d5,d6]@2 ~ [d5,d6]@2 ~@15, ~@15 d4 ~@16]/2", // D
  I: "[~@3 [a3,a4] [b3,b4]@2 ~@2 [d4,d5] ~@2 d4 [b3,b4]@2 ~ d5@2 ~@11 [d4,d5,d6]@2 ~ [d4,d5,d6]@2 ~@15, ~@11 d5@2 ~@2 d4 ~@32]/3", // A B D B D
  J: "[d3,d4]", K: "[f#3,f#4]", L: "[g3,g4]/2", M: "[[a3,a4]@63 ~]/4",
  N: "~@3 a3 [b3,b4]@2 ~@2 [d4,d5]@2 ~ d4 [b3,b4]@3 ~, ~@3 a4@2 ~@6 d5@2 ~@3", // B D B
  O: "~@3 [f4,f5] [e4,e5]@2 ~@2 [d4,d5]@2 ~@2 [e4,e5]@3 [d4,d5]", // F E D E D
  P: "[~@12 [d4,d6]@2 ~ [d4,d6]@2 ~@15, ~@12 d5@3 ~@17]/2", Q: "[d4,d5]@6 ~ b4@2 ~@7, ~@7 b3 ~@8",
  R: "~@3 [a3,a4] [b3,b4]@2 ~@2 [d4,d5]@2 ~ [d4,d5] [b3,b4]@2 ~@2", // A B D B
  S: "[[d4,d5]@2 ~@10 [d4,d5,d6]@2 ~ [d4,d6]@2 ~@15, ~@15 d5 ~@16]/2", // D
  T: "~@3 [a3,a4] [b3,b4]@2 ~@2 [d4,d5] ~@2 d4 [b3,b4]@2 ~@2, ~@11 d5@2 ~@3", U: "[d4,d5] ~@7",
  V: "~@3 [a3,a4] [b3,b4]@2 ~@2 [d4,d5]@2 ~ d4 [b3,b4]@2 ~@2, ~@11 d5@2 ~@3", // A B D B
  W: "[[d4,d5]@2 ~@10 [d4,d5,d6]@2 ~ [d4,d5,d6]@2 ~@15]/2", // D
  X: "~@3 [a3,a4] [b3,b4]@2 ~@2 [d4,d5] ~@2 [d4,d5] [b3,b4]@2 ~@2", // A B D B
  Y: "[~@3 [f4,f5] [e4,e5]@2 ~@2 [d4,d5]@2 ~@2 [e4,e5]@3 [d4,d5]@2 ~@11 [d4,d5,d6]@2 ~ [d4,d5] ~@16, ~@31 d6@2 ~@15]/3", // F E D E D
  Z: "[[d4,d5]@2 ~@10 [f4,f5]@2 ~ [d4,d5]@2 ~@15]/2", // D F D
  AA: "[~@3 [f4,f5] [e4,e5]@2 ~@2 [d4,d5]@2 ~@2 [e4,e5]@3 d5@2 ~@11 [d4,d5,d6]@2 ~ [d4,d5,d6], ~@15 d4 ~@16]/2", // F E D E D
  AB: "~@4 [d4,d5,d6]@2 ~ [d4,d5] ~@4 [d4,d5,d6]@2 ~ [d4,d5,d6], ~@7 d6@2 ~@7", // D
  AC: "~@4 [d4,d5,d6]@2 ~ [d5,d6]@2 ~@7, ~@7 d4 ~@8", // D
  AD: "[~@3 [a3,a4] [b3,b4]@2 ~@2 d5@2 ~ [d4,d5] [b3,b4]@2 ~ [d4,d5]@2 ~@3 [d4,d5,d6]@2 ~ [d5,d6]@2 ~@3 [d4,d5,d6]@2 ~ [d4,d5,d6], ~@8 d4 ~@14 d4 ~@8]/2", // A B D B D
  AE: "~@4 [d4,d5,d6]@2 ~ [d4,d6] ~@3 [a3,a4] [b3,b4]@2 ~@2, ~@7 d5@2 ~@7", AF: "[d4,a4,d5,f#5]",
})).s("gm_brass_section").gain(0.64).pan(0.8)

// other · electric guitar clean · "E.Guitar"
const electric_guitar_clean = note(`<
  ~@17 A@24 ~@12 A@8 B@4 C@3 D A@16 ~@12 A@12 E@4 A@7 ~@17 A@7 F@8 A@17 ~@4 G ~
>`.pickRestart({
  A: "~@3 a3 b3 ~@2 d4 ~@3 a3 b3 ~@2 d4", B: "[a3@28 b3@3 a3@30 ~@3, [d3,d4]@61 ~@3]/4",
  C: "[a3@28 b3@2 ~ a3@17, [d3,d4]@47 ~]/3", D: "[d3,a3,d4]@2 ~ [d3,a3,d4]!2 ~@6 [d3,a3,d4] ~@4",
  E: "~@3 a3 b3 ~@2 f4 ~@3 a3 b3 ~@2 d4", F: "~@3 a3 b3 ~@2 d4 ~@3 a3 b3 ~@2 f4", G: "[d4,f#4,a4]",
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.7)

// other · distortion guitar · "Lead Gtr"
const distortion_guitar = note(`<
  ~@8 A@4 B C@2 D@2 ~@74 E@2 F G H@2 ~@23 I J@3 K L M N O P@2 Q@2 R S T U ~@38
>`.pickRestart({
  A: "[~@8 c4@53 ~@3]/4", B: "g4", C: "[a#4@31 ~]/2", D: "[c5@31 ~]/2", E: "[~@6 a5@4 g#5 ~ a5 ~ g#5 ~]/2", F: "g5@7 ~",
  G: "a5@13 ~@3", H: "[c6@15 ~]/2", I: "~@13 f#3 a3 ~, ~@6 e3 ~", J: "[a3@3 ~ a3@19 ~ e3@3 ~ e3@19 ~]/3",
  K: "e3@3 ~@9 e3 f#3@2 a3", L: "a3@3 ~ a3@3 a3@7 ~@2", M: "a3@2 c4 ~ a3@11 ~",
  N: "[d4,f#4]@2 ~@2 b3@2 a3@2 b3@3 b3@3 a3 ~, ~@3 [d4,f#4]@2 ~@11", O: "a3@2 ~ a3@9 ~@4",
  P: "[e4@11 ~ e4@2 ~ e4@11 ~@6]/2", Q: "[e4@10 ~@5 e5@9 ~@4 f#4@3 a4]/2", R: "a4@2 ~ a4@12 ~",
  S: "~@3 e5@2 d5 ~@2 e5@2 ~ d5 ~ e5@2 ~", T: "e5@4 d5 b4@9 ~@2", U: "~@2 c5@13 ~",
})).s("gm_distortion_guitar").gain(0.28).pan(0.9)

// drums · kick
const kick = s("bd").struct("<~ x!16 [x!2]!156 x!2>").gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  A B@7 C B@7 C B@23 C B@27 D B@15 C B@11 C B@15 C B@7 E B@15 D B@15 D B@17 F G H I ~
>`.pickRestart({
  A: "~@8 x!2 ~ x!2 ~@2 x", B: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", C: "x ~@2 x!2 ~@2 x!3 ~ x!2 ~@2 x",
  D: "x!2 ~ x!2 ~@2 x!3 ~ x!2 ~@2 x", E: "x!2 ~ x!2 ~@2 x!2 ~@2 x!2 ~@2 x", F: "~@3 x!2 ~@3 x ~@2 x!2 ~@2 x",
  G: "~@4 x ~@2 x ~@4 x ~@2 x", H: "~@4 x ~@2 x ~@3 x!2 ~@2 x", I: "x!16",
})).gain(0.3)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!169 ~@5>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@120 [~@7 x ~@8] ~@54>").gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@7 A ~@7 A ~@15 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@15 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@7 A ~@6 A@2 ~@7 A ~@6 B C ~ B C A@2
>`.pickRestart({
  A: "x", B: "~@4 x ~@2 x ~@4 x ~@2 x", C: "~@4 x ~@2 x ~@8",
})).gain(0.45)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!2 ~@2] [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!170 ~@4>").gain(1.51)

stack(
  bass, overdriven_guitar, string_ensemble_1, brass_section, electric_guitar_clean, distortion_guitar, kick, snare,
  clap, mid_tom, crash, cabasa
)

More by Chris Rea