Strudelify
Me & Mrs. Jones cover art

1998

Me & Mrs. Jones

Freddie Jackson

KeyE♭ majorTempo104 bpm
0:00/0:00
// Me & Mrs. Jones — Freddie Jackson
// 104 bpm, 6/8, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 151 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(104/3)

// 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, A@4 for four bars: edit a riff to change every repeat.

// bass · synth bass 2
const bass = note(`<
  ~ A@8 B C D E F G H I J K H L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH ~@2 B C D E F G H I J K H L M N O P
  Q R S T U V W X Y Z AA AB AC AD AE AF AG AH ~@2 B C D E F G H I J K AI L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF
  AG AH ~@2 A@30 AJ@2 ~@2
>`.pickRestart({
  A: "[eb1@6 ~@2 eb1 ~@11 ab1@16 ~@4 ab1@4 bb1@4]/2", B: "eb1 ~ g2@2 ~ eb1", C: "bb1@3 ~@3 eb2@2 ~@2 bb1@2",
  D: "eb1@3 ~@3 eb2@4 eb1@2, ~@20 eb2 ~@3", E: "bb1@3 ~@3 eb2@2 d2@2 bb1@2", F: "g1@3 ~@7 g1@2", G: "d2@2 ~@3 g1",
  H: "f1@2 ~@3 f1", I: "c2 b1", J: "bb1@3 ~@2 bb1", K: "bb1@2 ~ g2 f2 d2", L: "f1@2 ~ f1 c2 eb2", M: "bb1@2 ~@3 bb1",
  N: "bb1@2 ~ d2@3", O: "eb2@9 ~@11 eb1@4", P: "eb1@6 ~@2 eb1@3 ~ eb2@4 bb1@4 ab1@4", Q: "g1@3 ~ a1 bb1",
  R: "b1@3 ~ b1 ~@3 bb1@2 b1@2", S: "c2@4 c2 ~ eb1@3 ~ eb1@2", T: "c1@3 ~ c1 ~@3 f1@2 gb1@2", U: "g1@3 ~ g1 ~@5 bb1@2",
  V: "d2@3 ~ d2 ~@3 c2@2 gb1@2", W: "f1@7 ~ f1@2 ~@10 f1@4", X: "bb1@7 ~ bb1 ~@11 bb1@4", Y: "eb1@8 eb1 ~@11 eb1@4",
  Z: "eb1 ~ g1@4", AA: "c2@4 ~@4 c2@4 eb1@7 ~ eb1@4", AB: "g1@4 ~@4 g1@4 c1@4 c2@4 f1@3 ~", AC: "g1 ~ g1 bb1 ~ bb1",
  AD: "d2@4 ~@4 d2@4 g2@4 g2@4 gb2@3 ~", AE: "f2@3 ~ f2@3 ~ f2@3 ~ eb2@3 ~ eb2@3 ~ eb2@3 ~",
  AF: "d2@3 ~ d2@3 ~ d2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", AG: "bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~", AH: "bb1 ~@7",
  AI: "f1@5 ~@5 f1@2", AJ: "[eb1@6 ~@2 eb1 ~@11 ab1@16 ~@4 ab1@4 ~@4]/2",
})).s("gm_synth_bass_2").gain(0.4)

// chords · epiano2
const epiano2 = note(`<
  ~ A@8 B C D@2 ~@2 E ~ F ~@12 G H I J@2 ~@10 B C D@2 ~@2 E ~ K ~@12 G H I J@2 ~@10 B C D@2 ~@2 E ~ F ~@12 G H I J@2
  ~@10 A@32 L@2
>`.pickRestart({
  A: "[[g3,bb3,d4]@5 [ab3,c4,eb4]@7]/2", B: "~@2 [bb3,d4] ~@2 [bb3,d4]", C: "[c4,eb4] ~@2 [c4,eb4] ~@2",
  D: "[[d4,f4]@2 ~@4 [d4,f4]@4 [c4,eb4]@13 ~]/2", E: "~@12 [d5,g5]@4 f5 ~@7",
  F: "[d5,g5]@4 f5 ~@7 g5@4 f5 ~@7, ~@6 d5 ~@5", G: "~@5 [g4,bb4]", H: "[f4,ab4]@11 ~", I: "[bb3,d4,g4]@11 ~",
  J: "[[d4,g4,bb4]@2 ~]/2", K: "g5@4 f5 ~@7 g5@4 f5 ~@7, d5 ~@5 d5 ~@5", L: "[[g3,bb3,d4]@47 ~]/2",
})).s("gm_epiano2").gain(0.4).pan(0.7)

