Strudelify

Walking on the Moon

Sting

KeyC majorTempo140 bpm
0:00/0:00
// Walking on the Moon — Sting
// 140 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 184 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 · fretless bass
const bass = note("<~@3 A@56 B@3 ~@15 A@24 C@3 ~@15 A@56 D@7 ~@2>".pickRestart({
  A: "[~@6 c2@2 ~ c2@2 d2@18 ~ f2@2 ~ e2@2 c2@18 ~ c2@2 ~ c2@2 d2@18 ~ f2@2 ~ e2@2 c2@13]/8",
  B: "[~@12 c2@4 ~@2 c2@4 d2@34 ~ d2@2 ~ g2@3 g2@2 ~ g2@6]/3",
  C: "[~@12 c2@4 ~@2 c2@4 d2@35 d2 ~@2 g2@3 g2@2 ~ g2@6]/3",
  D: "[~@6 c2@2 ~ c2@2 d2@18 ~ f2@2 ~ e2@2 c2@18 ~ c2@2 ~ c2@2 d2@18 ~ f2@2 ~ e2@2 ~]/7",
})).s("gm_fretless_bass").gain(0.25)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@4 A@56 B@2 C@8 D@8 A@24 B@2 C@8 D@8 A@64>".pickRestart({
  A: "[~@6 [c4,d4,g4]@4 [c4,d4,g4]@85 ~]/4", B: "[~@6 [c4,d4,g4]@4 [c4,d4,g4]@37 ~]/2",
  C: "[~@6 [d4,f4,a#4]@4 [d4,f4,a#4]@19 ~ [c4,f4,a4]@4 [c4,f4,a4]@19 ~ [e4,g4,c5]@4 [e4,g4,c5]@19 ~ [d4,g4,a#4]@4 [d4,g4,a#4]@19 ~ [d4,f4,a#4]@4 [d4,f4,a#4]@19 ~ [c4,f4,a4]@4 [c4,f4,a4]@19 ~ [e4,g4,c5]@4 [e4,g4,c5]@19 ~ [d4,g4,a#4]@4 [d4,g4,a#4]@14]/8", // A# F C Gm A# F C Gm
  D: "[~@6 [d4,f4,a#4]@4 [d4,f4,a#4]@19 ~ [c4,f4,a4]@4 [c4,f4,a4]@19 ~ [e4,g4,c5]@4 [e4,g4,c5]@19 ~ [d4,g4,a#4]@4 [d4,g4,a#4]@19 ~ [d4,f4,a#4]@4 [d4,f4,a#4]@19 ~ [c4,f4,a4]@4 [c4,f4,a4]@19 ~ [e4,g4,c5]@4 [e4,g4,c5]@37 ~]/8", // A# F C Gm A# F C
})).s("gm_electric_guitar_clean").gain(0.25).pan(0.3)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@4 A@56 B@2 ~@16 A@24 B@2 ~@16 A@64>".pickRestart({
  A: "[~@6 f3@4 f3@85 ~]/4", B: "[~@6 f3@4 f3@37 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.06).pan(0.3)

