Strudelify

Mad About You

Belinda Carlisle

KeyA majorTempo144 bpm
0:00/0:00
// Mad About You — Belinda Carlisle
// 144 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 119 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(144/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.

// chords · piano
const piano = note(`<
  ~@3 A@4 B@5 C@2 D@2 E@2 F@2 G@2 F@2 H@2 I@2 J K L M N@2 O@2 H@2 D@2 G@2 P@4 Q@2 R@2 I@2 S@2 L T J U@3 V@2 W T X Y Z@4
  AA@5 AB AC AD@2 AE@2 T AF@3 AG ~@3 AH@2 AI@2 AJ@2 AK@2 AL@2 AM AN AO AP@2 AQ AR@2 AS@2 AT AU@5 AV@4
>`.pickRestart({
  A: "[~@26 g5@3 f#5@3, ~@14 [e5,a5]@13 ~@3 a2@14 e5@4 d5@11 ~@5, ~@7 a2@5 ~@2 a3@4 a3@2 ~ a3@3 a5@3 ~@5, ~@8 a3@3 ~@2 c#5@3 d5@3 c#5@6 ~@7, ~@10 a4@15 ~@7]/4", // A5
  B: "[e5@3 ~@13 a4@2 ~@4 e5@2 ~@10 g4 ~@2 g3@3, ~@6 d5@9 ~ a2@8 a2@6 a2@18 g4@8 g4@12 ~@4 g4@8, ~@12 c#5@14 [a4,c#5]@6 d5@16 [g3,b4,d5,a5]@11 ~ b4@4 [b4,f#5]@6 [b4,e5]@10, ~@16 a3@6 a3@5 ~ a3@4 ~@4 a3@13 ~@9 g3@4 g3@10 ~@8, ~@20 [e4,a4]@6 ~@12 a4@11 ~@5 g5@6 d5@10 ~@10]/5", // A G B5 E5 A5
  C: "[a2,a3,a4]/2", D: "[d3,d4,a4,d5]/2", E: "[[a2,a4], e5@11 ~@21]/2", F: "[d3,d4,f#4,a4,d5]/2", G: "[a2,a3,a4,e5]/2",
  H: "[a2,a3,a4,c#5,e5]/2", I: "[e3,e4,g#4,b4,e5]/2", J: "[d3,d4,f#4,a4,d5]", K: "[c#3,a4,e5]", L: "[e3,e4,g#4,b4,e5]",
  M: "[a2,a3,a4,c#5,e5]", N: "[a4 [a4,c#5,e5], [d2,d3,d4,f#4]@9 ~@7]/2", O: "[e2,e3,g#4,b4,e5]/2",
  P: "[~ d3@15 [a2,a3,e4,a4]@16, ~ [d4,f#4,a4]@32 ~@31]/4", Q: "[d2,d3,d4,f#4,a4]/2", R: "[a2,a3,e4,a4]/2",
  S: "[a4 [c#3,c#4,a4,c#5,e5], [d3,d4,f#4,d5]@9 ~@7]/2", T: "[a2,a3,a4,e5]", U: "[e5 [e3,e4,b4,e5]@2, a4@19 ~@29]/3",
  V: "[~ a4@7 [a4,c#5,e5]@8, d5@9 ~@7, ~ [d3,d4]@8 ~@7]/2", W: "[b4,e5]", X: "[d3,d4,f#4,a4]", Y: "[c#3,c#4,e4,a4,c#5]",
  Z: "[~@26 a3 ~@3 e5@2, [e2,e3,g#4,b4,e5]@32 e5@10 [a4,c#5]@7 ~@5 [a4,c#5]@10, ~@30 a5@13 ~@5 [a4,d5]@6 ~@10, ~@32 a2@6 a3@5 ~ a3@5 ~@7 a3@8, ~@16 a3@2 a4@2 a2@3 a2@9]/4", // E A D5
  AA: "[d4@3 ~@17 d4@2 ~@18 a3@2 ~@10 a3@2 ~@10 [g4,b4,d5,a5]@6 ~@8 g4@2, [d5,a5]@10 [d5,f#5]@8 ~@4 d5@11 ~@9 a4@6 [a4,d5]@6 a4@10 g5@2 ~@14, d3@8 d3@8 [d3,e5]@7 ~ d3@4 ~@4 a3@8 ~@4 a3@5 ~@7 a3@10 ~@6 g4@4 ~@4, ~@4 g5@7 ~@17 c#5@9 ~ a2@8 a2@20 ~@8 g3@6, ~@6 d4@5 ~ d4@6 ~@8 d4@7 ~@3 [e4,a4]@6 ~@18 e5@6 ~@4 [b4,d5,g5]@6 [b4,d5]@4]/5", // G D5 D D5 Dsus2 A5 G Bm
  AB: "~@2 g4 ~@3 [g3,c#5]@2, [g3,b4,d5,f#5]@3 [b4,e5]@5, ~@3 g3@3 ~@2, ~ g4", AC: "[f#4,a4]",
  AD: "[a4 [d2,d3,f#4,a4], [a2,a3,c#5,e5]@9 ~@7]/2", AE: "[[a4,c#5] [f#2,f#3,f#4,a4], [a2,a3,e5]@9 ~@7]/2",
  AF: "[~ e5@4 ~, [e2,e3,e4,g#4,b4]@3 ~]/3", AG: "[a2,a4,c#5,e5] ~@15", AH: "[a4,c#5,e5]/2", AI: "[a4,d5]/2",
  AJ: "[a4,e5]/2", AK: "[b4,e5]/2", AL: "[~ [e3,e4,b4,e5,g#5]@11 [e2,e3,b4,e5,g#5]@20]/2",
  AM: "~ [d3,d5]@15, [d4,f#4,a4]", AN: "[c#4,a4,c#5,e5]", AO: "~ [e3,e5]@15, [e4,g#4,b4]",
  AP: "[~@17 d3@15, a3@9 ~@7, a4 [d4,f#4,a4,d5], ~ [a2,c#5,e5]@17 ~@14]/2", AQ: "~ [c#5,e5]@15, [c#4,a4]",
  AR: "[~ [e3,e5]@31, [e4,g#4,b4]]/2", AS: "[~@17 [c#5,e5]@15, [d4,f#4,a4] [c#4,a4], ~ [d3,d5]@17 ~@14]/2",
  AT: "~ e3@15, [e4,b4,e5]", // E5
  AU: "[~@3 [e3,e4,e5,g#5,b5]@2, [a3,c#5,e5]@17 d3@16 a5@17 ~@30, a4@8 [d4,a4,d5]@9 ~@23, ~ a2@17 ~@14 e5@16 ~@32]/5", // E A D5
  AV: "[~@12 [c#4,e5,a5]@21 [g#5,b5,e6]@2 ~@29, [d4,d5,f#5,a5]@13 ~@51, ~ d3@13 ~@19 [e3,e4]@25 ~@6]/4", // A E D E
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@4 A ~ B@2 ~ C ~ D E@2 F@2 G@2 ~@2 H@2 ~@7 I ~@3 J ~@4 F@2 H@2 K@4 ~@2 H@2 ~@5 L ~ M@3 N@2 O L ~@2 P ~ Q ~@2 R S T@2
  ~ U ~@3 L@2 ~@9 V@2 H@2 W@2 ~@3 X ~@3 Y ~@3 X Z ~ AA AB ~@2 AC@3 ~
>`.pickRestart({
  A: "~@8 a2@5 ~@3, c#5@5 ~@3, ~@6 a3@5 ~@5", B: "[[d3,d4]@31 ~]/2", C: "~@3 c#5@5", D: "~@3 c#5",
  E: "[~ e5@15, c#5]/2", F: "f#4/2", G: "[a3,c#5]/2", H: "c#5/2", I: "[c#4,c#5]", J: "[c#2,c#3]",
  K: "[~ d5@15 c#5@16]/4", L: "c#5", M: "[~ g#4@2, [c#3,c#4,c#5]@19 ~@29]/3", N: "[~ f#4@8 [c#3,c#4]@7]/2",
  O: "[e3,e4,g#4]", P: "f#2 ~@15", Q: "c#5@5 ~@3", R: "~@3 d3", S: "~@5 c#5@3", T: "[~@8 g3@5 ~@3, ~@3 c#5@6 ~@7]/2",
  U: "f#3", V: "f#5/2", W: "g#5/2", X: "c#3", Y: "~ c#3@15", Z: "g#4", AA: "f#5", AB: "~ c#3@15, [c#4,c#5]",
  AC: "[~@4 [c#3,c#5]@7 ~@5]/3", // C#
})).s("gm_piano").gain(0.15)

// other · piano
const piano_2 = note(`<
  ~@3 A@2 ~@13 B@3 ~@4 C@2 D E F ~@5 G H ~@5 I@4 ~@4 J D E K@8 ~@6 L@2 ~@26 M N O P ~@9 Q R ~@9
>`.pickRestart({
  A: "[~@15 c#5@7 ~@10, ~@14 a5@9 ~@9, ~@14 e5@7 ~@11]/2",
  B: "[[d5,d6]@2 [e5,e6]@2 [a5,a6]@2 ~@23 d6 [d5,e5] ~ c#6@4 ~@12, ~@6 [d5,d6]@2 e5@2 a5@2 d5@2 e5@2 a5@2 d5@2 e5@2 a5@2 d5@2 e5@2 a5@2 ~ a5@9 ~@8, ~@7 e6@2 a6@2 d6@2 e6@2 a6@2 d6@2 e6@2 a6@2 d6@2 e6@2 a6@2 ~ [e6,a6]@6 ~@12]/3", // D E A Dsus2 D A5
  C: "[~@15 e5@7 g#5@6 a5@4]/2", D: "b5@3 a5@3 g#5@2", E: "a5@3 c#6@3 d6@2", F: "[a5,c#6,e6]",
  G: "~@6 e6 ~@3 a6 ~@2 a6 ~@2", H: "a6 ~@15",
  I: "[~@4 a6@2 ~@4 b6@2 ~@7 e5@2 ~ b6@2 ~@5 d6 d5 ~ c#5 ~ [e5,a5]@2 ~@28, [d5,d6]@2 e6@2 ~@3 e5@2 b5@2 ~ [d5,d6]@2 e6@2 a6@2 d6@3 ~@4 e5@2 a6@2 ~@2 c#6@31 ~@2, ~ e5@2 a5@2 ~ [d5,d6]@2 e6@3 ~@2 e5@2 a5@2 d5@2 ~@2 g5@3 [d5,d6]@2 e6@2 a5@2 e5@3 ~ c#5 ~@29, ~@31 a5@2 ~@31]/4", // A5 D
  J: "e5@7 g#5@5 a5@4", K: "[e6@113 ~@15]/8", L: "[~@7 e5@4 ~@5]/2", M: "b4@3 e5@3 g#5@2", N: "a5@7 ~@4 e5@3 ~@2",
  O: "e5@3 g#5@3 a5@2", P: "b5@2 ~@2 c#6@2 b5@3 ~@5 a5 ~", Q: "a6 ~@7 e6@3 a6@2 ~@3", R: "~@2 a6@9 e6@5",
})).s("gm_piano").gain(0.4)

// other · piano · soft notes
const piano_soft_2 = note("<~@35 A ~@7 B@3 ~@21 C@2 ~@27 D ~ E F ~@7 G H@6 ~@5>".pickRestart({
  A: "~@3 e6 ~@12", B: "[~@4 e6@2 ~@9 [e6,a6]@31 ~@2]/3", C: "[~@15 c#5@7 ~@10, ~@7 a5@4 ~@5]/2", D: "~@3 g#5@3 ~@2",
  E: "~@10 c#6@2 b5@3 ~", F: "f#5 ~@15", G: "~@5 e6 ~@2", H: "[~@14 e6@4 ~@13 a6@58 ~@7]/6",
})).s("gm_piano").gain(0.24)

// other · piano
const piano_3 = note("<~@76 A B@2 C@2 D E@2 F ~@34>".pickRestart({
  A: "~@2 f#4@2 a4@2 b4@2 a4@2 ~ a4@2 b4@2 ~, ~@5 b4 ~@2",
  B: "[a4 c#5@17 f#4@2 a4@2 b4@2 ~@2 d5@2 ~ d5@2 c#5, ~ b4 ~@26 c#5@2 ~@2]/2",
  C: "[d5 e5@17 f#4 ~ a4@2 b4@2 ~@2 d5@2 c#5@2 ~ c#5, ~@15 d5]/2",
  D: "d5@2 e5@2 d5 ~@2 d5 [c#5,d5] ~ b4!2 a4 a4@2 b4, ~@13 b4 ~@2", E: "[~@6 c#6@4 e6@2 c#6 ~@2 e6@3 c#6@3 e6@3 ~@8]/2",
  F: "e6 ~ c6 e6 b5 [b5,c#6,e6] c#6 [b5,c6,c#6,e6] b5 c#6 b5 [b5,c#6,e6] c#6 [a5,b5,e6] c#6 [a5,b5,c#6,e6]", // C#m7 Cmaj7 C#m7 Asus2 A
})).s("gm_piano").gain(0.3)

// other · piano · soft notes
const piano_soft_3 = note("<~@78 A ~ B C ~ D E ~@34>".pickRestart({
  A: "~@4 c#5 ~@3", B: "~@8 c#5@3 ~@5", C: "~@6 c#5 ~@2 c#5 ~@6", D: "~@8 c#6@3 e6@3 c#6@2", E: "~ c#6 ~ c#6 ~@12",
})).s("gm_piano").gain(0.15)

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

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

// drums · clap
const clap = s("cp").struct("<~@117 x ~>").gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@89 [~ x ~@2]!4 [~@5 x ~@2]!2 ~@22 x ~>").gain(0.32)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@4 [x!4]!81 ~@4 [x!4]!28 ~@2>").gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@93 [~@3 x]!2 ~@24>").gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@7 A ~@3 A ~@59 A ~@45 B ~>".pickRestart({
  A: "~@5 x ~ x", B: "x",
})).gain(0.32)

// drums · crash
const crash = s("cr").struct("<~@117 x ~>").gain(0.32)

stack(
  piano, piano_soft, piano_2, piano_soft_2, piano_3, piano_soft_3, kick, snare, clap, low_tom, pedal_hat, mid_tom,
  open_hat, crash
)

More by Belinda Carlisle