Strudelify

Some People

Cliff Richard

KeyD majorTempo110 bpm
0:00/0:00
// Some People — Cliff Richard
// 110 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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 · lead 8 bass lead
const bass = note(`<
  ~@2 A@2 B@2 A C D@2 A@2 B@2 A C D@2 E@2 F G H A B@2 I J K@2 L M K@2 M@2 K@2 M@2 K N O@2 P@2 Q@2 R K M@2 S@2 A@2 B@2
  A@2 B@2 P@2 Q@2 R K M@2 S@2 A@2 B@2 A@2 B@2 P@2 Q@2 P@2 Q@2 P@2 Q@2 A@2 B@2 A@2 B@2 T
>`.pickRestart({
  A: "d1 ~@5 d1 ~@9", B: "g1 ~@5 g1 ~@9", C: "b1 ~@5 b1 ~@9", D: "e1 ~@5 e1 ~@9", E: "f1 ~@5 f1 ~@9",
  F: "a#1 ~@5 a#1@2 ~@8", G: "a#1 ~@5 a#1 ~@9", H: "a1 ~@5 a1@2 ~@8", I: "c2 ~@5 c2@2 ~@8", J: "c2 ~@5 c2 ~@9",
  K: "d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~", L: "[g1,a1] ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  M: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", N: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  O: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~", P: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~",
  Q: "a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~", R: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  S: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", T: "d1@3 ~",
})).s("gm_lead_8_bass_lead").gain(0.32)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@28 A@2 B@2 A@2 C@2 ~@8 D@2 E@2 F G H@2 I@2 ~@8 D@2 J@2 F G B@2 K@2 ~@8 D@2 J@2 D@2 E@2 D@2 L ~@10
>`.pickRestart({
  A: "[[d2,a2]@31 ~]/2", B: "[[g2,d3]@31 ~]/2", C: "[g2,d3]/2", D: "[[f2,c3]@31 ~]/2", E: "[[a#2,f3]@15 ~]/2",
  F: "[a2,e3]@15 ~", G: "[d2,a2]@15 ~", H: "[[g2,d3]@15 ~]/2", I: "[[c3,g3]@31 ~]/2", J: "[[a#2,f3]@31 ~]/2",
  K: "[c3,g3]/2", L: "[a#2,f3] ~@7",
})).s("gm_distortion_guitar").gain(0.1).pan(0.1)

// other · pad choir
const pad_choir = note("<~@28 A B C D@2 B C E@2 ~@64>".pickRestart({
  A: "~ a3 d4 a4", B: "g4 f#4 d4 a3", C: "b3", D: "[g4@6 f#4@6 d4@8 a3@3 ~ d4@4 a4@4]/2",
  E: "[g4@6 f#4@5 ~ d4@6 ~@14]/2",
})).s("gm_pad_choir").gain(0.42).pan(0.7)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@2 A@2 B@2 C D E@2 F@2 G@2 C H E@2 I@2 J@2 K L M@2 N@2 A@2 O@2 A@2 B@2 A@2 P@2 Q@2 E@2 I@2 J@2 K R S@2 N@2 A@2 P@2
  A@2 P@2 I@2 J@2 K L M@2 N@2 A@2 P@2 A@2 P@2 I@2 T@2 I@2 T@2 I@2 U@2 V@2 P@2 V@2 B@2 W
>`.pickRestart({
  A: "[[f#3,a3,d4]@15 ~]/2", B: "[[g3,b3,d4,f#4]@15 ~]/2", C: "[f#3,a3,d4]@15 ~", D: "[f#3,b3,d4]@7 ~",
  E: "[[g3,b3,e4]@31 ~]/2", F: "[[f#3,a3,d4]@29 ~@3]/2", G: "[[g3,b3,f#4], d4@15 ~]/2", H: "[f#3,b3,d4]@15 ~",
  I: "[[a3,c4,f4]@31 ~]/2", J: "[[a3,a#3,d4,f4]@31 ~]/2", K: "[a3,c4,e4]@15 ~", L: "[a3,d4,f4]@15 ~",
  M: "[[a#3,d4,g4]@31 ~]/2", N: "[[g3,c4,e4]@31 ~]/2", O: "[[g3,d4,f#4]@31 ~, b3 ~]/2", P: "[[g3,b3,d4,f#4]@31 ~]/2",
  Q: "[[f#3,a3]@15 ~ [f#3,b3]@14 ~@2, d4@15 ~]/2", R: "[a3,d4], f4@7 ~", S: "[[a#3,g4]@15 ~, d4 ~@31]/2",
  T: "[[a#3,d4,f4]@31 ~]/2", U: "[[a#3,d4,f4]@15 ~]/2", V: "[[f#3,a3,d4]@31 ~]/2", W: "[f#3,a3,d4]@3 ~",
})).s("gm_synth_strings_1").gain(0.16)

