Strudelify

Is She Really Going Out With Him

Joe Jackson

KeyB♭ majorTempo116 bpm
0:00/0:00
// Is She Really Going Out With Him — Joe Jackson
// 116 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 "Muted Guitar Delay" electric guitar muted (copy of ch 5 "Muted Guitar" electric guitar muted, 0.083 beats late); ch 8 "Guitar Delay" overdriven guitar (copy of ch 6 "Guitar" overdriven guitar, 0.083 beats late)
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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.

// chords · piano
const piano = note("<A B C D ~@60 E F G H I F J H E F K L M H N O ~@23>".pickRestart({
  A: "~@3 [d3,a3,d4,f4]@3 [d3,a3,d4,f4] ~", B: "[eb3,bb3,eb4,g4]@5 ~ [eb3,bb3,eb4,g4]@6 [eb3,bb3,eb4,g4]@2 ~@2",
  C: "[f3,bb3,eb4,g4]@5 ~ [f3,bb3,eb4,g4]@5 ~ [f3,bb3,eb4,g4]@2 ~@2", // Eb
  D: "[eb4,g4,d5]@4 [eb4,g4,c5]@3 ~ [eb4,g4,bb4]@3 ~ [eb4,g4,c5]@4", E: "[d2,d3,d4,f4,a4]@15 ~",
  F: "[eb2,eb3,eb4,g4,bb4]@15 ~", G: "[f2,f3,f4,g4,bb4]@15 ~",
  H: "[f4,a4,c5]@5 ~ [a4,c5,f5]@5 ~ [f4,a4,c5]@3 ~, [f2,f3]@15 ~", I: "[d2,d3,d4,f4,a4]@15 ~, c3 ~@15",
  J: "[f2,f3,f4,g4,bb4]@11 ~ [f2,f3,f4,g4,bb4]@3 ~", K: "[f2,f3,f4,g4,bb4]@12 [f2,f3,f4,g4,bb4]@3 ~",
  L: "[f4,a4,c5]@5 ~ [a4,c5,f5]@5 ~ [f2,f3,f4,a4,c5]@4, [f2,f3]@3 ~", M: "[eb2,eb3,g4,bb4]@11 ~ [eb2,eb3,g4,bb4]@3 ~",
  N: "[eb2,eb3,g4,bb4]@5 ~ [eb2,eb3,g4,bb4]@7 ~@3", O: "[d5,d6]@4 [c5,c6]@4 bb5@3 bb4 [c5,c6]@3 ~",
})).s("gm_piano").gain(0.28)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B C D E F G H E I J H G K J H J I J H E I J L M N O P Q R S T E F G H E I J H G K J H J I J K E I J L M N O P Q R S
  T E F G L U V W X Y Z AA AB AC AD AE AF AG AH AI AJ E I J L M N O P Q R S T E F E F E F E F E AK AL
