Strudelify

Who's That Girl

Eurythmics

KeyC minorTempo120 bpm
0:00/0:00
// Who's That Girl — Eurythmics
// 120 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A B@3 C@2 D@2 E@4 F G H@2 I@2 J K L M H@2 F N O ~ P@2 Q R S@2 T U V W T X V W T Y V W T Z AA AB H@2 F G H@2 I@2 J K L
  M H@2 F N ~@4 T U V AC T Z V AC T Y AA AB AD ~ AE@2 AF ~ AG@2 ~@3 AH ~@3 AH T Y V AC T Z V AI T Z ~@6
>`.pickRestart({
  A: "~ g4@7 g4@6 f4@2", B: "[~@16 c4@3 ~ g4 ~ d4@16 ~@2 eb4@5 ~@3, f4@3 ~@5]/3", C: "[f4@3 ~ c5 ~ g4@16 ~@10]/2",
  D: "[f4@3 ~ c5 ~ g4@16 ~@2 ab4@5 ~@3]/2",
  E: "[d5@3 ~ c5 ~ eb5@12 eb5 ~ d5 ~ c5 ~ g4 ~ eb4 ~ d4 ~@3 c3@32, ~@15 c4@17]/4", F: "[ab2,ab3]", G: "[f2,f3]",
  H: "c3/2", I: "[ab2,ab3]/2", J: "[c3,c4]", K: "[bb2,bb3]", L: "[db3,db4]", M: "[f3,f4]", N: "[f2,f3]@5 ~@11",
  O: "[c4,ab4,c5]@3 ~ [c4,ab4,c5]@3 ~ [c4,ab4,c5]@3 ~@5", // Fm
  P: "[[c5,c6]@3 ~ [g4,g5]@3 ~ [f4,f5] [eb4,eb5]@3 [eb4,eb5]@6 [bb3,bb4]@2 [c4,c5]@4 [gb3,gb4] [eb3,eb4]@4 ~@3]/2", // C G F Eb Bb C Gb Eb
  Q: "[eb3,eb4]@3 ~ [eb3,eb4]@3 ~ [eb3,eb4] [g3,g4]@7", R: "[gb3,gb4]@8 [eb3,eb4] [gb3,g4]@2 [gb3,gb4]@4 [eb3,eb4]",
  S: "[g3,g4]/2", T: "g4!2", U: "f4", V: "f4 f4@2 eb4 f4@2 g4@2", W: "f4 eb4 c4@2 eb4@2 f4@2",
  X: "bb4@2 g4 g4@2 f4@2 ~", Y: "bb4@4 c5@2 g4 f4 c4@8", Z: "ab4@2 g4!2 f4@4", AA: "[g4,g5]!2", AB: "[g4,g5]",
  AC: "f4@2 eb4@2 c4@4 [eb3,eb4]@3 ~ [f3,f4]@3 ~", AD: "[ab3,c4,ab4]@3 ~ [ab3,c4,ab4]@3 ~ [ab3,c4,ab4]@3 ~@5",
  AE: "[[eb3,eb4,c5]@3 ~ [eb3,eb4,g4]@3 ~ [eb3,eb4,f4] [eb4,g4]@3 [g4,g5]@2 [f4,f5]@6 [g4,g5]@2 [eb4,eb5] [bb3,bb4] c4@8, ~@9 g3@7 ~@8 c5@6 ~@2]/2", // Cm Eb Ebsus2 Eb G F G Eb …
  AF: "[ab3,c4,ab4]@3 ~ [ab3,c4,ab4]@3 ~ ab4 [ab4,c5]@6 ~, ~@8 [ab3,c4]@3 ~@5", // Ab
  AG: "[[g3,b3,g4]@24 ~@2 [g3,b3,g4] ~ [bb3,d4,bb4]@3 ~]/2", AH: "~@8 [eb3,eb4]@3 ~ [f3,f4]@3 ~",
  AI: "f4@2 eb4@2 c4@4 [eb3,eb4]@3 ~ [f3,f4]@3 ~, ~ g4@2 ~", // Eb F
})).s("gm_synth_strings_1").gain(0.41)

// other · synth strings 1 · "SYN STR 1" · soft notes
const synth_strings_1_soft = note("<~@14 A@2 ~@6 A@2 ~@26 A@2 ~@2 A@2 ~@6 A@2 ~@44 B C D E B C>".pickRestart({
  A: "c4/2", B: "f4 f4@2 eb4 f4@2 g4@2", C: "f4@2 eb4@2 c4@4 [eb3,eb4]@3 ~ [f3,f4]@3 ~", D: "g4!2",
  E: "ab4@2 g4!2 f4@4",
})).s("gm_synth_strings_1").gain(0.2)

// chords · sitar
const sitar = note("<~@2 A@2 B@2 C@2 D@2 ~@38 E ~@31 E ~@33>".pickRestart({
  A: "[~@3 [d4,d5]@8 ~ [eb4,eb5]@4, [c4,c5] ~, ~ [g4,g5]@4 ~@3]/2", B: "[~@3 [g4,g5]@8 ~@5, [f4,f5] ~, ~ c5@4 ~@3]/2",
  C: "[~@3 [g4,g5]@8 ~ ab4@4, [f4,f5] ~, ~ c5@4 ~@3]/2", // G F
  D: "[~@3 eb5@6 ~@5 d4@2, d5@8 ~ eb5@6 ~, ~ c5@4 d5 g4 ~, ~@11 c5@2 eb4@2 ~]/2", E: "[g3,g4]!2",
})).s("gm_sitar").gain(0.41)

// other · synth brass 1 · "SYNBRASS"
const synth_brass_1 = note("<~@73 A ~@3 A ~@16 B C ~@2 B C ~ A B C ~ A B C ~@6>".pickRestart({
  A: "~@8 [eb2,eb3] ~@3 [f2,f3] ~@3", B: "~@4 [c4,c5]@3 ~ [c4,c5]@3 ~@5",
  C: "~@6 [bb3,bb4] [c4,c5] [eb4,eb5] [bb3,bb4] [c4,c5] [bb3,bb4] [bb3,bb4]@2 [c4,c5]@2", // Bb C Eb Bb C Bb C
})).s("gm_synth_brass_1").gain(0.31)

// other · synth brass 1 · "SYNBRASS" · soft notes · Eb F C Bb C Eb Bb C …
const synth_brass_1_soft = note(`<
  ~@109
  [~@8 [eb2,eb3] ~@3 [f2,f3] ~@3]
  [~@4 [c4,c5]@3 ~ [c4,c5]@3 ~@5]
  [~@6 [bb3,bb4] [c4,c5] [eb4,eb5] [bb3,bb4] [c4,c5] [bb3,bb4] [bb3,bb4]@2 [c4,c5]@2]
  ~
  [~@8 [eb2,eb3] ~@3 [f2,f3] ~@3]