// chords · electric guitar clean
const electric_guitar_clean_3 = note("<~@4 A@56 B@2 C@8 D@8 A@24 B@2 C@8 D@8 A@64>".pickRestart({
  A: "[~@7 [c4,d4,g4]@2 [c4,d4,g4]@39]/4", B: "[~@7 [c4,d4,g4]@2 [c4,d4,g4]@15]/2",
  C: "[~@7 [d4,f4,a#4]@2 [d4,f4,a#4]@10 [c4,f4,a4]@2 [c4,f4,a4]@10 [e4,g4,c5]@2 [e4,g4,c5]@10 [d4,g4,a#4]@2 [d4,g4,a#4]@10 [d4,f4,a#4]@2 [d4,f4,a#4]@10 [c4,f4,a4]@2 [c4,f4,a4]@10 [e4,g4,c5]@2 [e4,g4,c5]@10 [d4,g4,a#4]@2 [d4,g4,a#4]@3]/8", // A# F C Gm A# F C Gm
  D: "[~@7 [d4,f4,a#4]@2 [d4,f4,a#4]@10 [c4,f4,a4]@2 [c4,f4,a4]@10 [e4,g4,c5]@2 [e4,g4,c5]@10 [d4,g4,a#4]@2 [d4,g4,a#4]@10 [d4,f4,a#4]@2 [d4,f4,a#4]@10 [c4,f4,a4]@2 [c4,f4,a4]@10 [e4,g4,c5]@2 [e4,g4,c5]@15]/8", // A# F C Gm A# F C
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.7)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@20 A@2 B C A@2 B C A@2 B C A@2 B C ~@8 A@2 B C A@2 B C A@2 B C A@2 B C D@2 E A F G E A F G E A F G E A F H ~@8 A@2 B
  C A@2 B C A@2 B C A@2 B C D@2 E A F G E A F G E A F G E A F H ~@16 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2
  B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 ~@2
>`.pickRestart({
  A: "~@6 [c4,f4,a4] ~@11 [c4,f4,a4] ~@5", B: "~@6 [f4,a#4,d5] ~@11 [f4,a#4,d5] ~@5",
  C: "~@6 [g4,c5,e5] ~@11 [g4,c5,e5] ~@5", D: "~@6 [d4,f4] ~@11 [d4,f4] ~@5", E: "~@6 [d4,f4,a#4] ~@11 [d4,f4,a#4] ~@5",
  F: "~@6 [e4,g4,c5] ~@11 [e4,g4,c5] ~@5", G: "~@6 [d4,g4,a#4] ~@11 [d4,g4,a#4] ~@5", H: "~@6 [e4,g4,c5] ~@17",
})).s("gm_electric_guitar_muted").gain(0.12)

// bass · electric guitar muted
const bass_2 = note(`<
  ~@3 A@56 B@3 C D E F G H I J G K L M N O P Q@8 A@16 R@3 S D E F G H T J G K L M N O P Q@8 A@48 U@7 ~@2
>`.pickRestart({
  A: "[~@6 c2@2 ~ c2@2 d2@18 ~ f2@2 ~ e2@2 c2@18 ~ c2@2 ~ c2@2 d2@18 ~ f2@2 ~ e2@2 c2@13]/8",
  B: "[~@12 c2@4 ~@2 c2@4 d2@34 ~ d2@2 ~ g2@3 g2@2 ~ g2@6]/3",
  C: "a#1@3 ~@3 a#1@3 ~@3 a#1@7 ~@3 c2@2, ~@6 a#2 ~@5 a#2 ~@9 c3 ~",
  D: "[f1,f2]@2 ~@3 [f1,f2]@2 ~@2 [f1,f2]@2 ~ f1@7 ~@2 [g1,g2]@2 ~, ~@12 f2 ~@11", // F G
  E: "c2@4 ~@2 c2@3 ~@3 c2@7 ~@2 [c2,c3]@2 ~, c3 ~@5 c3 ~@5 c3 ~@11", // C
  F: "[g1,g2]@2 ~@2 g1@3 ~@2 [g1,g2]@2 ~ g1@5 ~ a1@4 ~@2, ~@4 g2 ~@7 g2 ~@5 a2 ~@5", // G
  G: "a#1@4 ~@2 a#1@3 ~@3 a#1@7 ~@3 [c2,c3]@2, a#2 ~@5 a#2 ~@5 a#2 ~@11", // C
  H: "f1@3 ~ f1@3 ~@2 [f1,f2]@2 ~ f1@7 ~@2 [g1,g2]@2 ~, f2 ~@3 f2 ~@7 f2 ~@11", // F G
  I: "[c2,c3]@2 ~ [c2,c3]@2 c2@4 ~@3 c2@6 ~@3 [c2,c3]@2 ~, ~@5 c3 ~@6 c3 ~@11", // C
  J: "g1@3 ~ [g1,g2]@2 ~@3 [g1,g2]@2 ~ g1@5 ~ a1@5 ~, g2 ~@11 g2 ~@5 a2 ~@5", // G
  K: "f1@3 ~@2 [f1,f2]@2 ~@2 [f1,f2]@2 ~ f1@7 ~@3 [g1,g2]@2, f2 ~@11 f2 ~@11", // F G
  L: "c2@3 ~@3 c2@3 ~@3 c2@6 ~@3 [c2,c3]@2 ~, c3 ~@5 c3 ~@5 c3 ~@11", // C
  M: "g1@3 ~ g1@3 ~@2 [g1,g2]@2 ~ g1@5 ~ a1@6, g2 ~@3 g2 ~@7 g2 ~@5 a2 ~@5", // G
  N: "a#1@3 ~@3 a#1@3 ~@3 a#1@6 ~@3 [c2,c3]@2 ~, a#2 ~@5 a#2 ~@5 a#2 ~@11", // C
  O: "f1@3 ~ f1@3 ~@3 [f1,f2] ~@2 f1@7 ~ [g1,g2]@2 ~, f2 ~@3 f2 ~@8 f2 ~@10", // F G
  P: "c2@4 ~@2 c2@3 ~@3 c2@8 ~ [g1,g2]@2 ~, c3 ~@5 c3 ~@5 c3 ~@11", // G
  Q: "[c2@5 ~@7 c2@4 ~@2 c2@4 d2@36 ~@2 f2@4 ~@2 e2@4 c2@36 ~@2 c2@4 ~@2 c2@4 d2@36 ~@2 f2@4 ~@2 e2@4 c2@26, c3 ~@191]/8",
  R: "[~@12 c2@4 ~@2 c2@4 d2@35 d2 ~@2 g2@3 g2@2 ~ g2@6]/3",
  S: "a#1@3 ~@3 a#1@3 ~@3 a#1@7 ~@3 c2@2, a#2 ~@5 a#2 ~@5 a#2 ~@9 c3 ~",
  T: "[c2,c3]@2 ~ [c2,c3] ~ c2@4 ~@3 c2@6 ~@3 [c2,c3]@2 ~, ~@5 c3 ~@6 c3 ~@11", // C
  U: "[~@6 c2@2 ~ c2@2 d2@18 ~ f2@2 ~ e2@2 c2@18 ~ c2@2 ~ c2@2 d2@18 ~ f2@2 ~ e2@2 ~]/7",
})).s("gm_electric_guitar_muted").gain(0.2)

// chords · synth strings 1
const synth_strings_1 = note("<~@119 A@8 ~@57>".pickRestart({
  A: "[~@11 [g4,a4,c5,d5]@85]/8", // Gsus4
})).s("gm_synth_strings_1").gain(0.02).pan(0.7)

// other · soprano sax
const soprano_sax = note(`<
  ~@136 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B ~@2
>`.pickRestart({
  A: "~@10 f4@2 e4@9 ~ d4@2", B: "c4@3 ~@3 a#3@5 ~ a3@5 ~@7", C: "c4@3 ~@3 a#3@4 ~@2 a3@6 ~@6",
})).s("gm_soprano_sax").gain(0.2).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B A C A@5 C A D A@19 B E ~@4 F E F A@10 C A@4 B ~@2 G@15 H I B A D I B I D A B A C A B A C A B A C A B A D A B G
  J G K G J G K G J G K G J G L A M A B A M A B D@2 N@2 O D O@5 D P O@2 D N A@14 B ~@3 F ~@3 D N D@4 O D@3 Q N Q N M ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@5 x ~ x", C: "~@3 x ~ x ~@3 x ~@2", D: "~@3 x ~ x ~@3 x ~ x", E: "~ x ~@10", F: "~@9 x ~ x",
  G: "x!4", H: "x ~@2 x ~@5 x ~ x", I: "~ x ~ x ~@5 x ~@2", J: "x ~ x!3 ~ x ~", K: "x ~ x ~ x ~ x!2",
  L: "x ~ x ~@3 x!2", M: "~@3 x ~ x ~@6", N: "~ x ~ x ~ x ~@3 x ~ x", O: "~@3 x ~ x ~ x ~ x ~ x",
  P: "~ x ~ x ~ x ~ x ~ x ~ x", Q: "~@3 x ~ x ~@5 x",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct(`<
  ~@12 A@2 B A@3 B A@8 B A@3 B A@4 C@2 D E C@2 ~ C A@14 C@3 ~ A@4 F G A H G I F A@2 H A@2 C ~@3 J K L@2 M A@6 B A@3 B
  A@4 J N A@2 F ~ A@2 G A H@2 O P G Q G ~@26 C A B A@3 B A@3 B A R A ~ J N@2 S J N ~@2 C@3 T C@2 A@8 ~@2
>`.pickRestart({
  A: "~ x", B: "~@6 x ~@4 x", C: "~@3 x!2 ~", D: "~@6 x ~ x ~@2 x", E: "~ x ~@4 x ~ x ~@3", F: "~@4 x ~@2 x",
  G: "~@4 x!2 ~@2", H: "~@4 x!2 ~ x", I: "~ x ~@2 x!2 ~@2", J: "~@3 x!3", K: "x ~@4 x ~ x ~ x ~ x",
  L: "~ x ~ x ~ x ~ x ~@3 x", M: "~ x ~@4 x ~@5", N: "x!6", O: "x ~@3 x!2 ~@2", P: "x!2 ~@2 x ~@2 x",
  Q: "x ~@2 x ~@2 x!2", R: "x!2 ~ x!2 ~", S: "x!4 ~@2", T: "x!3 ~@3",
})).gain(0.22)

// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
  ~@12 A@3 B A@3 B A@8 B A@3 B A@3 C@3 D C@2 ~ C A@14 C@3 ~ A@5 E A F E G A H A F H A C ~@4 I J@2 K A@7 B A@3 B A@3 ~@2
  L A@2 M A@2 F A F E N O E P E ~@26 C A@2 B A@3 B A@3 B Q A ~@4 R ~@2 S ~ C@3 T C@2 A@7 ~@3
>`.pickRestart({
  A: "~@2 x", B: "~ x ~@6 x ~@3", C: "~@5 x", D: "~@3 x ~@6 x ~", E: "~ x ~@14 x ~@2 x ~@4", F: "~@16 x ~@2 x ~@4",
  G: "~@7 x ~@8 x ~@2 x ~@4", H: "~ x ~@14 x ~@7", I: "~ x ~@4", J: "~@3 x", K: "~@3 x ~@4 x ~@3", L: "x ~ x",
  M: "~ x ~@22", N: "~ x ~@2 x ~@11 x ~@2 x ~@4", O: "~@4 x ~@2 x ~@8 x ~@7", P: "~@4 x ~@8 x ~@8 x ~",
  Q: "~@2 x ~@2 x", R: "~@4 x!2", S: "x", T: "~ x",
})).gain(0.07)

// drums · snare
const snare = s("sd").struct("<~@119 A ~@8 B@2 C@2 D B D@5 B E D@2 B C F ~@38>".pickRestart({
  A: "~@2 x!2", B: "~@3 x ~ x ~@3 x ~ x", C: "~ x ~ x ~ x ~@3 x ~ x", D: "~@3 x ~ x ~ x ~ x ~ x",
  E: "~ x ~ x ~ x ~ x ~ x ~ x", F: "~@3 x ~ x ~@6",
})).gain(0.15)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@119 A ~@8 B C B@2 D C D@5 C ~ D@2 C B C ~@38>".pickRestart({
  A: "~@8 x ~@2 x", B: "~@7 x ~@4", C: "~ x ~@5 x ~@4", D: "~ x ~@10",
})).gain(0.04)

