Strudelify
Where Are You Now cover art

Janet

Where Are You Now

Janet Jackson

KeyE♭ majorTempo80 bpm
0:00/0:00
// Where Are You Now — Janet Jackson
// 80.1 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80.1/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger
const bass = note(`<
  A@3 B C D E B C D E B C D E F G H I@3 J K L A@3 B C D E B C D E F G H I@3 J K L A@3 B C D E B C D E B C D E B C D E F
  G
>`.pickRestart({
  A: "[gb1@6 f1@8 e1@8 eb1@8 ~@11 eb2@2 [f1,bb1] bb1@2 f1 eb1, ~@30 bb1@13 ~@5]/3", // Bb5
  B: "eb2!2 ~@3 f1 eb2!2 ~@3 f1 eb2@3 [f1,gb1]", C: "c2!2 ~@3 f1 c2!2 ~@3 f1 c2@3 ~",
  D: "ab1!2 ~@3 f1 ab1 ~@5 ab1@3 f1", E: "b1!2 ~@3 f1 bb1!2 ~ eb2@2 [f1,bb1] bb1@2 f1 eb1",
  F: "eb1 ~@5 eb1!5 ~@3 eb1!2", G: "eb1 ~@2 eb1 ~@2 eb1!5 ~@3 eb1 ~", H: "eb3@3 ~",
  I: "[~@12 bb2 c3 eb3 eb3@9 ~@6 g3@13 bb1 eb2 ~ bb1 eb1]/3", J: "eb1@3 eb1@3 eb1!2 ~ eb1!2 ~@3 eb1!2",
  K: "ab1@3 ab1 ~@2 ab1!5 ~@3 ab1 eb1", L: "bb1@3 bb1 ~@2 bb1 ~ bb1 eb1 bb1 ~@5",
})).s("gm_electric_bass_finger").gain(0.4)

// bass · electric bass finger · soft notes
const bass_soft = note(`<
  ~@3 A B ~@2 A B ~@2 A B ~@2 C ~@11 A B ~@2 A B ~@2 C ~@11 A B ~@2 A B ~@2 A B ~@2 A B ~@2 C ~
>`.pickRestart({
  A: "~@5 gb1 ~@5 gb1 ~@4", B: "~@15 f1", C: "~@3 eb1 ~@12",
})).s("gm_electric_bass_finger").gain(0.25)

// chords · piano
const piano = note(`<
  A@3 B C D E B C D E B C D E F ~@8 A@3 B C D E B C D E F ~@8 A@3 B C D E B C D E B C D E B C D E F ~
>`.pickRestart({
  A: "[[bb3,eb4]@6 [a3,eb4]@7 ~ [ab3,eb4]@8 [g3,eb4]@7 ~ [f3,ab3,c4,eb4]@17 ~]/3", B: "[eb3,bb3,eb4]@15 ~",
  C: "[c3,g3,bb3,eb4]@15 ~", D: "[ab2,bb3,eb4]",
  E: "[b2,g3,bb3,eb4]@8 db4@4 bb3 ~ eb4@2, ~@8 [bb2,ab3]@7 ~, ~@13 db4@2 ~", F: "eb4 ~@15",
})).s("gm_piano").gain(0.4)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@3 A ~ A B A ~ A B A ~ A B ~@12 A ~ A B A ~ A B ~@12 A ~ A B A ~ A B A ~ A B A ~ A B ~@2
>`.pickRestart({
  A: "g3@15 ~", B: "~@8 f3@7 ~",
})).s("gm_piano").gain(0.25)

// other · pad new age
const pad_new_age = note(`<
  ~@7 A B C D E B C D F ~@11 A B C D E B C D F ~@11 A B C D E B C D G B C D E B C D F ~
>`.pickRestart({
  A: "g4@7 ~ g4@3 ab4@2 ~ bb4@2", B: "eb4@8 bb4@3 ab4@2 ~ g4@2", C: "f4@2 g4 eb4@9 bb3 db4 eb4@2",
  D: "f4 ~ gb4@4 f4@5 ~ f4 ~ f4@2", E: "g4@7 ~ g4@3 ab4@2 ~ bb4@2, eb4 ~@7", F: "eb4 ~@15",
  G: "g4@7 ~ g4@3 ab4@2 ~ bb4@2, eb4 ~@15",
})).s("gm_pad_new_age").gain(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A@3 B C B D B C B D B C B D ~@9 E@3 B C B D B C B D ~@9 E@3 B C B D B C B D B C B D B C B D ~@2
>`.pickRestart({
  A: "[gb4@6 f4@7 e4@8 eb4@9 bb3@10 bb4@4 eb5@3 ~, ~@30 ab3@17 ~]/3", B: "bb3", C: "eb4",
  D: "bb3@8 bb4@4 eb5@3 ~, ~ ab3", E: "[gb4@6 f4@7 e4@8 eb4@9 bb3@2 bb3@8 bb4@4 eb5@3 ~, ~@15 ab3@5 ab3@4]/3",
})).s("gm_string_ensemble_2").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@3 [x!2 ~ x ~@2 x ~ x!2 ~ x ~@4]!62>").gain(0.35)

// drums · snare
const snare = s("sd").struct("<~@3 [~ x ~ x]!62>").gain(0.4)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A
>`.pickRestart({
  A: "~@7 x",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3 A@3 B A@3 B A@3 B A@3 B A@3 B A B A B A@3 B A@3 B A@3 B A@3 B A B A B A@3 B A@3 B A@3 B A@3 B A@2
>`.pickRestart({
  A: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", B: "x!2 ~ x!3 ~ x!3 ~ x!3 ~@2",
})).gain(0.25)

// drums · tambourine
const tambourine = s("tb").struct("<~@3 [~ x ~ x ~ x ~ x]!62>").gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "x",
})).gain(0.3)

// drums · triangle
const triangle = s("triangles:35").struct("<~@3 [~@7 x]!62>").gain(3.02)

stack(
  bass, bass_soft, piano, piano_soft, pad_new_age, string_ensemble_2, kick, snare, low_tom, hihat, tambourine, crash,
  triangle
)

More by Janet Jackson