Strudelify
When We Dance cover art

1993

When We Dance

Sting

KeyE majorTempo84 bpm
0:00/0:00
// When We Dance — Sting
// 84 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(84/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(`<
  ~@2 A B C D C D C D E F C B A D C G E F H G I J C D C D C D E K C D I J D L C D C D M F C D I N O P Q J D R S T U V W
  X Y Z AA G F AB O AB AC AD AE AB O AB@3 AC AD AE AB AF F AG AH AI AJ AK AL AI F AM AH AI AC AN AC AN AF AN AC AO AP AQ
  AP AQ AP AQ AP AR AP AQ AP AQ AP AQ AP AS
>`.pickRestart({
  A: "e2@6 e2@8 e2 ~", B: "e2@6 e2@9 ~", C: "e2@5 ~ e2@7 ~ e2 ~", D: "e2@5 ~ e2@9 ~", E: "c#2@5 ~ c#2@7 ~ c#2 ~",
  F: "c#2@5 ~ c#2@10", G: "e2@3 e2@5", H: "e2@5 ~ e2@8 e2 ~", I: "b1@5 ~ b1@9 ~", J: "g#1@5 ~ a1@9 ~",
  K: "c#2@5 ~ c#2@9 ~", L: "c#2@5 ~ a1@9 ~", M: "c#2@6 c#2@7 ~ c#2 ~", N: "g#1@3 a1@5", O: "f#2@6 f#2@9 ~",
  P: "f#2@3 d2@5", Q: "b1@5 ~ b1@10", R: "c#2@6 a1@7 ~ a1@2", S: "f#1@5 ~ f#1@5 ~ f#1@4",
  T: "c#2@6 c#2 ~ c#2@2 g#1@2 c#1@2 g#1@2", U: "f#1@5 ~ c#2@2 f#2@2 c#2@2 f#2@3 ~", V: "c#2@3 g#1 c#2 g#1 c#1 g#1",
  W: "f#1@3 c#2 f#2 c#2 f#2@2", X: "a1@5 ~ a1@9 ~", Y: "a1@5 ~ a1@2 a1@8", Z: "e2@5 ~ e2@10", AA: "c#2@3 a1@5",
  AB: "f#2@5 ~ f#2@9 ~", AC: "f#2@3 f#2@5", AD: "d#2@5 ~ d#2@9 ~", AE: "d#2@5 ~ d#2@10", AF: "f#2@5 ~ f#2@10",
  AG: "a#1@5 ~ b1@10", AH: "g#1@5 ~ g#1@8 ~@2", AI: "g#1@3 e2@5", AJ: "c#2@2 ~ c#2@5", AK: "a#1@5 ~ b1@9 ~",
  AL: "g#1@5 ~ g#1@9 ~", AM: "a#1@3 b1@5", AN: "d#2@3 b1@5", AO: "d#2@6 b1@9 ~", AP: "f#1@5 ~ g#1 ~ a#1@2 c#2@2 ~@4",
  AQ: "d#2@6 c#2@9 ~", AR: "d#2@3 c#2@4 ~", AS: "d#2@5 ~ c#2@7 ~@3",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · synth strings 1 · "SynthStrings"
const synth_strings_1 = note(`<
  A@2 B@3 ~ C@8 ~@8 D E F@8 ~@2 D E G@8 ~@2 H E I@3 E J@2 K@4 L M@2 N@4 O@8 ~@8 P Q R@2 S T U@2 V W U@2 X@8 ~@16
