Strudelify
Careless Whisper cover art

1996 · Careless Whisper

Careless Whisper

Wham!

KeyD minorTempo78 bpm
0:00/0:00
// Careless Whisper — Wham!
// 78 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 115 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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 · "Fingered Bs."
const bass = note(`<
  ~@9 A B C D E F G H I J K L I J K L I J K L I J K L M B C N M B C N O B C N P Q C N R B S T A B C D E F G H I U V W M
  B C X Y Z AA AB AC AD AE AF AG AH AI AJ AK U AI AL AG AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE AX AY
  AZ BA BB BC BD BE BF@2
>`.pickRestart({
  A: "d2@5 ~ d2 ~ d2@5 d1 f1 gb1", B: "g1@7 g1 g1@4 a1@4", C: "bb1@7 bb1 bb1@8", D: "a1@5 e2@2 b2 a2@4 e2@3 a1",
  E: "d2@6 ~ d2 d2@3 e1 ~ e1 f1 a1", F: "g1@7 g1 g1@3 a1 a1@4", G: "bb1@7 bb1 ~@2 bb2@3 bb1@2 e1, ~@8 bb1@5 ~@3",
  H: "a1@4 e2@3 b2 a2@8, ~@8 b2 ~@7", I: "d2@5 ~ d2 ~ d2@8", J: "g1@5 ~ g1 ~ g1@4 a1@4", K: "bb1@5 ~ bb1 ~ bb1@8",
  L: "a1@5 ~ a1 ~ a1@8", M: "d2@7 d2 d2@5 d1 f1 gb1", N: "a1@7 a1 a1@8", O: "d2@7 d2 d2@8", P: "d2@7 d2 d2@7 d2",
  Q: "g2@3 g2 d2@2 ~ d2 bb1 d2 bb1 ~ g1@4", R: "d2@6 ~ d2 ~ d1 ~ d1 f1 ~@2 f1", S: "bb1@5 bb1 ~ bb1 bb1@8",
  T: "a1@2 a1!2", U: "g1@7 g1 g1@3 g1 a1@3 a1", V: "bb1@7 bb1 bb1@7 ~", W: "a1@7 a2 a2@3 e2 a1@4", X: "a1 e2 a2 e2",
  Y: "d2@4 ~ a1 c2 a1 d2@2 ~ e1 ~ f1 ~ f1", Z: "g1@5 g1 ~ g1 g1@4 a1@4", AA: "bb1@5 bb2@2 bb1 bb1@5 bb1@2 bb1",
  AB: "a1@3 a2@2 a1@4 e2@3 a2@4", AC: "d2@6 d2@2 d2@5 e1 f1 gb1", AD: "g1@5 g2@2 e1 g1@3 g1 a1@3 a1",
  AE: "bb1@5 bb2 ~ bb1 bb1@7 e1", AF: "a1@7 e2 a2@3 e2@2 a1 c2 a1", AG: "d2@7 d2 d2@5 e1 f1 gb1",
  AH: "g1@3 g2 a1@3 a2 bb1@3 bb2 c2@3 c2", AI: "bb1@5 bb2 ~ bb1 bb1@7 bb1", AJ: "a1@5 a2@3 e2@2 d2@3 a1@3",
  AK: "d2@5 ~ d2 ~ d2@5 e1 f1 gb1", AL: "a1@4 e2@3 g2 [ab2,a2] ~ e2@3 a1 c2@2",
  AM: "g1 ~@2 g1 a1 ~@2 a1 bb1 ~@2 bb1 g2@4", AN: "bb1 ~@4 bb2 ~ bb1 bb1@7 ~",
  AO: "a1@4 e2@3 g2 a2@4 a1@4, ~@8 ab2 ~@7", AP: "d2@5 d3 ~ d2 d2@5 e1 f1 gb1", AQ: "g1@5 g2 ~ g1 g1@4 a1@4",
  AR: "bb1@7 bb1 bb1@5 bb2 ~ bb1", AS: "a2@3 a2 e2@3 e2 a1@4 a2@4", AT: "d2@4 ~ d3 ~ d2 ~ e1!2 f1 f1@2 gb1@2",
  AU: "g1@4 ~ g2 ~ g1 g1@4 a1@4", AV: "bb1@5 bb2 ~ bb1 bb1@5 bb2 ~ bb1", AW: "a1@4 a2@3 ~ a2 c3 ~ e3 a3@4",
  AX: "d2@7 d2!2 ~@2 f1 ~ a1 f1 a1", AY: "g1@2 g1 ~@2 g1 ~ g1 g1@4 a1@4", AZ: "bb1@2 bb2 ~@2 bb1 ~ bb1 bb1@7 bb1",
  BA: "a1@5 a2@3 a1@8", BB: "d3@7 a2 d3 ~@2 e1 ~ f1 ~ f1", BC: "g1@2 g2 ~@2 a1 ~@2 bb1@2 ~@2 c2@4",
  BD: "bb1 ~ bb2 ~@2 bb1 ~@2 bb2 ~@3 f2@4", BE: "a2@5 e2@5 a1@6", BF: "[d2@9 ~@7]/2",
})).s("gm_electric_bass_finger").gain(0.52).pan(0.4)

