Strudelify

A Real Mother for Ya

Watson Johnny Guitar

KeyF minorTempo98 bpm
0:00/0:00
// A Real Mother for Ya — Watson Johnny Guitar
// 98 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 4 "SLAPBASS 1" slap bass 1 (copy of ch 2 "ACOU BASS" acoustic bass); ch 5 "SLAPBASS 1" slap bass 1 (copy of ch 3 "FINGERDBAS" electric bass finger)
// note: Full arrangement: all 123 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@3 A B C D A B C E F G H G ~ I ~ I ~ I ~ I ~ I ~ I ~ I ~ J K L M N O P Q@2 ~ I ~ I ~ I ~ I ~ I ~ I ~ I ~ I ~ I ~ J R
  S M T U V Q@2 ~ I ~ I A W X Y A Z C AA H AB H G ~ I ~ I ~ I ~ I ~ I ~ I AC AD AE AF AG V Q@2 AH@2 H G AI AJ ~ I ~ I ~
  I AK AL AK AL AK AL AK AM
>`.pickRestart({
  A: "[eb4,ab4,c5]@15 c5", B: "[d4,g4,b4]@15 b4", C: "[db4,gb4,bb4]@15 bb4", D: "[f4,a4]@9 ~@7", E: "[f4,a4] ~@7",
  F: "[eb4,ab4]!2 ~ [eb4,ab4] ~@2 [eb4,ab4] ~@5 [eb4,ab4] ~@3", G: "[eb4,ab4]!2 ~ [eb4,ab4] ~ f4 [eb4,ab4] ~@9",
  H: "[eb4,ab4]!2 ~ [eb4,ab4] ~ f4 [eb4,ab4] ~@5 [eb4,ab4] ~@3", I: "~@12 [a4,eb5,ab5] ~@3",
  J: "~@5 [a3,db4,eb4,ab4]@3", K: "[ab3,d4,g4]@15 ~", L: "[bb3,d4,g4]@3 [ab3,c4,f4] ~@2 [c4,f4,bb4]@9 ~, db4 ~@15",
  M: "d4@15 ~", N: "[f3,a3]@3 [eb3,g3,c4] ~@2 [f3,c4,f4] ~@3 [a3,db4,eb4,ab4]@6, ab3 ~@15",
  O: "[ab3,c4,d4,g4]@13 ~ [ab3,c4,d4,g4] [b3,db4,gb4]", P: "[gb3,bb3,c4,f4]@3 ~", Q: "[~@7 [a3,eb4,ab4]@9]/2",
  R: "[ab3,d4,g4]", S: "[bb3,d4,g4]@3 [ab3,c4] ~@2 [f4,bb4]@8 ~@2, db4 ~@5 b3 ~@9",
  T: "a3@2 ~ eb3 ~@2 [f3,g3,c4]@2 ~@2 [a3,db4,eb4,ab4]@6, ab3 ~@15", U: "[ab3,d4,g4]@13 ~ [ab3,g4] [g3,b3,db4,gb4]",
  V: "[gb3,bb3,c4,f4]@7 ~", W: "b4@15 ~", X: "[db4,gb4,bb4]@15 ~", Y: "[f4,a4] ~", Z: "[g4,b4]", AA: "[c4,f4,a4] ~@7",
  AB: "[eb4,ab4] eb4 ~ [eb4,ab4] ~ f4 [eb4,ab4] ~@9", AC: "[ab3,c4,d4,g4]@15 ~",
  AD: "[bb3,d4]@3 [ab3,c4,f4] ~@2 [c4,f4]@9 ~, db4 ~@15", AE: "a3@15 ~",
  AF: "a3@2 ~ [eb3,g3,c4] ~@2 [f3,c4,f4]@2 ~@2 [a3,db4,eb4,ab4]@6, ab3 ~@15", // Cm F5 Amaj7
  AG: "[ab3,c4,d4,g4]@13 ~ [ab3,g4] [g3,db4,gb4]", AH: "[~@14 [a3,eb4,ab4]@17 ~]/2",
  AI: "[eb4,ab4] ab4 ~ [eb4,ab4] ~ f4 [eb4,ab4] ~@5 [eb4,ab4] ~@3", AJ: "[eb4,ab4]!2 ~ [eb4,ab4] ~@2 [eb4,ab4] ~@9",
  AK: "~@12 eb4 ~ eb4 ~", AL: "eb4@4 f4 ~ eb4 ab4 ~ f4@7", AM: "eb4@4 f4 ~ eb4 ab4 ~ f4@3 [a4,eb5,ab5] ~@3",
})).s("gm_synth_brass_1").gain(0.53)

// chords · synth brass 1 · "SYNBRASS 1" · soft notes
const synth_brass_1_soft = note(`<
  ~@3 A B@2 C A B@2 D E ~@19 F ~ G H I ~@23 F J G K L ~@7 A M N C A O B ~@2 P ~@15 Q R S T ~@7 U E ~@14
