Strudelify
Girl You Know It's True cover art

1989 · All Or Nothing

Girl You Know It's True

Milli Vanilli

KeyB♭ minorTempo96 bpm
0:00/0:00
// Girl You Know It's True — Milli Vanilli
// 96 bpm, 4/4, key Bb minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 5/4 at bar 81, 4/4 at bar 82) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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 · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~ A B C D A B C D ~@7 E F G H I J K L@2 ~@4 M N O P M N O P M N O P ~@7 E F G H I J K L@2 ~@4 A B C D M N O P M N O P
  ~@6 Q@2 R S Q@2 R S Q@2 R S T@2 U V T@2 U V W ~
>`.pickRestart({
  A: "[bb4,db5,f5]!5 ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~@2 [bb4,db5,gb5]@2 ~ [bb4,db5,f5] ~", // Bbm Gb Bbm
  B: "[gb4,bb4,db5]!5 ~ [gb4,bb4,db5]!2 ~@3 [gb4,bb4,db5] ~@2 [gb4,bb4,db5] ~", // Gb
  C: "[ab4,c5,eb5]!5 ~ [ab4,c5,eb5]!2 ~ [ab4,c5,eb5] [ab4,c5,f5] ~@5", // Ab Fm
  D: "[ab4,c5,eb5]!5 ~ [ab4,c5,eb5]!2 ~ [ab4,c5,eb5] [ab4,c5,eb5,f5] ~@5", E: "~@12 bb5!2 ab5@2",
  F: "~ [bb3,db4,f4] ~@2 [bb3,db4,f4] ~@2 [bb3,db4,f4]@7 ~@2", // Bbm
  G: "~ [gb3,bb3,db4] ~@2 [gb3,bb3,db4] ~@2 [gb3,bb3,db4]@6 ~ db4 ~", // Gb
  H: "~ [ab3,bb3,c4,eb4] ~@2 [ab3,bb3,c4,eb4] ~@2 [ab3,bb3,c4,eb4]@9", // Ab
  I: "~ [ab3,bb3,c4,eb4] ~@2 [ab3,bb3,c4,eb4] ~@2 [ab3,bb3,c4,eb4]@8 ~", // Ab
  J: "~ [bb3,db4,f4] ~@2 [bb3,db4,f4] ~@2 [bb3,db4,gb4]@3 [bb3,db4,gb4] ~@5", // Bbm Gb
  K: "~ [gb3,ab3,db4] ~@2 [gb3,ab3,db4] ~@2 [gb3,ab3,db4]@3 [gb3,bb3] ~@5", // Gbsus2 Gb
  L: "~ [ab3,bb3,eb4] ~@2 [ab3,bb3,eb4] ~@2 [ab3,bb3,eb4]@3 [ab3,c4,eb4] ~@5", // Absus2 Ab
  M: "[bb3,db4,f4,bb4,db5,f5]!5 ~ [bb3,db4,f4,bb4,db5,f5] ~ [bb3,db4,f4,bb4,db5,f5] ~@2 [bb3,db4,gb4,bb4,db5,gb5]@2 ~ [bb3,db4,f4,bb4,db5,f5] ~", // Bbm Gb Bbm
  N: "[gb3,bb3,db4,gb4,bb4,db5]!5 ~ [gb3,bb3,db4,gb4,bb4,db5]!2 ~@3 [gb3,bb3,db4,gb4,bb4,db5] ~@2 [gb3,bb3,db4,gb4,bb4,db5] ~", // Gb
  O: "[ab3,c4,eb4,ab4,c5,eb5]!5 ~ [ab3,c4,eb4,ab4,c5,eb5]!2 ~ [ab3,c4,eb4,ab4,c5,eb5] [ab3,c4,f4,ab4,c5,f5] ~@5", // Ab Fm
  P: "[ab3,c4,eb4,ab4,c5,eb5]!5 ~ [ab3,c4,eb4,ab4,c5,eb5]!2 ~ [ab3,c4,eb4,ab4,c5,eb5] [ab3,c4,eb4,f4,ab4,c5,eb5,f5] ~@5", // Ab Fm7
  Q: "[~@4 [bb4,db5,f5]!5 ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~@2 [bb4,db5,gb5]@2 ~ [bb4,db5,f5] ~ [gb4,bb4,db5]!5 ~ [gb4,bb4,db5]!2 ~@3 [gb4,bb4,db5]]/2", // Bbm Gb Bbm Gb
  R: "~@2 [gb4,bb4,db5] ~ [ab4,c5,eb5]!5 ~ [ab4,c5,eb5]!2 ~ [ab4,c5,eb5] [ab4,c5,f5] ~", // Gb Ab Fm
  S: "~@4 [ab4,c5,eb5]!5 ~ [ab4,c5,eb5]!2 ~ [ab4,c5,eb5] [ab4,c5,eb5,f5] ~", // Ab Fm7
  T: "[~@4 [bb3,db4,f4,bb4,db5,f5]!5 ~ [bb3,db4,f4,bb4,db5,f5] ~ [bb3,db4,f4,bb4,db5,f5] ~@2 [bb3,db4,gb4,bb4,db5,gb5]@2 ~ [bb3,db4,f4,bb4,db5,f5] ~ [gb3,bb3,db4,gb4,bb4,db5]!5 ~ [gb3,bb3,db4,gb4,bb4,db5]!2 ~@3 [gb3,bb3,db4,gb4,bb4,db5]]/2", // Bbm Gb Bbm Gb
  U: "~@2 [gb3,bb3,db4,gb4,bb4,db5] ~ [ab3,c4,eb4,ab4,c5,eb5]!5 ~ [ab3,c4,eb4,ab4,c5,eb5]!2 ~ [ab3,c4,eb4,ab4,c5,eb5] [ab3,c4,f4,ab4,c5,f5] ~", // Gb Ab Fm
  V: "~@4 [ab3,c4,eb4,ab4,c5,eb5]!5 ~ [ab3,c4,eb4,ab4,c5,eb5]!2 ~ [ab3,c4,eb4,ab4,c5,eb5] [ab3,c4,eb4,f4,ab4,c5,eb5,f5] ~", // Ab Fm7
  W: "~@4 [bb2,bb3] ~@11", // Bb
})).s("gm_epiano2").gain(0.48)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@5 A B C D E F G@2 E F G@2 E F G@2 E F G@2 H I J K A B C D A B C D A B C D E F G@2 E F G@2 E F G@2 E F G@2 H I J K A
  B C D A B C D A B C D ~ L@3 ~@2 M N O P Q N O P Q N O P Q N O P Q N O P R ~
>`.pickRestart({
  A: "bb1 ~@2 bb1 ~@2 bb1 ~@2 bb1!2 ~ bb1@3 ~", B: "gb1 ~@2 gb1 ~@2 gb1 ~@2 gb1!2 ~ ab1@2 gb1 ~",
  C: "ab1 ~@2 ab1 ~@2 ab1 ~@2 ab1!2 ~ c2@2 db2 ~", D: "ab1 ~@2 ab1 ~@2 ab1 ~@2 ab1!2 ~ db2@2 c2 ~",
  E: "bb1 ~@5 bb1 ~@5 c2@2 db2@2", F: "gb1 ~@5 gb1 ~@9", G: "ab1 ~@5 ab1 ~@9", H: "bb1 ~ bb2 bb1 ~@2 bb1 ~@6 bb1 bb2!2",
  I: "gb1 ~ gb2 gb1 ~@2 gb2 ~@6 gb2 gb1 gb2", J: "ab1 ~ ab2 ab1 ~@2 ab2 ~@6 ab2 ab1!2",
  K: "ab1 ~ ab2 ab1 ~@2 ab1 ~@5 ab2 ab1 ab2 ~", L: "[bb1@11 ~@5]/3", M: "~@4 bb1 ~@2 bb1 ~@2 bb1 ~@2 bb1!2 ~",
  N: "bb1@3 ~ gb1 ~@2 gb1 ~@2 gb1 ~@2 gb1!2 ~", O: "ab1@2 gb1 ~ ab1 ~@2 ab1 ~@2 ab1 ~@2 ab1!2 ~",
  P: "c2@2 db2 ~ ab1 ~@2 ab1 ~@2 ab1 ~@2 ab1!2 ~", Q: "db2@2 c2 ~ bb1 ~@2 bb1 ~@2 bb1 ~@2 bb1!2 ~",
  R: "db2@2 c2 ~ bb1@2 ~@10",
})).s("gm_acoustic_bass").gain(0.8)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@5 A B C@2 ~@7 D E F@3 ~@4 G H I@2 J@2 ~ K@2 B C@2 A B C@2 ~@7 D E F@3 ~@4 G H I@2 J@2 ~ K@2 B C@2 A B L M N O@2 ~@2
  P Q@8 R@4 S@8 T ~