>`.pickRestart({
  A: "d2@5 ~ d2@5 ~ a2@2 d2@2", B: "eb2@5 ~ eb2@6 bb2@2 eb2@2", C: "f2@5 ~ f2@3 ~ f2@2 c3@2 f2@2",
  D: "d3@2 c3@2 f2 g2 bb2 f2", E: "bb2@2 ~@4 bb2@2 f2@3 ~@3 g2@2", F: "ab2@3 ~@3 ab2@2 eb2@3 ~@3 f2@2",
  G: "bb2@3 ~@3 bb2@2 f2@3 ~@3 g2@2", H: "ab2@3 ~@3 ab2@2 eb2@2 ~@4 f2@2", I: "ab2@2 ~@4 ab2@2 eb2@3 ~@3 f2@2",
  J: "bb2 ~@2 bb2 f2 ~@2 g2", K: "ab2 ~@2 ab2 eb2 ~@2 f2", L: "ab2@3 ~@3 ab2@2 eb2@2 eb2 ~ eb2 ~ eb2 ~",
  M: "eb2@5 ~ eb2 ~ eb2@6 ~@2", N: "bb1@5 ~ bb2 ~ bb2@3 ~ g2@2 f2@2", O: "eb2@5 ~ eb2 ~ eb2@4 bb2@2 f2@2",
  P: "d2@5 ~ d2@2 g2@4 f2@3 ~", Q: "eb2@5 ~ eb2 ~ eb2@6 f2@2", R: "g1@4 ~@2 g1 ~ g1@4 bb1@4", S: "eb2", T: "f2@15 ~",
  U: "d2@5 ~ d2@3 ~ d2@2 a2@2 d2@2", V: "eb2@5 ~ eb2@3 ~ eb2@2 bb2@2 eb2 ~", W: "f2@5 ~ f2@3 ~ f2@2 c3@2 f2 ~",
  X: "g2@5 ~ g2@3 ~ g2@3 ~ g2@2", Y: "d2@4 ~@2 d2@3 ~ d2@2 a2@2 d2 ~", Z: "eb2@4 ~@2 eb2@3 ~ bb2@2 ~@2 bb2@2",
  AA: "f2@5 ~ f2@3 ~ c3@2 f3@2 c3@2", AB: "g2@4 ~@2 g2@3 ~ g2@3 ~ g2@2", AC: "d2@4 ~@2 d2@3 ~ d2@2 a2@2 d2@2",
  AD: "eb2@4 ~@2 eb2@3 ~ eb2@2 bb2@2 eb2 ~", AE: "f2@2 f2@3 ~ f2@3 ~ f2@3 ~ f2@2", AF: "g2@2 g2@3 ~ g2@3 ~ g2@3 ~@3",
  AG: "f2@4 ~@2 f2@4 g3@2 f3@3 ~", AH: "g2@4 ~@2 g2@4 a3 ~ g3 ~ f3 ~", AI: "f2@2 ~ f2@2 c3 f3 c3",
  AJ: "d3@4 c3@3 ~ f2@2 g2@2 bb2@2 g2@2", AK: "ab2@3 ~@3 ab2@2 eb2@3 ~@5", AL: "~@4 bb2 ~@3",
})).s("gm_electric_bass_pick").gain(0.29)

// chords · electric guitar muted · "Muted Guitar"
const electric_guitar_muted = note(`<
  ~@4 A B A B A B A C A B A B A B A C A B A B ~@8 A B A B A B A C A B A B A B A C A B A B ~@8 A B A B ~@16 A B A B ~@8 A
  B A B A B A B A C D
>`.pickRestart({
  A: "~@4 [bb3,d4] ~@7 [f3,c4] ~@3", B: "~@4 [ab3,c4] ~@5 eb4@4 [bb3,eb4] ~, ~@5 bb3 ~@2", C: "~@4 [ab3,c4] ~@11",
  D: "~@4 f3 ~@3",
})).s("gm_electric_guitar_muted").gain(0.36).pan(0.2)

// chords · overdriven guitar · "Guitar"
const overdriven_guitar = note(`<
  A B C D ~@7 E ~@7 E ~@3 F G H@2 I G J K L ~@7 E ~@7 E ~@3 F G H@2 I G J K L ~@3 M N O P Q R S T U V W X Y Z AA AB AC
  ~@3 F G H@2 I G J K L ~@11