>`.pickRestart({
  A: "[d#4@11 e4@5, [c#3,g#3,a3]]/2", B: "[e2,e3,g#3,b3,e4]/3", C: "e2/8", D: "[b1,b2,f#3,b3,d#4]",
  E: "[g#1,g#2,g#3,b3,e4]@3 [a1,a2,a3,c#4,e4]@5", F: "[e2,e3,g#3,b3,e4]/8", G: "[e3,g#3,b3,e4]/8",
  H: "[b1,b2,f#3,b3,d#4]@15 ~", I: "[[f#2,e4]@11 [d2,d3,d4]@5 [b1,b2,d#4]@8, [f#3,b3]@47 ~, f#1@5 ~@7]/3",
  J: "[e2,e3,g#3,b3,e4]/2", K: "[b3@6 a#3@10 [c#2,c#3,f3,g#3]@15 ~, c#4@31 ~, [f#1,f#2,f#3]@15 ~@17]/2",
  L: "b3@6 a#3@9 ~, [f#1,f#2,f#3,c#4]@15 ~", M: "[a1,a2,e3,a3,c#4]/2", N: "[[e2,e3,g#3,b3,e4]@57 ~@7]/4",
  O: "[f#1,f#2,c#3,f#3,a#3]/8", P: "[c#2,c#3,f3,g#3,c#4]@15 ~",
  Q: "[a#1,a#2,f#3,a#3,c#4]@5 ~ [b1,b3,d#4]@10, ~@3 b2@4 ~", R: "[g#1,c#4]/2", S: "[c#2,c#3,f3,c#4]@15 ~",
  T: "[a#1,a#2,f#3,a#3,c#4]@3 [b1,b2,f#3,b3,d#4]@5, ~@6 f3 ~@9", U: "[g#1,g#2,f#3,g#3,c#4,d#4]/2",
  V: "[c#2,f3,g#3,c#4]", W: "[a#1,a#2,f#3,a#3,c#4]@5 ~ [b1,b2,f#3,b3,d#4]@10", X: "[[f#1,f#2,c#3,f#3,a#3]@31 ~]/8",
})).s("gm_synth_strings_1").gain(0.4)

// chords · synth strings 1 · "SynthStrings" · soft notes
const synth_strings_1_soft = note("<A@2 ~@4 B@8 ~@22 C@8 ~@38 D E@2 F ~@3 G ~@27>".pickRestart({
  A: "f#2/2", B: "[e3,g#3,b3,e4]/8", C: "e2/8", D: "~@6 f#3@9 ~", E: "[g#2,f#3,g#3,d#4]/2", F: "g#3@15 ~",
  G: "c#3@15 ~",
})).s("gm_synth_strings_1").gain(0.24)

// other · piano
const piano = note(`<
  ~@5 A B@2 C@2 D@4 E@2 F@2 G@2 H@2 I ~@2 J K@2 L@2 M@2 N@2 O ~@2 A P@2 Q@2 P@2 R@2 O ~@17 S T@2 U@2 V@2 W@2 X@2 Y@2 Z@2
  AA@2 AB AC@2 AD AB AE@2 AD AB AF@2 AD AG@2 ~@22
