Strudelify
Black Cat cover art

Design Of A Decade 1986/1996

Black Cat

Janet Jackson

KeyE majorTempo118 bpm
0:00/0:00
// Black Cat — Janet Jackson
// 118 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 16 "Trumpet" trumpet (copy of ch 15 "Brass Section" brass section)
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Lead Gtr 1(Overdriven Gtr), Gtr Solo (Overdriven Gtr).
setcpm(118/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 · "Elec Bass (finger)"
const bass = note(`<
  ~@12 A B C D E F G H I J K L K L K L K J K L K L M N O P Q R S T U V A B C D E W G H I J K L K L K L K J K L K L M N O
  P Q R S T U V A B C D E W G H I J I J I J I J I J I J I J I J O P Q R S T U V ~@8 A B C D E X G H I J I J I J I Y@2
>`.pickRestart({
  A: "e1@4 ~@2 e1@2 e2@2 e1@2 ~@2 e1 ~", B: "~ e1 ~ e1 e2 b1 d2 b1", C: "e1 ~ e1@2 e2@2 e1 ~@3 e1 ~ b1@2 [a1,a#1] ~",
  D: "a1@2 e1@2 e2@3 ~@3 e1 ~ b1@2 d2@2", E: "e1 ~ e1@2 e2@2 e1 ~@3 e1@2 e2@2 e1@2",
  F: "~@2 e1@2 e2@2 e1@2 d2@2 b1@2 d2 ~ b1@2", G: "e1 ~ e1@2 e2@2 e1 ~@3 e1@2 b1@2 [a1,a#1] ~",
  H: "a1 e1 e2@2 ~ b1 d2 b1", I: "e1 ~@5 e1 ~", J: "e1 ~@7", K: "e1@3 ~@9 e1@2 ~@2", L: "e1@3 ~@13",
  M: "e1@3 ~@9 e1@3 ~", N: "e1@3 ~@3 e1@3 ~ f#1@2 g#1@2 a1@2", O: "b1 ~ b1@2 a1@2 b1@2 ~@2 a1@2 b1@2 ~@2",
  P: "~@2 a1@2 b1@2 ~@4 a1@2 b1@3 ~", Q: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  R: "a1 ~ a1 ~ a1 ~ a1 ~ a1@2 g#1 ~ a1@2 ~@2", S: "b1 ~ b1 ~ a1@2 b1@2 ~@2 a1@2 b1@2 ~@2",
  T: "~@2 a1@2 b1@2 ~@4 a1@2 b1 ~ b1 ~", U: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2",
  V: "~@2 g#1@2 a1@2 a#1@2 b1@2 e1@2 e2@3 ~", W: "~@2 e1@2 e2@2 e1@2 d2@2 b1@2 d2 ~ b1 ~",
  X: "~@2 e1@2 e2@2 e1 ~ d2@2 b1@2 d2 ~ b1 ~", Y: "[e2@2 d2@2 b1@2 e1@2 ~@4 e1@19 ~]/2",
})).s("gm_electric_bass_finger").gain(0.7)

// bass · synth bass 1
const bass_2 = note(`<
  ~@12 A B C D E F G H I J K L K L K L K J K L K L M N O P Q R S T U V A B C D E W G H I J K L K L K L K J K L K L M N O
  P Q R S T U V A B C D E W G H I J I J I J I J I J I J I J I J O P Q R S T U V ~@8 A B C D E X G H I J I J I J I Y@2
>`.pickRestart({
  A: "e2@4 ~@2 e2@2 e3@2 e2@2 ~@2 e2 ~", B: "~ e2 ~ e2 e3 b2 d3 b2", C: "e2 ~ e2@2 e3@2 e2 ~@3 e2 ~ b2@2 [a2,a#2] ~",
  D: "a2@2 e2@2 e3@3 ~@3 e2 ~ b2@2 d3@2", E: "e2 ~ e2@2 e3@2 e2 ~@3 e2@2 e3@2 e2@2",
  F: "~@2 e2@2 e3@2 e2@2 d3@2 b2@2 d3 ~ b2@2", G: "e2 ~ e2@2 e3@2 e2 ~@3 e2@2 b2@2 [a2,a#2] ~",
  H: "a2 e2 e3@2 ~ b2 d3 b2", I: "e2 ~@5 e2 ~", J: "e2 ~@7", K: "e2@3 ~@9 e2@2 ~@2", L: "e2@3 ~@13",
  M: "e2@3 ~@9 e2@3 ~", N: "e2@3 ~@3 e2@3 ~ f#2@2 g#2@2 a2@2", O: "b2 ~ b2@2 a2@2 b2@2 ~@2 a2@2 b2@2 ~@2",
  P: "~@2 a2@2 b2@2 ~@4 a2@2 b2@3 ~", Q: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  R: "a2 ~ a2 ~ a2 ~ a2 ~ a2@2 g#2 ~ a2@2 ~@2", S: "b2 ~ b2 ~ a2@2 b2@2 ~@2 a2@2 b2@2 ~@2",
  T: "~@2 a2@2 b2@2 ~@4 a2@2 b2 ~ b2 ~", U: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2@2",
  V: "~@2 g#2@2 a2@2 a#2@2 b2@2 e2@2 e3@3 ~", W: "~@2 e2@2 e3@2 e2@2 d3@2 b2@2 d3 ~ b2 ~",
  X: "~@2 e2@2 e3@2 e2 ~ d3@2 b2@2 d3 ~ b2 ~", Y: "[e3@2 d3@2 b2@2 e2@2 ~@4 e2@19 ~]/2",
})).s("gm_synth_bass_1").gain(0.64)

// other · lead 4 chiff · "Chiff Lead"
const lead_4_chiff = note(`<
  ~@12 A ~ B C A ~ B C D ~@22 E A ~ B C A ~ B C D ~@22 E A ~ B C A ~ B C D ~@14 F ~@7 E ~@8 A ~ B C A ~ B C ~@9
>`.pickRestart({
  A: "~@5 e4 b4 e5", B: "~@2 e4@2 b4@2 e5@3 ~@7", C: "~@3 e5 d5 b4@2 a4", D: "e4 ~@15",
  E: "~@2 g#4@2 a4@2 a#4 ~ b4 ~ e4@2 e5@2 ~@2", F: "~@6 d4@2 e4@2 g4 ~ a4 b4 d5@2",
})).s("gm_lead_4_chiff").gain(0.39)

// chords · brass section
const brass_section = note(`<
  ~@12 A B C D E F G H ~@16 I J K@2 L M N O A B C D E F G H ~@16 I J K@2 P M N O A B C D E F G H ~@7 Q ~@7 R I J K@2 P M
  N O ~@8 A B C D E F G H S T U V S V S W@2
>`.pickRestart({
  A: "[b4,d5]@4 e5@2 d5 ~ [d5,g5]@4 [b4,e5]@2 d5 ~", B: "~@2 e5 ~@3 [d5,g5]@2 ~@2 [d5,g5]@2 e5@3 ~, ~@12 b4 ~@3",
  C: "d5@4 e5@2 d5 ~ [d5,g5]@4 b4@2 a#4@2", D: "a4@2 g4 ~ [b4,e5]@4 ~@8",
  E: "[b4,d5]@4 e5@2 b4 ~ [d5,g5]@4 [b4,e5]@2 d5 ~", F: "~@2 e5 ~@3 [d5,a5]@2 ~@2 a5@2 g5@2 ~@2, ~@5 d5@2 ~",
  G: "d5@4 e5@2 d5 ~ [d5,g5]@3 ~ b4@2 a#4@2", H: "a4@2 g4 ~ [b4,e5]@5 ~@7",
  I: "[f#4,b4] ~ [f#4,b4] ~ [e4,a4,c#5] ~ [b4,d#5]@2 ~@2 [e4,a4,c#5]@2 [f#4,b4,d#5]@2 ~@2, d#5!2 ~@6", // B5 A B A B
  J: "~@2 [e4,a4,c#5]@2 [f#4,b4,d#5]@2 ~@4 [a4,c#5] ~ [f#4,d#5]@2 ~@2, ~@10 e4@2 b4 ~@3", // A B A D#m
  K: "[[a4,c#5,e5]@31 ~, d#5 ~@31]/2", // A
  L: "[f#4,b4,d#5] ~ [f#4,b4,d#5]@2 [e4,a4]@2 [f#4,b4,d#5]@2 ~@2 [e4,a4,c#5] ~ [f#4,b4,d#5]@2 ~@2, ~@4 c#5 ~@11", // B A5 B A B
  M: "~@2 [a4,c#5] ~ [f#4,b4,d#5]@2 ~@4 [e4,a4,c#5] ~ [f#4,b4]@2 ~@2, ~@2 e4@2 ~@8 d#5 ~@3", N: "[e4,a4,c#5]",
  O: "~@2 g#4@2 a4@2 a#4@2 b4@2 e4@2 e5@3 ~",
  P: "[f#4,b4,d#5] ~ [f#4,b4,d#5]@2 [e4,a4]@2 [f#4,b4]@2 ~@2 [e4,a4,c#5] ~ [f#4,b4,d#5]@2 ~@2, ~@4 c#5 ~ d#5 ~@9", // B A5 B5 A B
  Q: "~@5 [g#4,d5,g5] ~ [g#4,d5,g5]", R: "~@6 d4@2 e4@2 g4 ~ a4 b4 d5@2", S: "[g#4,d5,g5]@3 ~@9 [g#4,d5,g5]@2 ~@2",
  T: "[g#4,d5,g5] ~@3", U: "[g#4,d5,g5]@2 ~@4 [g#4,d5,g5] ~", V: "[g#4,d5,g5]@3 ~@13",
  W: "[e5@2 d5 ~ b4@2 e4@2 ~@4 [g#4,d5,g5]@19 ~]/2", // G
})).s("gm_brass_section").gain(0.69)

// other · guitar harmonics · "Gtr Harmonics"
const guitar_harmonics = note(`<
  ~@4 A@2 B C D@2 E F G H B I J K L M ~@23 N G O L P G Q R S ~@23 N G O L P G Q R T U V W X Y Z AA AB AC AD AE AF AG AH
  AI AJ ~@7 N ~@8 G O L P G Q R AK ~@9
>`.pickRestart({
  A: "[d4@2 e4 b3 g4@2 e4 d4@2 e4 ~ g4 ~ g4 e4 b3]/2", B: "d4@2 e4 d4 g4@2 b3 a#3", C: "a3@2 g3@2 e4@9 ~@3",
  D: "[d4@2 e4 b3 g4@2 e4 d4@2 e4@2 g4@5]/2", E: "d4@2 e4 b3 g4@2 b3 a#3", F: "a3 g3 e4@3 ~@3",
  G: "d4@4 e4@2 b3 ~ g4@4 e4@2 d4@2", H: "~@2 e4@2 ~@2 g4@2 ~@2 g4@2 e4@2 b3 ~",
  I: "a3@2 g3@2 e4@4 e3 g3 a3@2 b3@2 d4 ~", J: "b3@2 d4@2 e4@2 d4 ~ g4@4 e4@2 d4@2", K: "~@2 e4 ~@3 g4@9 ~",
  L: "d4@4 e4@2 b3 ~ g4@4 b3@2 a#3@2", M: "a3@2 g3@2 e4@3 ~ e4 ~ b3 a3 g3@2 e3@2, ~@9 d4@2 ~@5",
  N: "~@2 g#3@2 a3@2 a#3@2 b3@2 e3@2 e4@3 ~", O: "~@2 e4 ~@3 g4@4 g4@2 e4@2 b3 ~", P: "a3@2 g3@2 e4@3 ~ g4@7 ~",
  Q: "~ e4 ~ a4@3 g4 ~", R: "d4@3 ~ e4@2 b3 ~ g4@4 b3@2 a#3@2",
  S: "a3@2 g3 ~ e4@3 ~@2 g4 b3 ~ g3@2 e3@2, ~@8 e4@2 ~ e4@2 ~@3",
  T: "a3@2 g3 ~ e4@3 ~@2 e4 g3 ~ g3@2 e3@2, ~@8 a4@2 ~ e4@2 ~@3", U: "~@14 d5 b4, ~ e5@15", V: "d5@2 e5@3 ~@8 b4 d5 ~",
  W: "~ e5@2 e5@2 ~ e5@2 e5@6 d5 a4", X: "b4@6 ~@4 a4 ~ a4 g4 f#4 ~, ~@11 b4@2 ~@3",
  Y: "~@2 g4 e4 ~ f#4 d4 ~ g4 f#4 ~ a4 g4 ~ b4 a4", Z: "~ d5 b4 ~ e5 c#5 ~ f#5 d5 ~ g5 e5 ~ a5 f#5@2",
  AA: "a5@2 ~ a5@2 ~ a5@2 a5@6 g5@2", AB: "d5@2 e5@10 ~@2 g5 a5",
  AC: "b5 g5 a5 f#5 g5 f#5 d5 e5 b5 d5 f#5 b4 d5 e5 g5 d5", AD: "a5 g5 b5 g5 b5 d5 b5 g5 e5@2 d5@3 b5 ~ g5, ~@7 e5",
  AE: "g5@7 ~ g5@2 ~@2 g5@2 g5 ~", AF: "g5@7 [d5,e5] b4@2 e5@4 ~@2",
  AG: "g5 d5 a4 f#5 c#5 g4 f#4 e5 a4 d5 e4 b4 a4 g4 d4 f#5", AH: "a5@4 f#4 g4 b4 g5 a5 ~ f#5 ~ e5 g5 b5 ~", AI: "c#6",
  AJ: "[b4,b5]!2 ~ [b4,b5]!2 ~ [b4,b5] [b4,b5]@2 ~@7", // B
  AK: "a3@2 g3 ~ e4@3 ~@2 e3!2 ~@2 e3@3, ~@8 g4@2 ~ b3@2 ~@3, ~@6 g3 ~",
})).s("gm_guitar_harmonics").gain(0.21)

// chords · distortion guitar · "Rhythm Gtr (Distortion Gtr)"
const distortion_guitar = note(`<
  ~@20 A B A B A B C B C B C B C B C B D E F@2 G E H ~@9 A B A B A B C B C B C B C B C B G E F@2 G E H ~@9 A B A B A B C
  B C B C B C B C B G E F@2 G E H ~@17 A B A B A B A B ~
>`.pickRestart({
  A: "[e2,b2,e3]@3 ~@9 [e2,b2,e3]@2 ~@2", B: "[e2,b2,e3] ~@7", C: "[e2,b2,e3] ~@5 [e2,b2,e3] ~",
  D: "[b2,f#3] ~ [b2,f#3] ~ [a2,e3] ~ [b2,f#3]@2 ~@2 [a2,e3]@2 [b2,f#3]@2 ~@2", // B5 A5 B5 A5 B5
  E: "~@2 [a2,e3] ~ [b2,f#3]@2 ~@4 [a2,e3] ~ [b2,f#3]@2 ~@2", F: "[[a2,e3]@15 ~]/2",
  G: "[b2,f#3] ~ [b2,f#3] ~ [a2,e3] ~ [b2,f#3]@2 ~@2 [a2,e3] ~ [b2,f#3]@2 ~@2", H: "[a2,e3]",
})).s("gm_distortion_guitar").gain(0.64)

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

// drums · snare
const snare = s("sd").struct("<A@43 B A@31 B A@39 B A@15 C ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~ x ~@2",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@7 A ~@7 B ~@15 A ~@7 C ~@23 A ~@7 C ~@23 A ~@15 C ~@7 A ~@7 D ~>".pickRestart({
  A: "~@6 x!2", B: "~@5 x ~ x", C: "~@10 x!2 ~@4", D: "x!2 ~ x ~@4",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<A@44 ~@8 A@24 ~@8 A@24 ~@16 A@7 B ~>".pickRestart({
  A: "x!4", B: "x!2 ~@2",
})).gain(0.72)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@3 A ~@7 A ~@7 B ~@15 A ~@7 C ~@23 A ~@7 C ~@23 A ~@15 C ~@7 A ~@7 D ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@11 x ~@4", C: "~@5 x!3", D: "x!3 ~@5",
})).gain(0.8)

// drums · china
const china = s("cr").struct(`<
  ~@4 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@6 B ~
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.8)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@12 A ~@7 A ~@15 A ~@7 B@8 A ~@15 A ~@7 B@8 A ~@15 A ~@7 B@16 A ~@6 C ~
>`.pickRestart({
  A: "x", B: "x!4", C: "~@3 x",
})).gain(0.8)

stack(
  bass, bass_2, lead_4_chiff, brass_section, guitar_harmonics, distortion_guitar, kick, snare, mid_tom, open_hat,
  high_tom, china, ride_bell
)

More by Janet Jackson