Strudelify
Escapade cover art

Rhythm Nation 1814

Escapade

Janet Jackson

KeyA♭ majorTempo115 bpm
0:00/0:00
// Escapade — Janet Jackson
// 115 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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.

// other · music box
const music_box = note(`<
  A B C ~ A B C ~ D ~@7 D ~@5 D ~@17 E F ~@2 E F ~@2 D ~@5 D ~@9 E F ~@2 E F G H D ~@3 D ~ D ~ D ~ D ~ D ~ D ~@9 D ~@3 D
  ~ D ~ I J K L M N O P D ~ D ~ D ~ D ~@10 Q ~@7
>`.pickRestart({
  A: "[eb6,eb7] ~ [eb6,eb7] ~ [db6,eb6,db7,eb7] ~ [db6,eb6,db7,eb7] ~ [c6,db6,c7,db7] ~ [c6,db6,c7,db7] ~ [ab5,c6,ab6,c7] ~ [ab5,c6,ab6,c7] ~", // Eb Dbsus2 Dbmaj7 Ab
  B: "[ab5,bb5,ab6,bb6] ~ [ab5,bb5,ab6,bb6] ~ [bb5,bb6] ~ [bb5,eb6,bb6,eb7] ~ [c6,eb6,c7,eb7] ~ [c6,eb6,c7,eb7] ~ [ab5,c6,eb6,ab6,c7,eb7] ~ [ab5,c6,ab6,c7] ~", // Absus2 Bb Eb5 Cm Ab
  C: "[ab5,ab6] ~ [ab5,ab6] ~@13", D: "[ab5,ab6] ~@15", E: "[eb6,eb7] ~@3 [db6,db7] ~@3 [c6,c7] ~@3 [ab5,ab6] ~@3",
  F: "[bb5,bb6] ~@5 [eb6,eb7] ~ [c6,c7] ~@3 [ab5,ab6] ~@3", G: "f6 ~@3 eb6 ~@3 db6 ~@3 c6 ~@3",
  H: "bb5 ~@3 ab5 ~@3 c6 ~@3 ab5 ~@3", I: "[f6,f7] ~@3 [eb6,eb7] ~@3 [c6,c7] ~ f5 ~ [ab5,ab6] ~@3",
  J: "[bb5,bb6] ~@5 [eb6,eb7] ~ [c6,c7] ~ f5 ~ [ab5,ab6] ~@3", K: "~@8 [ab5,ab6] ~ [f5,f6] ~ [ab5,ab6] ~@3",
  L: "[bb5,bb6] ~@3 [bb5,bb6] ~@3 [ab5,ab6] ~ [f5,f6] ~ [eb5,eb6] ~@3", // Bb Ab F Eb
  M: "[ab5,ab6] ~@3 [ab5,ab6] ~ ab5!2 [ab5,ab6]!2 ~ [ab5,ab6] ~@2 [bb5,bb6] ~", // Ab Bb
  N: "~@6 [eb6,eb7] ~ [c6,c7] ~@3 [ab5,ab6] ~@3", O: "[f5,f6] ~@3 [eb5,eb6] ~@3 [c5,c6] ~@3 [ab4,ab5] ~@3",
  P: "[bb4,bb5] ~@3 [ab4,ab5] ~@3 [c5,c6] ~@3 [ab4,ab5] ~@3", Q: "~@6 [ab5,ab6] ~@9",
})).s("gm_music_box").gain(0.53).pan(0.6)

