Strudelify

Mind Games

John Lennon

KeyC majorTempo66 bpm
0:00/0:00
// Mind Games — John Lennon
// 65.5 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(65.5/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.

// chords · piano
const piano = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D E F G H I J K L A B C D A B C D A B C D E F G H I J K L A B C D A B C D A B
  C D A B C D A B C M ~
>`.pickRestart({
  A: "[c4,e4,g4,c5] [g3,c4,g4,c5] [b3,e4,g4] [b3,e4,a4], e5 ~", // C C5 Em Esus4
  B: "[c4,e4,a4,c5] [g3,c4,g4,c5] [c4,e4,g4] [c4,e4,a4], e5 ~", // Am C5 C Am
  C: "[f4,a4,c5] [c4,e4,a4,c5] [g3,c4,e4,g4] [e3,a3,c4,e4,a4], e5 ~", // F Am C Am
  D: "[e4,f#4,c5] [c4,e4,f#4,c5] [c4,e4,g4,c5]@2, e5 ~", E: "[c5,e5]!2 [a4,d5,f#5]!2, g5 ~",
  F: "[g4,b4,d5] [d4,g4,b4]!3", G: "[g4,b4,e5] [g4,b4]!3", H: "[d4,f#4,a4] [d4,f#4]!3",
  I: "[c5,e5]!2 [a4,d5,f#5] [a4,d5], g5 ~", J: "[g4,b4,d5] [d4,g4,b4] [b3,d4,g4]!2",
  K: "[g4,f5] [b3,e4,g4] [b3,d4,g4] [g4,b4,e5]", L: "[f#4,a4,d5] [f#4,a4]@3",
  M: "[e4,f#4,c5] [c4,e4,f#4,c5] c5@2, e5 ~", // F#m7b5
})).s("gm_piano").gain(0.54).pan(0.7)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D E F G H E F G I A B C D A B C D A B C D E F G H E F G I A B C D A B C D A B
  C D A B C D A B C J ~
>`.pickRestart({
  A: "c3 b2", B: "a2 g2", C: "f2 e2", D: "d2 c2", E: "c3 d3", F: "g2 f2", G: "e2 d2", H: "d2@3 d2 d3@2 d2 d3",
  I: "d2@3 d3 d2@2 d3@2", J: "d2 ~",
})).s("gm_electric_bass_finger").gain(0.56)

// other · distortion guitar · "Guitar Lead"
const distortion_guitar = note("<~ A@20 ~@8 A@12 ~@7 B C A@18 D ~>".pickRestart({
  A: "e5@2 g4 a4", B: "~@2 [d5,f#5]@4 [c#5,e5]@2 [b4,d5]@4 b4 a4!2 g4", C: "e5@2 g4 a4, e4@5 ~@11", D: "e5 ~",
})).s("gm_distortion_guitar").gain(0.35)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A@6 B C D B@2 C D B@2 C D B@2 C D E F G H I J K L B@2 C D B@2 C D B@2 C D E F G H I J K L B@2 C D B@2 C D B@2 C D B@2
  C D B@2 C M ~
>`.pickRestart({
  A: "[~@4 e6@2 g5 a5 e6@2 g5 a5 e6@2 g5 a5 e6@2 g5 a5 ~@2 g5 a5, ~@13 f7@69 ~@14, ~@5 [c6,e6]]/6", // C
  B: "~@2 g5 a5, [c6,e6]", C: "e6@2 g5 a5, [c6,f6]", D: "e6@2 g5 a5, [d6,a6]", E: "[c6,e6]!2 [a5,d6,f#6]!2, g6 ~",
  F: "[g5,b5,d6] [d4,g5,b5]!3", G: "[g5,b5,e6] [g5,b5]!3", H: "[d4,f#5,a5] [d4,f#5]!3",
  I: "[c6,e6]!2 [a5,d6,f#6] [a5,d6], g6 ~", J: "[g5,b5,d6] [d4,g5,b5] [b3,d4,g5]!2",
  K: "[g5,f6] [b3,e5,g5] [b3,d4,g5] [g5,b5,e6]", L: "[f#5,a5,d6] [f#5,a5]@3", M: "[d6,e6,a6] ~",
})).s("gm_string_ensemble_1").gain(0.27)

// chords · epiano2 · "el Piano"
const epiano2 = note(`<
  ~@2 A B C D E B C D E B C D E B C D E B C F G H I F G H I D E B C D E B C D E B C F G H I F G H I D E B C D E B C D E
  B C D E B C D E B J ~
>`.pickRestart({
  A: "~@8 [a3,c4,e4]!8", B: "[a3,c4,f4]!16", C: "[f#3,a3,d4]!16", D: "[g3,c4,e4]!16", E: "[a3,c4,e4]!16",
  F: "~@2 [c5,e5,g5]!3 ~ [c5,e5,g5] ~@3 [a4,d5,f#5]!3 ~ [a4,d5,f#5] ~", // C D
  G: "~@2 [g4,b4,d5]!2 [d4,g4,b4] ~ [d4,g4,b4] ~@3 [d4,g4,b4]!3 ~ [d4,g4,b4] ~", // G
  H: "~@2 [g4,b4,e5]!3 ~ [g4,b4,e5] ~@3 [g4,b4]!3 ~ [g4,b4] ~", // Em G
  I: "~@2 [d4,f#4,a4]!3 ~ [d4,f#4,a4] ~@3 [d4,f#4]!3 ~ [d4,f#4] ~", J: "[f#3,a3,d4]!8 ~@8",
})).s("gm_epiano2").gain(0.25).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~
  [x ~@2 x!2 ~@2 x]!59
  [x ~@5 x ~ x!8]
  [x ~@5 x ~ x ~@4 x!3]
  [x ~@2 x!2 ~@2 x]!6
  [x ~@2 x ~@4]
  ~
>`).gain(0.31)

// drums · snare
const snare = s("sd").struct("<~ A@7 B A@3 C A@7 D A@11 E A E A@17 F A@15 G ~>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@3 x ~@2 x!2 ~@3", C: "~@4 x ~@2 x!6 ~@3", D: "~@4 x ~ x!10", E: "~@4 x ~ x!7 ~@3",
  F: "~@4 x!12", G: "~ x ~@2",
})).gain(0.31)

// drums · low tom
const low_tom = s("lt").struct("<~@4 A ~@3 B ~@3 C ~@7 C ~@11 C D C D E ~@3 A ~@13 E D ~@14>".pickRestart({
  A: "~@6 x!10", B: "~@7 x ~@2 x ~@5", C: "~@12 x!4", D: "x", E: "~@8 x!8",
})).gain(0.31)

// drums · hihat
const hihat = s("hh").struct("<~ [x!8]!3 [x!4 ~@4] [x!8]!63 [x!4 ~@4] ~>").gain(0.31)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A@3 ~ A@3 ~ A ~@3 A ~ A ~ A@2 ~@6 A ~@3 A ~ A ~ A ~@3 A ~@7 A ~@3 A ~ A ~ A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.31)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~ x ~ x]!67 [~ x ~@2] ~>").gain(0.38)

// drums · ride
const ride = s("rd").struct("<~ A@3 B C@9 D E@6 C@6 F C E@39 G ~>".pickRestart({
  A: "x!4", B: "x ~@3 x ~ x!10", C: "x!8", D: "x ~ x ~ x ~ x ~ x ~ x ~ x!4", E: "x!16",
  F: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~", G: "x!8 ~@8",
})).gain(0.38)

stack(piano, bass, distortion_guitar, string_ensemble_1, epiano2, kick, snare, low_tom, hihat, crash, tambourine, ride)

More by John Lennon