Strudelify
When I Think Of You cover art

1986 · Control

When I Think Of You

Janet Jackson

KeyE majorTempo120 bpm
0:00/0:00
// When I Think Of You — Janet Jackson
// 120 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@4 A B C D E F G F G F G F H I E J E K E L M F G N G O G P G K G L G Q G L R ~@7 S T U V S T W X M F G N G O G P G K
  G L G Q G L E O E Y E O Z AA E I AB J E K E L M F G N G O G AC G K G L G Q G L AD AE AF AG S AH S AI S T S AJ R
>`.pickRestart({
  A: "a2@2 ~@2 a2!2 ~ a2 ~ a2 ~ a2 g#2@2 f#2@2", B: "e2@2 ~@2 e2!2 ~ e2 ~ e2 ~ e2 f#2@2 g#2@2",
  C: "a2@3 ~ a2!2 ~ a2 ~ a2 ~ a2 g#2@2 f#2@2", D: "e2@2 e3@2 e2@3 ~@9", E: "a2@2 ~@2 a2@2 ~ a2 ~ a2 ~ a2 g#2@2 f#2@2",
  F: "e2@3 ~ e2@2 ~ e2 ~ e2 ~ e2 f#2@2 g#2@2", G: "a2@3 ~ a2@2 ~ a2 ~ a2 ~ a2 g#2@2 f#2@2",
  H: "a2@2 ~@2 a2@2 ~ a2 ~ a2 ~@2 g#2@2 f#2@2, ~@11 a2@2 ~@3", I: "e2@3 ~ e2@2 ~ e2@2 e3 ~ e2 e2@2 e3@2",
  J: "e2@2 e3@2 e2@3 ~ e2!2 ~ e2 f#2@2 g#2@2", K: "e2@2 ~@2 e2@2 ~ e2@2 e3 ~ e2 e2@2 e3@2",
  L: "e2@2 e3@2 e2@2 ~ e2 ~ e2 ~ e2 f#2@2 g#2@2", M: "a2 ~@3 a2@2 ~ a2 ~ a2 ~ a2 g#2@2 f#2@2",
  N: "e2@2 e3@2 e2@2 ~@2 e2!2 ~ e2 f#2@2 g#2@2", O: "e2@2 ~@2 e2@2 ~ e2 ~ e2 ~ e2 f#2@2 g#2@2",
  P: "e2@2 e3@2 e2@2 ~@2 e2 ~ e2 ~ f#2@2 g#2@2, ~@12 e2 ~@3", Q: "e2@2 e3 ~ e2 ~@2 e2 ~ e2 ~ e2 f#2@2 g#2@2",
  R: "a2 ~@7", S: "a2@2 ~@11 a2 g#2 f#2", T: "e2@2 ~@11 e2 f#2 g#2", U: "a2@2 ~@12 g#2 f#2, ~@13 a2@2 ~",
  V: "e2@2 e3 ~ e2 ~ e2 e3@7 ~@2", W: "a2@3 ~@10 a2 g#2 f#2", X: "e2@2 e3 ~ e2 ~ e2 e3@4 ~@5", Y: "e2 e3 e2 ~@5",
  Z: "a2@2 ~@2 a2@2 ~ a2 ~ a2 ~ a2 g#2@2 f#2 ~", AA: "e2@2 e3@2 e2@2 ~ e2 ~ e2 ~ e2 f#2@2 g#2 ~",
  AB: "a2@2 ~@2 a2@2 ~ a2@2 a2 ~ a2 g#2@2 f#2@2", AC: "e2@2 e3@2 e2@2 ~@2 e2 ~ e2 ~ f#2@2 g#2@2",
  AD: "a2@2 ~@13 f#2, ~@13 a2@2 ~, ~@7 g#2", AE: "e2@3 ~@10 e2 f#2 g#2", AF: "a2@2 ~@12 a2 f#2",
  AG: "e2@2 e3 ~ e2 ~ e2 e3@5 ~@4", AH: "e2@2 ~@12 f#2 g#2", AI: "e2 ~ e3 ~ e2 ~ e2 e3@5 ~@4",
  AJ: "e2 ~ e3 ~ e2 ~ e2 e3@6 ~@3",
})).s("gm_acoustic_bass").gain(0.72)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B A C A C A D A B A C A C A D E F G H I D J K ~@16 A B L B A B A D ~@32 E F G H I D J K ~@16 A B L B A B A ~@6
>`.pickRestart({
  A: "[b4,c#5,e5]@15 ~", B: "[a4,b4,e5]@7 ~", C: "[a4,b4,e5]@15 ~", D: "[a4,b4,e5]@13 ~@3", E: "[b4,c#5,e5]@7 ~@9",
  F: "[a4,b4,e5] ~", G: "[f#4,b4,c#5,e5]@5 ~ c#4@2", H: "d4 f#4 e4 d4, [a4,e5]@3 ~, b4@5 ~@3",
  I: "[e4,b4,c#5]@3 ~, e5@5 ~@3", J: "f#4@11 ~ d4@4, [b4,c#5,e5]@15 ~", K: "[e4,a4,b4,e5]@13 ~@3", L: "[b4,c#5,e5]@7 ~",
})).s("gm_piano").gain(0.61)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@16 A ~ B ~ C ~ D ~@9 E ~ F ~ C ~ G ~@25 E ~ F ~ C ~ G ~@9 H@2 I ~ J@2 K ~@9 E ~ L ~ C ~ F ~@14
>`.pickRestart({
  A: "[b4,b5]@2 ~@10 [b4,b5]!4", B: "~@2 [b4,b5]!3 b4@2 ~ [b4,b5]!3 b4@2 ~@3, ~@5 b5 ~@5 b5 ~@4",
  C: "b4@2 ~@10 [b4,b5]!4, b5 ~@15", D: "~@2 [b4,b5]!3 b5 b4 ~ [b4,b5]!3 b4@2 ~@3, ~@11 b5 ~@4",
  E: "[b4,b5] ~@11 [b4,b5]!4", F: "~@2 [b4,b5]!4 ~@2 b4 [b4,b5]!3 ~@4", G: "~@2 [b4,b5]!4 ~@2 [b4,b5]!4 ~@4",
  H: "[[b4,b5]@2 ~@10 [b4,b5]!3 [b4,b5]@2 ~@15]/2", I: "~@2 [b4,b5]!4 ~@2 [b4,b5]!3 b4@2 ~@3, ~@11 b5 ~@4",
  J: "[b4@2 ~@10 [b4,b5]!3 b5@2 ~@15, b5 ~@14 b4 ~@16]/2", // B
  K: "~@2 [b4,b5]!3 ~ [b4,b5] ~ [b4,b5]!3 b4@2 ~@3, ~@11 b5 ~@4", L: "~@2 [b4,b5]!3 b4 b5 ~ b4 [b4,b5]!2 [b4,b5]@2 ~@3",
})).s("gm_brass_section").gain(0.69)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@17 A ~ A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@9 A ~ A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@13
>`.pickRestart({
  A: "~@7 e4 ~ e4 c#4 e4 f#4 e4 c#4 ~",
})).s("gm_electric_guitar_muted").gain(0.66)

