Strudelify

The Music's No Good Without You

Cher

KeyC minorTempo123 bpm
0:00/0:00
// The Music's No Good Without You — Cher
// 123 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 144 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(123/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 · synth bass 1
const bass = note("<~@11 A@40 B@7 ~ A@16 C@2 D@5 ~ E@8 ~@8 A@40 F@4 ~>".pickRestart({
  A: "[~@3 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 g1@2 ~@2 g1@2 ~@2 g1@2 ~@2 g1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1]/8",
  B: "[~@3 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@15]/7",
  C: "[~ c2@31]/2", D: "[~ bb1@32 ab1@32 g1@15]/5",
  E: "[~@3 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 g1@2 ~@2 g1@2 ~@2 g1@2 ~@2 g1@2 ~@15]/8",
  F: "[~@3 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@3]/4",
})).s("gm_synth_bass_1").gain(0.72)

// chords · pad sweep
const pad_sweep = note("<~ A@8 ~@2 B@32 ~@16 B@16 ~@16 C@8 B@40 D@5>".pickRestart({
  A: "[~ [g4,c5]@127]/8", B: "[~ [c4,g4]@64 [c4,g4]@63]/8",
  C: "[~ [bb4,db5]@32 [ab4,c5]@32 [bb4,eb5]@32 [b4,d5]@31, ~ f5@64 g4@63]/8", D: "[~ [c4,g4]@64 ~@15]/5",
})).s("gm_pad_sweep").gain(0.71)

// other · synth brass 1
const synth_brass_1 = note(`<
  ~@26 A@3 B@4 C A@3 B@4 D E F@4 G@8 H I@5 B@4 C A@3 B@4 D E F@4 J@4 K@4 H L M N O P O Q@3 R@4 B@4 C A@3 B@4 D S@2 T U
  V@2 W C V@2 T U V@2 W X ~@14
>`.pickRestart({
  A: "[~@15 eb4@2 g4 ~ g4 ~ g4@4 g4@4 bb4@2 ab4@4 g4@4 f4@4 eb4@3 ~ eb4]/3",
  B: "[~ g4@2 g4 ~ g4@4 g4@4 ab4@2 g4@6 ~@10 eb4@2 g4 ~ g4 ~ g4@4 g4@4 bb4@2 ab4@4 g4@4 f4@4 eb4@2 eb4@3]/4",
  C: "~ g4@3 ~ g4@2 g4@8 ~", D: "~ g4@3 ~ g4@2 ~@6 eb5@3, ~@7 g4@8 ~", E: "~ g5@4 f5@2 f5@6 ~@3",
  F: "[~ c4@2 c4 ~ c4@4 c4@3 ~ c4@2 c4@4 g3@4 ~@4 bb3 ~ bb3@2 g3@2 bb3@2 g3@2 bb3@4 bb3 ~ bb3 ~ c4@2 g3@6 ~@11]/4",
  G: "[~ c4@2 c4@4 c4@4 c4@4 c4@4 g3@4 bb3@4 g3@2 bb3@2 g3@2 bb3@2 g3@2 ~@2 g3@2 bb3@4 c4@2 bb3@9 ~@3 c4@2 c4@2 c4@2 c4@2 c4@5 ~ c4@3 ~ c4@2 c4@4 g3@4 ~@8 g3@2 bb3@4 g3@4 bb3@2 c4@4 g3@7 ~@10]/8",
  H: "~ bb3@2 c4@4 c4@6 c4@3",
  I: "[~ c4@2 g3@4 bb3@4 ~@2 bb3@2 g3@2 bb3@4 bb3@2 bb3@4 c4@4 bb3@7 ~@9 eb4@2 g4 ~ g4 ~ g4@4 g4@4 bb4@2 ab4@4 g4@4 f4@4 eb4@3 ~ eb4]/5",
  J: "[~ c4@2 c4@4 c4@4 c4@4 c4@4 g3@4 bb3@4 g3@2 bb3@2 g3@2 ~@2 bb3@4 g3@2 bb3@4 c4@2 bb3@9 ~@3 c4@3 ~@2]/4",
  K: "[~ c4@2 c4@5 ~ c4@3 ~ c4@2 c4@4 g3@4 ~@8 g3@2 bb3@4 bb3@3 ~ c4@4 g3@2 g3@5 ~@12]/4",
  L: "~ c4@2 g3@4 bb3@4 ~@2 bb3@3", M: "~ bb3@3 ~ bb3@2 bb3@5 ~ bb3@3", N: "~ bb3@3 ~ g3@2 f3@6 ~@3",
  O: "~@11 f4@2 f4@3", P: "~ c5@4 bb4@4 f4@2 db4@5",
  Q: "[~ c5@4 bb4@4 f4@2 ~@2 db4@2 bb3@2 bb3@4 db4@2 bb3@2 db4@2 eb4@4 f4@4 ab4@4 bb4@9]/3",
  R: "[~ b4@28 ~@2 eb4@2 g4 ~ g4 ~ g4@4 g4@4 bb4@2 ab4@4 g4@4 f4@4 eb4@3 ~ eb4]/4",
  S: "[~ g5@4 f5@2 f5@6 ~@2 eb4@2 g4 ~ g4 ~ g4@4 g4@4 ~@3]/2", T: "~@15 eb4", U: "~ g4@2 g4 ~ g4@4 g4@4 ~@3",
  V: "[~@15 eb4@2 g4 ~ g4 ~ g4@4 g4@4 ~@3]/2", W: "~@13 eb4@3", X: "~ g4@3 ~@12",
})).s("gm_synth_brass_1").gain(0.72)

