Strudelify
Playing to Win cover art

1984 · Playing to Win

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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "Track 2"
const bass = note(`<
  ~@4 A@2 B C A@2 B D A@2 D@2 E F E F D G A@2 B D A@2 D@2 E F E F D H A@2 I G J K D L G M N ~ N ~@2 O A@2 B D A@2 D P Q
  A@2 B D R A D@2 E F E F D S A E F E F D G A@2 D G A@2 D G A@2 D G T U
>`.pickRestart({
  A: "e2@4 e2@2 ~@4 e2 ~ e2@3 ~ e2@2 ~@4 e2 ~", B: "c2@3 ~ c2 ~@5 c2 ~ c2@3 ~ c2@2 ~@4 c2 ~",
  C: "c2@4 c2 ~@5 c2 ~ c2@3 ~ c2 ~ d2 ~ e2 ~ g2 ~", D: "c2@3 ~ c2@2 ~@4 c2 ~ c2@3 ~ c2@2 ~@4 c2@2",
  E: "a2@3 ~ a2@2 ~@2 e2 ~ g2@2 a2@2 ~@2 a2@2 ~@4 a2@2", F: "g2@3 ~ g2@3 ~ d2@2 e2@2 g2@2 ~@2 g2@3 ~@3 g2 ~",
  G: "d2@3 ~ d2@2 ~@4 d2 ~ d2@3 ~ d2@2 ~@4 d2@2", H: "d2@3 ~ d2@2 ~@4 d#2 ~ d#2@3 ~ d#2@2 ~@4 d2@2",
  I: "c2@4 c2@2 ~@4 c2@2 c2@3 ~ c2@2 ~@4 c2 ~", J: "e2@3 ~ e2@2 ~@4 e2@2 e2@4 e2@3 ~@3 e2@2",
  K: "e2@3 ~ e2@2 ~@4 e2@2 e2@7 ~@3 e2@2", L: "c#2@4 c#2@2 ~@4 c#2 ~ c#2@4 c#2@2 ~@4 c#2@2", M: "b1 ~@5", N: "e2 ~@3",
  O: "d2 ~ d2 ~ d2 ~ d2 ~ d2@2 d2 ~ d2@2 d2 ~ d2@2 d2 ~ d2 ~ d2@2", P: "~@4 b2@4 a2@4 g2@4 e2@3 ~ d2@3 ~",
  Q: "e2@2 ~@7 e2@2 ~", R: "e2@3 ~ e2@2 ~@4 e2 ~ e2@4 e2@2 ~@4 e2 ~", S: "d2@3 ~ d2@2 ~@4 d2@2 d#2@3 ~ d#2@2 ~@4 d#2@2",
  T: "e2@23 ~", U: "~@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 D A B C D A E C D ~@6 A B C D A E C D ~@6 A B ~@14 A F G H I F J H I A B C D A E C D ~@6 A ~@6 A B ~@2 A
  B ~@2 A B ~@2 A K
>`.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 [e4,g5] ~@3 [f#4,a5] ~@3 [d4,f#5] ~ [d4,f#5] ~ [e4,g5]@2 e5 ~ f#5 ~", // Em F#m D Em
  G: "g5 ~@3 f#5@2 ~@2 e5 ~@3 a5@2 ~@2 g5@2 ~@2 f#5 ~@3", H: "e5 ~@3 a5 ~@3 g5 ~@3 f#5@2 ~@2 e5 ~@3 d5 ~ b4 ~",
  I: "e5@2 ~@4 [e4,g5] ~@3 [f#4,a5] ~@3 [d4,f#5] ~@3 [e4,g5]@3 ~ [e4,g5] ~", J: "g5 ~ f#5 ~ e5 ~ a5 ~ g5 ~ f#5 ~",
  K: "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 D A B C D A B C D E F G F H I A B C D A B C D E F G F H I A B J K L@2 J M N O ~@6 A P ~@2 A Q ~@2 A@2 B
  C D A B C D E F G F H I A E F G F H I A B H I A B H I A B H I A R
>`.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: "[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
  F: "[g3,b5,d6,g6]@3 ~ [g3,b5,d6,g6]@3 ~ g3@2 g4@2 g3@3 ~ g3@3 ~ g3@2 g4 ~", // G
  G: "[a3,c#6,e6,a6]@3 ~ [a3,c#6,e6,a6]@3 ~ a3@2 a4@2 a3@3 ~ a3@3 ~ a3@2 a4 ~", // A
  H: "g6 ~ f#6 ~ g6 ~ f#6 ~ e6 ~ f#6 ~ g6 ~ f#6 ~ g6 ~ f#6 ~ e6 ~ f#6 ~",
  I: "a6 ~ g6 ~ a6 ~ g6 ~ f#6 ~ g6 ~ a6 ~ g6 ~ a6 ~ g6 ~ f#6 ~ d6 ~", J: "[c5,e5,g5]", K: "[d5,f#5,a5]",
  L: "[[b4,e5,g5]@19 ~@5]/2", M: "[c#5,e5,a5]@7 ~", N: "[b4,d5,g5]@12 [d5,f#5,a5]@11 ~",
  O: "[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 …
  P: "~@6 [e5,g6] ~@3 a6@2 ~@2 [d5,f#6] ~ [d5,f#6] ~@7, ~@10 f#5 ~@13", // Em D
  Q: "~@6 [e5,g6] ~@3 a6@2 ~@2 [d5,f#6] ~ [d5,f#6] ~ [e5,g6]@2 ~@4, ~@10 f#5 ~@13", // Em D Em
  R: "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 E@2 F@2 E@2 G X Y E@2 F@2
  E@2 F G H I H J K Z E H I H J K L AA AB K L E@2 K L D E K L AC AD
>`.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: "c3 b2 a2 g2 e2 d2", Y: "e2 ~@7", Z: "[d3,f#3] [d#3,f#3]",
  AA: "d3@2 e3@2 e3@2 e3@3 ~ e3@2 d3@2 e3@2 e3@2 ~@2 f#2 ~ g2@2", AB: "e2@4 f#2@4 g2@4 b2@4 d3@4 e3@3 ~",
  AC: "[b2,e3]@3 ~@5", AD: "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@4 D@2 B ~@7 C@4 D@2 B ~ B ~@13 B ~ B ~ E F B ~ B@2 ~@7 C@4 D@2 B C@4 D@2 B ~ D@2 B ~ D@2 B ~ D@2 B
  ~
>`.pickRestart({
  A: "~@3 x", B: "x", C: "x!2 ~@4", D: "x!2", E: "x ~ x ~ x ~ x ~@2 x ~ x", F: "~@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