// chords · synth strings 2
const synth_strings_2 = note(`<
  ~ A@8 ~@18 B@2 C@2 D E F@2 G@2 C@2 ~@24 B@2 C@2 D E H@2 G@2 C@2 ~@24 B@2 C@2 D E H@2 G@2 C@2 ~@3 I ~@2 A@32 ~@2
>`.pickRestart({
  A: "[[g3,bb3,d4]@3 [ab3,c4,eb4]@5]/2", B: "[g3,c4,eb4]/2", C: "[bb3,d4,f4]/2", D: "[ab3,c4,eb4]", E: "[bb3,d4,g4]",
  F: "[[eb3,g3,bb3,d4]@2 [d4,g4]]/2", G: "[c4,eb4]/2", H: "[[g3,bb3,d4]@2 [d4,g4]]/2", I: "[d4,f4,bb4] ~@11",
})).s("gm_synth_strings_2").gain(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~ A@2 B@2 C@2 D@2 ~@108 E@2 F@2 G@2 D@2 H@2 I@6 J@2 I@14 ~@2>".pickRestart({
  A: "[[g3,bb3,d4]@5 [ab3,c4,eb4]@7]/2", B: "[g4@11 ~@9 [f3,eb4,g4]@28]/2", C: "[[g3,bb3,d4]@5 [f3,bb3,g4]@7]/2",
  D: "[[bb4,d5]@4 [g4,bb4] ~@5 [eb4,g4]@10 ~@4]/2", E: "[[g3,bb3,d4]@19 ~ [f3,ab3]@22 ~@6, ~@5 eb4@7]/2",
  F: "[[g3,d4]@19 ~ [f3,ab3,eb4]@26 ~@2, bb3@5 ~@11]/2", G: "[[g3,bb3,d4]@19 ~ [f3,ab3,eb4]@28]/2",
  H: "[[g3,d4]@19 ~ [f3,ab3]@22 ~@6, bb3@15 ~@5 eb4@27 ~]/2", I: "[[g3,bb3]@8 ~@2 [f3,ab3]@11 ~@3, d4@19 ~ eb4@27 ~]/2",
  J: "[[g3,d4]@19 ~ [f3,ab3]@24 ~@4, bb3@15 ~@5 eb4@27 ~]/2", // G5 Fm
})).s("gm_acoustic_guitar_steel").gain(0.4)

// chords · brass section
const brass_section = note("<~@34 A ~@4 B C@2 D ~@27 A ~@4 B C@2 D ~@27 A ~@4 B C@2 D ~@36>".pickRestart({
  A: "~ [g4,g5]@2", B: "[c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~",
  C: "[eb4,c5,eb5] ~ [eb4,c5,eb5] ~ [eb4,c5,eb5] ~ [eb4,c5,eb5] ~ [eb4,c5,eb5] ~ [eb4,c5,eb5] ~", D: "[f5,bb5] ~@5",
})).s("gm_brass_section").gain(0.62)

// chords · rock organ
const rock_organ = note("<~@4 A ~ B ~@27 C ~@35 C ~@35 C ~@44>".pickRestart({
  A: "~@6 f6 ~@5", B: "~@2 f6 ~ bb5 ~ f6 ~ f6 ~@3", C: "~@8 [d4,b4,g5]@15 ~",
})).s("gm_rock_organ").gain(0.4)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@4 A ~ B ~@2 C D E ~@3 F ~ G ~ H@2 I J K L M ~ N@2 O@2 P Q R@2 S@2 T@2 U@3 ~@3 C D V@2 ~@2 F ~ G ~ H@2 I J K L W@2
  N@2 O@2 P Q R@2 S@2 T@2 U@3 ~@3 C D E ~@3 F ~ G ~ H@2 I J K L W@2 N@2 O@2 P Q R@2 S@2 T@2 X@2 Y Z ~@7 B ~ A ~@5 B ~ A
  ~@18
