Strudelify

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: edit a riff to change every repeat.

// bass · synth bass 2
const bass = note(`<
  ~ A@2 B@4 C@2 D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK ~@2 D E F G H I J K L M
  AL O P Q AM S T U V W X Y AN AA AB AC AD AE AF AG AO AI AJ AK ~@2 D E F G H I J K L M AL O P Q R S T U V W X Y AN AA
  AB AC AD AE AF AG AO AI AJ AK ~@2 AP@2 B@4 AQ@2 AP@2 B@4 AR@2 A@2 B@4 AS@2 A@2 B@4 AT@2 ~@2
>`.pickRestart({
  A: "[eb1@7 ~ eb1 ~@11 ab1@15 ~@5 ab1@4 bb1@4]/2", B: "[eb1@6 ~@2 eb1 ~@11 ab1@16 ~@4 ab1@4 bb1@4]/2",
  C: "[eb1@8 eb1 ~@11 ab1@16 ~@4 ab1@4 bb1@4]/2", D: "eb1 ~ g2@2 ~ eb1", E: "bb1@3 ~@3 eb2@2 ~@2 bb1@2",
  F: "eb1@3 ~@3 eb2@4 eb1@2, ~@20 eb2 ~@3", G: "bb1@3 ~@3 eb2@2 d2@2 bb1@2", H: "g1@3 ~@7 g1@2", I: "d2@2 ~@3 g1",
  J: "f1@2 ~@3 f1", K: "c2 b1", L: "bb1@3 ~@2 bb1", M: "bb1@2 ~ g2 f2 d2", N: "f1@9 ~@11 f1@4", O: "f1@2 ~ f1 c2 eb2",
  P: "bb1@2 ~@3 bb1", Q: "bb1@2 ~ d2@3", R: "eb2@9 ~@11 eb1@4", S: "eb1@6 ~@2 eb1@3 ~ eb2@4 bb1@4 ab1@4",
  T: "g1@3 ~ a1 bb1", U: "b1@3 ~ b1 ~@3 bb1@2 b1@2", V: "c2@4 c2 ~ eb1@3 ~ eb1@2", W: "c1@3 ~ c1 ~@3 f1@2 gb1@2",
  X: "g1@3 ~ g1 ~@5 bb1@2", Y: "d2@3 ~ d2 ~@3 c2@2 gb1@2", Z: "f1@4 f1 ~@5 f1@2", AA: "bb1@7 ~ bb1 ~@11 bb1@4",
  AB: "eb1@8 eb1 ~@11 eb1@4", AC: "eb1 ~ g1@4", AD: "c2@4 ~@4 c2@4 eb1@7 ~ eb1@4", AE: "g1@4 ~@4 g1@4 c1@4 c2@4 f1@3 ~",
  AF: "g1 ~ g1 bb1 ~ bb1", AG: "d2@4 ~@4 d2@4 g2@4 g2@4 gb2@3 ~", AH: "f2@3 ~ f2@3 ~ f2@4 eb2@3 ~ eb2@3 ~ eb2@3 ~",
  AI: "d2@3 ~ d2@3 ~ d2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", AJ: "bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~", AK: "bb1 ~@7",
  AL: "f1@5 ~@5 f1@2", AM: "eb2@5 ~@5 eb1@2", AN: "f1@7 ~ f1@2 ~@10 f1@4",
  AO: "f2@3 ~ f2@3 ~ f2@3 ~ eb2@3 ~ eb2@3 ~ eb2@3 ~", AP: "[eb1@7 ~ eb1 ~@11 ab1@16 ~@4 ab1@4 bb1@4]/2",
  AQ: "[eb1@7 ~ eb1 ~@11 ab1@17 ~@3 ab1@4 bb1@4]/2", AR: "[eb1@7 ~ eb1 ~@11 ab1@18 ~@2 ab1@4 bb1@4]/2",
  AS: "[eb1@8 eb1 ~@11 ab1@17 ~@3 ab1@4 bb1@4]/2", AT: "[eb1@7 ~ eb1 ~@11 ab1@17 ~@3 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 K ~ L ~@12 G H I J@2 ~@10 B C D@2 ~@2 E ~ M ~@12 G H I J@2
  ~@10 A@32 N@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: "~@12 d5@4 f5 ~@7, ~@6 g5 ~@5", L: "g5@4 f5 ~@7 g5@4 f5 ~@7, d5 ~@5 d5 ~@5",
  M: "d5@4 f5 ~@7 g5@4 f5 ~@7, g5@3 ~@9 d5@2 ~@10", N: "[[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 K@4 I@8 L@2 ~@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", K: "[[g3,bb3]@8 ~@2 [f3,ab3]@11 ~@3, d4@19 ~ eb4@28]/2",
  L: "[[g3,bb3]@16 ~@4 [f3,ab3]@23 ~@5, d4@19 ~ eb4@27 ~]/2", // Gm Fm
})).s("gm_acoustic_guitar_steel").gain(0.4)

// chords · brass section
const brass_section = note("<~@34 A ~@4 B C@2 D ~@27 E ~@4 B C@2 D ~@27 E ~@4 B C@2 D ~@36>".pickRestart({
  A: "~@8 [g4,g5]@15 ~", 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",
  E: "~ [g4,g5]@2", // G
})).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 X@2 S@2 T@2 U@3 ~@3 C D Y ~@3 F ~ G ~ H@2 I J K L W@2 N@2 O@2 P Q X@2 Z@2 AA@2 AB@2 AC AD ~@7 AE ~ A ~@5
  AF ~ 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@32 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: "[g4@31 ~ b4@15 ~]/2",
  Y: "[d4,f4] ~@2 [d4,f4]@2 [c4,eb4]", Z: "[c5@35 ~ g4@4 g4@4 c5@4]/2", AA: "[bb4@35 ~ g6@12]/2", AB: "[eb6@47 ~]/2",
  AC: "bb3 c4 d4 eb4 f4 g4 a4 bb4 c5 d5 g5 ab5", AD: "bb5 ~@11", AE: "~@4 f6@2 ~@2 bb5 ~@3 f6 ~@3 f6 ~@7",
  AF: "~@4 f6@2 ~@2 bb5@2 ~@2 f6@2 ~@2 f6 ~@7",
})).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 L ~@2 M N O ~@2 P Q@2 ~@12 R@2 S@2 C@2 T@3 ~ E@2 F
  G ~@2 M N U@2 ~ V W X ~ 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: "gb4", M: "g4@23 ~",
  N: "b4@11 ~ d5@11 ~", O: "c5@23 ~", P: "f4@3 bb4@5 ~ c4 eb4 f4",
  Q: "[~ f4@2 ~@2 f4@2 ~@2 f4@2 ~@2 f4@2 ~@2 f4@2 ~ f4@15 ~@13]/2", R: "[d5 eb5 d5@18 bb4@2 g4@2]/2",
  S: "[bb4@8 ~@4 bb4@7 ~ g4@15 ~@13]/2", T: "[eb4@71 ~]/3", U: "c5/2", V: "bb4@2 ~@3 bb4@8 ~@4 f4@2 ~@2 f4 ~@2",
  W: "f4@2 eb4 c4 ~@12 c4@2 eb4 ~ f4 ~@2 f4", X: "~ 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 ~ B ~@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
// … 45 more lines

More by Freddie Jackson