// chords · epiano2 · "E.Piano 2"
const epiano2 = note(`<
  ~ A B C D A B C D A E B F A E B F A G B F A G B F A E B F A H I F J K L M J K N F A E B F A O B F A E B F A P Q R S T
  U V A H I F A H I W S X B F S Y Z AA AB AC B F AB AC B F A AD B F AE AF AG AH A AI AJ AK AL@2 AM AN AO@2 AM AN AL@2 AM
  AN AO@2 AM AN AP ~
>`.pickRestart({
  A: "[d3,d4,f4,a4]", B: "[bb2,d4,f4,a4]", C: "[d3,bb3,d4,f4]", D: "[a2,a3,c4,e4]", E: "g2@3 a2, [bb3,d4,f4]@15 ~",
  F: "[a2,c4,e4,g4]", G: "[g2,bb3,d4]@3 [a2,a3,c4], f4@15 ~", H: "[g2,g3,bb3,d4,f4]@11 ~ [a2,a3,c4,e4]@4",
  I: "[bb2,bb3,d4,f4]", J: "[d3,d4,f4,a4]@3 [d3,d4,f4,a4]", K: "[g2,bb3,d4,f4]@3 [a2,a3,c4,e4]",
  L: "[bb2,d4,f4,a4]@3 [bb2,d4,f4,a4]", M: "[a2,c4,e4,g4]@11 ~ [a2,c4,e4,g4]@4",
  N: "[bb2,d4,f4,a4]@11 ~ [bb2,d4,f4,a4]@4", O: "[g2,bb3,d4,f4]@15 ~", P: "[bb3,d4,f4]@5 ~ [a2,a4,c5,e5]@2, g2@3 ~",
  Q: "[bb4,d5,f5]@13 ~ [d5,f5,a5]@2, bb2", R: "[a2,c5,e5,g5]@11 ~ [a2,c5,e5,g5]@4", S: "[d3,f4,a4,d5]",
  T: "[g2,g4,bb4,d5]@3 [a2,a4,c5,e5]", U: "[bb2,bb4,d5,f5]", V: "[a2,a4,c5,e5]", W: "[a2,c4,e4,g4]@7 [a2,e4,g4,c5]",
  X: "g2@3 a2, [d4,f4,bb4]@15 ~", Y: "[g2,d4,f4,bb4]@3 [a2,e4,g4,c5]", Z: "[bb2,f4,a4,d5]", AA: "[a2,e4,g4,c5]",
  AB: "[d3,d4,f4,a4]@3 [d3,d4,f4,a4,c5]", AC: "[g2,d4,f4,bb4]@6 ~ [a2,a4,c5], ~@14 e4 ~", AD: "[g2,bb3,d4,f4]",
  AE: "[d4,f4,a4]@7 ~ [d5,f5,a5]@8, d3@15 ~", AF: "[bb3,d4,f4]@3 [a3,c4,e4]", AG: "[bb3,d4,f4] [bb4,d5,f5]",
  AH: "[a3,g4,c5,e5]", AI: "[g2,bb3,d4,f4]@3 [a2,c4,e4,g4]", AJ: "[d4,f4,a4]@7 ~ [a4,d5,a5]@7 ~, bb2",
  AK: "[a2,a3,c4,e4,g4]", AL: "[[f4,a4]@11 ~@5 [g3,bb3,d4,f4]@15 ~, [d3,d4]@15 ~@17, ~@12 [d5,a5]@19 ~]/2",
  AM: "[bb2,bb3,d4,f4,a4]", AN: "[c4,e4,g4]@11 ~ [g4,c5,e5]@4, [a2,a3]",
  AO: "[[a4,d5,f5]@12 ~@4 [g3,bb3,d4,f4]@15 ~, [d3,d4]@15 ~@17, ~@12 [d5,a5]@19 ~]/2", AP: "[d2,d3,a4,d5,f5]",
})).s("gm_epiano2").gain(0.59).pan(0.6)

