Strudelify

The Hardest Thing

98 Degrees

KeyE♭ majorTempo120 bpm
0:00/0:00
// The Hardest Thing — 98 Degrees
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · cello · "Staff-2"
const cello = note("<A@2 B@8 C@8 ~@62 D@4 E@4 F@8 G@2 ~@13>".pickRestart({
  A: "[~@9 bb2@3 ~ c3@7 ~ a2 bb2@3 g2@3 ~ a2@3]/2",
  B: "[~ f2@3 ~ g2@2 f2@2 d2@15 ~ eb2@15 ~ d2@15 ~ eb2@15 ~ f2@15 ~ g2@15 ~ bb2@15 ~ a2@7]/8",
  C: "[~@9 d2@15 ~ eb2@15 ~ d2@15 ~ eb2@15 ~ f2@15 ~ g2@15 ~ bb2@15 ~ a2@7]/8",
  D: "[~@9 g2@15 ~ bb2@15 ~ eb2@15 ~ f2@3 ~ g2@3]/4", E: "[~ f2@3 ~ eb2@3 ~ g2@15 ~ bb2@15 ~ eb2@15 ~ f2@3 ~ g2@3]/4",
  F: "[~ f2@3 ~ eb2@3 ~ g2@15 ~ eb2@15 ~ ab2@15 ~ f2@15 ~ eb2@15 ~ g2@15 ~ bb2@15 ~ eb2@7]/8", G: "[~@9 ab2@15 ~@8]/2",
})).s("gm_cello").gain(0.72)

// other · epiano1 · "Staff-3"
const epiano1 = note(`<
  ~@26 A@2 ~@2 B@8 C ~@3 D@5 E F G H ~ I J ~ K@8 C ~@3 L@5 M@2 ~@2 N O@2 P@8 Q@2 ~@3 D@5 M@2 ~@12
>`.pickRestart({
  A: "[~@9 f4@15 ~@8]/2",
  B: "[~@3 eb4@3 f4@3 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 c5@2 bb4@11 ~ f4@2 g4@2 f4@2 eb4@2 eb4@2 eb4@2 eb4@7 ~ f4@2 f4@2 e4@2 e4@2 f4@2 eb4@2 eb4@2 f4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 a4@2 bb4@11 ~ f4@2 g4@2 f4@2 eb4@2 eb4@2 eb4@2 eb4@8 a4@2 a4@2 g4@2 g4]/8",
  C: "~ f4@2 eb4@3 ~@10",
  D: "[~@5 eb4@2 f4@2 g4@3 ab4 f4@7 ~ eb4@2 f4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 a4@2 bb4@11 ~ f4@3 ~ f4@2 eb4@2 eb4@2 f4@2 f4@2 eb4@2 eb4@2 ab4@2 ab4@2 ab4@2 ab4@3]/5",
  E: "~ g4@3 ~ f4@2 eb4@2 eb4@7", F: "~ f4@7 ~@8", G: "~@9 g4!2 ~ g4 a4@3", H: "~ bb4@2 a4@2 f4@3 ~@8",
  I: "~@9 c5@2 f5@3 eb5@2", J: "d5 c5 bb4 ~@13",
  K: "[~@3 eb4@3 f4@3 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 a4@2 bb4@11 ~ f4@2 g4@2 f4@2 eb4@2 eb4@2 eb4@2 eb4@7 ~ f4@2 f4@2 e4@2 e4@2 d4@2 eb4@2 eb4@2 f4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 a4@2 bb4@11 ~ f4@2 g4@2 f4@2 eb4@2 eb4@2 eb4@2 eb4@8 f4@2 f4@2 g4@2 g4]/8",
  L: "[~@5 eb4@2 f4@2 g4@3 ab4 f4@7 ~ eb4@2 f4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 c5@2 bb4@11 ~ f4@3 ~ f4@2 eb4@2 eb4@2 f4@2 f4@2 eb4@2 eb4@2 ab4@2 ab4@2 ab4@2 ab4@3]/5",
  M: "[~ g4@3 ~ f4@2 eb4@17 ~@8]/2", N: "~@9 f4@7", O: "[~ e4@7 ~ g4@2 a4@2 g4@2 f4@3 ~ d4@2 e4@3 ~@3 d5@3 ~ d5]/2",
  P: "[d5 ~ c5 c5@3 ~ d5@2 d5@2 d5@3 d5 c5@2 c5@2 eb4@3 f4@3 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 a4@2 bb4@11 ~ f4@2 g4@2 f4@2 eb4@2 eb4@2 eb4@2 eb4@7 ~ f4@2 f4@2 g4@2 g4@2 f4@2 eb4@2 eb4@2 f4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 a4@2 bb4@11 ~ f4@2 g4@2 f4@2 eb4@2 eb4@2 eb4]/8",
  Q: "[~ eb4@8 f4@2 f4@2 g4@2 g4@2 f4@2 eb4@3 ~@10]/2",
})).s("gm_epiano1").gain(0.72)

