Strudelify

Games People Play

Joe South

KeyA majorTempo85 bpm
0:00/0:00
// Games People Play — Joe South
// 85 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(85/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · electric guitar clean · "5199GAME"
const electric_guitar_clean = note(`<
  ~ A B C A@2 B C A@2 B C A@2 B C A@2 B D E A B C A@2 B C A F B F G A B C A@2 B C A@2 B C H A B C A@2 B C A@2 B I J F B
  F G A B C A@2 B C A C A C K
>`.pickRestart({
  A: "~@2 [a3,c#4,e4] ~@3 [a3,c#4,e4] ~@3 [a3,c#4,e4] ~@3 [a3,c#4,e4] ~", // A
  B: "~@2 [g#3,b3,e4] ~@3 [g#3,b3,e4] ~@3 [g#3,b3,e4] ~@3 [g#3,b3,e4] ~", // E
  C: "~@2 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [g#3,b3,e4] ~@3 [g#3,b3,e4] ~", // D E
  D: "~@2 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~ [g#3,b3,e4]@2 ~@6", E: "~@8 [a3,c#4,e4] ~@7",
  F: "~@2 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~", // D
  G: "~@2 [g#3,b3,e4] ~@3 [g#3,b3,e4] ~ [g#3,b3,e4] ~@7", H: "~@2 [a3,c#4,e4] ~@3 [a3,c#4,e4] ~ [a3,c#4,e4] ~@7",
  I: "[a3,d4,f#4] ~@7 [g#3,b3,e4] ~@7", J: "[c#4,e4,a4] ~@2 [c#4,e4,a4] ~@2 [c#4,e4,a4] ~ [a4,c#5]@6 ~@2",
  K: "[a3,c#4,e4]@3 ~@13", // A
})).s("gm_electric_guitar_clean").gain(0.22).pan(0.9)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D E F C G H F I J K L C M N ~@2 O A B C D E F C G P Q R S T U C V W X Y Z W X AA AB A B C D E F C G N ~ AC AD
  AE Q AF S A B C D E F C G AG AH AG AI
>`.pickRestart({
  A: "a1@2 ~ a1!2 f#1 a1@2 a1 ~@2 f#1 a1@2 a1 ~", B: "e1@2 ~ e1!2 d1 e1@2 e1@2 ~ d1 e1 ~ e1@2",
  C: "d1@2 ~ d1!2 c#1 d1@2 e1@2 ~ d1 e1 d1 e1 ~", D: "a1@2 ~ a1!2 f#1 a1 ~ a1 ~@2 f#1 a1@2 f#1 e1",
  E: "a1@2 ~ a1!2 f#1 a1@2 a1@2 ~ f#1 a1@2 a1@2", F: "e1@2 ~ e1!2 d1 e1 ~ e1@2 ~ d1 e1 ~ e1@2",
  G: "a1@2 ~ a1!2 f#1 a1 ~ a1@2 ~ f#1 a1@2 f#1 e1", H: "a1@2 ~ a1!2 f#1 a1 ~ a1@2 ~ f#1 a1 ~ a1 ~",
  I: "d1@2 ~ d1!2 c#1 d1@2 e1 ~@2 d1 e1 d1 e1 ~", J: "a1@2 ~ a1!2 f#1 a1@2 a1 ~@2 f#1 a1@2 f#1 e1",
  K: "a1 ~@2 a1!2 f#1 a1 ~ a1 ~@2 f#1 a1@2 a1 ~", L: "e1@2 ~ e1!2 d1 e1@2 e1@2 ~ d1 e1@2 e1@2",
  M: "a1@2 ~ a1!2 f#1 a1@2 a1@2 ~ f#1 a1@2 f#1 e1", N: "a1 ~@7", O: "~@4 a1@3 ~",
  P: "d1@2 ~ d1 a1 f#1 d1 ~@4 d1 a1 f#1 d1@2", Q: "e1 ~@2 e1 b1 g#1 e1 ~@4 e1 b1 g#1 e1 ~",
  R: "d1@2 ~ d1 a1 f#1 d1 ~@4 d1 a1 f#1 d1 ~", S: "e1@2 ~ e1 b1 g#1 e1@2 ~@8",
  T: "a1@2 ~ a1!2 f#1 a1 ~ a1 ~@2 f#1 a1 ~ a1 ~", U: "e1 ~@2 e1!2 d1 e1 ~ e1 ~@2 d1 e1 ~ e1@2",
  V: "a1 ~@2 a1!2 f#1 a1 ~ a1 ~@2 a1!2 f#1 a1 ~", W: "a1 ~@2 a1!2 f#1 a1 ~ a1 ~@2 f#1 a1 ~ a1 ~",
  X: "e1@2 ~ e1!2 d1 e1 ~ e1 ~@2 d1 e1 ~ e1@2", Y: "d1@2 ~ c#1 d1 c#1 d1@2 e1@2 ~ d1 e1 ~ e1 ~",
  Z: "a1 ~@2 a1!2 f#1 a1 ~ a1 ~@2 f#1 a1@2 f#1 e1", AA: "d1@2 ~ c#1 d1 c#1 d1@2 e1@2 ~ d1 e1 d1 e1 ~",
  AB: "a1 ~@2 a1!2 f#1 a1 ~ a1@2 ~@6", AC: "d1@3 ~@5 e1@3 ~@5", AD: "a1 ~@2 a1 ~@4 a2@7 ~, ~@6 a1@9 ~",
  AE: "d1@2 ~ d1 a1 f#1 d1@2 ~@3 d1 a1 f#1 d1@2", AF: "d1@2 ~ d1 a1 f#1 d1@2 ~@3 d1 a1 f#1 d1 ~",
  AG: "d1 ~ d1 c#1 d1!2 d1@2 e1 ~ e1 d1 e1!3 ~", AH: "a1 ~ a1 f#1 a1!2 a1@2 ~@2 a1 f#1 a1 ~ a1@2", AI: "a1@7 ~",
})).s("gm_electric_bass_finger").gain(0.44)

// other · brass section
const brass_section = note(`<
  ~ A B C D E B F D ~@12 A B C D E B F D G H ~ I J K L M ~@8 A B C D E B F D ~@4 N H ~ O A B C D E B F D ~ P ~@2
