Strudelify
Moon Over Bourbon Street cover art

1998 · The Dream Of The Blue Turtles

Moon Over Bourbon Street

Sting

KeyF minorTempo128 bpm
0:00/0:00
// Moon Over Bourbon Street — Sting
// 128 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 124 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P A Q K R S Q T H U V T W X Y Z AA AB AA AB AA AC AD AE B AF AG AH F AI AJ I J K AK AL
  AM O P AE Q K R AN Q T H AO Y T W X Y Z AA AB AA AB AA AC AP ~@12 AE B AF AG AH F AQ AR I AS AT AU AL AM O P AE Q AF W
  AV Q AW AX AO Y T W X AY@3 ~@3
>`.pickRestart({
  A: "g2@10 ~@2 g1@11 ~", B: "c2@9 ~@3 c3@10 ~@2", C: "f2@10 ~@2 c2@11 ~", D: "f1@11 ~ f2@11 ~",
  E: "g2@11 ~ db2@10 ~@2", F: "c2@6 c3@5 ~", G: "f2@11 ~ e2@11 ~", H: "eb2@5 ~ d2@5 ~", I: "db2@11 ~ db3@10 ~@2",
  J: "c3@10 ~@2 c2@11 ~", K: "f2@10 ~@2 g2@11 ~", L: "ab2@11 ~ c3@9 ~@3", M: "d2@11 ~ d2@10 ~@2", N: "g1@11 ~ g2@11 ~",
  O: "db2@11 ~ db3@11 ~", P: "c3@10 ~@2 c2@9 ~@3", Q: "c2@5 ~ c3@5 ~", R: "ab2@10 ~@2 f2@9 ~@3", S: "g2@5 ~ g1@5 ~",
  T: "f2@5 ~ e2@5 ~", U: "db2@10 ~@2 ab2@9 ~@3", V: "g2@5 ~ c2@5 ~", W: "eb2@10 ~@2 d2@9 ~@3",
  X: "db2@9 ~@3 db3@10 ~@2", Y: "c3@5 ~ c2@5 ~", Z: "f1@10 ~@2 ab1@9 ~@3", AA: "bb1@5 ~ c2@5 ~", AB: "f1@5 ~ ab1@5 ~",
  AC: "f1@9 ~@3 ab1@10 ~@2", AD: "bb1@3 ~ db2 c2 ~@2", AE: "g1@10 ~@2 g2@11 ~", AF: "f2@10 ~@2 e2@11 ~",
  AG: "eb2@11 ~ d2@11 ~", AH: "g1@11 ~ g2@10 ~@2", AI: "f2@11 ~ g2@12", AJ: "ab2@5 ~ c3@4 ~@2", AK: "ab2@11 ~ f2@9 ~@3",
  AL: "d2@11 ~ d3@10 ~@2", AM: "g2@11 ~ g1@11 ~", AN: "g2@5 ~ db2@5 ~", AO: "db2@10 ~@2 db3@9 ~@3",
  AP: "bb1@3 ~ c2@3 ~", AQ: "f2@11 ~ g2@11 ~", AR: "ab2@5 ~ f2@4 ~@2", AS: "c3@10 ~@2 c2@5 ~ bb1@6",
  AT: "f1@10 ~@2 g1@11 ~", AU: "ab1@11 ~ f1@9 ~@3", AV: "g1@5 ~ g2@5 ~", AW: "f1@5 ~ g1@5 ~", AX: "ab1@5 ~ f2@5 ~",
  AY: "[c3@5 ~ c2@30]/3",
})).s("gm_acoustic_bass").gain(0.33)

// bass · acoustic bass · "ACOU BASS" · soft notes
const bass_soft = note("<~@38 A ~@38 B C D E F G H I J@4 ~@35>".pickRestart({
  A: "~@6 bb1 ab1", B: "db2@11 ~", C: "eb2@11 ~ f2@11 ~", D: "g2@11 ~ b1@10 ~@2", E: "c2@12 g2@11 ~",
  F: "c3@12 f2@11 ~", G: "bb2@11 ~ bb1@10 ~@2", H: "ab1@12 ab2@11 ~", I: "g2@6 g2@5 ~", J: "c2@23 ~",
})).s("gm_acoustic_bass").gain(0.16)

// other · soprano sax · "SOPRAN SAX"
const soprano_sax = note(`<
  ~@19 A B ~@2 C D@2 E F G ~ H I@4 J K L M ~@2 N O ~@2 P Q R S T@2 U V W X ~ Y Z@3 AA AB AC ~ AD AE AF@2 ~ AG AH@2 AI AJ
  AK@2 AL AM AN AM AO@2 AP AQ AR AS AT AU AV ~@2 AW@3 AX ~ AY@2 ~@2 AZ BA BB@3 ~ BC@2 BD BE BF BG BH BI@2 BJ@2 ~@2 BK BL
  ~@3