// chords · electric guitar clean · "Clean Gt."
const electric_guitar_clean = note(`<
  ~@17 A B C D A B C D E F G H E F G H E F G H E F G H ~@3 I J F G H E F G H E F G H E F G H A B C D A B C D E F G H E F
  G H E F G H E F G H A B C D E F G H E F G H E F G H E F G H E F G H E F G H ~@2
>`.pickRestart({
  A: "[d4,f4,a4]@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4]@2", // Dm
  B: "[bb3,d4,f4]@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [a3,c4,f4]@2", // Bb F
  C: "[bb3,d4,f4]@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4]@2", // Bb
  D: "[a3,c4,e4]@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4]@2", // Am
  E: "~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4]!2", // Dm
  F: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [a3,c4,f4]!2", // Bb F
  G: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4]!2", // Bb
  H: "~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4]!2", I: "~@15 d4",
  J: "c4 ~ [f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4]!2, d4 ~@3", // F Dm
})).s("gm_electric_guitar_clean").gain(0.38).pan(0.3)

// chords · acoustic guitar nylon · "Nylon-str.Gt"
const acoustic_guitar_nylon = note(`<
  ~@5 A@2 B C D ~@31 E F G H ~@4 I@2 J K L M N O P Q R S ~@11 T U V W X Y M N O P Q R S ~@12 Z@3 AA Z@3 AA Z@3 AA Z@3 AA
  AB ~
>`.pickRestart({
  A: "[~@10 d4 e4 f4@2 g4 a4@5 g4 d4@7 ~@4, ~@21 f4 ~@10]/2", B: "[f4,a4] ~ f4 ~ [e4,g4] ~@3 g4 ~ [d4,f4] ~ g4 ~ d4 ~",
  C: "~@3 [c4,e4] [a3,c4]@6 f3 ~ a3 g3 a3 ~", D: "d4@3 ~ [a4,d5]@12, ~@3 f4@13, ~@4 c5@3 ~@9", E: "~@7 f4",
  F: "e4@4 f4 e4 bb3@8 f4@2", G: "e4@2 f4 g4@2 a4@2 d5", H: "e5@4 f5@2 d5@6 a3@2 c4 ~",
  I: "[~@10 d4 e4 f4@2 g4 a4@6 ~@11]/2", J: "[f4,a4] ~@3 [e4,g4] ~@3 g4 ~@7", K: "~@10 f3 ~ a3 g3 ~@2",
  L: "d4@3 ~ c5 ~@7 c5@4, ~@3 f4@13, ~ [a4,d5]@3", M: "[g4,bb4]@3 [c5,e5]", N: "[d5,f5]@13 ~ [d5,f5] [e5,g5]",
  O: "[c5,e5]@10 d3 ~ g3 f3 a3 c4, ~@11 e3@2 ~@3", P: "d4@2 a3 ~@2 a3 ~ f3 g3@2 a3 ~@5", Q: "~@6 g3 a3 g3@6 ~ c3",
  R: "bb2@13 ~@3", S: "a2@7 ~", T: "~@11 [a4,d5] [g4,c5] ~ [d4,g4] ~", U: "~@2 d4 ~@2 c4 ~@2 d4 c4 a3 c4 ~ a3 c4 ~",
  V: "~@2 d4 ~@2 c4 ~@2 d4 ~ a3 c4 ~ a3 c4 ~", W: "[f4,a4]@8 [g4,bb4]@2 ~@2 [f4,a4]@2 [bb3,d4] ~",
  X: "[c4,e4]@10 f3 g3 a3 g3 a3 c4", Y: "d4@3 ~ c5@3 ~@5 c5@4, ~@3 f4@13, ~ [a4,d5]@3",
  Z: "~@2 [e4,g4] ~@2 [d4,f4] ~ [d4,f4] [e4,g4]@2 [d4,f4] ~ [e4,g4]@2 [d4,f4] ~", // Em Dm Em Dm Em Dm
  AA: "~@8 a4 [a4,c5] e4 [e4,g4] c4 [c4,d4] a3@2", AB: "d3@15 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.36).pan(0.3)

// chords · acoustic guitar nylon · "Nylon-str.Gt" · soft notes
const acoustic_guitar_nylon_2 = note("<~@7 A B ~@42 C D ~@21 E ~@40>".pickRestart({
  A: "~@2 d4 ~@3 [d4,f4] ~ e4 ~@3 e4 ~ f4 ~", B: "~@2 [b3,d4] ~@8 g3 ~@3 c4",
  C: "~@2 [d4,f4] ~@3 [d4,f4] ~ e4 ~ [d4,f4] ~ [e4,g4] ~ [d4,f4] ~", D: "~@2 [b3,d4] [c4,e4] [a3,c4]@6 ~ g3 ~@2 a3 c4",
  E: "~@9 c4 ~@6",
})).s("gm_acoustic_guitar_nylon").gain(0.2).pan(0.3)

// chords · synth brass 1 · "Synth Brass1" · Dm Bbsus2 Dm Bbsus2
const synth_brass_1 = note(`<
  ~@69
  [~@2 [f4,a4,d5] ~@13]
  [~@2 [bb4,c5,f5] ~@13]
  ~@2
  [~@2 [f4,a4,d5] ~@13]
  [~@2 [bb4,c5,f5] ~@13]
  ~@40
>`).s("gm_synth_brass_1").gain(0.45).pan(0.7)

// chords · pad new age · "Fantasia"
const pad_new_age = note(`<
  ~@5 A B C D ~@60 E F E G E F E G E F E G E F E G ~@4 E F E G E F E G H@2 I J K L I J H@2 I J K L I J M ~
>`.pickRestart({
  A: "[d3,d4,f4,a4]", B: "[bb2,d4,f4,a4]", C: "[d3,bb3,d4,f4]", D: "[a2,a3,c4,e4]", E: "[d4,f4,a4]", F: "[d4,f4,bb4]",
  G: "[c4,e4,g4]", H: "[[a3,f4] [g3,bb3], d4]/2", I: "[bb3,d4,f4]", J: "[a3,c4,e4]", K: "[a3,d4,f4]", L: "[g3,bb3,d4]",
  M: "[d3,a3,d4]@15 ~", // D5
})).s("gm_pad_new_age").gain(0.3).pan(0.7)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@9 A B A C A B A C A B A C A B A C ~@32 D@2 E F A B A C A B A C ~@8 D@2 E F D@2 E F A B A C ~@24 G ~
>`.pickRestart({
  A: "[d4,f4,a4]", B: "[bb3,d4,f4]", C: "[c4,e4,g4]", D: "[[a4,d5]@4 [d4,bb4]@3 [e4,g4,c5], f4@7 ~]/2", E: "[f4,a4,d5]",
  F: "[e4,g4,c5]", G: "[d2,f3,d4,a4]@15 ~",
})).s("gm_string_ensemble_1").gain(0.25).pan(0.4)

// other · string ensemble 1 · "Strings"
const string_ensemble_1_2 = note(`<
  ~@12 A B C B D ~@4 E F E G ~@12 B C H I E ~@15 B C H I E ~@3 E F E G ~@8 B C H I B C H I E F E G ~@26
>`.pickRestart({
  A: "~@3 g4", B: "d5@10 e5@3 f5@3", C: "bb4@3 c5", D: "a5@7 ~", E: "a5", F: "g5", G: "e5", H: "d5", I: "c5",
})).s("gm_string_ensemble_1").gain(0.36).pan(0.7)

// other · vibraphone
const vibraphone = note(`<
  ~@69
  [~@2 d4 ~@2 c4 ~@2 d4 ~@2 c4 ~@2 c4 ~]!2
  [~@2 d4 ~@2 c4 ~@10]
  ~
  [~@2 d4 ~@2 c4 ~@2 d4 ~@2 c4 ~ a3 c4 ~]!2
  ~@40
>`).s("gm_vibraphone").gain(0.38).pan(0.7)

// other · vibraphone · soft notes
const vibraphone_soft = note("<~@69 [~@9 c4 a3 ~@2 a3 ~@2]!2 ~@2 [~@9 c4 a3 ~@5]!2 ~@40>")
  .s("gm_vibraphone").gain(0.22).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A@9 B A C A@3 C A B A D A B A D A B A C A B A C A@3 E A@3 F A@3 G A B A C A B A B A@3 C A@3 F A B A H A B A B A B
  A C A B A B A@3 C A B A C A B A I J@16 K ~
>`.pickRestart({
  A: "x!2", B: "x ~ x!2", C: "x ~@3 x!3 ~", D: "x ~@3 x!2 ~@2", E: "x ~@2 x ~@4", F: "x ~@6 x ~@3 x ~@2 x ~",
  G: "x!2 ~@2 x!2 ~ x", H: "x ~@7 x ~@2 x ~@2 x ~", I: "x ~@7 x!8", J: "x ~ x ~@2 x ~@2 x ~@3 x ~@3", K: "x",
})).gain(0.54)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@9 A@15 ~ A@19 ~ A@3 ~ A@3 ~ A@15 ~ A@28 ~@18>".pickRestart({
  A: "~@7 x ~@8",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@25 A@7 B ~@12 A@3 C A@3 B ~@62>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@4 x ~ x ~@2 x ~@4 x ~",
})).gain(0.42)

