Strudelify

Whoops Now

Janet Jackson

KeyG majorTempo130 bpm
0:00/0:00
// Whoops Now — Janet Jackson
// 130 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 104 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@3 A B@5 ~@4 C@5 D@4 E@4 F@3 G F@2 H I@2 J F G F G F K L M F G F G F K L N O@2 P Q R@2 P S@2 T F@3 G F@2 H I@2 J F G
  F G F K L M F G F G F K L N F G F G F K L M F G F G F K L U
>`.pickRestart({
  A: "~@7 d3 e3 g3 e3 d3", B: "[g2@17 ~ b2@4 a2@19 ~ e3@4 d3@19 ~ a3@4 g3@7 ~ e3@4 d3@7 ~ b2@4 g2@12 ~@14]/5",
  C: "[~@22 e2@24 b1@24 a1@24 d2@14 d2@2 e2@2 g2 ~ g2@2 e2@2 d2@2]/5", D: "[g1@35 ~@3 d2@2 e2@2 g2@2 e2@2 d2@2]/2",
  E: "[g1@35 ~@11 e2@24 d2@16 d2@2 e2@2 g2@2 e2@2 d2@2]/4", F: "g1@2 ~@3 g1 g1@2 ~@3 g1",
  G: "g1@2 ~@3 g1!2 d2 e2 g2 e2 d2", H: "e1@2 ~@3 e1 e1@2 ~@3 e1",
  I: "[b1@2 ~@3 b1 b1@2 ~ a#1@2 a1@3 ~@3 a1 a1@2 ~@3 a1]/2", J: "d1@2 ~@3 d1!2 d2 e2 g2 e2 d2",
  K: "g1@2 ~@3 g1 g1@2 ~@3 e2", L: "e2@2 ~@3 e2 e2@2 ~@3 e2", M: "d2@2 ~@3 d2!3 e2 g2 e2 d2",
  N: "d2@4 ~@6 d2@2 d2@5 ~@5 d2@2", O: "[e2@4 b1@2 e1@5 ~ e1@4 f#1@2 g1@4 g#1@6 ~@2 g#1@4 ~@2 g#1@4 ~@2 g#1@4 ~@2]/2",
  P: "a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~", Q: "d2@4 ~@2 d2@3 ~@3 d2@2 a1@2 d1@2 a1@2 d1@2 a1@2",
  R: "[e2@4 ~@2 e1@5 ~ e1@4 f#1@2 g1@4 g#1@6 ~@2 g#1@4 ~@2 g#1@4 ~@2 g#1@4 ~@2]/2", S: "d2@2 ~ d2@2 ~ d2@2 ~ d2@2 ~",
  T: "d2@2 ~ d2@2 ~ d2 e2 g2!2 e2 d2", U: "d2@4 ~@6 d2@2 d2@5 ~@7",
})).s("gm_fretless_bass").gain(0.38)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B A B A B A B C B C B D B E F B G C H C H C B E G C B C B D B E F B G C H C H C B E G C H C H C B E G I J K L I J K
  L@3 C B C B D B E F B G C H C H C B E G C H C H C B E G C H C H C B E G C H C H C B E M
>`.pickRestart({
  A: "[b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~", // G
  B: "[a3,c4,e4,g4] ~ [a3,c4,e4,g4] ~ [a3,c4,e4,g4] ~ [a3,c4,e4,g4] ~", // Am7
  C: "[b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~, g2", // G
  D: "[b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~, g2@23 ~", // G
  E: "[b3,d4,e4,g4] ~ [b3,d4,e4,g4] ~ [b3,d4,e4,g4] ~ [b3,d4,e4,g4] ~", // Em7
  F: "[a3,b3,d4,f#4] ~ [a3,b3,d4,f#4] ~ [a3,b3,d4,f#4] ~ [a3,b3,d4,f#4] ~", // Bm7
  G: "[a3,d4,e4,g4] ~ [a3,d4,e4,g4] ~ [a3,d4,e4,g4] ~ [a3,d4,e4,g4] ~", // Asus4
  H: "[a3,c4,e4,g4]@3 ~@3 [a3,c4,e4,g4]@3 ~@3 [a3,c4,e4,g4]@2 d3@2 e3@2 [g3,a3,c4,e4,g4]@2 e3@2 d3@2", // Am7
  I: "[b3,d4,a4]@2 ~ [b3,d4,a4]@2 ~ [b3,d4,a4]@2 ~ [b3,d4,a4]@2 ~", // Bm7
  J: "[b3,d4,g#4]@2 ~ [b3,d4,g#4]@2 ~ [b3,d4,g#4]@2 ~ [b3,d4,g#4]@2 ~", // G#dim
  K: "[a3,c4,g4]@2 ~ [a3,c4,g4]@2 ~ [a3,c4,g4]@2 ~ [a3,c4,g4]@2 ~", // Am7
  L: "[a3,d4,g4]@4 ~@2 [a3,d4,g4]@4 ~@2 [a3,d4,g4]@4 ~@2 [a3,d4,g4]@3 ~@3", // Dsus4
  M: "[a3,d4,e4,g4] ~ [a3,d4,e4,g4] ~ [a3,d4,e4,g4] ~@3", // Asus4
})).s("gm_piano").gain(0.24).pan(0.4)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@3 A B@5 ~@38 C D ~@2 E F@2 G@2 H@2 I J K L ~ M@3 N@2 ~@15 C D ~@14 C D ~@3
>`.pickRestart({
  A: "~@7 d5 e5 g5 e5 d5", B: "[g5@16 ~@2 b5@4 a5@16 ~@4 e6@4 d6@17 ~@3 a6@4 g6@6 ~@2 e6@4 d6@6 ~@2 b5@4 g5@5 ~@21]/5",
  C: "~@7 d6 e6 g6 e6 d6", D: "g6 ~@7", E: "~@21 d6 d#6 ~", F: "[e6@3 g#6]/2", G: "[a6@45 a6 a#6 ~]/2", H: "b6/2",
  I: "a6 e6", J: "d6@6 [a3,a4] [d4,d5] [e4,e5] [g4,g5] [e4,e5] [g4,g5]",
  K: "[d4,d5]@6 [a3,a4] [d4,d5] [e4,e5] [a4,a5] [e4,e5] [a4,a5]", // D A D E A E A
  L: "[a3,a4] [d4,d5] [e4,e5] [a4,a5] [g4,g5] [a4,a5] [b4,b5] [g4,g5] [d5,d6] [b4,b5] [g4,g5] [e4,e5]", // A D E A G A B G …
  M: "[~@11 [g5,g6]@16 [e5,e6]@3 [d5,d6]@3 [e5,e6]@3]/3", N: "[[g4,g5]@7 ~@5]/2",
})).s("gm_string_ensemble_1").gain(0.25).pan(0.8)

// other · glockenspiel · "GLOCKENSPL"
const glockenspiel = note(`<
  ~@3 A B@5 ~@4 C D E F ~ G H G H G H ~@7 C D E F ~ G H G H G H ~@2 G H G H G H ~ I@8 J@3 K ~@4 C D E F ~ G H G H G H
  ~@2 G H G H G H ~ L@2 H G H G H ~@2 G H G H G H ~@2