>`.pickRestart({
  A: "~@13 [e4,e5]@3, ~@5 [d#4,d#5]@3", B: "[[g#3,g#4]@6 [g#3,g#4]@16 ~@7 [e4,e5]@3, ~@13 [d#4,d#5]@3]/2",
  C: "[[g#3,g#4]@6 [a#3,a#4]@15 ~@8 [e4,e5]@3, ~@13 [d#4,d#5]@3]/2", // G# A# E D#
  D: "[[g#3,g#4]@6 [g#3,g#4]@18 ~@5 [e4,e5]@3, ~@13 [d#4,d#5]@3]/2", // G# E D#
  E: "[[g#3,g#4]@5 ~ [g#3,g#4]@16 ~@7 [e4,e5]@3, ~@13 [d#4,d#5]@3]/2", // G# E D#
  F: "[[g#3,g#4]@6 [a#3,a#4]@17 ~@6 [e4,e5]@3, ~@13 [d#4,d#5]@3]/2", // G# A# E D#
  G: "[[g#3,g#4]@6 [g#3,g#4]@16 ~@7 [f#4,f#5]@3, ~@13 [d#4,d#5]@3]/2", // G# F# D#
  H: "[[g#3,g#4]@6 [g#3,g#4]@14 ~@6 [b3,b4]@3 [b3,b4]@3]/2", I: "[f#4,f#5]@7 ~", J: "~@10 [d#4,d#5]@3 [e4,e5]@3",
  K: "[[g#3,g#4]@6 [g#3,g#4]@16 ~@4 [d#4,d#5]@3 [e4,e5]@3]/2", // G# D# E
  L: "[[g#3,g#4]@5 ~ [a#3,a#4]@17 ~@3 [d#4,d#5]@3 [e4,e5]@2 ~]/2", // G# A# D# E
  M: "[[g#3,g#4]@5 ~ g#4@19 ~ [d#4,d#5]@3 [e4,e5]@3, ~@5 g#3@18 ~@9]/2", // G# D# E
  N: "[[g#3,g#4]@6 [g#3,g#4]@18 ~@2 [b3,b4]@3 [b3,b4]@3]/2", O: "[f#4,f#5]",
  P: "[[g#3,g#4]@6 [g#3,g#4]@19 ~@4 [e4,e5]@3, ~@13 [d#4,d#5]@3]/2", // G# E D#
  Q: "[[g#3,g#4]@6 [a#3,a#4]@18 ~@5 [e4,e5]@3, ~@13 [d#4,d#5]@3]/2", // G# A# E D#
  R: "[[g#3,g#4]@5 ~ g#4@20 [b3,b4]@3 [b3,b4]@3, ~@3 g#3@9 ~@4]/2", S: "~@13 [f#4,f#5]@3, ~@5 [f4,f5]@3",
  T: "[[a#3,a#4]@5 ~ [a#3,a#4]@18 ~@2 [f4,f5]@3 [f#4,f#5]@3]/2", // A# F F#
  U: "[[a#3,a#4]@5 ~ [c4,c5]@17 ~@6 [f#4,f#5]@3, ~@13 [f4,f5]@3]/2", // A# C F# F
  V: "[[a#3,a#4]@5 ~ [a#3,a#4]@18 ~@2 f4@2 ~ [f#4,f#5]@3, ~@13 f5@3]/2", // A# F#
  W: "[[a#3,a#4]@6 a#4@20 ~@3 [f#4,f#5]@3, ~@3 a#3@9 ~ [f4,f5]@3]/2", // A# F# F
  X: "[[a#3,a#4]@6 [a#3,a#4]@18 ~@5 [f#4,f#5]@3, ~@13 [f4,f5]@3]/2", // A# F# F
  Y: "[[a#3,a#4]@6 [c4,c5]@18 ~@5 [f#4,f#5]@3, ~@13 [f4,f5]@3]/2", // A# C F# F
  Z: "[[a#3,a#4]@6 [a#3,a#4]@18 ~@2 f4@2 ~ [g#4,g#5]@3, ~@13 f5@3]/2", // A# G#
  AA: "[[a#3,a#4]@5 ~ [a#3,a#4]@18 ~@2 [c#4,c#5]@3 [c#4,c#5]@3]/2", AB: "[g#4,g#5]@7 ~",
  AC: "[[f#4,f#5]@6 ~ d#5 c#5@2 b4@2 c#5@12 ~@8, ~@3 f5 ~@12]/2", AD: "~@10 [c#4,c#5]@3 [c#4,c#5]@3",
  AE: "[[f#4,f#5]@6 ~ d#5 c#5@2 b4@2 c#5@8 ~@12, ~@3 f5 ~@12]/2", // F#
  AF: "[[f#4,f#5]@6 ~ d#5 c#5@2 b4@2 c#5@7 ~@13, ~@3 f5 ~@12]/2", AG: "[[a#4,a#5]@15 ~]/2",
})).s("gm_piano").gain(0.38)

// other · marimba
const marimba = note(`<
  ~@2 A ~ B ~ C ~ B ~@3 A ~ D ~ E ~@3 E ~@3 F@2 G@4 H@2 I@2 ~@2 D ~ G@8 ~@6 D ~@8 J@2 D ~ K ~ L ~ K ~ M@2 N@6 O@2 ~@14
  P@2 Q@2 K ~@17
