Strudelify

Playing to Win

John Farnham

KeyE minorTempo135 bpm
0:00/0:00
// Playing to Win — John Farnham
// 135 bpm, 4/4, key E 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: Full arrangement: all 96 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/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 finger · "Track 2"
const bass = note(`<
  ~@4 A B C D B@2 E F G H I J K L M L N O B@2 E F G H I J P L Q R N S B@2 T U V W X Y Z AA AB ~ AB ~@2 AC B@2 E AD AE H
  I AF AG B@2 E F AE AH AI J P AJ Q R N AK B P L M R N AL B@2 N AL B@2 N AL B@2 N O AM AN
>`.pickRestart({
  A: "e2@4 e2@2 ~@4 e2 ~ e2@4 e2@2 ~@4 e2 ~", B: "e2@4 e2@2 ~@4 e2 ~ e2@3 ~ e2@2 ~@4 e2 ~",
  C: "c2@4 c2 ~@5 c2 ~ c2@4 c2 ~@5 c2 ~", D: "c2@4 c2 ~@5 c2 ~ c2@3 ~ c2 ~ d2 ~ e2 ~ g2 ~",
  E: "c2@3 ~ c2 ~@5 c2 ~ c2@3 ~ c2@2 ~@4 c2 ~", F: "c2@3 ~ c2@2 ~@4 c2 ~ c2@4 c2 ~@5 c2@2",
  G: "e2@3 ~ e2@2 ~@4 e2@2 e2@3 ~ e2@2 ~@4 e2 ~", H: "e2@3 ~ e2@2 ~@4 e2 ~ e2@4 e2@2 ~@4 e2 ~",
  I: "c2@3 ~ c2@2 ~@4 c2 ~ c2@4 c2 ~@5 c2 ~", J: "c2@3 ~ c2 ~@5 c2 ~ c2@4 c2 ~@5 c2@2",
  K: "a2@3 ~ a2@2 ~@2 e2@2 g2@2 a2@2 ~@2 a2@2 ~@4 a2@2", L: "g2@3 ~ g2@3 ~ d2@2 e2@2 g2@2 ~@2 g2@3 ~@3 g2 ~",
  M: "a2@3 ~ a2@2 ~@2 e2@2 g2 ~ a2@2 ~@2 a2@3 ~@3 a2@2", N: "c2@3 ~ c2@2 ~@4 c2 ~ c2@3 ~ c2@2 ~@4 c2@2",
  O: "d2@3 ~ d2@2 ~@4 d2@2 d2@3 ~ d2@2 ~@4 d2@2", P: "a2@3 ~ a2@2 ~@2 e2 ~ g2@2 a2@2 ~@2 a2@2 ~@4 a2@2",
  Q: "a2@3 ~ a2@2 ~@2 e2@2 g2@2 a2@2 ~@2 a2@3 ~@3 a2@2", R: "g2@3 ~ g2@2 ~@2 d2@2 e2@2 g2@2 ~@2 g2@3 ~@3 g2 ~",
  S: "d2@3 ~ d2@2 ~@4 d#2 ~ d#2@3 ~ d#2@2 ~@4 d2@2", T: "c2@4 c2@2 ~@4 c2@2 c2@3 ~ c2@2 ~@4 c2 ~",
  U: "d2@4 d2@2 ~@4 d2 ~ d2@4 d2@2 ~@4 d2 ~", V: "e2@3 ~ e2@2 ~@4 e2@2 e2@4 e2@3 ~@3 e2@2",
  W: "e2@3 ~ e2@2 ~@4 e2@2 e2@7 ~@3 e2@2", X: "c2@4 c2@2 ~@4 c2 ~ c2@4 c2@2 ~@4 c2 ~",
  Y: "c#2@4 c#2@2 ~@4 c#2 ~ c#2@4 c#2@2 ~@4 c#2@2", Z: "d2@2 ~@2 d2@2 ~@4 d2 ~ d2@2 ~@2 d2@3 ~@3 d2@2", AA: "b1 ~@5",
  AB: "e2 ~@3", AC: "d2 ~ d2 ~ d2 ~ d2 ~ d2@2 d2 ~ d2@2 d2 ~ d2@2 d2 ~ d2 ~ d2@2",
  AD: "c2@3 ~ c2@2 ~@4 c2 ~ c2@4 c2@2 ~@4 c2@2", AE: "e2@3 ~ e2@2 ~@4 e2 ~ e2@3 ~ e2@2 ~@4 e2 ~",
  AF: "~@4 b2@4 a2@4 g2@4 e2@3 ~ d2@3 ~", AG: "e2@2 ~@7 e2@2 ~", AH: "e2@3 ~ e2@2 ~@4 e2 ~ e2@4 e2@2 ~@4 e2@2",
  AI: "c2@3 ~ c2@2 ~@4 c2 ~ c2@4 c2@2 ~@4 c2 ~", AJ: "g2@3 ~ g2@3 ~ d2@2 e2@2 g2@2 ~@2 g2@3 ~@3 g2@2",
  AK: "d2@3 ~ d2@2 ~@4 d2@2 d#2@3 ~ d#2@2 ~@4 d#2@2", AL: "d2@3 ~ d2@2 ~@4 d2 ~ d2@3 ~ d2@2 ~@4 d2@2", AM: "e2@23 ~",
  AN: "~@10 e2@5 ~@9",
})).s("gm_electric_bass_finger").gain(0.43)