// chords · synth brass 1 · "Brass"
const synth_brass_1 = note(`<
  A B C D E F G H ~@32 A B I J E F K L M N O N P N Q R S ~ S ~ S ~ S ~ A B C D E F G H M N O N P N Q R M N O N P N Q R
  ~@8 S ~ S ~ S ~ S ~ T U T V W@2 X Y M N O N P N Q R M N O N P N Q R M N O N P N Q R ~
>`.pickRestart({
  A: "[db3,ab4,eb5] ~ [f3,f4] ~ [ab3,ab4,db5] ~ [db4,f4] ~ [ab3,ab4,c5] ~ [f3,db4] ~ [db3,f4,ab4] ~ db4 ~", // Dbsus2 F Db5 Db Ab Db
  B: "eb3 ~ bb3 ~ eb4 ~ [bb4,eb5]@2 [f3,ab4,c5] ~ c4 ~ [f4,ab4]@4, [g4,bb4]@3 ~@5", // Eb5 Fm Gm
  C: "db3 ~ f3 ~ ab3 ~ eb4 ~ db4 ~ ab3 ~ db3 ~@3",
  D: "eb3 ~ bb3 ~ eb4 ~ [bb4,eb5]@2 [f3,ab4,c5] ~@5 f4 ~, [g4,bb4]@3 ~@5", // Eb5 Fm Gm
  E: "[db3,ab4,eb5] ~ [f3,f4] ~ [ab3,ab4,db5] ~ [eb4,f4] ~ [db4,ab4,c5] ~ [ab3,db4] ~ [db3,f4,ab4] ~@3", // Dbsus2 F Db5 Ebsus2 Dbmaj7 Db5 Db
  F: "eb3 ~ bb3 ~ eb4 ~ [bb4,eb5]@2 [f3,ab4,c5] ~ c4 ~ ab4@3 ~, [g4,bb4]@6 ~@6 f4 ~@3", // Eb5 Fm Gm
  G: "[ab4,bb4,f5]@2 gb4@2 [bb4,db5,eb5] ~ gb4 ~ [bb4,db5] ~ gb3 ~ [bb4,c5] ~ gb4 ~, gb3 ~@15", // Bb7 Eb7 Bbm Bbsus2
  H: "[eb3,eb4,ab4,bb4] ~ eb4 ~ ab4 ~ eb3 ~ [eb4,ab4,c5] ~ eb4 ~ ab4@3 ~", // Ebsus4 Ab
  I: "db3 ~ f3 ~ ab3 ~ eb4@2 db4 ~ ab3 ~ db3 ~@3", J: "eb3 ~ bb3 ~ [g4,bb4,eb5]@4 [f4,ab4,c5] ~ c4 ~ f4 ~@3",
  K: "gb3 ~ gb4@2 bb4 ~ gb4 ~ bb4 ~ gb3 ~ bb4 ~ gb4 ~", L: "eb3 ~ eb4 ~ ab4 ~ eb3 ~ eb4 ~ eb3 ~ ab4@3 ~",
  M: "~@4 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [bb3,db4,f4]@2 [bb3,db4,f4]@2 ~@2 [gb3,db4,f4,ab4] ~", // Ab Bbm Db
  N: "[gb3,db4,ab4] [gb3,c4,ab4] [ab3,eb4,ab4] ~@5", // Gbsus2 Ab7 Ab5
  O: "~ [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [bb3,db4,f4]@2 [bb3,db4,f4]@2 [gb3,db4,f4]@2 [gb3,db4,f4]@2", // Ab Bbm Gbmaj7
  P: "~ [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [bb3,db4,f4]@2 ~@4 [gb3,db4,f4] ~", // Ab Bbm Gbmaj7
  Q: "~@3 [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [bb3,db4,f4]@2 [bb3,db4,f4,ab4]@2 [gb3,db4,f4,ab4]@2 [gb3,db4,f4]@2, ~@14 ab4 ~", // Ab Bbm Bbm7 Db Gbmaj7
  R: "[gb3,db4,f4,ab4] [gb3,c4,eb4,ab4] [ab3,c4,eb4,ab4] ~@5", S: "[ab3,c4,eb4] ~@7 [ab3,db4,f4] ~@5 [gb3,db4,f4]@2",
  T: "[db4,eb4,f4,ab4]", U: "~ [eb4,g4,bb4] [c4,eb4,f4,ab4]@2", V: "[eb4,g4,bb4] [c4,eb4,f4,ab4]",
  W: "[[eb4,f5]@2 ~@2 [c5,eb5]@3 ~ [eb4,c5]@3 [eb4,c5]@2 ~ [g4,db5]@10 [ab4,eb5]@4 [f4,c5]@4]/2", // Ebsus2 Cm Gdim Ab5 F5
  X: "[ab4,bb4,f5]@2 gb4@2 [bb4,db5] ~ gb4@2 [bb4,c5]@2 gb3@2 ab4@2 eb4@2, gb3 ~@3 eb5@2 ~@10", // Bb7 Bbm Bbsus2
  Y: "[eb3,eb4,ab4,bb4] eb4 ab4 eb3 [eb4,ab4,c5] eb4 ab4@2", // Ebsus4 Ab
})).s("gm_synth_brass_1").gain(0.5).pan(0.9)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  A B A C A C D E ~@32 A F A F A F D E ~@16 A F A F A F D E ~@32 A F A F A F D E ~@25
>`.pickRestart({
  A: "~@3 eb4@5, db2, ~ f3@7, ~ ab3@3", B: "~@3 eb4 ~@2 ab3@2, eb2 f2, ~@2 g3@5 ~@9, ~ bb3 ~@2",
  C: "~@3 eb4 ~@2 ab3@2, eb2 f2, ~ g3@3 ~@4, ~ bb3 ~@2", D: "~@3 gb4@5, gb2, ~ gb3@7, ~ db4@3",
  E: "~@3 db4 c4@2 bb3@2, eb2, ~ ab4@7, ~ f4 ~@2", F: "~@3 ab3, eb2 f2, ~@2 g3@9 ~@5, ~@4 bb3@7 ~@5, ~@3 eb4@3 ~@2",
})).s("gm_electric_guitar_clean").gain(0.64).pan(0.1)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A B ~ C D E F G H ~ H ~ H ~ H ~ I@8 J ~ H ~ H ~ H ~@17 K@8 ~@16 K@16 ~@8 K@8 ~@8 K@20 ~@5
>`.pickRestart({
  A: "[ab4,eb5] ~ f4 ~ [ab4,db5] ~ f4 ~ [ab4,c5] ~ db4 ~ [f4,ab4] ~ db4 ~", // Ab5 Db5 Ab Fm
  B: "[g4,bb4]@6 [bb4,eb5]@2 [ab4,c5] ~@3 [f4,ab4]@4", C: "[g4,bb4]@6 [bb4,eb5]@2 [ab4,c5] ~@5 f4 ~",
  D: "[ab4,eb5] ~ f4 ~ [ab4,db5] ~ f4 ~ [ab4,c5] ~ db4 ~ [f4,ab4] ~@3", // Ab5 Db5 Ab Fm
  E: "[g4,bb4]@6 [bb4,eb5]@2 [ab4,c5] ~@3 ab4@3 ~", // Gm Eb5 Ab
  F: "[ab4,bb4,f5]@2 gb4@2 [bb4,db5,eb5] ~ gb4 ~ [bb4,db5] ~ gb3 ~ [bb4,c5] ~ gb4 ~, gb3 ~@15", // Bb7 Eb7 Bbm Bbsus2
  G: "[eb3,eb4,ab4,bb4] ~ eb4 ~ [g4,ab4] ~ eb3 ~ [eb4,ab4,c5] ~ eb4 ~ ab4@3 ~", // Ebsus4 Abmaj7 Ab
  H: "~@8 [bb3,db4,f4,ab4]@5 ~ [bb3,db4,f4,ab4] ~", // Bbm7
  I: "[~@8 [bb3,db4,f4,ab4]@5 ~ [bb3,db4,f4,ab4] ~@25 [bb3,db4,f4,ab4]@5 ~ [bb3,db4,f4,ab4] ~@17, ab6]/4", // Bbm7
  J: "[ab3,bb3,db4,f4] ~@7", K: "ab6/4",
})).s("gm_string_ensemble_1").gain(0.49).pan(0.8)