>`.pickRestart({
  A: "~@16 c5 ~ c5 ~ c5 ~ c5@2", B: "c5@2 c5 ~ c5@2 c5@2 f5@2 b4@6 f4@2 ab4@6", C: "~@12 ab5@9 ~ g5 ab5",
  D: "[g5 ~ f5 ~ e5 ~ g5 ~ f5 ~ c5@2 ~ ab4@3 f4@2 ab4@4 f4@10 ~@8 c4@6 ~@2]/2", E: "bb3 ~ c4 ~@2 db4@6 ~@11 e4@2",
  F: "~ f4@2 ~ g4@3 ab4@2 bb4@2 f5 g5@3 ~ e5@2 f5 ~ c5 ab4@2 g4, ~@12 gb5 ~@11", G: "~ f4@3 bb4@2 g4@2 ab4@2 f4@12 ~@2",
  H: "f5 e5", I: "[f5@3 ~@15 ab5@39 c5@2 f5 bb4@21 ~@2 ab4@10 f4 c4 bb3]/4", J: "ab3@4 ~@2 ab4@3 ~@3 ab4@6 c5@6",
  K: "bb4@6 g4@5 ~", L: "~@6 ab4 ~@5 ab4@6 f4@2 ~@4", M: "ab4 ~@4 ab4@6 ~ f4@6 c4@6", N: "~@8 c5 ~ c5!2",
  O: "~ c5@5 ab4@4 ~ f4@12 ~", P: "~@12 c5@2 ~ c5@2 ~ c5@3 ~ ab5@2",
  Q: "gb5 g5@3 f5@2 c5@2 ab4@8 f4@2 bb4@2 g4@2 ab4@2", R: "f4 ~@5", S: "~@8 c4 f4 e4 g4", T: "[c5@41 ~@7]/2",
  U: "~@6 g5@14 ~ f5 [f5,g5] d5, ~@6 gb5 ~@17", V: "~ c5 ~ b4 ab4 ~ g4 ~ f4 d4 ~@2 a3 ~ bb3 ~ b3@6 ~@2, ~@11 c4@2 ~@11",
  W: "~@12 f4@9 g4 ~ f4", X: "e4@2 c5@9 ~", Y: "f5@3 ~ c5 ~@7 eb5 e5@3 ~ c5@3 ~@4",
  Z: "[~ f5@3 ~ c5@3 ~@2 f5@3 ~ c5@4 ~ f5@3 ~ c5@3 ~@3 ab5@29 f5@2 c5@2 ~ bb4@2 ~ ab4@4 eb4@2]/3",
  AA: "~ c4@2 ~ bb3@7 ~@13", AB: "~@18 f4@3 ~ g4@2", AC: "~ ab4@3 c5@2 f5@6 c5@3 ~ ab4@3 f4@5",
  AD: "~@3 c5 db5 ~ d5 ~ f5 ~ d5 db5 ~ c5 ab4 ~ f4 db4 ~ c4 ~ bb3 ab3@2", AE: "~ c4 db4@2",
  AF: "[d4@8 g4@2 ab4@3 f4@14 ~@21]/2", AG: "~@6 ab4@2 ~@4 ab4@5 ~ c5@6",
  AH: "[bb4@12 g4@14 ~@4 ab4@2 ~@4 ab4@5 c5@5 ~@2]/2", AI: "bb4@3 ab4@3 g4@2 ~@4 ab4@12", AJ: "~@3 ab4 ~@2 ab4@3 c5@3",
  AK: "[bb4@12 g4@17 ~ ab4@2 ~@4 ab4@5 c5@5 ~@2]/2", AL: "bb4@3 ab4@2 ~ g4@2 ~ f4@2 ~ g4@12", AM: "~ ab4 g4 f4",
  AN: "g4 ab4", AO: "[g4@26 ~@4 c5@3 bb4@3 ab4@3 bb4@3 g4@5 ~]/2", AP: "ab4@3 bb4@3 ab4@13 ~@5",
  AQ: "g4@3 ab4@3 g4@13 ~@5", AR: "f4@3 g4@3 f4@16 ~@2", AS: "~ c5 b4 c5", AT: "~ bb4 a4 bb4", AU: "~ ab4 g4 ab4",
  AV: "~@6 gb4@12 g4@5 ~",
  AW: "[~@20 ab4@2 ~ g4@2 ~ ab4@3 ab4@2 ~ ab4@3 bb4@2 ~@2 c5@4 ab4@3 ~ f4@7 ~@16 c5 [eb5,f5]]/3", // Ebsus2
  AX: "g5 ab5@4 g5@2 f5 ~@2 ab4@6 ~ g4 [e4,f4] d4 c4 [a3,b3] ~@2", // Fmaj7 Asus2
  AY: "[ab5@2 ~ ab5@5 ~ g5 ~@2 ab5@2 ~ c5@2 bb4@2 ab4@2 f4@5 ~@22, ~@11 f5@2 ~@35]/2",
  AZ: "~@5 db5@2 c5 ab4 ~ f4 d4 db4 ~ c4 db4 d4 ~ f4@2 g4 ~ ab4@2", BA: "c5@15 ~@2 d5 f5@2 ~ eb5@2 d5, ~@10 e5 ~",
  BB: "[f5@2 e5 eb5@2 d5 f5@2 ~ eb5 ~ d5 g4@2 ~ ab4@2 b4@2 ~ g5@15 ~ ab5@5 ~ g5@2 f5 e5@2 ~ c5@2 e5@2 ~ ab4@2 c5 ~ f4@2 ab4@2 e4@2 g4@9, ~@8 e5@2 ~@37 g5@2 ~@23]/3",
  BC: "[f5@11 ~ c5@2 ab4@2 ~ f4@2 c4@2 bb3@2 ab3@7 ~@6 c5@8 ~@4]/2", BD: "c5@9 ~@3 c5@3 ~ f4@3 ab4@4 ~",
  BE: "f4@7 ~@17", BF: "~@6 c4 d4 e4 [f4,g4] [a4,b4] c5 d5 e5 g5@10, ~@14 f5 ~@9",
  BG: "~@2 f5 e5@2 g5@2 f5 ~ e5@2 f5@2 c5 c5@2 bb4@2 ab4@2 bb4@2 g4@2",
  BH: "ab4@2 ~ g4@2 f4@2 c4@2 bb3@2 ab3@12 ~, ~ e4 ~@10",
  BI: "[~@12 f5@15 ~@2 db5@2 f5@2 c5@2 e5 ~ bb4@2 db5 ~ ab4 c5@6]/2",
  BJ: "[~@5 c4@2 f4@2 ~ ab4@4 ~ bb4@2 c5 d5@2 e5@6 d5 [bb4,c5] ab4 f4@3 ~@16, ~@9 g4@2 ~@37]/2", // Bbsus2
  BK: "~@6 ab5 ~@5 ab5@6 g5@5 ~", BL: "~@6 f5 ~@5 f5@6 ~@6",
})).s("gm_soprano_sax").gain(0.19).pan(0.4)

// other · piccolo
const piccolo = note("<~@31 A B C@2 A B C@2 ~@30 A B C@2 A B C@2 ~@47>".pickRestart({
  A: "~@6 f6 ~@5 f6@12", B: "~@6 ab6 ~@5 ab6@6 g6@4 ~@2", C: "[~@6 f6@2 ~@4 f6@16 ~@2 f6 ~@5 db6@6 c6@5 ~]/2",
})).s("gm_piccolo").gain(0.25).pan(0.6)

// chords · flute
const flute = note(`<
  ~@31 A B C D E F C G H I@3 J K@3 L M N O P Q R S H I@3 J K@3 L M N O P T U B E V U F U W ~@8 X Y Z AA H I@3 J K@3 L M
  N O P Q R S H I@3 J K@3 L M N O AB AC AD AE ~@3