// drums · hihat
const hihat = s("hh").struct(`<
  A@5 B A@9 C D A@18 C E F D F E C G H D A@3 I J D I D I D K I E L M D N A@15 C E O K P E I Q R A@3 K A@5 I S T A I U V
  D N A@7 C A@7 C W X@2 Y X@3 Z AA AB@17 A@12 D C D A@2 C A C P D A@3 AC A AC AD AE A@5 C ~@2
>`.pickRestart({
  A: "x!4", B: "x!2 ~ x", C: "x!3 ~", D: "~ x!3", E: "~@6 x ~@5 x ~@5 x ~@4 x", F: "x ~@4 x!2 ~@5 x ~@11",
  G: "~@6 x ~@5 x ~@4 x!2 ~@5", H: "~ x!4 ~ x ~@5", I: "x ~@2 x ~@2 x ~@2 x ~ x", J: "~@3 x ~@2 x ~@2 x ~ x",
  K: "x ~@5 x ~@5 x ~@5 x ~@4 x", L: "x ~@2 x ~@2 x ~ x ~@3 x ~@5 x ~@5", M: "x ~@2 x!2 ~ x ~@5",
  N: "x ~@4 x!2 ~ x!2 ~@2 x ~@5 x ~@5", O: "x ~@4 x!2 ~@5 x ~@5 x ~@3 x ~", P: "x ~@4 x!2 ~@4 x!2 ~@4 x ~@6",
  Q: "~@2 x ~@3 x ~@5 x ~@4 x!2 ~@5", R: "~ x!4 ~ x ~@2 x ~ x", S: "~@2 x!2 ~@2 x ~@2 x ~ x",
  T: "~@2 x!2 ~@2 x ~@2 x ~@2", U: "~@4 x ~ x ~@5 x ~@5 x ~@4 x", V: "x ~@4 x!2 ~@4 x!2 ~@11",
  W: "~@3 x ~ x ~ x ~ x ~ x", X: "~ x ~ x ~ x ~ x ~ x ~ x", Y: "~@2 x ~@2 x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x!2 ~",
  Z: "~@2 x ~@2 x!2 ~@2 x ~ x!2 ~@2 x ~ x ~@6", AA: "~@3 x ~ x!2 ~ x!2 ~ x", AB: "x ~ x!2 ~ x!2 ~ x!2 ~ x",
  AC: "x ~@2 x ~@2 x ~@4 x", AD: "~ x ~ x ~@2 x ~@4 x", AE: "~ x ~ x ~@2 x ~@2 x ~@2",
})).gain(0.3)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A B C D E C B F B C B G H B I A J@2 G K J@2 B I B@3 I B@6 I L M L N L O P Q R B@3 S@2 A I R I T B I L U V L U W X Y
  Z W@5 AA W@5 AB L M AC AD L O P Q K J@2 B I B@2 I B I AE AF B I AF I L U W X Y Z W@3 AB W AA W@5 AB ~@3 AG ~@3 AH AI
  AJ@15 AK@2 J B I B@3 I B@4 I AL AM R B@2 I B I@2 R B@3 AN B AN@2 B@6 G ~@2