>`.pickRestart({
  A: "~@15 d5", B: "~@15 c5", C: "c4 ~", D: "c4 ~@7", E: "~@5 f4 ~@10", F: "c4@15 ~", G: "[eb3,g3,a3]@15 ~",
  H: "d4@3 ~@3 g3 ~@9", I: "~@15 g3", J: "~@3 f4 ~@2 c4@8 ~@2", K: "[f3,d4]@3 [g3,c4] ~@2 f4@2 ~@8",
  L: "c4@14 [c4,d4] ~", M: "[d4,g4]@15 [b4,c5]", N: "~@15 [bb4,c5]", O: "d4@15 [b4,c5]", P: "~ ab4 ~@14",
  Q: "g4@3 ~@3 bb4@10", R: "[eb3,g3,d4]@15 ~", S: "[f3,d4]@3 ~@3 g3@2 ~@8", T: "~@14 [c4,d4,eb4] b3", U: "~ eb4 ~@14",
})).s("gm_synth_brass_1").gain(0.33)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@2 A B@4 C@3 D E F E G H I J I H G H G E I H G H G H K L M N O P Q R@2 E G E G J I H G H I S I J I J G E G E K L M N
  O P Q T@2 E G H G B@4 C@3 U E G E I J G E G E G E G E G V W L M N O P Q X@2 Y@2 E G H G J I E G J I E G J G E G H G
>`.pickRestart({
  A: "~@10 c3 ~ eb3 f3 ~@2", B: "[f2@57 ~ c3 ~ eb3 f3 ~@2]/4", C: "[f2@47 ~]/3",
  D: "f2@2 ~@6 [bb4,b4] ~ f4 ~ b3 ab3 f3 ~", E: "f2@2 ~ f2 ~ f2 ab2 ~ bb2@4 ab2@4", F: "f2@3 f2 ~@2 ab2 ~ bb2@2 ~@6",
  G: "f2@2 ~ f2 ~ f2 ab2 ~ bb2 ~@7", H: "f2@2 ~ f2 ~@2 ab2 ~ bb2@4 ab2@4", I: "f2@2 ~ f2 ~@2 ab2 ~ bb2 ~@7",
  J: "f2@2 ~ f2 ~ f2 ab2 ~ bb2@4 ab2@3 ~", K: "f2@2 ~ f2 ~@2 ab2 ~@3 b2@6", L: "bb2@6 ~ f2 bb2 ~ bb2@3 ~ ab2 a2",
  M: "bb2@6 ~ f2 bb2 ~ bb2@2 eb3@2 e3@2", N: "f3@6 ~ c3 f3 c3 f3@3 c3 d3@2", O: "f2@7 c3 f3 ~ b2@6",
  P: "bb2@6 ~@2 bb2 ~ bb2@3 ~@3", Q: "ab2@7 ~ ab2@5 bb2 c3 eb3",
  R: "[f3@3 ~ eb3@2 ~ bb2@3 ab2@4 f2@10 [bb4,b4] ~ f4 ~@2 ab3 f3 ~]/2", S: "f2@2 ~ f2 ~@2 ab2 ~ bb2@4 ab2@3 ~",
  T: "[f3@3 ~ eb3@2 ~ bb2@3 ab2@3 ~ f2@12 eb4 ~ [ab3,a3] ~ f3 ~]/2", // Amaj7
  U: "~@4 [b4,c5] ~ [ab4,a4] ~ [eb4,e4] ~ [bb3,b3,c4] ~ g3 ~ f3 ~", V: "f2@2 ~ f2 ~ f2 ab2 ~ bb2@3 ~ ab2@3 ~",
  W: "f2@2 ~ f2 ~ f2 ab2 ~ [bb3,b3] ab3 f3 ~ b3 ab3 f3 ~", X: "[f3@3 ~ eb3@2 ~ bb2@3 ab2@4 f2@14 c3 ~ c3 ~]/2",
  Y: "[f3@4 eb3@2 ~ bb2@3 ab2@3 ~ f2@10 [bb4,b4] ~ [f4,g4] ~ b3 ab3 f3 ~]/2", // Bmaj7 Fsus2
})).s("gm_acoustic_bass").gain(0.52).pan(0.8)