// bass · synth bass 1 · "Bass"
const bass = note(`<
  ~@15 A B C D E B F G H I ~ H E I J G H B C D E B K L H M N O P Q P R S B T H U B T D H B T H U B T D H M N O P Q P R S
  B T H U B T D H B T H U B T D V ~@49
>`.pickRestart({
  A: "~@14 ab1!2", B: "ab1 ~ eb1 ~ gb1 ~ eb1!2 ab1 ~ eb1 ~ gb1 ~ ab1 ~",
  C: "eb1 ~ gb1 ~ ab1 ~ eb1 ~ gb1 ~ eb1 ~ gb1 ~ ab1 ~", D: "ab1!2 eb1 ~ gb1 ~ ab1 ~ gb1 ~ eb1 ~ gb1 ~ ab1 ~",
  E: "eb1 ~ eb1 ~ gb1 ~ ab1 ~ gb1 ~ eb1 ~ gb1 ~ ab1 ~", F: "eb1 ~ gb1 ~ ab1 ~ eb1 ~ ab1 ~ eb1 ~ gb1 ~ eb1 ~",
  G: "ab1 ~ eb1 ~ gb1 ~ ab1 ~ eb1 ~ gb1 ~ ab1 ~ eb1 ~", H: "ab1 ~ eb1 ~ gb1 ~ ab1 ~ gb1 ~ eb1 ~ gb1 ~ ab1 ~",
  I: "ab1 ~ eb1 ~@13", J: "~@10 eb1 ~ f1 ~ eb1 ~", K: "ab1 ~ eb1 ~ gb1 ~ eb1 ~ ab1 ~ eb1 ~ gb1 ~ eb1!2",
  L: "ab1 ~ eb1 ~ gb1 ~ ab1!2 eb1 ~ gb1 ~ ab1 ~ eb1 ~", M: "db2 ~ f1 ~ ab1 ~ f1 ~ db2 ~ f1 ~ ab1 ~ db2 ~",
  N: "eb2 ~ eb2 ~ bb1 ~ eb2 ~ f2 ~ c2 ~ ab1 ~@3", O: "db2 ~ f1 ~ ab1 ~ eb2 ~ db2 ~ ab1 ~ f1 ~@3",
  P: "eb2 ~ eb2 ~ bb1 ~ eb2 ~ f2 ~ c2 ~ ab1 ~ f2 ~", Q: "db2 ~ f1 ~ ab1 ~ f1 ~ db2 ~ db2 ~@5",
  R: "db2 ~ f1 ~ ab1 ~ f1 ~ f2 ~ eb2 ~ db2 ~ eb2 ~", S: "eb2 ~ eb1 ~ bb1 ~ eb2 ~ eb2 ~ eb1 ~ bb1 ~ eb2 ~",
  T: "eb1 ~ gb1 ~ ab1 ~ eb1 ~ gb1 ~ eb1 ~ gb1 ~ ab1!2", U: "eb1 ~ eb1 ~ gb1 ~ ab1 ~ gb1 ab1 eb1 ~ gb1 ~ ab1 ~",
  V: "ab1 ~ eb1 ~ gb1 ~@11",
})).s("gm_synth_bass_1").gain(0.72)

