Strudelify
Russians cover art

1998 · The Dream Of The Blue Turtles

Russians

Sting

KeyC minorTempo58 bpm
0:00/0:00
// Russians — Sting
// 58 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 56 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(58/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 4 chiff · "CHIFFER LD"
const bass = note("<A@4 B C D E F C G C B C D E F C H I@2 J@6 C B C D E F C K C B C D E F C H I@2 J@10 L>".pickRestart({
  A: "[~ g1@96 c2@8 bb1@8 ab1@8 bb1@7]/4", B: "~ f1@8 g1@8 ab1@8 bb1@7", C: "~ c2@8 bb1@8 ab1@8 bb1@7",
  D: "~ b1@8 c2@8 g1@8 g2@7", E: "~ eb2@8 eb2@8 b1@8 b1@7", F: "~ c2@8 c2@8 g1@8 g2@7", G: "~ f2@8 bb1@8 c2@8 c2@7",
  H: "~ f2@8 g1@8 ab1@8 bb1@7", I: "~ c2@8 c2@8 c2@8 c2@7", J: "~ c2@8 ab2@8 eb2@8 f2@7", K: "~ f2@8 bb1@8 c2@8 c3@7",
  L: "~ c2@28 ~@3",
})).s("gm_lead_4_chiff").gain(0.58)

// chords · string ensemble 2 · "STRINGS"
const string_ensemble_2 = note(`<
  ~@3 A B C D E F G H I J I D E F G K L M N O L M N O I J I D E F G P I J I D E F G K L M N O L M N O L M N O ~
>`.pickRestart({
  A: "~@5 [g3,c4]@4 ~@4 [bb3,d4]@5 ~@3 [c4,eb4]@4 ~@4 [bb3,d4]@3", // C5 Bb Cm Bb
  B: "~@5 [c4,eb4]@4 ~@4 [bb3,d4,eb4]@4 ~@4 [ab3,c4]@4 ~@4 [bb3,d4]@3", // Cm Ebmaj7 Ab Bb
  C: "~@5 [g3,c4]@4 ~@4 [bb3,d4]@4 ~@4 [ab3,c4]@4 ~@4 [bb3,d4]@3", // C5 Bb Ab Bb
  D: "~@5 [b3,d4,f4]@4 ~@4 [c4,eb4]@4 ~@4 [c4,d4,f4]@4 ~@4 [b3,d4,f4]@3", // Bdim Cm Dm7 Bdim
  E: "~@5 [g3,bb3,eb4]@4 ~@4 [g3,bb3,eb4]@4 ~@4 [b3,d4,g4]@5 ~@3 [b3,d4,g4]@3", // Eb G
  F: "~@5 [c4,eb4,g4]@4 ~@4 [c4,eb4,g4]@4 ~@4 [c4,d4,f4]@4 ~@4 [b3,d4,f4]@3", // Cm Dm7 Bdim
  G: "~@5 [c4,eb4]@4 ~@4 [bb3,d4,eb4]@4 ~@4 [ab3,c4]@4 ~@4 [bb3,d4,eb4]@3", // Cm Ebmaj7 Ab Ebmaj7
  H: "~@5 [ab3,c4]@4 ~@4 [bb3,d4,eb4]@4 ~@4 [g3,c4]@4 ~@4 [g3,c4]@3", // Ab Ebmaj7 C5
  I: "~@5 [g3,c4]@4 ~@4 [bb3,d4,eb4]@4 ~@4 [ab3,c4]@4 ~@4 [bb3,d4,eb4]@3", // C5 Ebmaj7 Ab Ebmaj7
  J: "~@5 [ab3,c4,eb4]@5 ~@3 [bb3,d4,eb4]@4 ~@4 [ab3,c4]@4 ~@4 [bb3,d4,eb4]@3", // Ab Ebmaj7 Ab Ebmaj7
  K: "~@5 [ab3,c4,eb4]@4 ~@4 [bb3,d4,eb4]@4 ~@4 [ab3,c4,eb4]@4 ~@4 [bb3,d4,eb4]@3", // Ab Ebmaj7 Ab Ebmaj7
  L: "~@5 [g3,c4]@4 ~@4 [g3,ab3,c4,eb4]@4 ~@4 [g3,ab3,c4,eb4]@4 ~@4 [g3,ab3,c4,eb4]@3", // C5 Abmaj7
  M: "~@5 [g3,ab3,c4,eb4]@4 ~@4 [g3,ab3,c4,eb4]@4 ~@4 [g3,c4]@4 ~@4 [g3,ab3,c4,eb4]@3", // Abmaj7 C5 Abmaj7
  N: "~@5 [g3,c4]@4 ~@4 [ab3,c4,eb4,g4]@4 ~@4 [ab3,c4,eb4,g4]@4 ~@4 [ab3,c4,eb4,g4]@3", // C5 Abmaj7
  O: "~@5 [ab3,c4,eb4,g4]@4 ~@4 [ab3,c4,eb4]@4 ~@4 [g3,c4]@4 ~@4 [g3,ab3,c4,eb4]@3", // Abmaj7 Ab C5 Abmaj7
  P: "~@5 [ab3,c4,eb4]@4 ~@4 [bb3,d4,eb4]@4 ~@4 [g3,c4]@4 ~@4 [g3,c4]@3", // Ab Ebmaj7 C5
})).s("gm_string_ensemble_2").gain(0.32)