// bass · acoustic bass · "ACOU BASS" · soft notes
const bass_soft = note(`<
  ~@12 A ~@2 A ~@2 A@2 ~ A ~@2 A@2 ~ A ~ A@2 B ~@3 C D E F ~@5 A@2 ~ A@2 ~ A ~ A ~@5 A B ~@3 C D E ~@3 A ~@12 A ~@12 B
  ~@3 C D E ~ E ~@3 A ~@2 A ~@3 A ~@6 A ~
>`.pickRestart({
  A: "~@5 f2 ~@10", B: "~@13 f2 ~@2", C: "~@7 f2 ~@6 bb2 a2", D: "~@7 eb2 ~@8", E: "~@6 c3 ~@9", F: "~@12 b3 ~@3",
})).s("gm_acoustic_bass").gain(0.26).pan(0.8)

// bass · electric bass finger · "FINGERDBAS"
const bass_2 = note("<~@16 A ~ B ~ A ~ B ~ A ~ B ~@15 A ~@3 C ~@3 B ~ A ~ B ~@13 D ~@54>".pickRestart({
  A: "~@12 b1 ab1 f1 ~", B: "~@12 eb1@2 f1 ~", C: "~@10 ab1 ~ bb1@2 ab1 ~", D: "~@10 [bb1,b1] ~ b1 ab1 f1 ~",
})).s("gm_electric_bass_finger").gain(0.56).pan(0.9)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@11 A B C D E B F G H B I B J K L B M B N B ~@8 O B P B Q B R K F K S B T B U B V B W B ~@8 P B X B ~@7 Y P B Z B A B
  P K S K P B AA K A B ~@7 AB ~@2 H B V AC P AD AE AD AF B AG AC AH AD AI B AJ B
