Strudelify
Walking on the Moon cover art

My Songs

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, A@4 for four bars: 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 ~@2 d2@2 g2@3 ~ g2@2 g2@6]/3", C: "[~@12 c2@4 ~@2 c2@4 d2@36 d2 ~ 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 F G J E K L M N O@8 A@16 P@3 G D E F G H Q F G J E K L M N O@8 A@48 R@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 ~@2 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 ~@3 [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: "f1@3 ~@2 [f1,f2]@2 ~@2 [f1,f2]@2 ~ f1@7 ~@3 [g1,g2]@2, f2 ~@11 f2 ~@11", // F G
  K: "g1@3 ~ [g1,g2]@2 ~@3 [g1,g2]@2 ~ g1@5 ~ a1@5 ~, g2 ~@11 g2 ~@5 a2 ~@5", // G
  L: "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
  M: "f1@3 ~ f1@3 ~@3 [f1,f2] ~@2 f1@7 ~@2 [g1,g2]@2, f2 ~@3 f2 ~@8 f2 ~@10", // F G
  N: "c2@4 ~@2 c2@3 ~@3 c2@8 ~@2 [g1,g2]@2, c3 ~@5 c3 ~@5 c3 ~@11", // G
  O: "[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",
  P: "[~@12 c2@4 ~@2 c2@4 d2@36 d2 ~ g2@3 ~ g2@2 g2@6]/3",
  Q: "[c2,c3]@2 ~ [c2,c3] ~ c2@4 ~@3 c2@6 ~@3 [c2,c3]@2 ~, ~@5 c3 ~@6 c3 ~@11", // C
  R: "[~@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 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 A B A B A B A B A B A B A B A B ~@2
>`.pickRestart({
  A: "~@10 f4@2 e4@9 ~ d4@2", B: "c4@3 ~@3 a#3@5 ~ a3@5 ~@7",
})).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 H A L A B A L A B D@2 M@2 N D N@5 D O N@2 D M A@14 B ~@3 F ~@3 D M D@4 N D@3 P M P M L ~@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 ~@2 x ~ x!2 ~@2 x ~@2", K: "x ~@2 x ~@2 x ~@2 x ~ x",
  L: "~@3 x ~ x ~@6", M: "~ x ~ x ~ x ~@3 x ~ x", N: "~@3 x ~ x ~ x ~ x ~ x", O: "~ x ~ x ~ x ~ x ~ x ~ x",
  P: "~@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 B C A D C F B A@2 D A@2 C ~@3 G H I@2 J A@6 B A@3 B
  A@4 G K A@2 B ~ A@2 C A D@2 L M C N C ~@26 C A B A@3 B A@3 B A O A ~ G K@2 P G K ~@2 C@3 Q 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: "~ x ~ x!2 ~",
  G: "~@3 x!3", H: "x ~@4 x ~ x ~ x ~ x", I: "~ x ~ x ~ x ~ x ~@3 x", J: "~ x ~@4 x ~@5", K: "x!6", L: "x ~@2 x!2 ~",
  M: "x ~@3 x ~@7 x ~@8 x ~@2", N: "x ~@4 x ~@3 x ~ x", O: "x!2 ~ x!2 ~", P: "x!4 ~@2", Q: "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 C E F A B A C B A C ~@4 G H@2 I A@7 B A@3 B A@3 ~@2
  J A@2 K A@2 C A C E L M E N E ~@26 C A@2 B A@3 B A@3 B F A ~@4 O ~@2 P ~ C@3 Q C@2 A@7 ~@3
>`.pickRestart({
  A: "~@2 x", B: "~ x ~@6 x ~@3", C: "~@5 x", D: "~@3 x ~@6 x ~", E: "~ x ~@8 x ~", F: "~@2 x ~@2 x", G: "~ x ~@4",
  H: "~@3 x", I: "~@3 x ~@4 x ~@3", J: "x ~ x", K: "~ x ~@10", L: "~ x!2 ~@7 x ~", M: "~ x!2", N: "~@2 x ~@4 x ~@4",
  O: "~@4 x!2", P: "x", Q: "~ 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 B W J
  H B@5 R B@5 I L M X Y L O P Q K J@2 B I B@2 I B I Z AA B I AA I L U B W J H B@3 I B R B@5 I ~@3 AB ~@3 AC AD AE@17 J B
  I B@3 I B@4 I AF AG R B@2 I B I@2 R B@3 AH B AH@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: "~@2 x ~@5 x ~@2 x", X: "~@2 x ~ x!2 ~ x!2 ~ x!2",
  Y: "~@2 x!3 ~@3 x!3 ~@3 x!3 ~@7", Z: "~ x ~@3 x ~@2 x ~@3", AA: "~ x ~@3 x ~@2 x ~@2 x",
  AB: "~@2 x ~ x!2 ~ x!2 ~ x ~", AC: "~@2 x ~ x!2 ~ x!2 ~@3", AD: "~@4 x ~@2 x ~@2 x ~", AE: "~ x ~@2 x ~@2 x ~@2 x ~",
  AF: "~@10 x ~@5 x ~@5 x!2", AG: "~@4 x!2 ~@4 x ~@5 x ~@7", AH: "~@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 A ~@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",
})).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