// bass · slap bass 2 · "Bass"
const bass_2 = note("<~@87 A B C D E B F G H ~@41>".pickRestart({
  A: "~@6 ab1 ~ gb1 ~ eb1 ~ gb1 ~ ab1 ~", B: "ab1 ~ eb1 ~ gb1 ~ eb1!2 ab1 ~ eb1 ~ gb1 ~ ab1 ~",
  C: "eb1 ~@3 ab1 ~ eb1 ~ gb1 ~@2 bb1 c2!2 db2 eb2", D: "ab1 ~@3 gb1 ~ ab1 ~ gb1 ~ eb1 ~ gb1 ~ ab1 ~",
  E: "eb1 ~@3 gb1 ~@3 ab2!2 gb2 f2 eb2 db2 c2 bb1", F: "eb1 ~ gb1 ~ ab1 ~ eb1 ~ gb1 ~ eb1 ~ gb1 ~ ab1!2",
  G: "ab1!2 eb1 ~ gb1 ~ ab1 ~ gb1 ~ eb1 ~ gb1 ~ ab1 ~", H: "ab1 ~ eb1 ~ gb1 ~ ab1 ~ gb1 ~ eb1 ~ gb1 ~ ab1 ~",
})).s("gm_slap_bass_2").gain(0.65)