>`.pickRestart({
  A: "~@7 d6 e6 g6 e6 d6",
  B: "[g6@12 ~@6 b5@3 ~ a5@15 ~@5 e6@3 ~ d6@16 ~@4 a6@4 g6@6 ~@2 e6@4 d6@6 ~@2 b5@4 g5@8 ~@18]/5", C: "~@11 b5",
  D: "~@5 d6 ~@5 f#6", E: "~@10 a6@2 ~@10 b5 ~", F: "~@5 b6 ~@5 g6", G: "~@6 g6@2 ~@4 d6@3 ~@7 e6@2",
  H: "~@4 d6 ~ c6@2 ~@2 c6@2 ~@4 d6@2 ~@6",
  I: "[~@22 a6@19 ~@5 g#6@20 ~@4 a6@21 ~@3 a6@20 ~@4 a6@18 ~@6 g#6@16 ~@8 a6@18 ~@6 a6@2]/8",
  J: "[~@11 a6@6 ~@6 a6@6 a6@6 ~]/3", K: "g6 ~", L: "[~@30 g6@2 ~@4 d6@3 ~@7 e6@2, ~@22 a6@19 ~@7]/2",
})).s("gm_glockenspiel").gain(0.13).pan(0.6)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@13 A@5 B ~ C ~ D ~ E ~@6 A@5 F ~ G ~ D ~ H@2 F ~ G ~ D ~ H@2 ~ I J K ~ L M N O P ~@5 A@5 F ~ G ~ D ~ H@2 F ~ G ~ D ~
  H@2 F ~ G ~ D ~ H@2 F ~ G ~ D ~ H@2
>`.pickRestart({
  A: "[~@22 e2@6 b4@2 ~@10 d5@2 ~@4 b2@6 f#5@2 ~@10 a5@2 ~@4 a2@6 b5 ~@11 g5@2 ~@4 d2@6 ~@6 b4 ~ d5 ~ e5 ~ g5 ~ g5@2 e5@2 d5@2]/5",
  B: "g4@4 ~@12 [b4,b5] ~@5 [g4,g5] ~", C: "~@8 [c5,c6] [b4,b5]@2 [g4,g5]", D: "~@8 [d5,d6] ~@3",
  E: "~@16 [e4,e5]@2 [g4,g5]@3 ~ [a4,a5]@2", F: "g4@4 ~@12 [b4,b5]@3 ~@3 [g4,g5]@2",
  G: "~@16 [c5,c6] ~ [b4,b5]@4 [g4,g5]@2", // C B G
  H: "[~@4 [c5,c6]@2 [b4,b5]@3 ~ g4@2 ~@4 [e4,e5] ~@5 [a4,a5]@12 [a4,a5] ~ [c5,c6]@4 [d5,d6]@3 ~@5, ~@10 g5 ~@37]/2", // C B E A C D
  I: "~@10 [g4,g5]@3 ~@3 [b4,b5]@3 ~@3 [c5,c6]@2", J: "~@4 [b4,b5]@3 ~@3 [g4,g5]@3 ~@3 [e4,e5]@3 ~@5",
  K: "~@2 [d4,d5] ~ [e4,e5] ~ [g4,g5] ~ [e4,e5] ~ [g4,g5]@2 ~@2 [d4,d5]@2 [b4,b5]@2 [a4,a5]@2 [g4,g5]@2 [e4,e5]@2", // D E G E G D B A …
  L: "~@11 [e5,e6]", M: "~@4 [c5,c6]@3 ~@3 [b4,b5]@3 ~@3 [g4,g5]@3 ~@5",
  N: "~ d4 [e4,e5] [g4,g5] [e4,e5] [g4,g5] ~@6, ~@2 d5 ~@21", O: "~ [d4,d5] [e4,e5] [a4,a5] [g4,g5] [a4,a5] ~@6",
  P: "~@2 [d4,d5]@2 [e4,e5] ~ [a4,a5]@2 [g4,g5]@2 [a4,a5]@2 [b4,b5]@2 [g4,g5] ~ [d5,d6] ~ [b4,b5]@2 [g4,g5] ~ [e4,e5]@2", // D E A G A B G D …
})).s("gm_brass_section").gain(0.34).pan(0.2)