>`.pickRestart({
  A: "~@3 ab4 ~@2 ab4@3 c5@2 ~", B: "bb4 g4", C: "~@6 ab4@2 ~@4 ab4@6 c5@3 ~@3",
  D: "bb4@2 ~ ab4@2 ~ g4@2 ~@4 ab4@10 ~@2", E: "~@6 ab4@2 ~@4 ab4@6 c5@5 ~", F: "bb4@12 g4@11 ~",
  G: "bb4@2 ~ ab4@2 ~ g4@2 ~@4 f4@6 ~@6", H: "~@6 bb4 f4 ~@4 [f4,bb4]@12",
  I: "[~@12 [eb4,gb4]@6 [e4,g4]@8 ~@4 [ab4,c5] ~@5 [ab4,c5]@14 ~@4 [ab4,c5] ~@5 [ab4,c5]@12]/3", // Ebm Em Ab
  J: "~@3 f4 ~@2 [f4,bb4]@6, ~@6 bb4 ~@17", // Bb5
  K: "[~@12 [eb4,gb4]@6 [e4,g4]@8 ~@4 [ab4,c5] ~@5 [ab4,c5]@14 ~@3 ab4 c5 ~@5 [ab4,c5]@12]/3", // Ebm Em Ab
  L: "~@6 [f4,ab4]@2 ~@4 [f4,ab4]@11 ~", M: "~@2 [f4,ab4] [e4,g4]", N: "~@3 [ab4,c5] ~@2 [ab4,c5]@6",
  O: "~@6 [ab4,c5] ~@5 [ab4,c5]@12", P: "~@6 [f4,ab4] ~@5 [f4,ab4]@12", Q: "~@3 [g4,b4] ~@2 [g4,b4]@6",
  R: "~@3 [f4,ab4] ~@2 [f4,ab4]@6", S: "~@6 e4 g4 ~@5 [e4,g4]@9 ~@2", T: "[c4,e4,bb4]", U: "~@3 ab4 ~@2 ab4@3 c5@3",
  V: "bb4 ab4 g4 ~ ab4@3 ~", W: "bb4@3 ab4@2 ~ g4@3 f4@3 g4@10 ~@2", X: "c4", Y: "db4", Z: "d4", AA: "eb4@3 e4@2 ~",
  AB: "[f4,ab4]", AC: "[e4,bb4]@7 ~", AD: "~@6 ab5 ~@5 ab5@6 g5@4 ~@2", AE: "~@6 f5 ~@5 f5@6 e5@3 ~@3",
})).s("gm_flute").gain(0.2).pan(0.6)

// other · english horn · "ENGL.HORN"
const english_horn = note("<~@34 A B ~@33 C D E F G H I J K L@2 M@2 N O P Q R S T ~@35>".pickRestart({
  A: "~@12 db4@5 ~ c4@2 ~ bb3@2 ~", B: "ab3 ~@7", C: "~@6 ab4 ~@5 ab4@6 c5@6", D: "bb4@12 g4@11 ~",
  E: "~@6 ab4 ~@5 ab4@6 c5@5 ~", F: "bb4@2 ~ ab4@3 g4@3 ~@2 ab4@12 ~", G: "~@3 ab4 ~@2 ab4@3 c5@3", H: "bb4 g4",
  I: "~@6 ab4@2 ~@4 ab4@6 c5@5 ~", J: "bb4@3 ab4@3 g4@2 ~ f4@3 g4@12", K: "~@6 ab4@6 g4@5 ~ f4@6",
  L: "[g4@6 ab4@7 ~@2 ab4@3 g4@3 f4@3]/2", M: "[g4@26 ~@4 c5@3 bb4@3 ab4@3 bb4@3 g4@5 ~]/2", N: "ab4@3 bb4@3 ab4@17 ~",
  O: "g4@3 ab4@3 g4@17 ~", P: "f4 g4 f4@6", Q: "~ c5 b4 c5", R: "~ bb4 a4 bb4", S: "~@6 ab4@6 g4@6 ab4@5 ~",
  T: "~@3 gb4@6 g4@2 ~",
})).s("gm_english_horn").gain(0.2).pan(0.4)

// other · bassoon
const bassoon = note("<~@31 A B C D E F C G ~@30 H I J K L M N O ~@8 P@4 ~@35>".pickRestart({
  A: "f2@5 ~ ab2@5 ~", B: "bb2@11 ~ c3@11 ~", C: "f2@11 ~ ab2@12", D: "~@6 bb2@3 ~@3 c3@11 ~", E: "f2@11 ~ ab2@11 ~",
  F: "bb2@11 ~ c3@10 ~@2", G: "~ bb2 ~@2", H: "f2@7 ~@5 ab2@10 ~@2", I: "~ bb2 ~ c3", J: "f2@8 ~@4 ab2@11 ~",
  K: "~@6 bb2@7 ~@5 c3@5 ~", L: "f2@10 ~@2 ab2@11 ~", M: "~@6 bb2@7 ~@5 c3@6", N: "f2@9 ~@3 ab2@11 ~",
  O: "~@6 bb2@8 ~@4 c3@5 ~", P: "c3 ~@5 c2 ~@5",
})).s("gm_bassoon").gain(0.25).pan(0.4)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@39 A@2 B@2 C@2 B@2 D@2 B@2 E F G H I J B@2 C@2 B@2 D@2 K@2 L M N@8 O P@2 Q@2 R@2 S T U V W A@2 B@2 C@2 B@2 D@2 B@2 E
  F G H A@2 B@2 C@2 B@2 D@2 B@2 X Y ~@5
>`.pickRestart({
  A: "[~@12 bb4@11 ~ eb4@11 ~ [eb4,gb4]@6 [e4,g4]@6, [g3,bb3,db4,f4]@23 gb4@12 ~@13, ~ [e3,bb3]]/2", // Ebm Em Gm7b5 Edim
  B: "[~@6 [ab4,c5]@2 ~@22 [ab4,c5] ~@5 [ab4,c5]@11 ~, [ab3,c4], [f3,f4]@12 [e3,e4,ab4,c5]@13 ~@23, ~@23 [eb3,eb4]@12 [d3,d4]@10 ~@3]/2", // Ab F Eaug Eb D
  C: "[~@12 [f4,bb4]@12 ~ gb4@10 ~ [eb4,gb4]@6 [e4,g4]@6, [bb3,db4]@23 ~, f3@12 e3@11 ~]/2", // Bb5 Ebm Em Bbm
  D: "[~@2 [f4,ab4]@2 ~@2 [c4,f4,ab4] [e3,e4,g4], bb3, f3@7 ~, db4@3 ~]/2", // Fm Em
  E: "~@3 [f4,ab4] ~@2 [f4,ab4]@6, [ab3,c4,d4]", F: "~@3 [g4,b4] ~@2 [g4,b4]@6, [g3,b3,d4,f4]",
  G: "~@2 [f4,ab4] ~ [f4,ab4]@4, [f3,b3,db4]", H: "~@2 [e4,g4] ~ g4@4, [e3,bb3,c4], ~@11 e4@12 ~",
  I: "~ bb4, [g3,bb3,db4,f4]", J: "[eb4,gb4]@2 [eb4,gb4] [e4,g4], [e3,bb3]",
  K: "[~@6 [ab4,c5]@2 ~@4 [e3,e4,ab4,c5]@11 ~@7 [ab4,c5] ~@5 [d4,ab4,c5]@12, [ab3,c4], [f3,f4]@13 ~@10 eb3@12 d3@10 ~@3, ~@2 eb4 ~]/2", // Ab Eaug Ab Dm7b5 Ab F
  L: "[ab3,db4,f4,ab4]", M: "[c4,e4,g4,bb4]", N: "f5/4", O: "[ab3,db4,f4]",
  P: "[[g3,bb3,eb4]@12 [ab3,c4,f4]@11 ~ [b3,d4]@24, ~@23 g3@23 ~@2]/2", Q: "[[g3,eb4]@35 ~ f4@12, c4, ~@35 ab3@13]/2",
  R: "[[f3,bb3,d4]@23 ~ ab3@22 ~@2, ~@23 c4@23 ~@2]/2", S: "[g3,b3,d4,f4]", T: "[ab3,c4,f4,ab4]", U: "[bb3,db4,f4,g4]",
  V: "[b3,d4,f4]", W: "eb4@6 ~@3 g3@2 ~, [bb3,c4], gb3@3 ~, ~ e4", X: "[db4,f4,ab4]", Y: "[c4,e4,bb4]@23 ~",
})).s("gm_string_ensemble_2").gain(0.25)