>`).s("gm_synth_brass_1").gain(0.15)

// other · glockenspiel · "GLOCKENSP"
const glockenspiel = note("<~@66 A B C D A B C D A B C D A B ~@10 A B C D A B C D A B C D A B C D ~@8>".pickRestart({
  A: "c7@2 ~@3 g6 bb6 c7", B: "bb6 ~@3", C: "g6 ~@3", D: "eb6!2 f6 g6",
})).s("gm_glockenspiel").gain(0.41)

// other · glockenspiel · "GLOCKENSP" · soft notes
const glockenspiel_soft = note("<~@106 A B C D A B C D>".pickRestart({
  A: "c7@2 ~@3 g6 bb6 c7", B: "bb6 ~@3", C: "g6 ~@3", D: "eb6!2 f6 g6",
})).s("gm_glockenspiel").gain(0.2)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@2 A B C@4 D E A@2 F G H@2 F G I G J F A@2 F K L ~ M N L ~@3 I G@2 O I G@2 O I G@2 O I G ~@2 A@2 F G H@2 F G I G J F
  A@2 F G I G@2 O I G@2 O I G@2 O I G ~ P Q ~ M P Q ~ R@2 I G@2 O I G@2 O I G@2 O I G@2 S ~@8
>`.pickRestart({
  A: "[c4,d4] ~@3 [c4,d4] ~@3 [c4,d4] ~@3 [c4,d4] ~@3", B: "[c4,d4] ~@3 [c4,d4] ~@3 [c4,eb4] ~@3 [c4,eb4] ~@3",
  C: "[f4,ab4] ~@3 [f4,ab4] ~@3 [f4,ab4] ~@3 [f4,ab4] ~@3", D: "[c4,eb4] ~@3 [c4,eb4] ~@3 [c4,eb4] ~@3 [c4,eb4] ~@3",
  E: "[c4,eb4] ~@3 [c4,eb4] ~@3 [c4,eb4] ~@3 [c4,d4] ~@3", F: "[eb4,f4] ~@3 [eb4,f4] ~@3 [eb4,f4] ~@3 [eb4,f4] ~@3",
  G: "[d4,f4] ~@3 [d4,f4] ~@3 [d4,f4] ~@3 [d4,f4] ~@3", H: "[f4,g4] ~@3 [f4,g4] ~@3 [f4,g4] ~@3 [f4,g4] ~@3",
  I: "[eb4,g4] ~@3 [eb4,g4] ~@3 [eb4,g4] ~@3 [eb4,g4] ~@3", J: "[db4,f4] ~@3 [db4,f4] ~@3 [db4,f4] ~@3 [db4,f4] ~@3",
  K: "[d4,f4] ~@3 [d4,f4] ~@3 [d4,f4] ~ [bb3,f4,bb4] ~ [c4,g4,c5]@3 ~", // Dm Bb5 C5
  L: "[c4,ab4,c5]@3 ~ [c4,ab4,c5]@3 ~ [c4,ab4,c5]@3 ~@5", M: "[c4,g4,c5]@3 ~ [c4,g4,c5]@3 ~ [c4,g4,c5]@3 ~@5",
  N: "~@10 [bb3,f4,bb4] ~ [c4,g4,c5]@3 ~", O: "[c4,eb4] ~@3 [c4,eb4] ~@3 [d4,f4] ~@3 [d4,g4] ~@3",
  P: "~@10 [bb3,f4] ~ [g3,c4,g4]@3 ~", Q: "[ab3,c4,ab4]@3 ~ [ab3,c4,ab4]@3 ~ [ab3,c4,ab4]@3 ~@5",
  R: "[[g3,b3]@24 ~@2 [g3,b3] ~ [bb3,d4]@3 ~]/2", S: "[c4,eb4] ~@3 [c4,eb4] ~@3 [d4,f4] ~@3 [d4,g4] ~@3, ~ g4@2 ~",
})).s("gm_string_ensemble_1").gain(0.31)

