Strudelify

Mad About You

Sting

KeyA minorTempo88 bpm
0:00/0:00
// Mad About You — Sting
// 88 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 5 "El Guit" named as a guitar, played on electric guitar clean (its orchestral harp patch is not one); ch 6 "GuitSolo" named as a guitar, played on overdriven guitar (its string ensemble 1 patch is not one)
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(88/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.

// other · clarinet · "Sax      | Mad About You"
const clarinet = note("<~@54 A B ~@7 C D E F G H I J K ~@5 L M>".pickRestart({
  A: "~@5 d#4 e4 e5 d5 e4 f4 g5 f5@3 d5", B: "e5 ~@3", C: "~@3 d5", D: "b4@3 c5", E: "a4@5 ~@4 c5 ~ e5 b4 c5 e5 g5",
  F: "g5 g#5!2 b5!2 c6!2 b5 d6@3 [b5,c6] g#5@3 f5, ~@12 a5 ~@3", G: "e5@2 a5@2 ~@3 e5 d5 a5 e5 d5 a5@2 d5 a5",
  H: "c5@3 a5 c5 b4 ~ b4!2 a4 ~ b4 c5@2 b4 [g4,a4]", I: "e4@2 b4 a4 ~@6 e4 b4 a4@3 ~",
  J: "b3 g4 f4@4 ~ e4 f4 g4 e4 d4 c4@2 b3@2", K: "~ a3@15", L: "f5 e5 d5 f5 e5@4 ~@8", M: "c5@3 d5 b4@4 a4 ~@7",
})).s("gm_clarinet").gain(0.72).pan(0.4)

// bass · fretless bass · "Bass     | Sting"
const bass = note(`<
  ~@5 A B A B A B A B A B A B A B A C D E F G H B H B H B H B A B A B H B H C D E F I J K L M N O P Q R S H B H B H B H
  B H B H B H B H C D E D E D E F I
>`.pickRestart({
  A: "a2 c3", B: "f2@3 e2", C: "b2@3 e2", D: "f2 d3", E: "d#3 e3", F: "a2 g2", G: "f2@4 e2@4 a2@3 ~ e2@4",
  H: "a2@8 c3@7 e3", I: "f2@4 e2@4 a2@3 ~@5", J: "c2@13 ~@2 c2", K: "g#2@14 ~ c2", L: "a2@14 ~ c2", M: "a#2@15 ~",
  N: "f2", O: "e2", P: "d2", Q: "d#2", R: "e2 e3 e2 e3", S: "e2 e3@2 e2",
})).s("gm_fretless_bass").gain(0.64).pan(0)

// chords · acoustic guitar steel · "AcGuit 1"
const acoustic_guitar_steel = note("<A@7 B@6 ~@12 B@14 C@2 D E F@2 ~@10 B@6 G@4 B@6 D E D E D E F@2>".pickRestart({
  A: "[~@8 a3@2 ~ e4@2 a3 ~@3 d4@2 e4@2 a3 ~@3 c4@2 ~@2 c4 ~@2 a3@2 c4 ~ b3@2 ~ d4 a3@2 ~ e4@2 a3 ~@3 d4@2 e4@2 a3 ~@3 c4@2 ~@2 c4 ~@2 a3@2 c4 ~ b3@2 ~ d4 a3@2 ~ e4@2 a3 ~@3 d4@2 e4@2 a3 ~@3 d4@2 e4@2 a3 ~@3 c4@2 d4@2 c4 ~ d4 ~@2 c4 ~@3 c4 d4, ~@10 a3@3 ~ a3@2 a3@5 ~ a3@2 a3@6 a3@2 ~@6 a3@2 ~@2 a3@3 ~ a3@2 a3@5 ~ a3@2 a3@6 a3@2 ~@6 a3@2 ~@2 a3@3 ~ a3@2 a3@5 ~ a3@2 a3@5 ~ a3@2 a3@6 a3@2 a3@4 b3@4, ~@15 f4@2 ~@6 e4@2 ~@2 d4@4 d4@3 ~ d4@3 ~@9 f4@2 ~@6 e4@2 ~@2 d4@4 d4@3 ~ d4@3 ~@9 f4@2 ~@6 f4@2 ~@6 e4@2 ~@10 d4@3 ~@2]/7",
  B: "[a3@2 ~ e4@2 a3 ~@3 d4@2 e4@2 a3 ~@3 c4@2 ~@2 c4 ~@2 a3@2 c4 ~ b3@2 ~ d4, ~@2 a3@3 ~ a3@2 a3@5 ~ a3@2 a3@6 a3@2 ~@6 a3@2, ~@7 f4@2 ~@6 e4@2 ~@2 d4@4 d4@3 ~ d4@3 ~@2]/2",
  C: "[a3@2 ~ e4@2 a3 ~@3 d4@2 e4@2 a3 ~@3 c4@2 ~@2 c4 ~@2 b3@2 c4 ~ b3@2 ~ d4, ~@2 a3@3 ~ a3@2 a3@5 ~ a3@2 b3@6 b3@2 ~@6 c4@2, ~@7 f4@2 ~@6 e4@2 ~@2 d4@4 d4@3 ~ d4@3 ~@2]/2",
  D: "~ b3 c4 b3 ~ c4 d4 c4, a3@7 ~ a3@7 ~", E: "~ c4 d#4 c4 ~ a3 g#3 a3, a3 e4",
  F: "[a3@2 ~ e4@2 a3 ~@3 d4@2 e4@2 a3 ~@3 c4@2 ~@2 c4 g#3@2 a3@2 ~@6, ~@2 a3@3 ~ a3@2 a3@5 ~ a3@2 a3@6 ~@10, ~@7 f4@2 ~@6 e4@2 ~@2 b3@4 ~@9]/2",
  G: "[a3@2 ~ e4@2 a3 ~@3 d4@2 e4@2 a3 ~@3 c4@2 d4@2 c4 ~@2 a3@2 c4 ~ b3@2 ~ d4, ~@2 a3@3 ~ a3@2 a3@5 ~ a3@2 a3@6 a3@2 ~@6 a3@2, ~@7 f4@2 ~@6 e4@2 ~@6 d4@3 ~ d4@3 ~@2]/2",
})).s("gm_acoustic_guitar_steel").gain(0.56).pan(0.3)

// other · acoustic guitar nylon · "AcGuit 2"
const acoustic_guitar_nylon = note("<~@54 A B C B C B C B C B C B C B C B D ~@8>".pickRestart({
  A: "~@7 e4", B: "a4@4 ~@3 e4", C: "g4@13 ~ e4@2", D: "b4@13 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.48).pan(0.6)

// chords · electric guitar clean · "El Guit"
const electric_guitar_clean = note("<~@45 A B C D C E F G H@2 ~@24>".pickRestart({
  A: "~@2 c5 d5@2 ~ g4@10, g4@5 c5@11", B: "~@2 c5 d5@2 b4@11, g#4",
  C: "~@2 c5 d5@2 ~@5 c5@2 d5@2 c5@2, a4@5 c5@4 ~@7, ~@3 a4@5",
  D: "~@2 c5 d5@2 ~@5 c5@2 d5@2 c5@2, a#4@5 c5@4 ~@7, ~@3 a#4@5",
  E: "~@2 c5 d5@2 ~@5 c5@2 d5@2 c5@2, g4@5 c5@5 ~@6, ~@3 g4@5", F: "~@2 c5 d5@2 c5 ~@4 c5@2 d5@2 c5@2, f4@5 ~ f4@8 ~@2",
  G: "~@2 c5 d5@2 c5 ~@4 c5@2 d5@2 c5@2, f#4@3 f#4@5", H: "[~ b4@24 ~@7, e4@25 ~@7]/2",
})).s("gm_electric_guitar_clean").gain(0.4)

// other · overdriven guitar · "GuitSolo"
const overdriven_guitar = note("<~@5 A B C D C B C D ~@66>".pickRestart({
  A: "f5 e5 d5 f5 e5@8 ~@4", B: "g5@6 ~ f5 e5@3 f5 e5@2 d5@2", C: "f5 e5 d5 f5 e5@10 ~@2",
  D: "c5@6 ~ d5 c5@3 d5 c5@2 b4@2",
})).s("gm_overdriven_guitar").gain(0.64)

// chords · synth strings 1 · "Strings2" · Am D5 Adim C#m
const synth_strings_1 = note("<~@75 [~ [a4,c5]@6 ~@2 [a4,d5]@6 ~] [~ [a4,d#5]@6 ~@2 [g#4,e5]@5 ~@2] ~@2>")
  .s("gm_synth_strings_1").gain(0.48).pan(0)

// chords · string ensemble 2 · "Layer"
const string_ensemble_2 = note("<~@5 A@8 ~@32 B@5 C@3 D ~@17 E@6 F@2>".pickRestart({
  A: "[e4@15 ~ f4@11 ~ [e4,g#4,b4]@4, [a4,c5]@7 ~]/2", B: "[g4 g#4 a4 a#4 [f4,a4], c5, e4@63 ~@17]/5",
  C: "[[e4,g4]@16 f4@15 ~ [d#4,f#4]@16, c5, ~ a4@2]/3", D: "[e4,g#4,b4]@7 ~",
  E: "[c5@8 d5@8 d#5@7 ~ [e4,g#4,b4,e5]@8, [f4,a4]@23 ~@9]/2", // E F
  F: "[a4@8 g4@8 [f4,a4]@4 [e4,g#4,b4]@4 [e4,a4,c5] ~@7, c5@5 ~@3, e4@15 ~@17]/2", // F E Am
})).s("gm_string_ensemble_2").gain(0.3).pan(0.6)

// other · marimba · "Marimbas"
const marimba = note(`<
  ~@6 A B C D C E F ~@13 G ~ G H I ~ G J K L M L N L ~@16 O P Q P O R S ~ O P Q P O R S ~@8
>`.pickRestart({
  A: "~@9 e5 ~ d5 ~@3 d5", B: "f5 e5 d5 f5 e5 ~@11", C: "~@9 e5 ~ d5 ~ f5 ~ e5", D: "~ g#5 ~ a5 e5 ~@11",
  E: "~ a4 ~ a4 ~@12", F: "~@5 d5 ~ c5 ~ e5 ~ d5 ~ f5 ~ e5", G: "~@9 e6 ~ d6 ~ c6 ~ e6", H: "~@2 g6 a6 ~@12",
  I: "~@5 a6 b6 c7 ~ f6 ~ d6 ~ f6 ~ e6", J: "~ a6 ~ e6 ~@12", K: "~@5 d7 ~ c7 ~ e6 ~ d6 ~ f6 ~ e6",
  L: "~ a5!2 g5 a5 ~@11", M: "~@5 a6 b6 c7 ~ e6 ~ d6 ~ f6 ~ e6", N: "~@5 d7 ~ d7 ~ e6 ~ d6 ~ f6 ~ e6",
  O: "~@9 e6 ~ d6 ~ f6 ~ e6", P: "~ a5 ~ a5 ~@12", Q: "~@7 c7 ~ e6 ~ d6 ~ f6 ~ e6", R: "~ a5 ~ g5 ~@12",
  S: "~@9 [d6,e6] ~ d6 ~ f6 ~ e6", // Dsus2
})).s("gm_marimba").gain(0.48).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B C B D B D B D B C B C B C B C B@3 E F@16 G E@3 H@8 I ~ G C G C G C G C G C G C G C G C E@3 J E@4
>`.pickRestart({
  A: "~@8 x!2 ~@5 x", B: "x ~@6 x ~@2 x ~@5", C: "x ~@6 x ~@2 x ~ x ~@3", D: "x ~@6 x ~@2 x ~ x ~@2 x", E: "x!2",
  F: "x ~@6 x!2 ~ x ~@5", G: "x ~@3 x!2 ~@2", H: "x ~@6 x!2 ~@7", I: "x", J: "x ~@3 x ~@2 x",
})).gain(0.72)

// drums · rim
const rim = s("rim").struct("<~@5 [~ x ~@2]!2 [~ x ~ x]!17 [~ x ~@2] ~@54>").gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@4 A@3 ~@18 B@3 C B@5 C B@9 D B@8 ~@2 B@23 D>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@7 x ~@2 x", D: "~ x ~@2",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A B A@3 C A C B@2 C B C A@2 C A B C D A B A@2 E F A C B A C B C B A C A B C D A@6 C A G ~ B@2 C B C A@2 C B@2 C B
  C A@2 C A B A C A C@2 D
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "x!7 ~", D: "x!5 ~@3", E: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~",
  F: "x ~ x ~ x ~ x!3 ~ x ~ x ~@3", G: "x",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@10 A ~ A ~@2 A ~ A ~@2 A ~@2 A ~@6 A ~ A ~@2 A ~ A ~@2 A ~@2 A ~@7 A ~@5 A ~ A ~@2 A ~@2 A ~ A ~@2 A ~@3 A ~ A@2 ~
>`.pickRestart({
  A: "~@7 x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@33 A ~@15 A ~@21 A ~@3 A ~@2 B>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@45 [x!4]!4 [~ x!3] [x!4]!3 ~@26>").gain(0.4)

// drums · congas
const congas = s("conga:13").struct("<~@11 A ~@19 B ~@23 C ~@7 C ~@15>".pickRestart({
  A: "~ x ~ x!2 ~@11", B: "~ x ~ x ~@12", C: "~@9 x ~ x ~ x ~@2",
})).gain(1.28)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@5 A@16 B@3 C D E D E D E D E D E D E D E D E B@3 C F@8 ~@2 G H G H G H G H G H G H G H G H B@7 I
>`.pickRestart({
  A: "~ x ~ x ~ x ~@3 x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x ~@7 x",
  D: "~ x ~ x ~ x ~@3 x ~ x ~@4", E: "~ x ~ x ~@5 x ~ x ~ x ~ x", F: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x",
  G: "~ x ~@3 x ~@3 x ~@3 x ~@2", H: "~ x ~@3 x ~@3 x ~ x ~ x ~@2", I: "~ x ~ x ~ x ~ x ~@8",
})).gain(1.28)

stack(
  clarinet, bass, acoustic_guitar_steel, acoustic_guitar_nylon, electric_guitar_clean, overdriven_guitar,
  synth_strings_1, string_ensemble_2, marimba, kick, rim, snare, hihat, open_hat, crash, ride, congas, congas_2
)

More by Sting