// other · trumpet
const trumpet = note(`<
  ~@14 A B C ~@2 D E ~@2 F G ~@7 A B C ~@2 D E ~@2 F G ~@2 D E ~@2 F G ~@17 A B C ~@2 D E ~@2 F G ~@2 D E ~@2 F G ~@2 D
  E ~@2 F G ~@2 D E ~@2 F G ~
>`.pickRestart({
  A: "~@2 b2 ~@5 d3 ~@3", B: "~@2 f#3 ~@5 a3 ~@3", C: "~@2 b3 ~@5 g3 ~@3",
  D: "~@6 a5 g5 ~ a5 b5 ~ c6 ~@2 b5 ~@2 c6 ~@2 e6 ~@2", E: "d6 ~@2",
  F: "~@3 e6 d6 ~ c6 ~@2 b5 ~@2 c6 ~@2 a5@2 ~ d6 ~@2 c6@2 ~", G: "b5@3 ~@5",
})).s("gm_trumpet").gain(0.36).pan(0.6)

// chords · harpsichord · "HARPSICHRD"
const harpsichord = note("<~@26 A B@3 C@6 ~@26 A B@3 C@6 ~@32>".pickRestart({
  A: "[g4,b4]@15 ~ d4 ~ [g4,b4,d5]@3 ~ [e4,a4,c5]@2, d4@13 ~@11", // G Am
  B: "[~@18 [a4,c5]@4 [g4,b4]@17 ~@3 [g4,b4]@4 [e4,c5]@17 ~ e4 ~ [e4,a4,c5]@3 ~ [d4,g4,b4]@2, ~@16 e4@5 ~ d4@15 ~@3 d4@4 ~@28, ~@21 d5 ~ a4@9 ~@4]/3", // Am G C Am G
  C: "[~@16 d4 ~ [d4,g4,b4,d5]@3 ~ [e4,c5]@17 ~ e4 ~ [e4,a4,c5]@3 ~ [e4,g4,b4]@21 ~@3 [f#4,a4,b4,d5]@19 ~@5 [e4,g4,a4,c5]@19 ~@5 [g4,a4,d5]@17 ~@9, ~@11 a4@9 ~@52]/6", // G C Am Em Bm7 Am7 Gsus2
})).s("gm_harpsichord").gain(0.25).pan(0.6)

// drums · kick
const kick = s("bd").struct("x ~@4 x!2 ~@5").gain(0.49)

// drums · clap
const clap = s("cp").struct("~ x ~ x").gain(0.55)

// drums · hihat
const hihat = s("hh").struct("x!4").gain(0.44)

stack(bass, piano, string_ensemble_1, glockenspiel, brass_section, trumpet, harpsichord, kick, clap, hihat)

More by Janet Jackson