// other · vibraphone
const vibraphone = note("<~@95 A B C D E F@2 G H I ~@12>".pickRestart({
  A: "~@15 g#4", B: "g#4 ~ f#4 ~ e4 ~ e4!2 ~@6 g#4!2", C: "g#4 ~ f#4 ~ e4 ~ e4!2 ~@7 g#4",
  D: "g#4 ~ f#4 ~ e4 ~ e4!2 ~ f#4 ~ f#4!2 ~ f#4 ~", E: "g#4 ~ g#4 ~ g#4 ~ g#4 a4 ~ a4 ~ a4 b4 ~ a4 ~",
  F: "g#4 ~ f#4 ~ f#4 ~ e4!2 ~@5 f#4!2 g#4", G: "g#4 ~ f#4 ~@3 e4 ~ e4 ~@5 f#4 ~",
  H: "f#4 ~ g#4 ~ g#4 ~ g#4 a4 ~ a4 ~ a4 b4 ~ c#5 ~", I: "g#4 ~@15",
})).s("gm_vibraphone").gain(0.6)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@24 A B A B A B A C D B A C A B A C ~@16 A B A B A B A C D B A C A B A E F ~@15 A B A B A B A C D B A C A B A C ~@13
>`.pickRestart({
  A: "[c#4,e4,g#4]@15 ~", B: "[d4,f#4,a4]@15 ~", C: "[d4,f#4,a4]@7 ~", D: "[c#4,e4,g#4]@7 ~", E: "[d4,f#4,a4]@7 c#5",
  F: "g#4@5 ~@11",
})).s("gm_synth_brass_1").gain(0.53)

// other · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note("<~@16 A@2 B ~@61 A@2 B ~@34>".pickRestart({
  A: "[b5@3 ~@9 b5!3 b5@4 ~@13]/2", B: "~@2 b5!3 b5@2 ~ b5!3 b5@2 ~@3",
})).s("gm_synth_brass_2").gain(0.66)

// chords · kalimba
const kalimba = note(`<
  ~@12 A B A B C D A E A B A B ~@8 F B A B G H A B ~@24 F B A B G H A B ~@8 C D A E A B A B ~@8 F B A B G H A B ~@13