>`.pickRestart({
  A: "f2@2 [c3,f3,a3] f2 ~ f2 ab2 ~@3 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4]@2, ~@2 bb2 ab2", // F Bb Ab
  B: "f2@2 [c3,f3,a3] f2 ~@2 [ab2,eb3,ab3,c4] ~ [bb2,f3,bb3,d4] ~@7", // F Ab Bb
  C: "f2@2 [c3,f3,a3] f2 ~ f2 ab2 ~ bb2@2 [f3,bb3,d4]@2 ~@2 [eb3,c4]@2, ~@14 ab3 ~", // F Bb Cm
  D: "f2@2 [f3,a3] f2 ~@2 [ab2,eb3,ab3,c4] ~ [bb2,f3,bb3,d4] ~@7", // F Ab Bb
  E: "~@2 [c3,f3,a3] ~@3 ab2 ~ bb2@2 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4]@2", // F Bb Ab
  F: "f2@2 [c3,f3,a3] f2 ~@2 ab2 ~@3 [f3,bb3,d4]@2 ~@2 [eb3,ab3]@2, ~@2 bb2 ab2, ~@14 c4 ~", // F Bb Ab5
  G: "~@2 [c3,f3,a3] f2 ~@2 [ab2,eb3,ab3,c4] ~ [bb2,f3,bb3] ~@7", // F Ab Bb5
  H: "f2@2 [c3,f3,a3] f2 ~@2 ab2 ~@3 [f3,bb3,d4]@2 ~@2 [ab3,c4] ~, ~@2 bb2 ab2, ~@7 eb3", // F Bb Ab
  I: "f2@2 [c3,f3,a3] f2 ~ f2 ab2 ~ bb2@2 [f3,bb3,d4]@2 ~@2 [ab3,c4] ~, ~@3 ab2, ~@7 eb3", // F Bb Ab
  J: "f2@2 [c3,f3,a3] f2 ~@2 ab2 ~@3 [f3,bb3,d4]@2 ab2@2 [eb3,ab3,c4]@2, ~@2 bb2 ~", // F Bb Ab
  K: "f2@2 [c3,f3,a3] f2 ~ f2 [ab2,eb3,ab3,c4] ~ [bb2,f3,bb3,d4] ~@7", // F Ab Bb
  L: "~@2 [c3,f3,a3] ~@3 ab2 ~ bb2@2 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4] ~, ~@3 ab2", // F Bb Ab
  M: "f2@2 [c3,f3,a3] f2 ~@2 ab2 ~ bb2@2 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4] ~, ~@3 ab2", // F Bb Ab
  N: "f2@2 [c3,f3,a3] ~@3 ab2 ~ bb2@2 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4] ~, ~@3 ab2", // F Bb Ab
  O: "[f1,f2]@2 [c3,f3,a3] f2 ~ f2 ab2 ~@3 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4] ~, ~@2 bb2 ab2", // F Bb Ab
  P: "f2@2 [c3,f3,a3] f2 ~@2 ab2 ~@3 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4]@2, ~@2 bb2 ab2", // F Bb Ab
  Q: "f2 ~ [c3,f3,a3] f2 ~@2 ab2 ~@3 [f3,bb3,d4]@2 ~@2 [eb3,c4]@2, ~@8 bb2@4 ~@2 ab3 ~", // F Bb Cm
  R: "f2@2 [c3,f3,a3] f2 ~@2 ab2 ~ bb2@2 [f3,bb3,d4]@2 ~@2 [ab3,c4] ~, ~@3 ab2, ~@7 eb3", // F Bb Ab
  S: "f2@2 [c3,f3,a3] f2 ~ f2 ab2 ~@3 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4] ~, ~@2 bb2 ab2", // F Bb Ab
  T: "f2@2 [c3,f3,a3] f2 ~@2 ab2 ~ bb2@2 [f3,bb3]@2 ~@2 [ab3,c4] ~, ~@3 ab2, ~@7 eb3", // F Bb5 Ab
  U: "f2 ~ [f3,a3] f2 ~@2 ab2 ~ bb2@2 [f3,bb3,d4]@2 ab2@2 [eb3,ab3,c4] ~", // F Bb Ab
  V: "f2@2 [c3,f3,a3] ~@3 ab2 ~@3 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4]@2, ~@2 bb2 ab2", // F Bb Ab
  W: "f2@2 [c3,f3,a3] ~@3 ab2 ~ bb2@2 [f3,bb3,d4]@2 ab2@2 [ab3,c4] ~, ~@7 eb3", // F Bb Ab
  X: "f2@2 [c3,f3,a3] f2 ~@2 ab2 ~ bb2@2 [f3,bb3,d4]@2 ab2@2 [ab3,c4] ~, ~@7 eb3", // F Bb Ab
  Y: "~@8 [bb4,d5] ~ [ab4,a4,c5] ~ f4 ~ eb4 ~", // Bb Ab
  Z: "f2 ~ [c3,f3,a3] f2 ~@2 ab2 ~@3 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4] ~, ~@2 bb2 ab2", // F Bb Ab
  AA: "f2@2 [c3,f3,a3] f2 ~@2 ab2 ~ bb2@2 [f3,bb3,d4]@2 ab2@2 [eb3,ab3,c4] ~", // F Bb Ab
  AB: "~@2 [c5,eb5]@5 ~ [c5,eb5] ~ d5 ~ [ab4,a4,c5]@2 f4 ~, ~@2 b4 ~@13", // Cm Ab
  AC: "f2@2 [c3,f3,a3] ~@3 [ab2,eb3,ab3,c4] ~ [bb2,f3,bb3,d4] ~@7", // F Ab Bb
  AD: "~@2 [c3,f3,a3] ~@3 [ab2,eb3,ab3,c4] ~ [bb2,f3,bb3,d4] ~@7", // F Ab Bb
  AE: "~@2 [c3,f3,a3] ~@3 ab2 ~ bb2@2 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4]@2, ~@3 ab2", // F Bb Ab
  AF: "~@2 [c3,f3,a3] ~@3 ab2 ~ bb2@2 [f3,bb3,d4]@2 ab2@2 [eb3,ab3,c4]@2", // F Bb Ab
  AG: "f2@2 [c3,f3,a3] ~@3 ab2 ~ bb2@2 [f3,bb3,d4]@2 ~@2 [eb3,ab3,c4]@2", // F Bb Ab
  AH: "f2@2 [c3,f3,a3] f2 ~@2 ab2 ~ bb2@2 [f3,bb3]@2 ab2@2 [eb3,ab3,c4]@2", // F Bb5 Ab
  AI: "f2@2 [c3,f3,a3] f2 ~@2 ab2 ~ bb2@2 [f3,bb3,d4]@2 ab2@2 [eb3,ab3,c4]@2", // F Bb Ab
  AJ: "~@2 [c3,f3,a3] f2 ~@2 ab2 ~ bb2@2 [f3,bb3,d4]@2 ab2@2 [eb3,ab3,c4]@2", // F Bb Ab
})).s("gm_acoustic_guitar_nylon").gain(0.32)

// chords · acoustic guitar nylon · "NYLON GTR" · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~@12 A B C D A@2 E A@2 ~ A@2 ~ F A@3 G A ~@9 A@3 H A@2 ~ A ~@2 A I A C A G A G A ~@8 A@4 ~@8 A@4 ~ A@2 ~@3 A@3 ~@2 A
  ~@7 J ~@2 A@2 G@2 A F@4 A K G I F A@2 L A
>`.pickRestart({
  A: "~@5 f2 ~@10", B: "~@3 ab2", C: "~@2 c3 ~@2 f2 ~@10", D: "f2@2 ~ f2 ~ f2 ~@6 ab2@4", E: "f2@3 ~@2 f2 ~@2 d4 ~@7",
  F: "f2@2 ~ f2 ~ f2 ~@10", G: "~@3 f2 ~ f2 ~@10", H: "~@5 f2 ~@6 ab2@4", I: "~@5 f2 ~@4 d4@2 ~@4", J: "~@10 bb4 ~@5",
  K: "~@3 f2 ~ f2 ~@6 ab2@2 ~@2", L: "f2@2 ~@3 f2 ~@10",
})).s("gm_acoustic_guitar_nylon").gain(0.16)