>`.pickRestart({
  A: "~@5 [e3,e4] [f#3,f#4] [a3,a4]@5 ~@4", B: "~@5 [e3,e4] [f#3,f#4] [c#4,c#5]@3 [b3,b4] ~@5", C: "[d3,d4] [e3,e4]",
  D: "~@2 [c#4,c#5] [b3,b4] [c#4,c#5] [b3,b4] [c#4,c#5] [b3,b4] [a3,a4]@2 ~@6", // C# B C# B C# B A
  E: "~@5 [e3,e4] [f#3,f#4] [a3,a4]@4 ~@5", F: "[d3,d4]@8 [e3,e4]@7 ~", G: "~@4 [f#3,f#4] [d3,d4] ~ [a3,a4] ~@8",
  H: "~@4 [e3,e4] [c#4,c#5] ~ [b3,b4] ~@8", I: "[g#4,e5]@8 [g#4,e5] ~@7", J: "~@12 [c#4,c#5] ~ [d4,d5] ~",
  K: "[c#4,c#5]@3 [b3,b4]!2 ~@7 [c#4,c#5] ~ [e4,e5] ~", // C# B C# E
  L: "[a4,d5,f#5]@8 [e4,e5] ~ [c#4,c#5] [b3,b4] [c#4,c#5] [b3,b4] [a3,a4] [f#3,f#4]", // D E C# B C# B A F#
  M: "[a3,a4]@4 ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~@8", N: "~@4 [d3,d4] [f#3,f#4] ~ [a3,a4] ~@8", O: "[g#4,e5]@8 [e4,e5] ~@7",
  P: "~@2 [c#4,c#5] [b3,b4] [c#4,c#5] [b3,b4] [c#4,c#5] [b3,b4] [a3,a4]@4 ~@4", // C# B C# B C# B A
})).s("gm_brass_section").gain(0.21).pan(0.4)

// bass · clavinet
const bass_2 = note(`<
  ~@17
  [~@6 e2 f#2 g2!2 f#2 ~ e2@3 ~]
  [~@6 e2 f#2 g2!2 f#2 ~ e2@4]
  [~@8 e2 ~@7]
  ~@21
  [~@6 e2 f#2 g2!2 f#2 ~ e2@3 ~]!2
  ~@30
>`).s("gm_clavinet").gain(0.27).pan(0.2)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~ A B C D@2 E F G ~@12 A B C D@2 E F G ~@16 A B C D@2 E F G ~@8 A B C D@2 E F G F G F H
>`.pickRestart({
  A: "a3 ~@2 a3!4 ~ a3 ~@2 a3!4 ~", B: "e3 ~@2 e3!4 ~ e3 ~@2 e3!4 ~", C: "d3 ~@2 d3!4 ~ e3 ~@2 e3!4 ~",
  D: "a3 ~@2 a3!4 ~ a3 ~@2 a3!5", E: "e3 ~@2 e3!4 ~ e3 ~@2 e3!5", F: "d3 ~@2 d3!4 ~ e3 ~@2 e3!5",
  G: "a3 ~@2 a3!6 ~@2 a3!4 ~", H: "a3 ~@7",
})).s("gm_electric_guitar_muted").gain(0.25).pan(0.1)

// chords · percussive organ
const percussive_organ = note(`<
  ~ A B C A@2 B C A@2 B C A@2 B C A@2 B D E A B C A@2 B C A F B F G A B C A@2 B C A@2 B C H A B C A@2 B C A@2 B I J F B
  F K A B C A@2 B C A C L C M
>`.pickRestart({
  A: "~@2 [a4,c#5,e5] ~@3 [a4,c#5,e5] ~@3 [a4,c#5,e5] ~@3 [a4,c#5,e5] ~", // A
  B: "~@2 [g#4,b4,e5] ~@3 [g#4,b4,e5] ~@3 [g#4,b4,e5] ~@3 [g#4,b4,e5] ~", // E
  C: "~@2 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [g#4,b4,e5] ~@3 [g#4,b4,e5] ~", // D E
  D: "~@2 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~ [g#4,e5] ~@7", E: "~@4 [e4,a4] ~@3",
  F: "~@2 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~", // D
  G: "~@2 [g#4,b4,e5] ~@3 [g#4,b4,e5] ~ [b4,e5]@2 ~@6", H: "~@2 [a4,c#5,e5] ~@3 [a4,c#5,e5] ~ [a4,c#5,e5] ~@7",
  I: "[a4,d5] ~@7 [b4,e5] ~@7", J: "[e4,a4] ~ [e4,a4] ~@3 [e4,a4] ~ [a4,c#5] ~@7",
  K: "~@2 [g#4,b4,e5] ~@3 [g#4,b4,e5] ~ [b4,e5] ~@7", // E E5
  L: "~@2 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~", M: "a3@13 ~@3",
})).s("gm_percussive_organ").gain(0.19).pan(0)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A@3 B A@3 B A@3 C A@3 B A@2 D E A@3 B A@3 B A@3 D A@3 B ~@4 A@3 D A@3 B A@3 B A@2 ~ F A@3 D A@3 B A@3 B A@2 B ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~@4 x ~@7 x!3 ~", D: "~ x ~@2", E: "x ~@2 x ~@2 x ~ x ~@7", F: "~@3 x",
})).gain(0.62)

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

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

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

// drums · tambourine
const tambourine = s("tb").struct("<~ A@8 ~@12 A@8 ~@16 A@8 ~@8 A@11 B>".pickRestart({
  A: "x!16", B: "x",
})).gain(0.31)

// drums · ht
const ht = s("ht").struct(`<
  ~@4 A ~@3 B ~@11 C ~@3 A ~@3 B ~@15 C ~@3 A ~@3 B ~@3 B ~@3 C ~@3 A ~@3 B ~@4
>`.pickRestart({
  A: "~@9 x!4 ~@3", B: "~@14 x!2", C: "~@9 x ~ x!3 ~ x",
})).gain(0.44)

// drums · mt
const mt = s("mt").struct("<~@4 A ~@19 A ~@23 A ~@15 A ~@8>".pickRestart({
  A: "~@14 x!2",
})).gain(0.5)

stack(
  electric_guitar_clean, bass, brass_section, bass_2, electric_guitar_muted, percussive_organ, kick, snare, hihat,
  open_hat, crash, tambourine, ht, mt
)