Strudelify

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 48-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: 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 M N O P M F Q H R@3 S K L T@3 N O P M N O P M N O P M N U P V F
  W
>`.pickRestart({
  A: "[gb1@17 ~ f1@23 ~ e1@24 eb1@24 ~@33 eb2@7 bb1@2 ~@6 f1@3 eb1@2 ~, ~@90 bb1@40 f1 ~ bb1@10 ~@2]/3",
  B: "eb2@3 ~ eb2@2 ~@10 f1 ~ eb2@2 ~ eb2@2 ~@10 f1 ~ eb2@10 ~ gb1 ~, ~@45 f1@2 ~",
  C: "c2@2 ~@2 c2@3 ~@9 f1@2 c2@2 ~ c2@3 ~@10 f1 ~ c2@10 ~@2", D: "ab1@3 ~ ab1@4 ~@7 f1@3 ab1@2 ~@16 ab1@9 f1@2 ~",
  E: "b1@2 ~@2 b1@2 ~@10 f1@2 bb1@2 ~@2 bb1@3 ~@2 eb2@7 bb1@2 ~@6 f1@3 eb1@2 ~, ~@34 f1 ~ bb1@10 ~@2",
  F: "eb1@3 ~@15 eb1 ~@2 eb1 ~@2 eb1@2 ~ eb1@2 ~ eb1@2 ~@10 eb1@2 ~ eb1 ~@2",
  G: "eb1@3 ~@7 eb1@2 ~@6 eb1@2 ~@2 eb1 ~ eb1@3 ~ eb1@2 eb1@3 ~@9 eb1@2 ~@4", H: "eb3@35 ~@13",
  I: "[~@36 bb2@4 c3@2 eb3@2 ~@2 eb3@28 ~@16 g3@40 bb1 ~ eb2@3 ~@2 bb1@4 ~ eb1@2]/3",
  J: "eb1@10 eb1@8 eb1 ~@2 eb1 ~@5 eb1 ~@2 eb1@2 ~@10 eb1 ~@3 eb1@2",
  K: "ab1@8 ~ ab1@2 ~@7 ab1@2 ~@2 ab1 ~ ab1@2 ~ ab1 ~@2 ab1@2 ~@10 ab1@3 eb1@2 ~",
  L: "bb1@8 ~ bb1@2 ~@7 bb1@3 ~@3 bb1@3 ~ eb1 ~ bb1@2 ~@16",
  M: "b1@2 ~@2 b1@2 ~@9 f1@2 ~ bb1@2 ~@2 bb1@3 ~@2 eb2@7 bb1@2 ~@5 f1@4 eb1@2 ~, ~@34 f1 ~ bb1@10 ~@2",
  N: "eb2@3 ~ eb2@2 ~@9 f1 ~@2 eb2@2 ~ eb2@2 ~@10 f1 ~ eb2@10 ~ gb1 ~, ~@45 f1@2 ~",
  O: "c2@2 ~@2 c2@3 ~@9 f1@2 c2@2 ~ c2@3 ~@9 f1 ~@2 c2@10 ~@2", P: "ab1@3 ab1@4 ~@8 f1@3 ab1@2 ~@16 ab1@9 f1@2 ~",
  Q: "eb1@3 ~@6 eb1@2 ~@7 eb1@2 ~@2 eb1 ~ eb1@3 ~ eb1@2 eb1@3 ~@9 eb1@2 ~@4",
  R: "[~@36 bb2@4 c3@2 eb3@2 ~@2 eb3@28 ~@16 g3@39 bb1 ~@2 eb2@3 ~@2 bb1@4 eb1@3]/3",
  S: "eb1@9 eb1@9 eb1 ~@2 eb1 ~@5 eb1 ~ eb1@2 ~@11 eb1 ~@3 eb1@2",
  T: "[gb1@17 ~ f1@23 ~ e1@24 eb1@24 ~@33 eb2@7 bb1@2 ~@5 f1@4 eb1@2 ~, ~@90 bb1@40 f1 ~ bb1@10 ~@2]/3",
  U: "c2@2 ~@2 c2@3 ~@8 f1@2 ~ c2@2 ~ c2@3 ~@9 f1 ~@2 c2@10 ~@2",
  V: "b1@2 ~ b1@2 ~@10 f1@2 ~ bb1@2 ~@2 bb1@3 ~@2 eb2@7 bb1@2 ~@5 f1@4 eb1@2 ~, ~@34 f1 ~ bb1@10 ~@2",
  W: "eb1@3 ~@6 eb1@2 ~@7 eb1@2 ~@2 eb1 ~ eb1@3 eb1@2 ~ eb1@3 ~@8 eb1@2 ~@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 D B ~@2 C ~@11 D B ~@2 D B ~@2 D B ~@2 D B ~@2 C ~
>`.pickRestart({
  A: "~@16 gb1 ~@17 gb1 ~@13", B: "~@15 f1", C: "~@10 eb1 ~@37", D: "~@15 gb1 ~@17 gb1 ~@14",
})).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 G B H@2 G F ~@8 A@3 B H@2 G B H@2 G B H@2 G B I@3 F ~
>`.pickRestart({
  A: "[[bb3,eb4]@17 ~ [a3,eb4]@22 ~@2 [ab3,eb4]@23 ~ [g3,eb4]@22 ~@2 [f3,ab3,c4,eb4]@52 ~@2]/3", // Eb5 Adim Ab5 Cm Fm7
  B: "[eb3,bb3,eb4]@23 ~", C: "[c3,g3,bb3,eb4]@23 ~", D: "[ab2,bb3,eb4]@47 ~",
  E: "[b2,g3,bb3,eb4]@23 ~@13 bb3@4 ~@2 eb4@5 ~, ~@23 bb2@21 ~@4, ~@8 ab3@7 ~, ~@24 db4@16 db4@5 ~@3", F: "eb4 ~@47",
  G: "[b2,g3,bb3,eb4]@23 ~ db4@12 bb3@3 ~@3 eb4@5 ~, ~@23 [bb2,ab3]@21 ~@4, ~@39 db4@5 ~@4", // Eb Bb7
  H: "[[c3,g3,bb3,eb4]@46 ~ [ab2,bb3,eb4]@47 ~@2]/2", // Cm7 Absus2
  I: "[[c3,g3,bb3,eb4]@46 ~ [ab2,bb3,eb4]@47 ~@2 [g3,bb3,eb4]@22 ~@13 bb3@4 ~@3 eb4@5 ~, ~@95 b2@23 ~ [bb2,ab3]@21 ~@4, ~@119 db4@16 db4@5 ~@4]/3", // Cm7 Absus2 Eb Bb7
})).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 C@2 B ~@12 A C@2 B A C@2 B A C@2 B A C@2 D ~@2
>`.pickRestart({
  A: "g3@23 ~", B: "~@8 f3@7 ~", C: "[~@47 g3@46 ~@3]/2", D: "~@23 f3@21 ~@4",
})).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 G H E I G H F ~@11 A I G H E I G H J I G H E K L@2 ~@2
>`.pickRestart({
  A: "g4@22 ~ g4@9 ~ ab4@7 ~@2 bb4@6", B: "eb4@23 ~ bb4@9 ab4@7 ~@2 g4@6",
  C: "f4@6 g4@2 ~ eb4@26 ~ bb3@3 ~ db4@2 eb4@5 ~", D: "f4@4 ~@2 gb4@11 ~ f4@16 ~@2 f4@2 ~@4 f4@5 ~",
  E: "g4@22 ~ g4@9 ~ ab4@7 ~@2 bb4@6, eb4@5 ~@43", F: "eb4 ~@47", G: "f4@6 g4@2 ~ eb4@26 ~ bb3@3 db4@2 ~ eb4@5 ~",
  H: "f4@4 ~@2 gb4@11 f4@16 ~@3 f4@2 ~@4 f4@5 ~", I: "eb4@23 ~ bb4@9 ab4@7 ~ g4@6 ~",
  J: "g4@22 ~ g4@9 ~ ab4@7 ~@2 bb4@6, eb4 ~@47", K: "eb4@23 bb4@10 ab4@7 ~ g4@6 ~",
  L: "[f4@6 g4@2 ~ eb4@26 ~ bb3@3 db4@2 ~ eb4@5 f4@4 ~@3 gb4@11 f4@16 ~@3 f4@2 ~@4 f4@5 eb4]/2",
})).s("gm_pad_new_age").gain(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A@3 B@2 C D B@2 C D B@2 C D ~@9 E@3 B@2 C D B@2 C D ~@9 E@3 B@2 C D B@2 C D B@2 C D B@2 C F ~@2
>`.pickRestart({
  A: "[gb4@18 f4@21 ~ e4@23 eb4@27 bb3@29 bb4@11 ~ eb5@10 ~@3, ~@45 ab3@26 ~]/3", B: "[bb3@47 eb4@49]/2", C: "bb3@23 ~",
  D: "bb3@23 ~ bb4@11 ~ eb5@10 ~@2, ~@23 ab3@24 ~",
  E: "[gb4@18 f4@21 ~ e4@23 eb4@27 bb3@6 bb3@23 ~ bb4@11 ~ eb5@10 ~@2, ~@90 ab3@29 ab3@24 ~]/3",
  F: "bb3@23 bb4@11 ~ eb5@10 ~@3, ~@23 ab3@24 ~",
})).s("gm_string_ensemble_2").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@3
  [x ~ x ~@2 x ~@3 x ~@2 x ~ x ~@2 x ~@6]!26
  [x ~@3 x ~@5 x ~@7 x ~@5 x ~@3 x ~@4 x ~@14]
  [x ~@3 x ~@4 x ~@8 x ~@5 x ~@2 x ~@5 x ~@14]!31
  [x!2 ~ x ~@2 x ~ x!2 ~ x ~@4]!4
>`).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@2 C D E@3 D E@3 D E@3 D E D E D E@3 D E@3 D E@3 D E@2 F G F@2
>`.pickRestart({
  A: "x ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x", B: "x ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@3",
  C: "x ~@3 x ~@5 x ~ x ~@3 x ~@5 x ~ x ~@3 x ~@4 x ~@2 x ~@2 x ~@5 x ~@2",
  D: "x ~@3 x ~@4 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@8",
  E: "x ~@3 x ~@4 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~@2", F: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x",
  G: "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