>`.pickRestart({
  A: "f#4 g#4 f#4 g#4@4 ~", B: "f#4@2 g#4@2 f#4@2 g#4@7 ~@3", C: "f#4 g#4 f#4 g#4@3 ~@2", D: "f#4 g#4 f#4 g#4@5",
  E: "f#4@2 g#4@2 f#4@2 g#4@9 ~", F: "[f#4 g#4 f#4 g#4@6 ~@7]/2",
  G: "[f#4 g#4 f#4 g#4 a#4@2 f#4 b4@3 g#4 a#4@2 f#4 d#4 e4]/2",
  H: "[f#4 g#4 f#4 g#4 a#4@2 g#4 b4@3 g#4 a#4@2 f#4 d#4 e4]/2",
  I: "[f#4@2 g#4@2 f#4@2 g#4@2 a#4@4 f#4@2 b4@6 g#4@2 a#4@4 f#4@5 ~]/2", J: "[f#4 g#4 f#4 g#4@7 ~@6]/2",
  K: "g#4 a#4 g#4 a#4@5", L: "g#4@2 a#4@2 g#4@2 a#4@9 ~", M: "[g#4@2 a#4@2 g#4@2 a#4@15 ~@11]/2",
  N: "[g#4 a#4 g#4 a#4 c5@2 g#4 c#5@3 a#4 c5@2 g#4 f4 f#4]/2", O: "[g#4 a#4 g#4 a#4 c5@2 g#4 c#5@3 a#4 c5@2 g#4@3]/2",
  P: "[g#4 a#4 g#4 a#4@6 ~@7]/2", Q: "[g#4@2 a#4@2 g#4@2 a#4@13 ~@13]/2",
})).s("gm_marimba").gain(0.56)

// chords · acoustic guitar steel · "Steel Guitar"
const acoustic_guitar_steel = note(`<
  ~@8 A ~ B@2 C@2 D@3 ~ B@2 E@2 F G H@2 I@2 J ~ K@2 L@3 M N O P@2 Q@2 R@2 A ~ F S T U@2 V A ~ W X W Y Z AA AB ~ AC AD AE
  AF@2 AG ~ AH@2 AI@2 AJ@2 AK@2 AL@2 AM@4 AN@6 AO@2 AP@2 AQ@2 AR@2 AS@2 AT@2 AU@2 ~ AV@2 ~@3 AW ~@3 AX ~@3