>`.pickRestart({
  A: "~@8 x ~@2 x", B: "~@2 x ~@2 x ~@2 x ~@2 x", C: "~@4 x ~@5 x!2 ~@4 x!2 ~@4 x ~", D: "~@4 x ~@5 x ~@5 x ~@5 x!2",
  E: "~@2 x ~@2 x!2 ~ x ~@2 x", F: "~@4 x ~@5 x!2 ~@4 x ~@5 x ~", G: "~@2 x ~@2 x ~@6", H: "~@5 x ~@5 x",
  I: "~@2 x ~@2 x ~@2 x ~@3", J: "~@2 x ~@2 x ~@5 x", K: "~@2 x ~@8 x", L: "~@5 x ~ x!2 ~ x!2",
  M: "~@2 x!3 ~@3 x!3 ~@3 x ~ x ~@7", N: "~@2 x ~ x ~@3 x!3 ~@3 x ~ x ~@7", O: "~@2 x!3 ~@3 x ~ x ~@3 x ~ x ~@7",
  P: "~@10 x ~@3 x ~ x ~@3 x!3 ~", Q: "x ~@4 x ~ x!2 ~@3", R: "~@5 x ~@2 x ~@2 x", S: "~@2 x", T: "~@11 x",
  U: "~ x!2 ~@2 x ~ x!2 ~ x!2", V: "~ x!2 ~@2 x ~ x!2 ~@3", W: "~ x ~ x ~ x ~ x", X: "~ x ~@3 x ~ x",
  Y: "~ x ~ x ~@3 x", Z: "~@3 x ~@3 x", AA: "~@3 x ~ x ~ x", AB: "~ x ~ x ~ x ~@2", AC: "~@2 x ~ x!2 ~ x!2 ~ x!2",
  AD: "~@2 x!3 ~@3 x!3 ~@3 x!3 ~@7", AE: "~ x ~@3 x ~@2 x ~@3", AF: "~ x ~@3 x ~@2 x ~@2 x",
  AG: "~@2 x ~ x!2 ~ x!2 ~ x ~", AH: "~@2 x ~ x!2 ~ x!2 ~@3", AI: "~@7 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2",
  AJ: "~ x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2", AK: "~ x ~@5 x ~@5 x ~@5 x ~@4", AL: "~@10 x ~@5 x ~@5 x!2",
  AM: "~@4 x!2 ~@4 x ~@5 x ~@7", AN: "~@2 x ~@2 x ~@2 x!2 ~@2",
})).gain(0.15)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@15 A ~@19 A ~ A B A B A B A ~@15 A ~@17 A ~@3 A B ~@10 C ~@7 D ~@9 E ~@7 A ~@7 A B ~@28 C ~ A ~@3 D ~ A@2 ~@17
>`.pickRestart({
  A: "~@9 x ~ x", B: "~ x ~@10", C: "~@11 x", D: "~@3 x", E: "~@6 x!2",
})).gain(0.37)

// drums · crash
const crash = s("cr").struct("<~@101 [~@11 x] ~@61 [~@11 x] ~@20>").gain(0.37)

stack(
  bass, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_clean_3, electric_guitar_muted, bass_2,
  synth_strings_1, soprano_sax, kick, rim, rim_soft, snare, snare_soft, hihat, hihat_soft, open_hat, crash
)

More by Sting