// chords · acoustic bass · "ATMOSPHERE"
const acoustic_bass = note("<~@26 A@2 ~@26 B@2>".pickRestart({
  A: "[~@9 g4@14 ~@9, ~@17 g5@28 ~@19]/2", B: "[~@33 c4@28 ~@3, ~@9 g4@22 ~]/2",
})).s("gm_acoustic_bass").gain(0.52)

// chords · lead 3 calliope · "ATMOSPHERE"
const lead_3_calliope = note("<~@28 A@8 ~@20>".pickRestart({
  A: "[~@25 g4@32 ~@199, ~@9 c5@119]/8",
})).s("gm_lead_3_calliope").gain(0.46)

// other · french horn · "ATMOSPHERE"
const french_horn = note("<~@35 A B C D ~@4 E F G H I J K@2 L M G N ~>".pickRestart({
  A: "~@9 g4@8 f4@4 eb4@4 d4@4 c4@3", B: "~ bb3@4 c4@2 d4@2 eb4@4 d4@4 c4@8 g3@7",
  C: "~ g3@8 d4@8 c4@4 d4@3 ~ eb4@4 f4@3", D: "~ g4@4 ab4@4 g4@4 f4@4 g4@15", E: "~@2 c4@8 g4@7 f4@4 eb4@4 d4@4 c4@3",
  F: "~@2 bb3@3 c4@2 d4@2 eb4@4 ~ d4@4 c4@8 g3@6", G: "~@2 g3@8 d4@8 c4@3 d4@4 ~ eb4@3 f4@3",
  H: "~@2 g4@3 ab4@4 g4@4 f4@4 ~ g4@14", I: "~@2 c4@7 g4@8 ~ f4@3 eb4@4 d4@4 c4@3",
  J: "~@2 bb3@4 ~ d4@2 ~ eb4@4 d4@4 c4@7 g3@7, ~@3 c4 ~@12",
  K: "[~ g3@8 d4@8 ~ c4@4 d4@3 eb4@4 ~ f4@4 g4@4 ab4@3 g4@4 f4@4 g4@15]/2", L: "~ c4@8 g4@8 f4@4 ~ eb4@3 d4@4 c4@3",
  M: "~ bb3@4 ~ c4@2 ~ eb4@4 ~ d4@4 c4@8 g3@6, ~@4 d4 ~@11", N: "~@2 g4@3 ab4@4 ~ g4@3 f4@4 ~@15",
})).s("gm_french_horn").gain(0.46)

// other · french horn · "ATMOSPHERE" · soft notes
const french_horn_soft = note("<~@43 A B C D A B C D A B C E ~>".pickRestart({
  A: "~ c5@8 g5@8 f5@4 eb5@4 d5@4 c5@3", B: "~ bb4@4 c5@2 d5@2 eb5@4 d5@4 c5@8 g4@7",
  C: "~ g4@8 d5@8 c5@4 d5@4 eb5@4 f5@3", D: "~ g5@4 ab5@4 g5@4 f5@4 g5@15", E: "~ g5@4 ab5@4 g5@4 f5@4 ~@15",
})).s("gm_french_horn").gain(0.1)

// drums · snare
const snare = s("sd").struct("<~@9 A ~@8 B C@8 ~@7 B ~@7 B ~@13>".pickRestart({
  A: "~@5 x ~@26", B: "~@5 x ~@15 x ~@10", C: "~ x ~@14",
})).gain(0.31)

// drums · low tom
const low_tom = s("lt").struct("<~@19 A@8 ~@2 A ~@4 B A ~ A ~ A ~ A B A@12 C>".pickRestart({
  A: "~ x ~@14", B: "~ x ~@11 x ~@2", C: "~ x ~@30",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@19
  [~@5 x ~@3 x ~@3 x ~@2]!8
  ~@7
  [~@9 x ~@6]
  ~@7
  [~@9 x ~@6]
  [~@5 x ~@3 x ~@3 x ~@2]!12
  ~
>`).gain(0.1)

// drums · crash
const crash = s("cr").struct("<~@3 A ~@3 A ~@3 A ~ A ~ A ~ A ~ B ~@7 A ~ A ~ A ~ A ~ A@3 ~ A ~@3 A@13>".pickRestart({
  A: "~ x ~@14", B: "~ x ~@30",
})).gain(0.21)

// drums · ride
const ride = s("rd").struct("<~@43 A B C A B C A B C A B C ~>".pickRestart({
  A: "~@17 x ~@14", B: "~@5 x ~@17 x ~@8", C: "~@5 x ~@19 x ~@6",
})).gain(0.21)

// drums · guiro
const guiro = s("guiro:0").struct("<~@19 [~ x ~@14] ~@23 [~ x ~@14] ~@12>").gain(6.54)

stack(
  bass, string_ensemble_2, acoustic_bass, lead_3_calliope, french_horn, french_horn_soft, snare, low_tom, mid_tom,
  crash, ride, guiro
)

More by Sting