// chords · synth strings 1
const synth_strings_1 = note("<~@2 A@7 B@2 C@80 D@8 C@40 E@5>".pickRestart({
  A: "[~@15 [eb3,c4,eb4]@34 [d3,bb3,d4]@32 [c3,eb3,ab3,c4,eb4]@31, ~@15 g4@97, ~@15 g3@66 ~@31]/7", // Cm Gm Ab
  B: "[~ [bb2,f3,bb3,d4]@31]/2", // Bb
  C: "[~ [c4,eb4]@32 [bb3,d4]@32 [ab3,c4,eb4]@32 [bb3,d4]@31, ~ g4@127, ~ g3@64 ~@32 g3@16 ~@15]/8", // Cm Bb Ab Bb
  D: "[~ [bb3,db4]@32 [ab3,c4]@32 [bb3,eb4]@32 [b3,d4]@31, ~ f4@64 g3@63]/8", // Bbm Ab Eb5 Bm
  E: "[~ [c4,eb4]@32 [bb3,d4]@32 ~@15, ~ [g3,g4]@64 ~@15]/5", // Cm Bb G
})).s("gm_synth_strings_1").gain(0.48)

// other · synth brass 2
const synth_brass_2 = note("<~@6 A B C ~ D@2 ~@3 E F@2 G ~@4 E F@2 G ~@60 E F@2 G ~@53>".pickRestart({
  A: "~@14 [c5,g5] ~", B: "[c5,g5]!2 c5 g5 [c5,g5]!2 ~ [c5,g5] ~ [c5,g5] ~ [c5,g5] ~ [c5,g5] ~@2",
  C: "[c5,g5] ~ [c5,g5] ~@2 [c5,g5] ~@2 c5 ~@7", D: "[~@9 [c3,g3]@23]/2",
  E: "~@2 g3 bb3 c4 c3 g3 bb3 c4 c3 g3 bb3 c4 c3 g3 bb3", F: "c4 c3 g3 bb3 c4 c3 g3 bb3 c4 c3 g3 bb3 c4 c3 g3 bb3",
  G: "c4 ~@15",
})).s("gm_synth_brass_2").gain(0.33).pan(0.3)

// chords · clavinet
const clavinet = note(`<
  ~@22 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@10 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@10 A@2 ~@14 A@2
  ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@4
>`.pickRestart({
  A: "[~@9 [c4,f4]@2 [c4,f4] [c4,f4]@2 [c4,f4] [c4,f4]@2 [c4,f4]@2 ~@13]/2", // F5
})).s("gm_clavinet").gain(0.64).pan(0.3)