// chords · piano · "Staff-4"
const piano = note(`<
  ~@2 A@16 B@3 ~ C D@2 ~ E@3 ~ F@8 ~@5 G@8 H@3 ~ F@8 ~@5 G@8 I@3 ~ G@8 ~@5 J@7 K@6 L@4 ~
>`.pickRestart({
  A: "[~@9 [d4,f4,a4]@15 ~ [bb3,eb4,g4]@15 ~ [d4,f4,a4]@15 ~ [bb3,eb4,g4]@15 ~ [f4,a4,c5]@15 ~ [g4,b4,d5]@15 ~ [g4,bb4,d5]@15 ~@8]/8", // Dm Eb Dm Eb F G Gm
  B: "[~@13 [c4,e4,g4]@11 ~@5 [c4,e4,g4]@11 ~@8]/3", C: "~ [f4,a4,c5]@8 ~@7", D: "~ [c4,e4,g4]@7 ~@8",
  E: "[~@9 f4@15 ~ bb4@15 ~@8]/3",
  F: "[~@9 [c4,e4,g4]@15 ~ [bb3,eb4,g4]@15 ~ eb4@15 ~ [f4,a4,c5]@15 ~ [bb3,eb4,g4]@15 ~ [bb3,eb4,g4]@15 ~ [f4,bb4]@15 ~@8]/8", // C Eb F Eb Bb5
  G: "[~@9 [c4,e4,g4]@15 ~ [bb3,eb4,g4]@15 ~ eb4@15 ~ eb4@15 ~ [bb3,eb4,g4]@15 ~ [f4,bb4]@15 ~ [bb3,eb4,g4]@15 ~@8]/8", // C Eb Bb5 Eb
  H: "[~@9 [d4,f4,a4]@15 ~ [bb3,eb4,g4]@15 ~@8]/3", I: "[~@9 [bb3,eb4,g4]@15 ~ [bb3,eb4,g4]@15 ~@8]/3",
  J: "[~@9 [c4,e4,g4]@15 ~ [bb3,eb4,g4]@15 ~ eb4@15 ~ eb4@15 ~ [bb3,eb4,g4]@15 ~ [f4,bb4]@15 ~ eb4@7]/7", // C Eb Bb5
  K: "[~@9 [bb3,eb4,g4]@15 ~ [f4,bb4]@15 ~ eb4@15 ~ [bb3,eb4,g4]@15 ~ [f4,bb4]@15 ~ eb4@7]/6", // Eb Bb5 Eb Bb5
  L: "[~@9 [bb3,eb4,g4]@15 ~ [f4,bb4]@15 ~ eb4@15 ~@8]/4", // Eb Bb5
})).s("gm_piano").gain(0.72)

// drums · kick
const kick = s("bd").struct("<~@2 [~@9 x ~@5 x] [~ x ~@7 x ~@5 x]!106 [~ x ~@14] ~>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@3 [~@5 x ~@10]!107 ~>").gain(0.72)

// drums · crash
const crash = s("cr").struct("<~@109 [~@9 x ~@6] ~>").gain(0.72)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@2
  [~@9 x ~ x ~ x ~ x]
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!106
  [~ x ~ x ~ x ~ x ~@8]
  ~
>`).gain(0.81)

stack(cello, epiano1, piano, kick, hihat, crash, cabasa)

More by 98 Degrees