// chords · string ensemble 1 · "STRINGS" · soft notes · Eb Dm Cm Dm G5 Eb Dm Cm …
const string_ensemble_1_soft = note(`<
  ~@106
  [[eb4,g4] ~@3 [eb4,g4] ~@3 [eb4,g4] ~@3 [eb4,g4] ~@3]
  [[d4,f4] ~@3 [d4,f4] ~@3 [d4,f4] ~@3 [d4,f4] ~@3]!2
  [[c4,eb4] ~@3 [c4,eb4] ~@3 [d4,f4] ~@3 [d4,g4] ~@3]
  [[eb4,g4] ~@3 [eb4,g4] ~@3 [eb4,g4] ~@3 [eb4,g4] ~@3]
  [[d4,f4] ~@3 [d4,f4] ~@3 [d4,f4] ~@3 [d4,f4] ~@3]!2
  [[c4,eb4] ~@3 [c4,eb4] ~@3 [d4,f4] ~@3 [d4,g4] ~@3]
>`).s("gm_string_ensemble_1").gain(0.15)

// bass · synth bass 1 · "SYN BASS"
const bass = note(`<
  ~@2 A B C@3 D E F ~@15 G H ~ I G H ~@3 J K L M N K L M N K L M N K ~@18 N K L M N K L M N K L M N K O@2 H ~ I G H ~@3
  N K L M N K L M N K L M N K L M ~@8
>`.pickRestart({
  A: "c3 ~ c3@3 ~ [c2,c3]@3 ~@5 [bb1,bb2] ~", B: "[c2,c3] ~ [c2,c3]@3 ~ [c2,c3]@3 ~@5 eb2 ~",
  C: "[f2,f3] ~ [f2,f3]@3 ~ [f2,f3]@3 ~@5 [eb2,eb3] ~", D: "[f2,f3] ~ [f2,f3]@3 ~ [f2,f3]@3 ~@5 bb2@2",
  E: "c3 ~ c3@3 ~ c3@3 ~@5 bb2 ~", F: "c3 ~ c3@3 ~ c3@3 ~@7", G: "~@10 f2 ~ g2@3 ~", H: "ab2@3 ~ ab2@3 ~ ab2@3 ~@5",
  I: "g2@3 ~ g2@3 ~ g2@3 ~@5", J: "[c3,c4]@3 ~ c4 ~ c4 ~@9", K: "[bb2,bb3]@3 ~ bb3 ~ bb3 ~@9",
  L: "[g2,g3]@3 ~ g3 ~ g3 ~@9", M: "[ab2,ab3] ~ [ab2,ab3] ~ [ab2,ab3]@3 ~ [bb2,bb3] ~ [bb2,bb3] ~ [bb2,bb3]@3 ~",
  N: "[c3,c4]@3 ~ c4!5 ~ [g2,g3] ~ [bb2,bb3] ~ [c3,c4] ~", O: "[[g2,g3]@8 [g2,g3]@16 ~@2 f2 ~ g2@3 ~]/2",
})).s("gm_synth_bass_1").gain(0.41)

