Strudelify
Jessie's Girl cover art

1981 · Jessie's Girl

Jessie's Girl

Rick Springfield

KeyD majorTempo130 bpm
0:00/0:00
// Jessie's Girl — Rick Springfield
// 130 bpm, 4/4, key D major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 1 "Bells" named as a mallet, played on tubular bells (its electric guitar jazz patch is not one)
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · electric bass finger · "Bass"
const bass = note(`<
  A@8 B@8 C@2 D E F G H I J K L M L M L M L M L M L M L N O P Q@2 R S T@2 U V W X Y Z AA AB AC AB AC AD@6 AE@2 AF AG AF
  AG AF AG AF AH AI AJ ~@8 AK P U V AL V AM Z AN P U V AL V AO ~ AP@2
>`.pickRestart({
  A: "[a3!2 e3!2 f#3!2 ~ d3@2 d3 e3!2 a3!2 ~ a3@2 a3 e3!2 f#3!2 ~ d3@2 d3 e3!2 a3!2 ~ a3@2 a3 e3!2 f#3!2 ~ d3@2 d3 e3!2 a3!2 ~ a3@2 a3 e3!2 f#3!2 ~ d3@2 d3 e3!2 a3!2 ~ a3]/8",
  B: "[~ a3 e3!2 f#3!2 ~ d3@2 d3 e3!2 a3!2 ~ a3@2 a3 e3!2 f#3!2 ~ d3@2 d3 e3!2 a3!2 ~ a3@2 a3 e3!2 f#3!2 ~ d3@2 d3 e3!2 a3!2 ~ a3@2 a3 e3!2 f#3!2 ~ d3@2 d3 e3!2 a3!2 ~ a3]/8",
  C: "[~ a3 e3!2 f#3!2 ~ d3@2 d3 e3!2 a3!2 ~@2]/2", D: "~ a4!7", E: "d5 d5@2 ~@5", F: "d4 f#4", G: "a4 f#4@2 f#4@4 ~",
  H: "d4!2 d4@2 d4!2 d4@2", I: "~ a4!3 a4@2 f#4@2", J: "f#4!2 a4@2 e4@2 ~@2", K: "~@4 a3!2 e3!2",
  L: "f#3!2 ~ d3@2 d3 e3!2", M: "a3!2 ~ a3@2 a3 e3!2", N: "a3!2 ~@3 a4!3", O: "a4!4 d5 d5@2 ~", P: "~ d4",
  Q: "[f#4@4 a4 f#4@2 f#4@4 ~ d4!2 d4@2]/2", R: "d4!2 d4@2 ~ a4!3", S: "a4@2 f#4@2 f#4!2 a4@2",
  T: "[e4@2 ~@2 d5 f#4@2 f#4@4 ~ d4@4]/2", U: "f#4@4 d5 f#4@2 ~", V: "~@4 d4!2 d4@2", W: "d4!2 d4@2 ~ b4 c#5!2",
  X: "d5@2 ~@2 g4!2 c#5@2", Y: "a4!2 a4@2 ~ b4 c#5!2", Z: "d5@2 ~@2 f#4!2 a4@2", AA: "a4 ~ g4 ~", AB: "a4@2 ~ a4@3 ~@2",
  AC: "~@2 g4 ~", AD: "[f#4@2 ~ a4@9 g4@2 ~@2]/2", AE: "[f#4@2 ~ a4@9 ~@4]/2", AF: "~@2 d#4 c#4", AG: "b3 a#3 ~@2",
  AH: "b3@2 a#3@2 ~ b3 c#4!2", AI: "d4@2 ~@2 f#3!2 a3@2", AJ: "a3 ~@3", AK: "~@4 d5 f#4@2 ~",
  AL: "~ f#4 f#4@2 d5 f#4@2 ~", AM: "d4@4 ~ b4 c#5!2", AN: "a4@2 ~@2 d5 f#4@2 ~", AO: "d4 ~", AP: "[~ a3@4 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.54).pan(0.7)

// other · electric guitar clean · "Elec Guit"
const electric_guitar_clean = note(`<
  ~@4 A@2 B@6 C@2 D E@2 F ~ G ~ H ~ I J K L M L N@5 O P@2 Q R@2 S@2 T ~ U V W ~ X ~ Y Z AA AB AC AD AC AD AC AE@6 AF@2
  ~@7 AG AH AI ~@8 X ~ X ~ X ~ Y AB X ~ X ~ X ~@5
>`.pickRestart({
  A: "[~@2 c#4@2 d4@2 ~ b3@3 c#4@2 d4 ~@3]/2",
  B: "[~@2 c#4@2 d4@2 ~ b3@3 c#4@2 d4@2 d4 f#4@3 c#4 d4@4 b3@3 c#4 d4@2 d4@2 d4@2 c#4@2 d4@4 b3@3 d4 d4@3 f#4!2]/6",
  C: "[f#4!4 e4!2 d4 b3@3 c#4@2 d4 f#4@2 f#4]/2", D: "f#4!3 e4@2 e4 d4@2",
  E: "[d4@4 c#4!2 ~@4 f#4@2 f#4@2 f#4@4 f#4@2 f#4@2 e4@2 e4@2 e4@2 d4@4]/2", F: "b3!2 c#4 d4@3 ~@2",
  G: "a4 f#4@2 f#4@4 ~", H: "d5 ~@7", I: "~ b4 c#5!2 c#5@2 ~@2", J: "~@2 a4 ~", K: "~@3 c#4", L: "d4@2 ~ b3@3 c#4@2",
  M: "d4 ~@5 c#4@2", N: "[d4@2 d4 f#4@3 c#4 d4@4 b3@3 c#4 d4@2 d4@2 d4@2 c#4@2 d4@4 b3@3 d4 d4@3 f#4!6]/5",
  O: "e4!2 d4 b3@3 c#4@2", P: "[d4@2 f#4@4 f#4@2 f#4@2 f#4@2 f#4@2 e4@4 e4@2 d4@4 d4@4 c#4!2 ~@2]/2",
  Q: "~ f#4!2 f#4@2 f#4!2 e4", R: "[e4!2 d4@2 b3!2 c#4 d4@3 ~@6]/2", S: "[~@4 a4 f#4@2 f#4@4 ~@5]/2", T: "~@4 d5 ~@3",
  U: "~@5 b4 c#5!2", V: "c#5 ~@3", W: "a4@2 ~@2 a4 ~@3", X: "~@4 a4 ~@3", Y: "~@5 a4!3", Z: "a4 ~@2 a4",
  AA: "f#4!2 f#4@2 ~ a4!3", AB: "a4 ~@3", AC: "~@2 d4 ~", AD: "f#4@2 ~ e4@3 ~@2", AE: "[~@3 e4@9 d4@2 ~@2]/2",
  AF: "[~@3 e4@9 ~@4]/2", AG: "~@5 a3!3", AH: "a3 ~@3", AI: "e3 ~@3",
})).s("gm_electric_guitar_clean").gain(0.62).pan(1)

// other · overdriven guitar · "Elec Guit"
const overdriven_guitar = note(`<
  ~@18 A B C B C D@2 ~@14 E F@2 G@2 H I J@2 K L M N O I P Q@10 R S@7 T@2 I U V W V W V W V X ~@16 Y@2
>`.pickRestart({
  A: "~ a2!7", B: "a2 d3@2 d3@2 d3@2 a2", C: "b2 b2@2 ~ b2@4", D: "[g2@2 a2@2 d3@2 a2 b2@2 b2!2 a2 a2@2 ~@2]/2",
  E: "~@5 a2!3", F: "[a2!5 d3@2 d3@2 d3@2 a2 b2 b2@2 ~]/2", G: "[b2@4 a2 d3@2 d3@2 d3@2 a2 b2 b2@2 ~]/2",
  H: "b2@2 g2 a2", I: "d3@2 a2 b2@2 b2!2 a2", J: "[a2@2 a2@2 a2 d3@2 d3@2 d3@2 a2 b2 b2@2 ~]/2", K: "b2@4 a2 d3@2 d3",
  L: "d3 d3@2 a2 b2 b2@2 ~", M: "b2!2 b2@2 g2@2 a2@2", N: "d3@2 a2 b2 g2@2 a2@2", O: "d3@2 g2 a2", P: "a2!4 g2!4",
  Q: "g2!8", R: "g2!3 a2!5",
  S: "[a2!4 f#2 b2@2 b2@2 b2@2 f#2 g#2@8 f#2 b2@2 b2@2 b2@2 f#2 g#2@8 f#2 b2@2 b2@2 b2@2 f#2 g#2@8 f#2 b2@2 b2]/7",
  T: "[~ b2@2 f#2 g#2@8 g2@2 a2@2]/2", U: "a2@2 ~@2 a3!2 e3!2", V: "f#3!2 ~ d3@2 d3 e3!2", W: "a3!2 ~ a3@2 a3 e3!2",
  X: "a3!2 ~ a2@2 ~@3", Y: "[~ d3@4 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.44).pan(0)

// other · lead 1 square · "Fantasy"
const lead_1_square = note("<~@54 A B@10 C D ~@9 E F G F G F G F H I@2 J@2 K@2 L M N@2 J@2 K@2 O@2 P@2>".pickRestart({
  A: "~@4 g1!4", B: "g1!8", C: "g1!3 a1!5", D: "a1!4 ~@4", E: "~@4 d3!2 a2!2", F: "b2!2 ~ g2@2 g2 a2!2",
  G: "d3!2 ~ d3@2 d3 a2!2", H: "d3!2 ~@3 a2!3", I: "[a2!5 d3@2 d3@2 d3@2 a2 b2 b2@2 ~]/2",
  J: "[b2@4 a2 d3@2 d3@2 d3@2 a2 b2 b2@2 ~]/2", K: "[b2 b2@2 ~ a2 d3@2 d3@2 d3@2 a2 b2 b2@2 ~]/2",
  L: "b2!3 a2 g2@2 a2@2", M: "d3@2 a2 b2@2 b2!2 a2", N: "[a2@2 a2@2 a2 d3@2 d3@2 d3@2 a2 b2 b2@2 ~]/2",
  O: "[b2!3 a2!2 d3@2 d3@5 a2 d3@2 a2]/2", P: "[g2 d2@4 ~@3]/2",
})).s("gm_lead_1_square").gain(0.17).pan(0.1)

// bass · slap bass 1 · "Slap Bass"
const bass_2 = note(`<
  A@8 B@8 C@3 D E F G H I J K L K L K L K L K L K L K M N O P Q R S T O U@2 R V W X Y Z AA Z AA AB@4 AC@2 AD@8 AE@2 AF
  AG ~@7 AH AI@2 U@2 AJ@2 AK X AL@2 U@2 AJ@2 AM ~ AN@2
>`.pickRestart({
  A: "[d2!2 a1!2 b1!2 ~ g1@2 g1 a1!2 d2!2 ~ d2@2 d2 a1!2 b1!2 ~ g1@2 g1 a1!2 d2!2 ~ d2@2 d2 a1!2 b1!2 ~ g1@2 g1 a1!2 d2!2 ~ d2@2 d2 a1!2 b1!2 ~ g1@2 g1 a1!2 d2!2 ~ d2]/8",
  B: "[~ d2 a1!2 b1!2 ~ g1@2 g1 a1!2 d2!2 ~ d2@2 d2 a1!2 b1!2 ~ g1@2 g1 a1!2 d2!2 ~ d2@2 d2 a1!2 b1!2 ~ g1@2 g1 a1!2 d2!2 ~ d2@2 d2 a1!2 b1!2 ~ g1@2 g1 a1!2 d2!2 ~ d2]/8",
  C: "[~ d2 a1!2 b1!2 ~ g1@2 g1 a1!2 d2!2 ~ a1@2 a3 c#4!5 ~]/3", D: "f#4 ~@7", E: "f#3 b3", F: "f#4 d4@2 ~@5",
  G: "f#3!2 f#3@2 f#3!2 f#3@2", H: "~ d4 e4!2 f#4@2 ~@2", I: "b3!2 c#4@2 c#4@2 ~@2", J: "~@4 d2!2 a1!2",
  K: "b1!2 ~ g1@2 g1 a1!2", L: "d2!2 ~ d2@2 d2 a1!2", M: "d2!2 ~ a1@2 a3 c#4!2", N: "c#4!3 ~ f#4 ~@3", O: "~ f#3",
  P: "b3@4 f#4 d4@2 ~", Q: "~@4 f#3!2 f#3@2", R: "f#3!2 f#3@2 ~ d4 e4!2", S: "f#4@2 ~@2 b3!2 c#4@2",
  T: "c#4@2 ~@2 f#4 d4@2 ~", U: "[b3@4 f#4 d4@2 f#3@4 ~ f#3!2 f#3@2]/2", V: "f#4@2 f#3@2 b3!2 e4@2",
  W: "d4!2 d4@2 ~ d4 e4!2", X: "f#4@2 f#3@2 b3!2 c#4@2", Y: "c#4 ~ b3 ~", Z: "d4@2 ~ c#4@3 ~@2", AA: "~@2 b3 ~",
  AB: "[a3@2 ~ c#4@9 b3@2 ~@2]/2", AC: "[a3 c#4@5 b3 ~]/2",
  AD: "[a3@2 ~ c#4@9 f#2 b2@2 b2@2 b2@2 c#3 d#3@8 f#2 b2@2 b2@2 b2@2 c#3 d#3@8 f#2 b2@2 b2@2 b2@2 c#3 d#3@8 f#2 b2@2 b2]/8",
  AE: "[~ b2@2 c#3 d#3@8 ~ d3 e3!2]/2", AF: "f#3@2 f#2@2 b2!2 c#3@2", AG: "c#3 ~@3", AH: "~@5 a3 c#4!2",
  AI: "[c#4!3 a3 f#4 d4@2 f#3@4 ~ f#3@4]/2", AJ: "[~ b3 b3@2 f#4 d4@2 f#3@4 ~ f#3!2 f#3@2]/2", AK: "f#3@4 ~ d4 e4!2",
  AL: "[c#4@2 ~@2 f#4 d4@2 f#3@4 ~ f#3@4]/2", AM: "f#3 ~", AN: "[~ d3@4 ~@3]/2",
})).s("gm_slap_bass_1").gain(0.25).pan(0)

// drums · kick
const kick = s("bd").struct("<[x!2]!7 ~@12 [x!2]!59 [x!4] [x!2]!23 ~>").gain(0.44)

// drums · rim
const rim = s("rim").struct("<~@19 [~ x ~ x]!82 [~ x ~@2] ~>").gain(0.44)

// drums · snare
const snare = s("sd").struct("<[x!2 ~ x!3 ~ x]!18 [x!16] [x!8]!83 ~>").gain(0.39)

// drums · clap
const clap = s("cp").struct("<[x!8]!101 [x!6 ~ x] ~>").gain(0.39)

// drums · crash
const crash = s("cr").struct("<~@20 A@2 ~@2 A@3 ~@30 B C@2 D ~@7 A@4 ~@4 D@2 C ~@23 A>".pickRestart({
  A: "x", B: "~ x ~@2", C: "x!4", D: "x!2",
})).gain(0.44)

stack(bass, electric_guitar_clean, overdriven_guitar, lead_1_square, bass_2, kick, rim, snare, clap, crash)

More by Rick Springfield