>`.pickRestart({
  A: "[g#3,b3,e4]", B: "[~@3 f#4@7 ~@6, ~@6 e4 ~@25]/2", C: "[~@3 [g#3,b3,e4]@7 ~@6]/2",
  D: "[[g#3,b3,e4]@19 ~@13 [b3,e4]@14 ~@2, ~@31 g#3@15 ~@2]/3", E: "[~@3 [g#3,b3,e4]@8 ~@5]/2",
  F: "[f#3,b3,c#4]@8 ~@4 b3@2 f#3 ~, f#4@7 ~ f#4@7 ~, ~@5 c#4@3", G: "[g#3,b3,e4]@5 ~ [c#4,e4]@8 ~@2, ~@5 a3@8 ~@3",
  H: "[[e3,g#3,b3]@21 ~@11]/2", I: "[[e3,g#3,b3]@13 ~@3]/2", J: "[e3,g#3,b3]", K: "[~@6 f#4@17 ~@9, ~@6 e4 ~@25]/2",
  L: "[~@6 [g#3,b3,e4]@14 ~@12 [b3,c#4]@8 ~@4 b3@2 f#3 ~, ~@31 f#3@9 ~@2 c#4@5 ~, ~@32 f#4@7 ~ f#4@7 ~]/3", // E Bsus2
  M: "[g#3,b3,e4]@5 ~ [a3,c#4,e4]@9 ~", N: "[g#3,b3,e4]@13 ~@3", O: "[b3,e4,g#4]@4 ~@2 [g#3,b3,e4]@9 ~",
  P: "[[g#3,b3,e4]@11 ~@5]/2", Q: "[[g#3,b3,e4]@5 ~@3]/2", R: "[~@3 f#4@8 ~@5, ~@6 e4 ~@25]/2",
  S: "[g#3,b3,e4]@2 ~ [a3,c#4,e4]@4 ~", T: "[f#3,b3,e4]@11 ~ [f#3,b3,e4]@3 ~",
  U: "[[f#3,b3,e4]@5 ~ [f#3,a3,d4]@8 ~@2 [b3,c#4,f#4]@8 ~@4 b3@2 f#3 ~, ~@15 f#3@8 ~ f#4@6 ~@2, ~@26 c#4@5 ~]/2", // Esus2 D Bsus2
  V: "[g#3,b3,e4]@5 ~ [c#4,e4]@9 ~, ~@5 a3@9 ~@2", W: "b3@2 c#4@2 f#4@11 ~", X: "f#4 g#4 c#5@5 ~",
  Y: "f#4@2 g#4@2 c#5@9 ~@3", Z: "b3 c#4 f#4@5 ~", AA: "e4 b3 c#4@5 ~", AB: "[e3,a3,d4]@5 ~ [e3,a3,c#4]@10",
  AC: "~ b3 f#4@5 ~, ~@4 e4 ~@11", AD: "[g#3,b3,e4]@3 ~", AE: "[b3,e4,f#4]@2 ~ [b3,e4,f#4]@4 ~",
  AF: "[[a#3,c#4,f#4]@9 ~@7]/2", AG: "[a#3,c#4,f#4]", AH: "[~@3 g#4@6 ~@7, ~@6 f#4 ~@25]/2",
  AI: "[~@6 [a#3,c#4,f#4]@13 ~@13]/2", AJ: "[[a#3,c#4,f#4]@7 ~]/2", AK: "[[a#3,c#4,f#4]@21 ~@11]/2",
  AL: "[~@3 g#4@8 ~@5, ~@6 f#4 ~@25]/2",
  AM: "[~@6 [a#3,c#4,f#4]@18 ~@8 [c#4,d#4,g#4]@8 ~@6 g#3@15 ~@3, ~@31 g#3@9 g#4@20 ~@4, ~@21 d#4@10 ~, ~@44 c#4@17 ~@3]/4", // F# C#sus2
  AN: "[g#4@4 ~ g#4@5 ~ g#4@4 ~ [c#4,d#4]@4 ~@3 g#3@8 ~ g#4@4 ~ g#4@5 ~ g#4@4 ~, [g#3,c#4]@30 ~ g#3@10 ~ d#4@20 ~@2 c#4@31 ~, d#4@18 ~@2 d#4@10 ~@2 g#4@7 ~ g#4@22 ~@2 d#4@18 ~@2 d#4@10 ~@2, ~@44 c#4@18 ~ g#3@31 ~@2]/6", // C#sus2 C#5
  AO: "[[g#3,c#4,d#4]@4 ~@3 g#3@8 ~, g#4@3 ~ g#4@11 ~, ~@5 d#4@10 ~, ~@6 c#4@9 ~]/2", // G#sus4
  AP: "[g#4@4 ~ g#4@5 ~ g#4@4 ~, [g#3,c#4]@15 ~, d#4@9 ~ d#4@5 ~]/2", AQ: "[[a#3,c#4,f#4]@15 ~]/2",
  AR: "[[a#3,c#4,f#4]@3 ~]/2", AS: "[[f#3,a#3,c#4]@15 ~]/2", AT: "[[f#3,a#3,c#4]@29 ~@3]/2",
  AU: "[[f#3,a#3,c#4]@3 ~]/2", AV: "[~@4 [a#3,c#4]@3 ~, ~@15 f#3@12 ~@5]/2", AW: "[f#3,a#3,c#4]@15 ~",
  AX: "[f#3,a#3,c#4]@5 ~@3", // F#
})).s("gm_acoustic_guitar_steel").gain(0.37)

// chords · rock organ · "Organ"
const rock_organ = note("<~@54 A@8 ~@55>".pickRestart({
  A: "[~@27 b4@2 ~@3, f#4@5 [e4,a4]@2 ~, ~@32 c#5@77 ~@19]/8", // A5
})).s("gm_rock_organ").gain(0.32)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B@3 A B A B A B A B A B@3 A B A B A B A B A B@9 C@7 B@2 A B@5 A B A B A B A
  B A B A B@21 C B C B C B C B C B C B C B C B
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "x ~@2 x ~@4", C: "x",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@2 [~ x ~ x]!87 [x!4]!4 [~ x ~ x]!8 ~@16>").gain(0.56)

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

// drums · hihat
const hihat = s("hh").struct("<~@2 [~ x ~ x ~ x ~ x]!114 [~ x ~ x ~@4]>").gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<~@108 [~@7 x] ~@3 [~@7 x] ~@4>").gain(0.48)

// drums · ride
const ride = s("rd").struct("<~@89 [x!4]!4 ~@24>").gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@54 [x!4]!6 ~@57>").gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@2 x ~@57 x ~@56>").gain(0.64)

// drums · congas
const congas = s("conga:18").struct("<~@53 [~@14 x!2] [~@4 x ~@9 x!2]!6 ~@57>").gain(1.02)

// drums · congas
const congas_2 = s("conga:33").struct("<~@53 [~@13 x ~@2] [x ~@2 x ~@2 x ~@6 x ~@2]!6 x ~@56>").gain(1.02)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@54 [x!16]!7 ~@56>").gain(2.84)

stack(
  bass, synth_strings_1, synth_strings_1_soft, piano, marimba, acoustic_guitar_steel, rock_organ, kick, rim, clap,
  hihat, open_hat, ride, tambourine, crash, congas, congas_2, cabasa
)

More by Sting