Strudelify

I've Done Everything For You

Rick Springfield

KeyF majorTempo178 bpm
0:00/0:00
// I've Done Everything For You — Rick Springfield
// 178 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(178/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.

// bass · electric bass pick · "Staff-2"
const bass = note(`<
  A B A B A B A B C D C D C@2 E@2 C@2 E@2 F@2 E@2 G H F I G H F I C J C@2 E@2 C@2 E@2 F@2 E@2 G H F I G H F I C K@3 C
  L@3 C M@2 N@2 E G H F I G H F I C@3 O P@2 Q R P@2 Q R E@2 Q@2 S T E U S T E U V@2 W@2 X@2 Y Z AA
>`.pickRestart({
  A: "gb2!3 ab2!3 a2!2", B: "a2 ab2!3 a2!2 ab2!2", C: "e1!8", D: "e1!6 b0@2", E: "b1!8", F: "a1!8", G: "e1!3 b1!3 e1!2",
  H: "e1 b1!3 e1!2 b1!2", I: "a1 b1!7", J: "e1!6 b0 ~", K: "[e1!5 ~@2 gb1@2 gb1!6 a1@2 a1!6 ~]/3",
  L: "[e1!7 gb1@2 gb1!6 a1@2 a1!7]/3", M: "[e1!7 gb1@2 gb1!7]/2", N: "[gb1!7 a1@2 a1!6 ~]/2", O: "e1!6 ~@2", P: "gb1!8",
  Q: "db2!8", R: "db2!7 ~", S: "gb1!3 db2!3 gb1!2", T: "gb1 db2!3 gb1!2 db2!2", U: "b1 db2!7",
  V: "[gb1@2 gb1@2 gb1@2 gb1@3 ~ gb1@2 gb1@6 db2@2 db2@3 ~ db2@3 ~ db2@3 ~]/2",
  W: "[gb1@2 gb1@2 gb1@2 gb1@3 ~ gb1@2 gb1@6 db2@2 db2@3 ~ db2@2 db2@2 ~@4]/2", X: "~@2 db2@2 db2@3 ~ db2@2 db2@2 ~@4",
  Y: "gb1!3 bb1!3 b1!2", Z: "b1@2 db2@2 db2@2 db2@2 e2@3 ~ f2@3 ~", AA: "gb2@11 ~@5",
})).s("gm_electric_bass_pick").gain(0.72)

// other · distortion guitar · "Staff-3"
const distortion_guitar = note(`<
  ~@4 A@4 B C B C D@2 E F D@2 E F G@2 H@2 I@2 J ~ I@2 J K ~ L@2 D E F D@2 E F G@2 H@2 I@2 J ~ I@2 J K ~@13 M I@2 J ~ I@2
  J K N@3 O@2 ~@2 P ~@3 P Q@2 R@2 S@2 T U S@2 T U V@2 W@2 X@2 Y Z AA
>`.pickRestart({
  A: "[b2@3 e3@3 b2@3 e3@3 b2@2 e3@2]/2", B: "~@3 e3@5", C: "~@3 e3@2 a2 b2@2",
  D: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", E: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~",
  F: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2@2 b2@2 b2@2", G: "[a2!8 a2!8, e3]/2", H: "[b2!8 b2!8, [gb3,b3]@7 [gb3,db4]]/2",
  I: "[[e3,ab3]@3 [e3,gb3,a3]@3 [e3,ab3]@3 [e3,gb3]@3 [e3,ab3]@2 [e3,gb3]@2]/2", J: "[e3,a3,db4]",
  K: "~ [a2,eb3,gb3]@7", L: "[~@2 [b3,e4]@10 [gb3,b3]@2 [e3,db4]@4 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~]/2",
  M: "~@5 b2!3", N: "e2!8", O: "[e2!6 b3 [gb3,db4]@2 ~@7]/2", P: "~@5 db3!3", Q: "b2!8", R: "db3!8",
  S: "[gb2@3 db3@3 gb2@3 db3@3 gb2@2 db3@2]/2", T: "b2", U: "~ db3@7",
  V: "[gb2!3 gb2@2 gb2 gb2@3 db3 db3@2 db3@2 db3@2]/2", W: "[gb2!3 gb2@2 gb2 gb2@3 db3 db3@2 db3!2 ~@2]/2",
  X: "~ db3 db3@2 db3!2 ~@2", Y: "gb2!3 bb2!3 b2!2", Z: "b2 db3!3 e3@2 f3@2", AA: "gb3@3 ~",
})).s("gm_distortion_guitar").gain(0.56)

// chords · distortion guitar · "Staff-4"
const distortion_guitar_2 = note(`<
  ~@2 A@6 ~@46 B C D@2 E@4 F@5 G ~@8 B C H I ~@8 J K L ~ M@2 ~@2 N@2 ~@11
>`.pickRestart({
  A: "[[b3,e4]@3 [b3,e4]@3 [b3,e4]@3 [b3,e4]@3 [b3,e4]@2 [b3,e4]@2]/2", B: "[b3,e4] ~@3", C: "~ [b3,e4] ~ b3 [b3,e4]@4",
  D: "[gb3@7 a3@9]/2", E: "[e3@15 gb3@8 a3@9]/4", F: "[e3@15 gb3@16 a3@9]/5", G: "[eb3,gb3,b3]", H: "[b3,e4]",
  I: "~ [b3,e4] ~ b3 [b3,e4]@2 ~@2", J: "[b3,eb4]", K: "~@3 [b3,eb4]", L: "[db4,f4]",
  M: "[[gb3,bb3,gb4]@3 [gb3,ab3]@3 [gb3,bb3]@3 [gb3,ab3]@3 [gb3,bb3]@2 [gb3,ab3]@2]/2", // Gb Gbsus2 Gb Gbsus2 Gb Gbsus2
  N: "[[gb3,bb3]@3 [gb3,ab3]@3 [gb3,bb3]@3 [gb3,ab3]@3 [gb3,bb3]@2 [gb3,ab3]@2]/2", // Gb Gbsus2 Gb Gbsus2 Gb Gbsus2
})).s("gm_distortion_guitar").gain(0.48)

// drums · kick
const kick = s("bd").struct("<~@3 A B C B D E@15 F E@21 F E@45 F E@16 F>".pickRestart({
  A: "~@10 x!2 ~@4", B: "x ~@2 x ~@2 x ~", C: "~@2 x ~@5 x ~ x!2 ~@4", D: "~ x ~@2 x ~@3", E: "x ~@4 x ~@2", F: "x",
})).gain(0.72)

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

// drums · hihat
const hihat = s("hh").struct("<~@7 [~@5 x!3] [x!7 ~]!95 [x!6 ~@2]!2 [x!7 ~]!3 x>").gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@7 [~ x] [~@7 x]!95 ~@2 [~@7 x]!3 ~>").gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A B A C D ~@11 D ~ D ~ A E D@2 A E D@2 ~@10 D ~ D ~ A E D@2 A E D@2 ~@13 F A E D@2 A E D@3 ~@3 D ~@7 D ~@3 A E D@2
  A E D@2 A E D@7
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "~@2 x ~@5 x ~@2 x ~@4", C: "~ x ~@3 x ~@2", D: "x", E: "~ x ~@2 x ~ x ~", F: "~@3 x",
})).gain(0.72)

stack(bass, distortion_guitar, distortion_guitar_2, kick, snare, hihat, open_hat, crash)

More by Rick Springfield