>`.pickRestart({
  A: "f3", B: "[bb3,bb5] [c4,c6] [db4,db6] [bb3,bb5], gb3", C: "[[eb4,ab5]@17 ~@11 bb5!2 ab5 ~, ab3@31 ~]/2",
  D: "~@12 bb5!2 ab5@2", E: "c5 db5 c5 bb4 c5 db5 c5 bb4 c5 db5 c5 [bb4,c5] ~ db5 c5 bb4",
  F: "c5 db5 c5 bb4 c5 db5 c5 bb4 c5 db5 c5 bb4 c5 db5 c5 bb4", G: "f3@15 ~", H: "gb3@15 ~",
  I: "[~@19 bb4 c5 ~@3 db5@3 ~ eb5@2 ~@2, ab3@31 ~]/2", J: "[~@8 bb4@12 c5@5 ~@7]/2",
  K: "[~@9 bb4 c5 db5 eb5 f5 db6 ab5 f3@16, ~ ab4@2 ~, ~@16 bb5 ~@15]/2", L: "[ab3,eb4,ab5]",
  M: "~@12 bb5!2 ab5@2, [ab3,eb4], ab5@7 ~", // Ab5
  N: "~@2 [a3,eb4,gb4]@2 ~@2 [b3,eb4,g4] ~ [b3,eb4,g4]@2 ~@2 [c4,e4] ~@3, ~@6 ab4 ~", O: "[bb2,bb3]/2",
  P: "~@8 bb5!2 ab5 ~@5",
  Q: "[~@4 f3@16 [bb3,bb5]@4 [c4,c6]@4 [db4,db6]@4 [bb3,bb5]@4 [eb4,ab5]@17 ~@11 bb5!2 ab5 ~ f3@16 [bb3,bb5]@4 [c4,c6]@4 [db4,db6]@4 [bb3,bb5]@4 [eb4,ab5]@17 ~@11, ~@20 gb3@16 ab3@31 ~@17 gb3@16 ab3@28]/8", // Bb C Db Bb Ab5 Bb C Db …
  R: "[bb5!2 ab5 ~ f3@16 [bb3,bb5]@4 [c4,c6]@4 [db4,db6]@4 [bb3,bb5]@4 [eb4,ab5]@17 ~@11, ~@5 gb3@4 ab3@7]/4", // Bb C Db Bb Ab5
  S: "[bb5!2 ab5 ~ [f3,bb3,db4,f4]@16 [bb3,bb5]@4 [c4,c6]@4 db6@4 [bb3,bb5]@4 [eb4,ab5]@17 ~@11 bb5!2 ab5 ~ [f3,bb3,db4,f4]@16 [bb3,bb5]@4 [c4,c6]@4 db6@4 [bb3,bb5]@4 [ab3,c4]@28, ~@20 gb3@15 ~ [ab3,c4]@31 ~@17 gb3@15 ~@29, ~@20 db4@8 db4@8 ~@48 db4@8 db4@8 [eb4,ab5]@17 ~@11]/8", // Bbm Bb C Bb Ab5 Bbm Bb C …
  T: "bb5!2 ab5 ~@13",
})).s("gm_string_ensemble_2").gain(0.52)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note("<~@25 A@2 B@2 C D E@2 ~@24 A@2 B@2 C D E@2 ~@34 F@2>".pickRestart({
  A: "[db3,bb3]/2", B: "[[eb3,c4]@31 ~]/2", C: "f5@9 ~@7", D: "~@2 db5 bb4", E: "[eb5 ab4@2 ~]/2",
  F: "[~@2 [bb2,f3,bb3,db4]@11 ~@3]/2", // Bbm
})).s("gm_string_ensemble_2").gain(0.22)

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

// drums · snare
const snare = s("sd").struct("<A B@3 C B@15 D B@11 C B@7 C B@11 D B@11 C B@8 E B@5 F G@10 H I G@6 H J ~>".pickRestart({
  A: "~@14 x!2", B: "~ x ~ x", C: "~@4 x ~@5 x!5 ~", D: "~@6 x!10", E: "~@3 x ~@4", F: "~@2 x!2 ~@4 x ~@7", G: "x!2",
  H: "x ~@7 x ~@5 x!2", I: "x!3 ~@5 x ~@7", J: "x!3 ~@13",
})).gain(0.7)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A ~@3 B ~@15 C ~@11 B ~@7 B ~@11 C ~@11 B ~@25 A ~@7 A ~@2>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@8 x!2 ~@6", C: "~@4 x!2 ~@10",
})).gain(0.16)

// drums · clap
const clap = s("cp").struct("<~@21 [~ x ~ x]!4 ~@28 [~ x ~ x]!4 ~@44>").gain(0.7)

// drums · low tom
const low_tom = s("lt").struct("<~@78 [~ x ~ x] [~ x ~@2] ~@19 [~ x ~@2] ~>").gain(0.7)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!73 ~ [x!4]!25 x ~>").gain(0.7)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ [~ x ~ x ~@4]!72 ~ [~ x ~ x ~@4]!5 [~ x ~ x ~ x ~@2] [~@3 x ~ x ~@2]!19 ~@2>")
  .gain(0.16)

// drums · open hat
const open_hat = s("oh").struct("<~ [~@5 x ~ x]!72 ~ [~@5 x ~ x]!5 [~@7 x] [~ x ~@5 x]!19 [~ x ~@6] ~>").gain(0.7)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@23 A ~@7 A ~@3 A ~@19 A ~@7 A ~@3 A ~@4 A ~@3 B C ~@3 C ~@3 C ~@3 C ~@3 C ~@5
>`.pickRestart({
  A: "x", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.7)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@8 ~@16 A@16 ~@16 A@16 ~ A@25 B ~>".pickRestart({
  A: "x!16", B: "x!4 ~@12",
})).gain(0.16)

// drums · congas
const congas = s("conga:18").struct("<~@9 [~@7 x ~@8]!16 ~@16 [~@7 x ~@8]!16 ~@44>").gain(2.23)

// drums · congas
const congas_2 = s("conga:33").struct("<~@9 [x ~@2 x ~@12]!16 ~@16 [x ~@2 x ~@12]!16 ~@44>").gain(2.23)

// drums · shaker
const shaker = s("sh").struct("<~@9 [x!16]!16 ~@16 [x!16]!16 ~@44>").gain(0.16)

stack(
  epiano2, bass, string_ensemble_2, string_ensemble_2_soft, kick, snare, snare_soft, clap, low_tom, hihat, hihat_soft,
  open_hat, crash, tambourine, congas, congas_2, shaker
)

More by Milli Vanilli