// bass · contrabass
const bass_2 = note("<~@77 A B C D E F G H I@4 ~@32 J@3>".pickRestart({
  A: "db2", B: "eb2 f2", C: "g2 b1", D: "c2 g2", E: "c3 f2", F: "bb2 bb1", G: "ab1 ab2", H: "g2!2", I: "c2", J: "f1/3",
})).s("gm_contrabass").gain(0.24).pan(0.7)

// other · timpani
const timpani = note("<~@85 [c3!24]!4 ~@35>").s("gm_timpani").gain(0.11)

// other · taiko drum · "TAIKO"
const taiko_drum = note(`<
  ~
  [f3 ~@23]!30
  [~@6 f3 ~@11 f3 ~@5]!8
  [f3 ~@23]!30
  [~@6 f3 ~@11 f3 ~@5]!8
  ~@12
  [f3 ~@23]!30
  ~@5
>`).s("gm_taiko_drum").gain(0.2).pan(0.7)

// drums · hihat
const hihat = s("hh").struct("<~ [~ x ~ x]!76 ~@12 [~ x ~ x]!30 ~@5>").gain(0.19)

// drums · ride
const ride = s("rd").struct("<~@69 [~ x ~ x]!8 ~@47>").gain(0.12)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@31 [~ x ~ x]!46 ~@12 [~ x ~ x]!30 ~@5>").gain(0.49)

stack(
  bass, bass_soft, soprano_sax, piccolo, flute, english_horn, bassoon, string_ensemble_2, bass_2, timpani, taiko_drum,
  hihat, ride, cabasa
)

More by Sting