// chords · clavinet · soft notes
const clavinet_soft = note(`<
  ~@23 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@15 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "~@3 [c4,f4]@3 ~@10", // F5
})).s("gm_clavinet").gain(0.4).pan(0.3)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note("<~@25 A@2 ~@22 A@2 ~@30 A@2 ~@61>".pickRestart({
  A: "[~@3 d4@2 ~@2 [d4,g4]@2 ~@2 [d4,g4]@2 ~@2 [d4,g4]@2 ~@2 [d4,g4]@2 ~@2 d4@2 ~@2 [d4,g4]@2 ~@3, ~@3 g4 ~@19 g4 ~@8]/2", // G5
})).s("gm_lead_2_sawtooth").gain(0.31).pan(0.6)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@67 A@2 B@2 C@2 D@3 ~@23 A@2 B@2 C@2 E@4 B@2 C@2 E@4 B@2 C@2 E@4 B@2 C@2 E@4 B@2 C@2 E@4 B@2 ~
>`.pickRestart({
  A: "[~ eb6@22 f6@6 g6@3]/2", B: "[~ d6@22 eb6@6 f6@3]/2", C: "[~ c6@22 d6@6 eb6@3]/2", D: "[~ bb5@32 ~@15]/3",
  E: "[~ bb5@32 eb6@22 f6@6 g6@3]/4",
})).s("gm_string_ensemble_1").gain(0.48).pan(0.7)

// bass · synth bass 2
const bass_2 = note(`<
  ~@75
  [~ c3 ~ c4 c3!2 c4 c3!3 ~ c4 c3!2 c4 c3]
  [c3!2 ~ c4 c3!2 c4 c3!3 ~ c4 c3!2 c4 c3]!7
  [c3 ~@15]
  ~@60
>`).s("gm_synth_bass_2").gain(0.56).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@11 A@8 B@6 ~ C B@55 ~ B@7 D ~@8 B@44 ~>".pickRestart({
  A: "~@9 x ~@3 x ~@2", B: "~ x ~@3 x ~@3 x ~@3 x ~@2", C: "~@5 x ~@3 x ~@3 x ~@2", D: "~ x ~@14",
})).gain(0.72)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@11 [~ x ~@3 x ~@10]!8 ~@72 [~ x ~@3 x ~ x ~@8]!8 ~@45>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@91 [~@9 x ~@6]!7 [~@9 x ~ x ~ x ~ x] ~@45>").gain(0.4)

// drums · clap
const clap = s("cp").struct(`<
  ~@19 A@23 B A@7 B A@6 ~@2 A@7 B A@7 B A@7 B A@7 ~@9 A@7 B A@7 B A@7 B A@7 B A@7 B A@4 ~
>`.pickRestart({
  A: "~@5 x ~@7 x ~@2", B: "~@5 x ~@5 x ~ x ~ x",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~@58 [~@13 x ~ x] ~@85>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~@18 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C D ~ B C B C B C B C B C B C B C B C
  B C B C B C B C B C B C B C B ~@9 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C ~
>`.pickRestart({
  A: "x ~@4 x ~@3 x ~@3 x ~@2", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2",
  D: "~ x ~@14",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@20 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@15 x",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@58 [~@9 x ~@2 x ~@3] ~@85>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@19 A ~@7 A ~@31 A ~@30 A ~@8 A ~@15 A ~@7 A ~@7 A ~@7 A ~@4>".pickRestart({
  A: "~ x ~@14",
})).gain(0.64)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@19 A@2 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C ~ A@2 B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B ~@9 A@2 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  D ~
>`.pickRestart({
  A: "~@3 x ~ x ~ x ~@3 x ~ x ~ x", B: "x ~@2 x ~ x ~ x ~@3 x ~ x ~ x", C: "x", D: "~@3 x ~ x ~ x ~@3 x ~ x ~@2",
})).gain(2.03)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@3 A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B D ~ A
  B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C D ~@8 A B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C B C B C B C B C B C B C B C E ~
>`.pickRestart({
  A: "~ x!3 ~ x ~ x ~@2 x!2 ~ x ~ x", B: "x!4 ~ x ~ x!2 ~ x!2 ~ x ~ x", C: "x!4 ~ x ~ x ~@2 x!2 ~ x ~ x", D: "x",
  E: "x!4 ~ x ~ x!2 ~ x!2 ~ x ~@2",
})).gain(0.32)

stack(
  bass, pad_sweep, synth_brass_1, synth_strings_1, synth_brass_2, clavinet, clavinet_soft, lead_2_sawtooth,
  string_ensemble_1, bass_2, kick, kick_soft, snare, clap, low_tom, hihat, open_hat, mid_tom, crash, cabasa, shaker
)

More by Cher