// chords · synth strings 1
const synth_strings_1_2 = note(`<
  ~@28 A@2 B@2 C@2 D@2 A@2 E@2 F@2 G@2 H@2 I@2 J K L@2 M@2 ~@8 H@2 I@2 J N O@2 M@2 ~@8 H@2 P@2 H@2 P@2 H@2 Q@2 ~@9
>`.pickRestart({
  A: "[[f#3,a3,d4]@15 ~]/2", B: "[[g3,d4,f#4]@31 ~, b3 ~]/2", C: "[[f#3,a3]@15 ~, d4 ~@7]/2",
  D: "[[g3,d4,f#4]@15 ~, b3@15 ~@17]/2", E: "[[g3,b3,d4,f#4]@31 ~]/2", F: "[[f#3,a3]@15 ~ [f#3,b3]@14 ~@2, d4@15 ~]/2",
  G: "[[g3,b3,e4]@31 ~]/2", H: "[[a3,c4,f4]@31 ~]/2", I: "[[a3,a#3,d4,f4]@31 ~]/2", J: "[a3,c4,e4]@15 ~",
  K: "[a3,d4], f4@7 ~", L: "[[a#3,g4]@15 ~, d4 ~@31]/2", M: "[[g3,c4,e4]@31 ~]/2", N: "[a3,d4,f4]@15 ~",
  O: "[[a#3,d4,g4]@31 ~]/2", P: "[[a#3,d4,f4]@31 ~]/2", Q: "[[a#3,d4,f4]@15 ~]/2",
})).s("gm_synth_strings_1").gain(0.09).pan(0.9)