// bass · synth bass 1 · "SYN BASS" · soft notes
const bass_soft = note("<~@106 A B C D A B C D>".pickRestart({
  A: "[c3,c4]@3 ~ c4!5 ~ [g2,g3] ~ [bb2,bb3] ~ [c3,c4] ~", B: "[bb2,bb3]@3 ~ bb3 ~ bb3 ~@9",
  C: "[g2,g3]@3 ~ g3 ~ g3 ~@9", D: "[ab2,ab3] ~ [ab2,ab3] ~ [ab2,ab3]@3 ~ [bb2,bb3] ~ [bb2,bb3] ~ [bb2,bb3]@3 ~",
})).s("gm_synth_bass_1").gain(0.2)

// bass · fretless bass · "FRETLESS"
const bass_2 = note(`<
  ~@9 A@3 B C D@2 E@2 F G H C D@2 B C ~@6 I@4 ~@14 D@2 B C D@2 E@2 F G H C D@2 B C ~@22 J@2 ~@24
>`.pickRestart({
  A: "[~@7 [c2,c3]@17]/3", B: "[ab2,ab3]", C: "[f2,f3]", D: "[c2,c3]/2", E: "[ab2,ab3]/2", F: "[c2,c3]", G: "[bb1,bb2]",
  H: "[db2,db3]", I: "[g2@13 g1 [bb1,bb2]@2 ~@16, g1@12 ~ g2@13 ~@6]/4",
  J: "[[g2,g3]@24 ~@2 [g2,g3] ~ [bb2,bb3]@3 ~]/2", // G Bb
})).s("gm_fretless_bass").gain(0.31)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@106 A B A B A B A B>".pickRestart({
  A: "x ~ x ~ x!4", B: "x ~ x ~ x!3 ~",
})).gain(0.15)

// drums · clap
const clap = s("cp").struct("<~@10 A@16 B@22 A@18 B@7 C B@3 C B@2 ~@2 B@24 ~@8>".pickRestart({
  A: "~ x", B: "~ x ~ x", C: "~@2 x!2 ~@2 x!2",
})).gain(0.41)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@106 [~ x ~ x]!8>").gain(0.2)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@10 A@16 B@22 ~@2 A@15 ~ B@14 ~@2 B@24 ~@8>".pickRestart({
  A: "~ x", B: "~ x ~ x",
})).gain(0.31)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct("<~@106 [~ x ~ x]!8>").gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@10 A@16 B@22 ~@2 A@15 C B@14 D ~ B@24 ~@8>".pickRestart({
  A: "~ x", B: "~ x ~ x", C: "x!2", D: "x",
})).gain(0.31)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@106 [~ x ~ x]!8>").gain(0.15)

// drums · tambourine
const tambourine = s("tb").struct("<~@10 A@16 B@22 A@18 B@7 C B@3 C B@2 A D B@24 ~@8>".pickRestart({
  A: "~ x", B: "~ x ~ x", C: "~@2 x!2 ~@2 x!2", D: "x!2",
})).gain(0.41)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@106 [~ x ~ x]!8>").gain(0.2)

stack(
  synth_strings_1, synth_strings_1_soft, sitar, synth_brass_1, synth_brass_1_soft, glockenspiel, glockenspiel_soft,
  string_ensemble_1, string_ensemble_1_soft, bass, bass_soft, bass_2, kick, kick_soft, clap, clap_soft, pedal_hat,
  pedal_hat_soft, mid_tom, mid_tom_soft, tambourine, tambourine_soft
)

More by Eurythmics