>`.pickRestart({
  A: "~@6 f6 ~@5", B: "~@2 f6 ~ bb5 ~ f6 ~ f6 ~@3", C: "~@2 [bb3,d4] ~@2 [bb3,d4]", D: "[c4,eb4] ~@2 [c4,eb4] ~@2",
  E: "[d4,f4]@4 ~@8 [d4,f4]@8 [c4,eb4]@3 ~", F: "~@6 [d5,g5]@2 f5 ~@3", G: "[d5,g5]@2 f5 ~@3 [d5,g5]@2 f5 ~@3",
  H: "[eb4@35 ~ [c4,c5]@4 [eb4,eb5]@4 [f4,f5]@4]/2", I: "g5@4 bb5@4 g5@15 ~", J: "gb5@23 ~", K: "f5@23 ~",
  L: "d5 f5 eb5 d5 bb4 ab4", M: "g4 ~@7", N: "[[eb4,g4,c5]@47 ~]/2", O: "[bb4@47 ~]/2", P: "ab4@23 ~", Q: "c5@23 ~",
  R: "[g4@31 ~ b4@15 ~]/2", S: "[c5@9 g4!2 c5]/2", T: "[bb4@3 g6]/2", U: "[eb5,eb6]/3",
  V: "[[d4,f4]@4 ~@8 [d4,f4]@7 ~ [c4,eb4]@23 ~@5]/2", W: "[g4@47 ~]/2", X: "[eb6@47 ~]/2",
  Y: "bb3 c4 d4 eb4 f4 g4 a4 bb4 c5 d5 g5 ab5", Z: "bb5 ~@11",
})).s("gm_string_ensemble_1").gain(0.35).pan(0.3)

// other · alto sax
const alto_sax = note(`<
  ~@3 A@2 B ~@7 C@2 D@4 E@2 F G ~@2 H I J@2 ~@5 K ~@14 C@2 D@4 E@2 F G ~@2 L M N ~@2 O P@2 ~@12 Q@2 R@2 C@2 S@3 ~ E@2 F
  G ~@2 L M T@2 ~ U V W ~ K ~@44
>`.pickRestart({
  A: "[~@18 bb4@12 ab4@2 g4@4 f4@3 ~ f4@3 ~ f4@2 g4@2]/2", B: "bb3@19 ~@5", C: "[f4@47 ~]/2", D: "[eb4@25 ~@7]/4",
  E: "[eb4@9 c4 eb4 f4]/2", F: "g4@4 bb4@4 g4@15 ~", G: "gb4@23 ~", H: "g4@8 ~ g4 bb4 b4",
  I: "f5@3 ~ f5@2 ~@2 f5@2 ~@2 f5@4 g5@2 ~@6", J: "[c5@3 ~]/2", K: "~@8 [g4,b4]@15 ~", L: "g4@23 ~",
  M: "b4@11 ~ d5@11 ~", N: "c5@23 ~", O: "f4@3 bb4@5 ~ c4 eb4 f4",
  P: "[~ f4@2 ~@2 f4@2 ~@2 f4@2 ~@2 f4@2 ~@2 f4@2 ~ f4@15 ~@13]/2", Q: "[d5 eb5 d5@18 bb4@2 g4@2]/2",
  R: "[bb4@8 ~@4 bb4@7 ~ g4@15 ~@13]/2", S: "[eb4@71 ~]/3", T: "c5/2", U: "bb4@2 ~@3 bb4@8 ~@4 f4@2 ~@2 f4 ~@2",
  V: "f4@2 eb4 c4 ~@12 c4@2 eb4 ~ f4 ~@2 f4", W: "~ f4@2 ~@9",
})).s("gm_alto_sax").gain(0.27)

// chords · pad poly
const pad_poly = note("<~@16 A ~ B ~@33 A ~ B ~@33 A ~ B ~@60>".pickRestart({
  A: "[d4,g4]@3 ~ f4 ~@7 [d4,g4]@3 ~ f4 ~@7", B: "[d4,g4]@3 ~ f4 ~@19",
})).s("gm_pad_poly").gain(0.4).pan(0.8)

// other · celesta
const celesta = note("<~ A ~ A ~ B ~ A ~@5 C ~@34 D E ~@34 F G ~@65>".pickRestart({
  A: "d6@4 bb5 ~@15 eb6 ~@3", B: "d6@3 ~ bb5 ~@15 eb6 ~@3", C: "~ bb5 f5 g5 ~@2", D: "~@6 f6@2 eb6 ~ d6 ~",
  E: "d6@4 bb6 ~@19", F: "~@12 f6@2 ~@2 f6@2 ~@2 eb6 ~@3", G: "~@4 bb6 ~@19",
})).s("gm_celesta").gain(0.4).pan(0.2)

// other · piano
const piano = note("<~@25 A B@2 ~@33 C D E ~@33 F G H ~@51>".pickRestart({
  A: "~@18 c5@2 ~ eb5@2 ~",
  B: "[[eb5,gb5] g5@2 ~ [d5,g5]@2 ~@2 [d5,g5]@2 g5@2 ~ f5@2 ~ eb5 ~@4 eb5@2 ~@2 f5@2 ~ eb5@6 ~@14, ~@12 [g4,b4]@8 ~@3 c5@2 ~@23, ~@6 gb5 ~@5 eb5 ~@11]/2", // Ebm G5 G
  C: "~@4 g6 ~, ~@16 gb6 ~@7", D: "~@2 eb6 ~@11 gb6 g6@4 ~ gb6@2 f6 ~", E: "eb6 ~ c6 ~ eb6 ~@19",
  F: "~@16 c6@2 eb6@2 ~ [eb6,gb6] g6@2", G: "~@3 [c6,gb6] f6@2 ~@2 gb6 [c6,f6] ~@3 [c6,gb6] f6 ~@4 gb6 f6@2 eb6 ~",
  H: "~ gb6 g6@2 ~ eb6@2 c6 ~@16",
})).s("gm_piano").gain(0.4).pan(0.7)

// other · orchestra hit
const orchestra_hit = note("<~@122 A ~ B ~@5 A ~ B ~@18>".pickRestart({
  A: "~@2 f6 ~ bb5 ~ f6 ~ f6 ~@3", B: "~@6 f6 ~@5",
})).s("gm_orchestra_hit").gain(0.4)

// bass · fretless bass
const bass_2 = note("<~@149 A@2>".pickRestart({
  A: "[eb2@47 ~]/2",
})).s("gm_fretless_bass").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B A B A B A C A B A B A B A C A B A B A B A C A B A B D E A C A B F@3 E ~@2 A B A C A B A B A B A C A B A
  B A B A C A B A B D E A C A B F@3 E ~@2 A B A C A B A B A B A C A B A B A B A C A B A B D E A C A B F@3 E ~@2 A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@2
>`.pickRestart({
  A: "x ~ x ~@2 x", B: "x!2 ~", C: "x ~ x ~ x!2", D: "x ~@4 x", E: "x", F: "x!6",
})).gain(0.45)