>`.pickRestart({
  A: "[a3,d4]@6 [a3,d4,f4]@5 ~ [d4,f4]@2 ~@2, ~@3 d3@5, ~@11 [a3,d4]@2 ~@3", // D5 Dm D5
  B: "[eb3,bb3,eb4]@6 [bb3,eb4]@5 eb4 [bb3,eb4,g4]@2 ~@2, ~@3 eb3@4 ~", // Eb5 Eb
  C: "[f3,bb3,eb4]@3 [f3,eb4]@3 [f3,eb4,g4] ~, g4@3 ~, ~@3 bb3@4 ~", // Ebsus2 F7 Cm
  D: "[eb4,g4,d5]@3 ~ [eb4,g4,c5]@3 ~@2 bb4@3 [eb4,g4,c5]@4, ~@8 [eb4,g4]@3 ~@5", E: "~@5 [bb4,g5] [eb5,g5] ~",
  F: "~@5 [eb3,bb3]!2 [eb3,bb3,eb4]", G: "[eb3,bb3,eb4,g4]@7 ~",
  H: "[[bb2,f3,bb3]@5 ~ [bb2,f3,bb3] ~ [bb2,f3,bb3]@5 ~ eb3!2 eb3@12 [eb3,bb3,eb4] ~@3, ~@7 bb3@7 ~@2, ~@15 eb4@13 ~@4]/2", // Bb5 Eb5
  I: "[d3,a3,d4,f4,a4]@5 ~@3 [g2,d3,g3,bb3,d4]@2 ~@2 [f2,c3,f3,a3,c4,f4] ~@3", // Dm Gm F
  J: "[bb2,f3,bb3]@2 ~ [g2,d3] [g2,d3,d4]@3 ~, ~@3 g3@4 ~, ~@6 bb3@5 ~@5", K: "[eb3,bb3,eb4], g4@3 ~",
  L: "[e3,b3,e4] ~@15, f3@15 ~, [c4,f4]@13 ~@3", M: "~@10 [eb3,bb3]@2 [eb3,bb3]@2 [eb3,bb3] ~",
  N: "[d3,a3,d4,f4]@5 ~ [d3,a3,d4,f4]@6 [d3,a3,d4,f4,ab4,a4]@2 ~@2", // Dm
  O: "[eb3,bb3,eb4,g4]@5 ~ [eb3,bb3,eb4,g4]@5 ~ [eb3,bb3,eb4,g4]@2 ~@2", // Eb
  P: "[f3,bb3,eb4,g4]@2 ~ [f3,bb3,eb4,g4]@3 [c3,f3,bb3,eb4,g4,c5] ~", // Eb Cm7
  Q: "[f3,c4,f4,a4]@5 ~ [f3,c4,f4,a4]@5 ~ d5 f4@3, [bb2,b2] ~@5 d5 ~@5 [f3,c4,a4]@3 ~", // F Bmaj7 F
  R: "[d3,a3,d4,f4]@5 ~ [d3,d4,f4]@6 [d3,d4,f4]@2 ~@2, ~@6 a3@9 ~", // Dm
  S: "[eb3,bb3,eb4,g4]@5 ~ [eb3,bb3,eb4,g4]@6 [eb3,bb3,eb4,g4]@2 ~@2, ab2 ~@5 [ab3,c5] ~@9", // Eb Ab
  T: "[f3,bb3,eb4,g4]@5 ~ [f3,bb3,eb4,g4]@6 [f3,bb3,eb4,g4,c5]@2 ~@2, ~@6 g2 ~@9", // Eb Cm7
  U: "[f3,c4,f4,a4]@5 ~ [f3,c4,f4,a4]@3 ~@2 [g3,ab3] [f3,c4,f4,a4]@4, ~@6 ab2 ~@5 [g3,d5] ~@3", // F Abmaj7 F G5
  V: "[d3,a3,d4,f4]@5 ~ [d3,a3,d4,f4]@5 ~ [d3,a3,d4,f4]@2 ~@2", // Dm
  W: "[eb3,bb3,eb4,g4]@5 ~ [eb3,bb3,eb4,g4]@5 ~ [eb3,gb3,bb3,eb4,g4,c5]@2 ~@2, [e3,f3] ~@5 a2 ~@9", // Eb Cm7 Fmaj7
  X: "[f3,bb3,eb4,g4]@5 ~ [f3,bb3,eb4,g4]@5 ~ [f3,bb3,eb4,g4]@2 ~@2, b3 ~@15", // Eb
  Y: "[f3,c4,f4,a4]@5 ~ [f3,c4,f4,a4]@5 ~ [f3,c4,f4,a4]@3 ~, ~@6 db4 ~@5 d5 ~@3", // F
  Z: "[f3,bb3,eb4,g4]@5 ~ [f3,bb3,eb4,g4]@6 [f3,bb3,eb4,g4,b4]@2 ~@2, ~@6 b4 ~@9", // Eb
  AA: "[f3,c4,f4,a4]@5 ~ [f3,c4,f4,a4]@5 ~ [f3,c4,f4,a4,d5]@2 ~@2, ~@6 [c3,d5] ~@9", // F Dm7 Csus2
  AB: "[f3,bb3,eb4,g4]@5 ~ [eb4,e4] eb4@3 ~@2 [f3,bb3,eb4,g4]@3 ~, ~@6 [f3,bb3,g4]@4 ~@2 b4 ~@3", // Eb Emaj7 Eb Gm7
  AC: "[d5,eb5,g5] d5@2 ~ [eb4,g4,c5]@4 [eb4,g4,bb4]@3 c5 [g4,c5]@4, [eb4,g4]@3 ~@5 ab4 ~@2 eb4@4 ~, ~@12 ab4 ~@3", // Ebmaj7 Cm Eb C5 Eb
})).s("gm_overdriven_guitar").gain(0.21).pan(0.2)

// chords · overdriven guitar · "Guitar" · soft notes
const overdriven_guitar_soft = note(`<
  A B C ~@8 D ~@7 D ~@6 E ~@2 F ~@9 D ~@7 D ~@6 E ~@2 F ~@6 G H I J ~ C ~@2 K L M N I J O P ~@6 E ~@2 F ~@13