// chords · clavinet · "Track 3"
const clavinet = note(`<
  A B C D A E C F A B C D A E C F ~@6 A B C D A E C G ~@6 A B ~@14 A H I J K L M N K A B C D A E C F ~@6 A ~@6 A B ~@2 A
  B ~@2 A B ~@2 A O
>`.pickRestart({
  A: "~@6 [e4,g5] ~@3 [f#4,a5] ~@3 [d4,f#5] ~@3 [e4,g5]@3 ~ [e4,g5] ~", // Em F#m D Em
  B: "~@6 [e4,g5] ~@3 [f#4,a5] ~@3 [d4,f#5] ~ [d4,f#5] ~ [e4,g5]@2 [d4,f#5]@2 [e4,g5] ~", // Em F#m D Em D Em
  C: "~@6 [c4,e5] ~@3 [d4,f#5] ~@3 [b3,d5] ~@3 [c4,e5]@3 ~ e5@2, ~@22 c4 ~", // C D Bm C
  D: "~@6 [c4,e5] ~@3 d4@2 ~@2 [b3,d5] ~ [b3,d5] ~ [c4,e5]@2 [b3,d5]@2 [c4,e5] ~, ~@10 f#5 ~@13", // C Bm C Bm C
  E: "~@6 [e4,g5] ~@3 a5@2 ~@2 [d4,f#5] ~ [d4,f#5] ~ [e4,g5]@2 [d4,f#5]@2 [e4,g5] ~, ~@10 f#4 ~@13", // Em D Em D Em
  F: "~@6 [c4,e5] ~@3 d4@2 ~@2 [b3,d5] ~ b3@2 [c4,e5]@2 [b3,d5]@2 c4@2, ~@10 f#5 ~@5 d5 ~@5 e5 ~", // C Bm C Bm
  G: "~@6 [c4,e5] ~@3 [d4,f#5]@2 ~@2 [b3,d5] ~ b3@2 [c4,e5]@2 [b3,d5]@2 c4@2, ~@16 d5 ~@5 e5 ~", // C D Bm C Bm
  H: "~@6 [e4,g5] ~@3 [f#4,a5] ~@3 [d4,f#5] ~ [d4,f#5] ~ [e4,g5]@2 e5 ~ f#5 ~", // Em F#m D Em
  I: "g5 ~@3 f#5@2 ~@2 e5 ~@3 a5@2 ~@2 g5@2 ~@2 f#5 ~@3", J: "e5 ~@3 a5 ~@3 g5 ~@3 f#5@2 ~@2 e5 ~@3 d5 ~ b4 ~",
  K: "e5@2 ~@4 [e4,g5] ~@3 [f#4,a5] ~@3 [d4,f#5] ~@3 [e4,g5]@3 ~ [e4,g5] ~", // Em F#m D Em
  L: "~@6 [e4,g5] ~@3 a5@2 ~@2 [d4,f#5] ~ [d4,f#5] ~ [e4,g5]@2 e5 ~ f#5 ~, ~@10 f#4 ~@13", // Em D Em
  M: "g5 ~ f#5 ~ e5 ~ a5 ~ g5 ~ f#5 ~", N: "e5@2 ~@2 a5 ~@3 g5 ~@3 f#5 ~@3 e5 ~@3 d5 ~ b4 ~",
  O: "e5@2 g5@2 a5 ~ b5 ~ d6 ~ e6@3 ~@11",
})).s("gm_clavinet").gain(0.35)