// drums · snare
const snare = s("sd").struct(`<
  ~@9 A@3 B A@3 B A@3 B A@4 ~@7 C A@3 B A@7 D ~@7 C A@3 B A@3 E A@3 B A@3 F A@3 G A@3 H A@3 B A@3 I A@3 J A@3 B A@3 K
  L@16 M ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~@5 x!2 ~", D: "~ x!2 ~", E: "~@4 x ~@6 x!2 ~ x ~",
  F: "~@2 x ~@2 x ~@2 x ~@2 x!4 ~", G: "~@4 x ~@6 x!3 ~@2", H: "~@2 x ~@2 x!2 ~", I: "~@2 x ~@2 x ~ x",
  J: "~@4 x ~@6 x!2 ~@3", K: "~@2 x ~ x ~@6 x!5", L: "~@2 x ~@2 x ~@6 x ~@3", M: "x",
})).gain(0.54)

// drums · low tom
const low_tom = s("lt").struct("<~@32 A ~@8 B@3 C ~@7 A ~@7 D B@7 E ~@3 F ~@3 F B ~ B@3 ~ B G B@3 H ~@26>".pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~@8 x ~@2 x!2 ~ x ~", D: "~@13 x ~@2", E: "~@12 x!3 ~", F: "~@14 x!2", G: "~@5 x ~ x",
  H: "~@6 x!2",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@8 B@2 C B C B C B@4 D C B C D C B C B C B C@3 B@2 D C B C D C B E F G B C B@4 H B@3 D C I B C B@3 D B@2 C J B@7 C
  B@3 D B@3 C B@3 C B@3 D C I C K B@16 ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "x!7 ~", C: "x!8", D: "x!6 ~@2", E: "~ x!7", F: "x!3 ~ x ~@3", G: "x ~ x!5 ~",
  H: "x ~ x ~ x ~ x ~@2 x!2 ~ x ~ x ~", I: "x!3 ~ x!3 ~", J: "~ x!6 ~", K: "x ~ x!6",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@10 A ~ A ~ A ~ A@4 B ~ A ~ B ~ A ~ A ~ A ~@3 A@2 B ~ A ~ B ~ A ~ C D A ~ A@4 E A@3 B ~ F A ~ A@3 B A@2 ~ G A@7 ~ A@3
  B A@3 ~ A@3 ~ A@3 B ~ F ~ H A@16 G ~
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~@3 x ~@4", D: "~ x ~@5 x", E: "~ x", F: "~@3 x ~@3 x", G: "x", H: "~ x ~@6",
})).gain(0.3)

// … 41 more lines

More by Wham!