>`.pickRestart({
  A: "~@2 [c#5,e5,g#5] ~@2 [c#5,e5,g#5] ~@2 [c#5,e5,g#5] ~@2 [c#5,e5,g#5] ~@2 [c#5,e5,g#5] ~", // C#m
  B: "~@2 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~", // D
  C: "~@2 [c#5,e5,g#5] ~@3 [c#5,e5,g#5] ~ [c#5,e5,g#5] ~@2 [c#5,e5,g#5] ~@2 [c#5,e5,g#5] ~", // C#m
  D: "~@2 [d5,f#5,a5] ~@2 a5 [d5,f#5] ~ [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~", // D
  E: "~@2 [d5,f#5,a5] ~@3 [d5,f#5,a5] ~ [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~", // D
  F: "~@2 [c#5,e5,g#5] ~@2 g#5 [c#5,e5] ~ [c#5,e5,g#5] ~@2 [c#5,e5,g#5] ~@2 [c#5,e5,g#5] ~", // C#m
  G: "~@2 [c#5,e5,g#5] ~@2 [c#5,g#5] e5 ~ [c#5,e5,g#5] ~@2 [c#5,e5,g#5] ~@2 [c#5,e5,g#5] ~", // C#m C#5 C#m
  H: "~@2 [d5,f#5,a5] ~@2 [f#5,a5] d5 ~ [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~", // D F#m D
})).s("gm_kalimba").gain(0.59)

// drums · kick
const kick = s("bd").struct("<~@8 A@32 ~@16 A@16 ~@4 B@3 C D A@23 ~@7 E@5 F>".pickRestart({
  A: "x!2", B: "x ~@7 x!4 ~@4", C: "x!4", D: "x!2 ~@6 x ~@7", E: "~@2 x ~@2 x ~@2 x ~@7", F: "~ x ~@6",
})).gain(0.7)

// drums · snare
const snare = s("sd").struct("<~@8 A@40 ~@4 A@20 ~@4 B@3 C D A@35 ~>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x ~@4 x ~ x ~", C: "~@2 x ~ x ~@2 x ~ x ~ x ~@4", D: "x!2 ~ x",
})).gain(0.7)

// drums · clap
const clap = s("cp").struct("<~@8 A@32 ~@8 B C D E F G H I A@16 ~@8 A@24 ~@13>".pickRestart({
  A: "~ x ~ x", B: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", C: "x ~@2 x!3 ~@2 x!2 ~@2 x!2 ~ x", D: "x ~@3 x ~@3 x ~@3 x!2 ~ x",
  E: "x ~@3 x!2 ~@2 x!2 ~ x!3 ~ x", F: "x ~@3 x ~@3 x!2 ~@2 x ~@3", G: "x ~@3 x ~@3 x ~@3 x!2 ~@2",
  H: "x ~@3 x!2 ~@2 x ~@3 x!2 ~@2", I: "x!2 ~@2 x ~@3 x ~@3 x!2 ~@2",
})).gain(0.7)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@48 A B C D E F G H ~@61>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x!2 ~@3 x!2 ~@2 x!2 ~@2 x ~", C: "~ x!3 ~ x!3 ~ x!3 ~@2 x ~",
  D: "~ x!3 ~@2 x!2 ~@2 x ~@3 x ~", E: "~ x!3 ~ x!3 ~@2 x!2 ~ x!3", F: "~ x!3 ~ x!3 ~ x!3 ~@2 x!2",
  G: "~ x!3 ~@2 x!2 ~ x!3 ~@2 x!2", H: "~@2 x!2 ~ x!3 ~ x!3 ~@2 x ~",
})).gain(0.39)

// drums · low tom
const low_tom = s("lt").struct("<~@43 [~@3 x] ~@3 [~@3 x] ~@59 [~@11 x!2 ~@3] ~@9>").gain(0.7)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@8 A@16 ~@16 B@7 C ~@4 A@4 ~@16 B@3 D B@3 D A@24 B@12 D>".pickRestart({
  A: "~ x ~ x", B: "x!4", C: "~ x!3", D: "x",
})).gain(0.7)

// drums · mid tom
const mid_tom = s("mt").struct("<~@43 A ~@3 B ~@31 C ~@27 B ~@9>".pickRestart({
  A: "~ x", B: "~@8 x!2 ~@6", C: "~@7 x",
})).gain(0.78)

// drums · high tom
const high_tom = s("ht").struct("<~@48 [~@3 x ~@4] [~@6 x ~@4 x ~@4]!7 ~@23 [~@3 x] ~@37>").gain(0.78)

// drums · crash
const crash = s("cr").struct("<~@48 [~@2 x ~ x ~@2 x]!8 ~@24 x ~@36>").gain(0.78)

// drums · ride
const ride = s("rd").struct("<~@48 [~@11 x ~ x ~@2] [~@13 x ~@2]!7 ~@61>").gain(0.78)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@48
  [~@2 x ~@4 x ~ x ~ x!2 ~@3]
  [~@2 x ~@4 x ~ x ~@2 x ~@3]
  [~@2 x ~@4 x ~ x ~ x!2 ~@3]!5
  [~@2 x ~@4 x ~ x ~@2 x ~@3]
  ~@61
>`).gain(0.7)

// drums · congas
const congas = s("conga:18").struct("<~@48 [~@2 x ~@4 x]!8 ~@61>").gain(2.23)

stack(
  bass, piano, brass_section, electric_guitar_muted, vibraphone, synth_brass_1, synth_brass_2, kalimba, kick, snare,
  clap, clap_soft, low_tom, pedal_hat, mid_tom, high_tom, crash, ride, cowbell, congas
)

More by Janet Jackson