// chords · percussive organ · "Track 4"
const percussive_organ = note(`<
  A B C D A B C E A B C D A B C E F G H I J K A B C D A B C E F G H L J K A B M N O@2 P Q R S ~@6 A T ~@2 A U ~@2 A@2 B
  C D A B C E V G W I J K A F G H L J K A B J K A B J K A B J K A X
>`.pickRestart({
  A: "~@6 [e5,g6] ~@3 [f#5,a6] ~@3 [d5,f#6] ~@3 [e5,g6]@3 ~ [e5,g6] ~", // Em F#m D Em
  B: "~@6 [e5,g6] ~@3 a6@2 ~@2 [d5,f#6] ~ [d5,f#6] ~ [e5,g6]@2 [d5,f#6]@2 [e5,g6] ~, ~@10 f#5 ~@13", // Em D Em D Em
  C: "~@6 [c5,e6] ~@3 [d5,f#6] ~@3 [b4,d6] ~@3 [c5,e6]@3 ~ e6@2, ~@22 c5 ~", // C D Bm C
  D: "~@6 [c5,e6] ~@3 d5@2 ~@2 [b4,d6] ~ [b4,d6] ~ [c5,e6]@2 [b4,d6]@2 [c5,e6] ~, ~@10 f#6 ~@13", // C Bm C Bm C
  E: "~@6 [c5,e6] ~@3 d5@2 ~@2 [b4,d6] ~ b4@2 [c5,e6]@2 [b4,d6]@2 c5@2, ~@10 f#6 ~@5 d6 ~@5 e6 ~", // C Bm C Bm
  F: "[a3,c#6,e6,a6]@3 ~ [a3,c#6,e6,a6]@2 ~@2 a3@2 a4 ~ a3@2 ~@2 a3@2 ~@2 a3@2 a4@2", // A
  G: "[g3,b5,d6,g6]@3 ~ [g3,b5,d6,g6]@3 ~ g3@2 g4@2 g3@3 ~ g3@3 ~ g3@2 g4 ~", // G
  H: "[a3,c#6,e6,a6]@3 ~ [a3,c#6,e6,a6]@3 ~ a3@2 a4@2 a3@3 ~ a3@3 ~ a3@2 a4 ~", // A
  I: "[g3,b5,d6,g6]@3 ~ [g3,b5,d6,g6]@3 ~ g3@2 g4 ~ g3@2 ~@2 g3@2 ~@2 g3@2 g4 ~", // G
  J: "g6 ~ f#6 ~ g6 ~ f#6 ~ e6 ~ f#6 ~ g6 ~ f#6 ~ g6 ~ f#6 ~ e6 ~ f#6 ~",
  K: "a6 ~ g6 ~ a6 ~ g6 ~ f#6 ~ g6 ~ a6 ~ g6 ~ a6 ~ g6 ~ f#6 ~ d6 ~",
  L: "[g3,b5,d6,g6]@3 ~ [g3,b5,d6,g6]@3 ~ g3@2 g4@2 g3@2 ~@2 g3@2 ~@2 g3@2 g4 ~", M: "[c5,e5,g5]", N: "[d5,f#5,a5]",
  O: "[[b4,e5,g5]@19 ~@5]/2", P: "[c5,e5,g5]@23 ~", Q: "[c#5,e5,a5]@7 ~", R: "[b4,d5,g5]@12 [d5,f#5,a5]@11 ~",
  S: "[b5,e6] ~ [d6,g6] ~ [e6,a6] ~ [g6,b6] ~ [a6,d7] ~ [b6,e7] ~ [b6,e7] ~ [d7,g7] ~ [e7,a7] ~ [g7,b7] ~ [a7,d8] ~ [b7,e8] ~", // E5 G5 A5 G D5 E5 G5 A5 …
  T: "~@6 [e5,g6] ~@3 a6@2 ~@2 [d5,f#6] ~ [d5,f#6] ~@7, ~@10 f#5 ~@13", // Em D
  U: "~@6 [e5,g6] ~@3 a6@2 ~@2 [d5,f#6] ~ [d5,f#6] ~ [e5,g6]@2 ~@4, ~@10 f#5 ~@13", // Em D Em
  V: "[a3,c#6,e6,a6]@3 ~ [a3,c#6,e6,a6]@3 ~ a3@2 a4 ~ a3@2 ~@2 a3@2 ~@2 a3@2 a4@2", // A
  W: "[a3,c#6,e6,a6]@3 ~ [a3,c#6,e6,a6]@2 ~@2 a3@2 a4@2 a3@3 ~ a3@3 ~ a3@2 a4 ~", // A
  X: "e6@2 g6@2 a6 ~ b6@2 d7 ~ e7@2 ~@12",
})).s("gm_percussive_organ").gain(0.39)