// bass · slap bass 1 · "Bass"
const bass_3 = note("<~@96 A B C D A B E C F G H I J I K L A B C M A M E C A N O P A B E C A B C Q R ~@4>".pickRestart({
  A: "ab1 ~ eb1 ~ gb1 ~ eb1!2 ab1 ~ eb1 ~ gb1 ~ ab1 ~", B: "eb1 ~ gb1 ~ ab1 ~ eb1 ~ gb1 ~ eb1 ~ gb1 ~ ab1!2",
  C: "ab1 ~ eb1 ~ gb1 ~ ab1 ~ gb1 ~ eb1 ~ gb1 ~ ab1 ~", D: "eb1 ~ eb1 ~ gb1 ~ ab1 ~ gb1 ab1 eb1 ~ gb1 ~ ab1 ~",
  E: "ab1!2 eb1 ~ gb1 ~ ab1 ~ gb1 ~ eb1 ~ gb1 ~ ab1 ~", F: "db2 ~ f1 ~ ab1 ~ f1 ~ db2 ~ f1 ~ ab1 ~ db2 ~",
  G: "eb2 ~ eb2 ~ bb1 ~ eb2 ~ f2 ~ c2 ~ ab1 ~@3", H: "db2 ~ f1 ~ ab1 ~ eb2 ~ db2 ~ ab1 ~ f1 ~@3",
  I: "eb2 ~ eb2 ~ bb1 ~ eb2 ~ f2 ~ c2 ~ ab1 ~ f2 ~", J: "db2 ~ f1 ~ ab1 ~ f1 ~ db2 ~ db2 ~@5",
  K: "db2 ~ f1 ~ ab1 ~ f1 ~ f2 ~ eb2 ~ db2 ~ eb2 ~", L: "eb2 ~ eb1 ~ bb1 ~ eb2 ~ eb2!2 eb1 ~ bb1 ~ eb2 ~",
  M: "eb1 ~ eb1 ~ gb1 ~ ab1 ~ gb1 ~ eb1 ~ ab1!2 bb1 c2", N: "eb1 ~ gb1 ~ ab1 ~ eb1 ~ gb1 ~ eb1 ~ bb1!2 c2 ~",
  O: "ab1 ~ eb1 ~ gb1 ~ ab1!2 gb1 ~ eb1 ~ gb1 ~ ab1 ~", P: "eb1 ~ eb1 ~ gb1 ~ ab1 ~ gb1 ab1 gb1!2 bb1@2 c2@2",
  Q: "eb1 ~ eb1 ~ gb1 ~ eb1 ~ ab1@2 ab1@2 bb1@2 c2@2", R: "ab1 ~@5 eb1 ~ ab1 ~ eb1 ~ gb1 ~@3",
})).s("gm_slap_bass_1").gain(0.72)

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

// drums · rim
const rim = s("rim").struct("<~@136 [~ x]>").gain(0.62)

// drums · snare
const snare = s("sd").struct("<~@8 [~ x ~ x]!87 [~@4 x ~@5 x!3 ~@3] [~ x ~ x]!37 ~@4>").gain(0.7)

// drums · clap
const clap = s("cp").struct("<~@16 [~@2 x!2 ~@2 x ~]!8 ~@8 [~@2 x!2 ~@2 x ~]!104 [~ x ~@2]>").gain(0.78)

// drums · low tom
const low_tom = s("lt").struct("<~@15 A ~@39 A ~@31 A B@8 ~@31 A ~@9>".pickRestart({
  A: "~@3 x", B: "~@5 x ~@3 x ~@6",
})).gain(0.62)

// drums · mid tom
const mid_tom = s("mt").struct("<~@71 [~@7 x] ~@16 [~@4 x!2 ~@2 x!2 ~@6]!7 [~@4 x!2 ~@2 x!2 ~@4 x ~] ~@41>").gain(0.62)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A@8 B A@7 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B C ~@3
>`.pickRestart({
  A: "x!4", B: "~ x!3", C: "x",
})).gain(0.7)

// drums · high tom
const high_tom = s("ht").struct("<~@71 [~@11 x!2 ~@3] ~@23 [~@11 x!2 ~@3] ~@41>").gain(0.7)

// drums · crash
const crash = s("cr").struct(`<
  ~@15 A B ~@7 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 C
  ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@4
>`.pickRestart({
  A: "~@11 x ~@4", B: "x", C: "x ~@2 x",
})).gain(0.78)

// drums · tambourine
const tambourine = s("tb").struct("<~@16 A@8 ~@8 A@40 B@16 A@24 B@21 C A@2 D>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "x!16", C: "x!5 ~ x ~@5 x ~@3", D: "~ x ~@2",
})).gain(0.7)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@94 [~@6 x!2 ~@2 x ~@5] ~@42>").gain(4.45)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct("<~@94 [~@3 x ~@8 x ~@3] ~@42>").gain(4.45)

stack(
  music_box, synth_brass_1, electric_guitar_clean, string_ensemble_1, bass, bass_2, bass_3, kick, rim, snare, clap,
  low_tom, mid_tom, open_hat, high_tom, crash, tambourine, agogo_bells, agogo_bells_2
)

More by Janet Jackson