>`.pickRestart({
  A: "f4@3 ~@5", B: "g4@3 ~, c5 ~@15", C: "~@6 c5 ~", D: "~@6 g3 ~", E: "g4@13 ~@3", F: "d4 ~@3", G: "a4@5 ~ a4@6 ~@4",
  H: "~@6 c5 ~@5 c5@2 ~@2", I: "~@6 c5 ~@9", J: "d5 ~@15", K: "~@6 a4 ~", L: "~@6 b4 ~@9", M: "~@6 c5 ~@5 b4@2 ~@2",
  N: "~@6 d5 ~@9", O: "~@4 g4 ~ b4 ~@5 gb4 ~@3", P: "~@4 e5 ~@2 eb4 ~@8",
})).s("gm_overdriven_guitar").gain(0.09).pan(0.2)

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

// drums · rim
const rim = s("rim").struct("<~ x ~@101>").gain(0.27)

// drums · snare
const snare = s("sd").struct(`<
  A@2 B C ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~ E A F A G A@2 ~@3 D ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~ E A H A G A B ~@3
  D ~ I A J B G A B J ~ A J B ~ A B A K ~ D ~ I A H A G A B ~@3 D ~ D ~ D ~ D ~ D ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x!2 ~@7 x ~@3", C: "~ x!6 ~", D: "~@3 x", E: "~@5 x!3", F: "~@4 x ~@7 x ~ x!2",
  G: "~@3 x!2 ~@11", H: "~@3 x!2 ~@7 x ~ x!2", I: "~@6 x!2", J: "~ x!2 ~@3 x ~", K: "~ x ~ x!4 ~",
})).gain(0.38)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@2 A ~@24 A ~@25 A ~ A ~ A ~@5 B ~@2 A@2 ~ A ~@4 A ~@2 A ~ C ~@3 B ~ A ~ A ~ A ~@13
>`.pickRestart({
  A: "~ x ~@6", B: "~@5 x ~@2", C: "~ x ~@2",
})).gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@27 A ~@3 B ~@23 C ~@2 D E ~@7 F ~@3 G ~@3 F ~@11 H ~@2 I J ~@11>".pickRestart({
  A: "~@8 x!2 ~ x!2 ~ x!2", B: "x ~@7 x ~@2 x!2 ~@3", C: "~@8 x!5 ~ x!2", D: "~@13 x ~@2",
  E: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3", F: "~@6 x ~ x!2 ~ x!2 ~ x!2", G: "~@6 x ~ x!2 ~ x!2 ~ x ~", H: "~@8 x!8",
  I: "~@11 x!2 ~@3", J: "~@2 x ~@3 x ~ x ~@2 x!2 ~@3",
})).gain(0.38)

// drums · hihat
const hihat = s("hh").struct("<A@3 B C D@18 E ~@8 C D@18 E ~@8 C D@2 E ~@16 C D@2 E ~@8 C D@9 F>".pickRestart({
  A: "x!6 ~@2", B: "x", C: "x!2 ~ x", D: "~ x ~ x", E: "~ x ~@2", F: "~@9 x ~@6",
})).gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<~@27 A ~@2 B ~@24 A ~@2 B ~@12 C ~@3 D ~@11 E ~@15>".pickRestart({
  A: "~@3 x ~@4", B: "~@5 x ~@2", C: "~@2 x!3 ~ x ~@9", D: "~@2 x!2 ~ x ~@10", E: "~@6 x!2 ~@8",
})).gain(0.33)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@3 B ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@2 D E F ~ D@2 ~@3 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@2 D E F ~ D@2 ~@3 C
  ~@2 G H G I D G H ~ G H J K J G L B ~ C ~@2 D E F ~ D@2 ~@3 C ~ C ~ C ~ C ~ C M
>`.pickRestart({
  A: "~@3 x", B: "~ x!6 ~", C: "~@5 x ~@2", D: "~@2 x!6", E: "~@2 x!2 ~@2 x!2", F: "~@2 x!3 ~ x!2", G: "~ x!7",
  H: "~ x!2 ~@2 x!3", I: "~ x!2 ~@5", J: "x!8", K: "~ x ~@14", L: "x!5 ~ x!2", M: "~ x",
})).gain(0.33)

// drums · crash
const crash = s("cr").struct(`<
  A@2 B ~@21 C D C@5 ~@21 C E C@3 F C ~@5 C A C@4 A C@2 A C@4 A ~@5 C ~ C ~ C G C ~@12
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@2 x ~@2 x ~", C: "x", D: "x!2", E: "x ~@3 x ~@2 x", F: "x ~@2 x!2 ~@3", G: "~ x",
})).gain(0.38)

// drums · ride
const ride = s("rd").struct("<~@25 x ~@27 x ~@49>").gain(0.38)

stack(
  piano, bass, electric_guitar_muted, overdriven_guitar, overdriven_guitar_soft, kick, rim, snare, snare_soft, low_tom,
  hihat, mid_tom, open_hat, crash, ride
)

More by Joe Jackson