// other · synth strings 1
const synth_strings_1_3 = note(`<
  ~@2 A@6 B@2 C@4 D@4 E@4 F G H@4 I@8 J K L@2 M@3 N O P Q R S T@2 U@3 V@8 O W X Y Z AA@2 AB@3 AC@2 AD@4 AE@2 AF@2 AG@2
  AH@6 AI@2 AJ@8 AK
>`.pickRestart({
  A: "[f#4@37 ~ [e4,e5]@25 ~ f#4@32, f#5@35 ~@28 f#5@8 ~@25]/6", B: "[g4, g5@3 ~@5]/2",
  C: "[f#4@38 [e4,e5]@25 ~, f#5@35 ~@29]/4", D: "[f#4@31 g4@32 ~, f#5@9 ~@22 g5@15 ~@18]/4",
  E: "[a4@63 ~, a5@35 ~@29]/4", F: "g4, g5@9 ~@7", G: "[a4,a5]", H: "[a#4@31 [c5,c6]@32 ~, a#5@7 ~@25]/4",
  I: "[[a4,a5]@31 [b4,b5]@32 [a4,a5]@31 ~ [b4,b5]@32 ~]/8", J: "~ [f#4,f#5]@2 [a4,a5]",
  K: "[g4,g5]@4 [f#4,f#5]@4 [e4,e5]@4 [d4,d5]@3 ~", // G F# E D
  L: "[[f#4,f#5]@3 [g4,g5]@2 ~ [e4,e5]@9 f#5@3 ~@2 [e4,e5]@4 [d4,d5]@2 [e4,e5]@2 [f#4,f#5]@3 ~, ~@15 f#4@13 ~@4]/2", // F# G E D E F#
  M: "[f#4@11 ~ [d5,d6]@3 [c#5,c#6]@4 ~ [d5,d6]@3 [c#5,c#6]@4 ~ [a4,a5]@3 [g4,g5]@13 [f#4,f#5]@4, f#5 ~@5]/3", // D C# D C# A G F#
  N: "e5@4 [f#4,f#5]@4 [g4,g5]@4 [a4,a5]@3 ~, e4@15 ~", O: "[a4,a5]@3 [c5,c6]",
  P: "[a#4,a#5]@3 [a4,a5]@4 [g4,g5]@4 ~ [f4,f5]@4", Q: "[a4,a5]@4 [a#4,a#5]@2 [g4,g5]@9 ~",
  R: "[a4,a5]@4 [g4,g5]@4 [f4,f5]@2 [g4,g5]@2 [a4,a5]@3 ~", S: "g4@3 [f5,f6], g5@9 ~@7",
  T: "[[e5,e6]@3 [f5,f6]@4 [e5,e6]@4 [c5,c6]@4 ~ a#4@11 ~ a5@4, ~@15 a#5@15 ~@2, ~@27 a4@4 ~]/2", // E F E C
  U: "[g5@4 [a4,a5]@4 g5@4 [f4,f5]@3 [g4,g5]@4 ~ [a4,a5]@2 g4@13 ~ [a4,a5]@3 [g4,g5]@2 [f4,f5]@2 [e4,e5]@4 ~, g4@4 g4@3 ~@4 g5@5 ~@8]/3", // A F G A G F E
  V: "[f#4@23 [a4,a5]@4 [b4,b5]@4 [d4,d5]@32 f#4@24 [a4,a5]@4 [b4,b5]@4 d4@32 ~, f#5@17 ~@46 f#5@17 ~@15 d5@4 ~@29]/8", // A B D A B
  W: "[a#4,a#5]@3 [a4,a5]@4 ~ [g4,g5]@4 [f4,f5]@3 ~", X: "[a4,a5]@3 [a#4,a#5]@2 ~ [g4,g5]@10",
  Y: "[a4,a5]@3 [g4,g5]@4 ~ [f4,f5]@2 [g4,g5]@2 [a4,a5]@4", Z: "g4@11 ~ [f5,f6]@4, g5@9 ~@7",
  AA: "[[e5,e6]@4 [f5,f6]@4 [e5,e6]@3 [c5,c6]@4 a#4@12 [a4,a5]@4 ~, ~@15 a#5@15 ~@2]/2", // E F E C A
  AB: "[g5@3 [a4,a5]@4 g5@4 [f4,f5]@4 ~ g5@4 [a4,a5]@2 g4@14 [a4,a5]@4 [g4,g5]@2 [f4,f5]@2 [e4,e5]@4, g4@7 g4@7 ~ g4@4 ~@3 g5@11 ~@15]/3", // A F A G F E
  AC: "[[f#4,f#5]@6 [a4,a5] [b4,b5]]/2", AD: "[[d4,d5]@31 [f#4,f#5]@24 ~ [a4,a5]@4 [b4,b5]@4]/4", AE: "[d4,d5]/2",
  AF: "[[a4,a5]@19 ~ [c5,c6]@4 [a#4,a#5]@4 [a4,a5]@4]/2", AG: "[[f4,f5]@31 ~]/2",
  AH: "[a4@19 ~ [c5,c6]@4 [a#4,a#5]@3 ~ a4@3 [f4,f5]@32 ~ a5@20 [c5,c6]@4 [a#4,a#5]@4 [a4,a5]@4, a5@3 ~@24 a5@4 ~@32 a4@20 ~@13]/6", // C A# F C A# A
  AI: "[f5, f4@15 ~]/2",
  AJ: "[[f#4,f#5]@23 ~ [a4,a5]@3 [b4,b5]@4 [d4,d5]@31 ~ [f#4,f#5]@24 [a4,a5]@4 [b4,b5]@4 d5@32 ~, ~@95 d4@30 ~@3]/8", // F# A B D F# A B
  AK: "[f#4,f#5]@13 ~@3", // F#
})).s("gm_synth_strings_1").gain(0.12).pan(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D C D C D C D C D C D C D C D C D C D C D C D C D ~@26 C D C D C D C D ~@10 C D C D C D C D ~@12 C D C D C D C D
  E
>`.pickRestart({
  A: "[c2,c#2,f#2] ~@3 c#2 ~ c2 ~ c#2 ~@3 [c#2,d2] ~ c2 ~", B: "[c2,c#2] ~@3 c#2 ~ c2 ~ c#2 ~@3 [c#2,d2] ~@3",
  C: "[c2,c#2,f#2] ~@3 [c2,c#2] ~@3 [c2,c#2] ~@3 [c2,c#2,d2] ~ c2 ~", // F# C#maj7
  D: "[c2,c#2] ~@3 [c2,c#2] ~@3 [c2,c#2] ~@3 [c2,c#2,d2] ~ c2 ~", E: "[c2,c#2,f#2] ~@15",
})).s("gm_acoustic_guitar_steel").gain(0.28)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@27 A ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~ f#2!4 ~@11",
})).s("gm_acoustic_guitar_steel").gain(0.14)

// chords · acoustic guitar steel
const acoustic_guitar_steel_3 = note("<~@71 A@7 B@2 ~@11 C@5 D@4 E>".pickRestart({
  A: "[~@16 [f#3,a3]@31 ~ [g3,b3,g4]@30 ~@2 [f#3,a3]@31 d3, ~@15 d3@30 ~@2 d3@30 ~@2 d3@30 ~@3, ~@16 d4@29 ~@35 d4@29 ~@3]/7", // F#m G F#m
  B: "[[g3,b3,g4]@24 [d3,g3,b3,g4] [d3,g3,b3,g4]@2 [d3,g3,b3,g4] [d3,g3,b3,g4]@2 [d3,g3,b3,g4]@2]/2", // G
  C: "[~@16 [f#3,a3,d4]@30 ~@2 [g3,b3]@31 d3, ~@15 d3@30 ~@2 d3@30 ~@3, ~@48 g4@29 ~@3]/5", // D G
  D: "[[a3,d4]@29 ~@3 [g3,b3,g4]@31 d3, f#3@31 d3@32 ~]/4", E: "[f#3,a3]@3 ~, d4 ~@15",
})).s("gm_acoustic_guitar_steel").gain(0.12).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@28 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 ~@8 A B A B A B A B A B ~@8 A B A B A B A B A B A B ~@9
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x ~@2 x ~ x ~@7",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  ~@28 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 ~@8 A B A B A B A B A B ~@8 A B A B A B A B A B A B ~@9
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  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 C D E D E D E D E D E D E D E D E D E D E D E D E F A B A B A
  B A B C D E D E D E D E F A B A B A B A B C D E D E D E D E D E D A B A B A B A B G
>`.pickRestart({
  A: "x!5 ~ x ~ x ~ x ~ x ~ x ~", B: "x!8", C: "~@2 x!3 ~ x!3 ~ x!3 ~ x!2", D: "x ~ x!3 ~ x!3 ~ x!3 ~@3",
  E: "x!5 ~ x!3 ~ x!3 ~ x!2", F: "x ~ x!3 ~ x!3 ~ x!4 ~@2", G: "x",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@28 x ~@33 x ~@17 x ~@20>").gain(0.25)

stack(
  bass, distortion_guitar, pad_choir, synth_strings_1, synth_strings_1_2, synth_strings_1_3, acoustic_guitar_steel,
  acoustic_guitar_steel_2, acoustic_guitar_steel_3, kick, snare, hihat, crash
)

More by Cliff Richard