Strudelify

Little Blonde Plaits

Chris Rea

KeyE minorTempo93 bpm
0:00/0:00
// Little Blonde Plaits — Chris Rea
// 93 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 4 "Vibraphone" named as a mallet, played on vibraphone (its harmonica patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 100 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(93/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 · electric bass finger · "Bass"
const bass = note(`<
  ~ A@4 B@4 A@2 ~@2 C D E D F G H G H I F G F G F G F G J I F G F G F G F G F K F G ~@2 L M@2 N O@2 P Q R S T U V O W@2
  F G H G H I F K F G F G F G F X F G F X F G F X F G F X F G F X F G F X ~
>`.pickRestart({
  A: "[a2,a3]/2", B: "[e2,e3]/2", C: "[e2,e3]@7 b2", D: "e3@7 b2", E: "e2@7 b2", F: "b2@9 ~@3 b2@4 c3@10 ~@2 c3@4",
  G: "a2@9 ~@3 a2@4 e2@9 ~@3 e2@4", H: "b2@9 ~@3 b2@4 c3@9 ~@3 c3@4", I: "a2@9 ~@3 a2@4 e2@6 ~@10",
  J: "b2@12 b2@4 c3@9 ~@3 c3@4", K: "a2@9 ~@3 a2@4 d3@9 ~@3 d3@4", L: "a2@8 ~@4 a2@4 a3 ~@3 a3@12",
  M: "[a2@9 ~@3 a2@4 a3 ~@3 a3@11 a2@9 ~@4 a2@4 a3@2 ~@2 a3@12]/2", N: "a2@8 ~@3 a2@5 a3 ~@3 a3@8 a2@2 ~@2",
  O: "e2@9 ~@3 e2@4 e3 ~@3 e3@8 e2@2 ~@2", P: "e2@9 ~@3 e2@4 e3@2 ~@2 e3@7 ~ e2@2 ~@2", Q: "e2@8 ~@4 e2@4 e3 ~@3 e3@12",
  R: "a2@9 ~@3 a2@4 a3 ~@3 a3@12", S: "a2@9 ~@3 a2@4 a3 ~@3 a3@7 a2 ~@4", T: "a2@9 ~@3 a2@4 a3 ~@3 a3@8 a2@2 ~@2",
  U: "a2@8 ~@4 a2@4 a3@2 ~@2 a3@8 a2@3 ~", V: "e2@9 ~@3 e2@4 e3@2 ~@2 e3@8 e2@2 ~@2",
  W: "[e2@9 ~@3 e2@4 e3@2 ~@2 e3@8 e2@2 ~ e2@8 ~@5 e2@4 e3 ~@3 e3@8 e2@3 ~]/2", X: "a2@9 ~@3 a2@4 d3@9 ~@3 d3@3 ~",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · string ensemble 2 · "Jp Strings"
const string_ensemble_2 = note(`<
  ~ A@4 B@8 C@2 ~@2 D@6 E@8 F@2 E@8 G@2 H@4 A@4 B@8 C@2 ~@2 D@6 G@2 E@6 G@2 E@2 G@2 E@2 G@2 E@2 G@2 E@2 G@2 E@2 G@2 ~
>`.pickRestart({
  A: "[[e4,g4,b4,e5]@55 ~@9]/4", B: "[~ d5@119 ~@8 [e4,g4,b4]@118 ~@10, [d4,f#4,a4]@119 ~@8 e5@117 ~@12]/8",
  C: "[d4,f#4,a4,d5]/2", // D
  D: "[[b3,d4,f#4]@15 [c4,e4,g4]@16 [a3,c4,e4]@16 [b3,e4,g4]@16 [b3,d4,f#4]@16 [c4,e4,g4]@16 [a3,c4,e4]@16 [b3,e4,g4]@16 [b3,d4,f#4]@16 [c4,e4,g4]@16 ~ a3@15 ~ g4@15 ~, ~@159 [c4,e4]@16 [b3,e4]@15 ~@2]/6", // Bm C Am Em Bm C Am Em …
  E: "[[b3,d4,f#4]@15 [c4,e4,g4]@16 [a3,c4,e4]@16 [b3,e4,g4]@16 ~]/2", // Bm C Am Em
  F: "[[b3,d4,f#4]@15 [c4,e4,g4]@16 ~ a3@15 ~ g4@15 ~, ~@31 [c4,e4]@16 [b3,e4]@15 ~@2]/2", // Bm C E5
  G: "[[b3,d4,f#4]@15 [c4,e4,g4]@16 [a3,c4,e4]@16 [d4,f#4,a4]@16 ~]/2", // Bm C Am D
  H: "[[b3,d4,f#4]@15 [c4,e4]@16 [a3,c4,e4]@15 ~ [b3,e4,g4]@67 ~@14, ~@15 g4@31 ~@82]/4", // Bm C Am Em
})).s("gm_string_ensemble_2").gain(0.25)

// other · vibraphone
const vibraphone = note(`<
  ~ A ~@15 B C@2 D@2 E@20 F@2 G@2 ~@17 B C@2 D@2 E@10 H B E@2 H B E@2 H B E@2 H B E@2 H B E@2 H ~
>`.pickRestart({
  A: "~@2 e4@11 ~@19, [e3,b3]@7 ~@9, b4 ~@15, ~ g4@2 ~@29", B: "~@8 f#5@4 b5@3 ~ g5@7 ~ g5@4 f#5@4, ~@8 d5@3 ~@21",
  C: "[e5@8 g5@8 e5@24 [d5,f#5]@4 b5@4 g5@7 ~ g5@4 f#5@4]/2", // D
  D: "[e5@7 g5@9 e5@24 f#5@4 b5@3 ~ g5@7 ~ g5@4 f#5@4, ~@40 d5@3 ~@21]/2",
  E: "[e5@8 g5@8 e5@24 f#5@4 b5@3 ~ g5@7 ~ g5@4 f#5@4, ~@40 d5@3 ~@21]/2",
  F: "[e5@8 g5@8 a5@24 f#5@4 b5@3 ~ g5@7 ~ g5@4 f#5@4, ~@40 d5@3 ~@21]/2", G: "[e5 g5 e5@3 ~@3]/2",
  H: "e5@8 g5@8 a5@15 ~",
})).s("gm_vibraphone").gain(0.35)

// other · electric guitar jazz · "Jazz Guitar"
const electric_guitar_jazz = note("<~@17 A ~@10 B C D ~@11 B C D ~@18 E F G H ~@33>".pickRestart({
  A: "b3@7 ~@9, a3 ~@31", B: "~@28 d4@2 b3 ~", C: "d4 ~ e4@30", D: "~@3 g4@4 a4@4 g4@5 f#4@4 g4@4 e4@8",
  E: "~@4 b3@4 e4@3 ~ f#4@4 g4@4 f#4@4 e4@4 d4@3 ~, ~@8 d#4 ~@23", F: "e4@2 d4 b3@5",
  G: "~@4 b3@4 e4@3 ~ f#4@4 g4@4 f#4@4 g4@3 ~ b4@4, ~@8 d#4 ~@23", H: "a4@8 g4@3 ~ e5@13 ~@7, ~@12 d#5 ~@19",
})).s("gm_electric_guitar_jazz").gain(0.45)

// other · guitar harmonics · "Harm.lead echo"
const guitar_harmonics = note("<~ A@2 B@4 C@2 D@4 E ~@19 F ~@13 G@2 B@4 C@2 D@4 E ~@40>".pickRestart({
  A: "[~@8 b5@12 e5@32 ~@5 b5@7]/2",
  B: "[e5@3 g5@4 a5@2 g5@2 ~ b5@8 e5@26 ~@6 e5@4 b5@4 d6@12 a5@28 [f#5,g5] ~@2 a4@19 ~@6, ~@12 a5 ~@43 a#5 ~@45 d5@4 ~@22]/4", // Gmaj7
  C: "[~@20 a5@2 d6@2 b5@23 ~@4 b5@4 f#6@6 ~ f#6@2]/2",
  D: "[d6@4 ~ d6@3 b5@2 ~ g5@31 ~ e5 ~ a5@2 b5@3 ~ b5@2 a5@2 g5@2 ~ d6@2 b5@48 ~@20, ~@44 g5@2 ~@11 a5@2 ~@69]/4",
  E: "e5 ~ a5 ~ b5 a5 ~ f#5@21 ~@4", F: "~@4 f#5@2 g5@2 f#5@2 d5 ~ b4@13 ~@7",
  G: "[~@8 b5@12 e5@32 ~@5 b5@7, ~@8 a#5 ~@55]/2",
})).s("gm_guitar_harmonics").gain(0.32).pan(0)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!2 ~@3]!98 ~>").gain(0.45)

// drums · congas
const congas = s("conga:13").struct("<~ [~@2 x!2 ~@2 x!2]!98 ~>").gain(1.11)

// drums · congas
const congas_2 = s("conga:18").struct("<~ [~ x ~@3 x ~@2]!98 ~>").gain(1.11)

// drums · congas
const congas_3 = s("conga:33").struct("<~ [x!2]!98 ~>").gain(1.11)

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

stack(
  bass, string_ensemble_2, vibraphone, electric_guitar_jazz, guitar_harmonics, kick, congas, congas_2, congas_3, cabasa
)

More by Chris Rea