// chords · drawbar organ · "ORGAN 1" · Dbmaj7 Bmaj7 Ebmaj7 Abmaj7 Dbmaj7 Bmaj7 Ebmaj7 Abmaj7
const drawbar_organ = note(`<
  ~@2
  [~@9 [c3,db3]@2 ~@5, ~@2 [c2,db2] [e2,f2,gb2] [bb2,b2] ~@3, ~@5 [d2,eb2]@2 [g2,ab2]@2 d3@4 ~@3]
  ~@71
  [~@9 [c3,db3,d3]@7, ~ [c2,db2] [bb2,b2]@2, ~@5 [d2,eb2]@10 ~, ~@3 [e2,f2,gb2]@5, ~@7 [g2,ab2]@8 ~]
  ~@48
>`).s("gm_drawbar_organ").gain(0.2)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@10 A B@15 C B@3 D B@3 E B@2 F G B@19 D B@3 E B@2 F G B@3 H ~@7 A B@19 E B@2 F G ~ G B@18
>`.pickRestart({
  A: "x ~@9 x ~@2 x!2 ~", B: "~ x ~ x", C: "~@3 x!2 ~@3 x ~@3 x ~@3", D: "~@3 x!2 ~@3 x ~@7", E: "~ x!2 ~", F: "x",
  G: "~@12 x!3 ~", H: "~@4 x ~@5 x ~@2 x!2 ~",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@10 A ~@20 B@3 C B@2 ~@22 B@3 C B@2 ~@13 A ~@16 B@3 C B@2 ~@22>".pickRestart({
  A: "~@3 x", B: "~@11 x ~@4", C: "~@3 x ~@12",
})).gain(0.4)

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

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

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@3 A ~@3 A ~@23 A ~ B ~ A ~@23 A ~ B ~ A ~@3 A ~@3 A ~@3 A ~@15 A ~@3 A ~ B ~ C ~ A ~@16 D
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x ~@6 x", D: "~@3 x",
})).gain(0.56)

stack(
  synth_brass_1, synth_brass_1_soft, bass, bass_soft, bass_2, acoustic_guitar_nylon, acoustic_guitar_nylon_2,
  drawbar_organ, kick, snare, snare_soft, hihat, open_hat, crash
)