// other · overdriven guitar · "Track 9"
const overdriven_guitar = note(`<
  ~@4 A@2 B C D E F@2 E@2 F G H I H J K L D E F@2 E@2 F G H I H J M N O P Q R S T U V W ~@7 X E F@2 E@2 G Y Z X E F@2
  E@2 F G H I H J K AA X H I H J K L AB AC K L X E K L D E K L AD AE
>`.pickRestart({
  A: "[[b5,d6]@3 ~]/2", B: "~@4 e6@7 ~ e6@6 d6@2 c6@2 b5@2", C: "a5@3 g5 a5 g5 f#5 g5 f#5 e5 b4 d5",
  D: "[d3,e5]@2 e3@2 e3@2 e3@3 ~ e3@2 d3@2 e3@2 e3@2 e3@2 ~@2 e3@2", E: "d3 e3!3 ~ e3 d3 e3!3 ~ e3",
  F: "b2 c3!3 ~ c3 b2 c3!3 ~ c3", G: "b2 c3!3 ~ c3 b2 c3!3 ~@2", H: "[e3,a3]@3 ~ [e3,a3]@2 ~@14 [e3,a3] ~ [e3,a3] ~",
  I: "[d3,g3]@3 ~ [d3,g3]@2 ~@14 [d3,g3] ~ [d3,g3] ~", J: "[d3,g3]@3 ~ [d3,g3]@2 ~@18", K: "e3, c3@11 ~",
  L: "[d3,f#3]@11 ~", M: "c3, e3@11 ~", N: "[d3,f#3]@6 [d#3,f#3,b3]@5 ~", O: "g4 f#4 e4 f#4 e4 d4 e4@4 d4 b3",
  P: "d4@2 e4@2 d4@2 g4@3 ~ e4@11 ~@3", Q: "[c3,e3]@9 ~ [d3,f#3] [e3,g3]",
  R: "[d3,f#3]@3 ~ [d3,f#3] [e3,g3] [f#3,a3]@4 b2 d3", S: "d3@2 e3@2 e3@2 e3@2 d3@2 b2 ~ d3 ~ e3 ~ e3@2 e3@2 d3@2 b2 ~",
  T: "e4@23 ~", U: "[c3,e3]@7 ~ [c3,e3]@2 [d3,f#3]@2 [e3,g3]@7 ~ [e3,g3]@2 [d3,f#3]@2",
  V: "[c#3,e3]@7 ~ [c#3,e3]@2 [d3,f#3]@2 e3@8 f#3@2 g3@2, ~@12 g3@5 ~@7", W: "b3@4 a3 g3 a3@2 d3@4",
  X: "d3@2 e3@2 e3@2 e3@3 ~ e3@2 d3@2 e3@2 e3@2 e3@2 ~@2 e3@2", Y: "c3 b2 a2 g2 e2 d2", Z: "e2 ~@7",
  AA: "[d3,f#3] [d#3,f#3]", AB: "d3@2 e3@2 e3@2 e3@3 ~ e3@2 d3@2 e3@2 e3@2 ~@2 f#2 ~ g2@2",
  AC: "e2@4 f#2@4 g2@4 b2@4 d3@4 e3@3 ~", AD: "[b2,e3]@3 ~@5", AE: "e3@2 g3@2 a3@2 b3@2 d4@2 e4@3 ~@11",
})).s("gm_overdriven_guitar").gain(0.31)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@95 [~@2 x!4 ~@6]>").gain(0.52)

// drums · hihat
const hihat = s("hh").struct("<~@8 [~ x!5 ~ x!5]!28 ~@2 [~ x!5 ~ x!5]!7 ~@15 x [~ x!5 ~ x!5]!33 ~@2>").gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<~@94 [~@10 x!2] [x!2 ~@10]>").gain(0.52)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@4 ~@28 A@2 ~@14 B@4 ~@2 B@2 ~@36>".pickRestart({
  A: "x!4", B: "x!6",
})).gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@94 [~@7 x!3 ~@2] ~>").gain(0.52)

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

// drums · ride
const ride = s("rd").struct("<~@20 A@2 ~@12 A@2 ~@2 A@7 B ~@27 A@2 ~@5 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.45)

stack(
  bass, clavinet, percussive_organ, overdriven_guitar, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  ride
)

More by John Farnham