// drums · rim
const rim = s("rim").struct("<~ A@25 ~ A@7 B A@4 ~@6 A@17 ~ A@7 B A@4 ~@6 A@17 ~ A@7 B A@4 ~@6 A@32 ~@2>".pickRestart({
  A: "~ x", B: "x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@26 A ~@6 A B ~@5 C D E ~@19 A ~@6 A B ~@5 C D E ~@19 A ~@6 A B ~@5 C D E ~@36
>`.pickRestart({
  A: "~ x", B: "~ x ~", C: "~@2 x!4", D: "x!6", E: "x",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~@3 A ~ A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~ x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C D A B C D C@3 E C@3 F C@3 E C@7 E C@4 G ~ C E C@2 H@3 I ~@2 C@3 E C@3 F C@3 E C@7 E C@4 G ~ C E C@2 H@3 I ~@2
  C@3 E C@3 F C@3 E C@7 E C@4 G ~ C E C@2 H@3 I ~@2 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C J ~@2
>`.pickRestart({
  A: "~@2 x ~ x!2", B: "~@2 x ~ x ~@3 x!3 ~", C: "~ x!2 ~ x!2", D: "~ x!2 ~@2 x", E: "~ x!2 ~ x ~",
  F: "~@4 x ~@2 x!2 ~@7 x ~@3 x ~@3", G: "~@10 x!2", H: "x!6", I: "x", J: "~ x!2 ~@3",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<[~@2 x] ~@43 [~@5 x] ~@35 [~@5 x] ~@35 [~@5 x] ~@34>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@5 x] ~@43 [~@3 x!2 ~] ~@35 [~@3 x!2 ~] ~@35 [~@3 x!2 ~] ~@34>").gain(0.4)

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

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 A ~@3 A ~ B@2 ~@10 A ~@6 C ~@9 D A ~@3 A ~ B@2 ~@10 A ~@6 C ~@9 D A ~@3 A ~ B@2 ~@10 A ~@6 C ~@9 D A ~@7 A ~@7
  A ~@7 A ~@7 A ~
>`.pickRestart({
  A: "x", B: "~@2 x ~@2 x", C: "~ x ~", D: "~@5 x",
})).gain(0.4)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~ A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@14 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@14 A
  B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@14 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@4
>`.pickRestart({
  A: "~@5 x", B: "~ x ~@4",
})).gain(0.35)

// drums · congas
const congas = s("conga:13").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
// … 36 more lines

More by Freddie Jackson