Strudelify

The King Of Wishful Thinking

Go West

KeyC majorTempo107 bpm
0:00/0:00
// The King Of Wishful Thinking — Go West
// 107 bpm, 4/4, key C major. 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 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(107/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
const bass = note(`<
  ~ A B C D E F G H E F G H I J I K L M N O P Q R S A B C T E F G H E F G H I J I K L U N O P Q V L M N O P Q R S W X Y
  Z AA AB AC AD AE AF I J I K ~@9 AG L U N AH AI Q R S L M N AH P Q R S L M N O P Q R S AJ@2 ~
>`.pickRestart({
  A: "a1@2 ~@3 a1 f1 ~ f1@2 ~@6", B: "g1 ~@5 c2 ~@2 c2 c1@2 c2@2 c1@2", C: "a1 ~@4 a1!2 ~ f1@2 ~@6",
  D: "~@2 c2 d2 ~@2 c2 ~@2 c2 c1@2 ~@4", E: "a1@4 ~ f1!2 ~ f1@5 ~@3", F: "g1 ~ g1@3 ~ c2@3 ~ c2@3 c1 c2 ~",
  G: "a1@4 ~ a1 f1 ~ f1@5 ~ f1 ~", H: "~@2 g1 ~@3 g1 ~@2 c2 ~@2 c2@2 ~@2", I: "d1@2 d2 ~ d2@2 d1 d2 ~ d2@4 d1 d2@2",
  J: "f1@2 f2 ~ f2@2 f1 f2 ~ f2 ~ f2@2 f1 f2@2", K: "f1@2 f2 ~ f2@2 f1 f2 ~ g1 ~@2 g2 ~@3",
  L: "c2@3 c2 c3 ~ f1@3 f1 f2 ~ f2@2 f1 ~", M: "g1@2 ~ g1 g2 ~ a1@2 ~ a1 a2@2 a1 a2@3",
  N: "c2@3 ~@3 f1@3 f1 f2@2 f1@2 f2@2", O: "g1@3 g1 g2@2 a1@2 ~ a1 a2 ~ a2 a1 a2@2",
  P: "c2@2 ~ c2 c3@2 f1@4 f2@3 f1 f2@2", Q: "g1@2 ~ g1 g2@2 a1@4 a2@2 a1 a2@2 ~", R: "f2@4 f1 ~ f2@3 f1 f2@2 f1@4",
  S: "d2@4 ~@2 d2@3 ~ d2@3 d1 d2 ~", T: "g1@2 ~@4 g1 ~@2 a1 ~@2 c2 ~@3", U: "g1@2 ~ g1 g2@2 a1@2 ~ a1 a2@2 a1 a2@3",
  V: "f2@5 ~ f1@2 d2@5 ~ d2 ~", W: "a#1 a#2!2 a#1 a#2 ~ a#1 a#2 ~ a#2 ~ a#2@2 a#1 a#2@2",
  X: "g1 ~ g1@2 g2@2 g1 g2 ~ g2@2 g1 g2 g1 g2 ~", Y: "c2 ~ c2@2 g2 ~ c2 c3 ~ c3@2 c2 c3 c2 c3 ~",
  Z: "c3 c2 c3 ~ c3 ~ c2 c3 ~ c3 ~ c3@2 c2 c3 ~", AA: "a#1!2 a#2@2 a#2 ~ a#2 a#1 ~ a#1 ~ a#1 a#2 a#1 a#2@2",
  AB: "f1 f2 f2@2 f1@2 f2 f2@2 f1 g2@2 g1@2 g2 ~", AC: "a1 a2 a1 ~@3 f1 ~@6 f1 f2@2", AD: "g1@2 g2 ~@3 c2 ~@6 c2 c3@2",
  AE: "a1 ~ a2 ~@3 f1 ~@6 f2 f1 f2", AF: "g1@2 g2 ~@9 c3 c2 c3 ~", AG: "~ g2 g1 ~@6 g1 ~ g1 ~ g1 g2 ~",
  AH: "g1@3 g1 g2@2 a1@3 a1 a2 ~ a2 a1 a2@2", AI: "c2@3 c2 c3@2 f1@4 f2@3 f1 f2@2", AJ: "c2/2",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · epiano2
const epiano2 = note(`<
  A B C D E F G H G F G H G I J K L M N O P Q R S T B C D ~ F G H G F G H G I J K L M N O P Q R U@2 N O P Q R S T V W
  X@2 Y Z F G H G I J K L M N O P Q R S T S T M N O P Q R S T M N O P Q R S T M N O P Q R S T AA@3
>`.pickRestart({
  A: "~@9 a2 c3 b2 a2 c3 b2 a2", B: "a2@2 ~@3 a2 f2 ~ f2@2 ~@6", C: "g2 ~@5 c3 ~@2 c3 c2@2 c3@2 c2@2",
  D: "a2 ~@4 a2!2 ~ f2@2 ~@6", E: "~@2 c3 d3 ~@2 c3 ~@2 c3 c2@2 ~@4", F: "[a3,c4,e4]@5 ~ [f3,a3,c4]@9 ~",
  G: "[g3,b3,d4]@2 ~ [g3,c4,e4]@4 ~", H: "[a3,c4,e4]@4 ~@2 [f3,a3,c4]@9 ~", I: "~@3 f4, [d3,f3,a3,c4]",
  J: "[f3,a3,c4]@6 g4 f4", K: "[d5,f5,a5]@2 ~ [d5,g5] a3@12, d3, ~ f3@7", L: "[f3,a3,c4,f4]@7 ~@3 [g3,b3,d4,g4] ~@5",
  M: "[c3,g3,c4,e4]@3 [f2,f3,a3,c4]@5, g4 ~@15", N: "[g3,b3,d4]@3 [a2,a3,c4,e4]@5, g2 ~@15",
  O: "[c3,g3] ~@5 [f2,f3,a3,c4]@10, e4@3 ~@5, c4 ~@7", P: "[g3,b3,d4]@5 ~ [a2,e3,a3,c4,e4]@9 ~, [g2,d3] ~@15",
  Q: "[c3,c4,e4]@6 [f2,f3,a3,c4]@9 ~, g3 ~@15", R: "[g2,g3,b3,d4]@3 [a2,a3,c4,e4]@4 ~", S: "[f3,a3,c4,e4,g4]",
  T: "[d3,a3,d4,g4]@13 ~@3", U: "[[c4,e4,g4]@8 [c3,g3,c4,e4,g4]@3 [f2,f3,a3,c4]@5, [f3,a3]@11 ~@5]/2",
  V: "[a#2,a#3,d4,f4]@10 [a#3,d4,f4] a#2 ~ a#2 ~@2", W: "[g2,d3,g3,b3,d4]@14 [g3,b3,d4] ~",
  X: "[[c3,g3]@4 [c4,e4] ~@8 [c3,g3] ~@2 [c3,g3]@12 ~@4, ~@7 [c4,e4]@7 ~@2]/2", Y: "[a#2,a#3,d4,f4]",
  Z: "[f2,c3,f3,a3,c4]@7 ~@7 g2 ~", AA: "[[c2,c3,g3,c4,e4]@11 ~@5, c#2 ~@47]/3",
})).s("gm_epiano2").gain(0.5).pan(0.6)

// chords · trumpet
const trumpet = note(`<
  ~@16 A B C B ~ B C ~ D ~@3 E ~@8 F G H A B C B ~ B C ~ B C B ~ B C ~ D I J K L M N ~ O ~ P F G H A ~@9 Q B C B ~ B C ~
  D B C B ~ B C ~ D B C B ~ B C ~ D R ~@2
>`.pickRestart({
  A: "~@10 [c5,c6]@3 ~@3", B: "~@6 [c5,f5,a5] ~ [c5,f5,a5]@3 [c5,e5,g5] ~@4",
  C: "~@6 [e5,a5,c6] ~ [d5,g5,b5]@3 [e5,a5,c6] ~@4", D: "[g4,c5,d5,g5]@15 ~",
  E: "~@6 [g4,g5] ~@2 [a4,a5] ~@2 [c5,c6] ~ [d5,d6] ~", F: "[c4,f4,c5,f5]@2 ~ [c4,f4,c5,f5] ~@12", G: "~@14 [g4,g5] ~",
  H: "[a4,a5]@3 g4@13, ~@3 g5 ~@12", I: "~@2 [g4,g5] [a4,a5] [c5,c6] [d5,d6] ~ [e5,e6] ~ [a4,a5] ~ [a4,a5]@3 [g4,g5] ~",
  J: "[a4,a5] [c5,c6] [d5,d6] [e5,e6] ~ [e5,e6] ~ [d5,d6] ~ [c5,c6] ~ [a4,a5]@3 [c5,g5,c6,g6]!2", // A C D E D C A C5
  K: "~@2 [a#4,a#5] ~@2 [a4,a5] ~@2 [a#4,a#5] ~@2 [a4,a5] ~@2 [c5,c6] ~", // A# A A# A C
  L: "~@2 [a#4,a#5] ~@2 [a4,a5] ~@2 [a#4,a#5] [d4,d5] [e4,e5] [g4,g5] [c5,c6] [a4,a5] [g4,g5] e5", // A# A A# D E G C A …
  M: "[e4,e5] ~ [g4,g5] [a4,a5] [c5,c6] [d5,d6] ~ [e5,e6] ~ [a4,a5] ~ [a4,a5]@3 [g4,g5] ~", // E G A C D E A G
  N: "[a4,a5] [c5,c6] [d5,d6] [e5,e6] ~ [e5,e6] ~ [d5,d6] ~ [c5,c6] ~ [a4,a5]@3 ~@2", // A C D E D C A
  O: "~@10 [g4,g5] ~ [g4,g5] ~ [a4,a5] [g4,g5]", P: "~@6 [c5,c6] ~, ~@12 d6 ~@3",
  Q: "~ [f5,c6,f6] ~@7 [g4,g5] [a4,a5] [c5,c6] [f5,f6] [e5,e6] [c5,c6] [a4,a5]", R: "[c5,c6] ~@15",
})).s("gm_trumpet").gain(0.5).pan(0.3)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A B C D ~@8 E@4 F G F ~ F G H I J@4 K L K M K N K O E@4 F G F ~ F G H F G F ~ F G H I ~@10 E@4 ~@10 F G F ~ F G H I
  F G F ~ F G H I F G F ~ F G H I ~@3
>`.pickRestart({
  A: "[c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [a3,c4]!2 ~ [a3,c4] ~ [a3,c4]!4 ~", // C Am
  B: "[b3,d4] ~ [b3,d4] ~ [b3,d4] ~ c4 [g3,c4] ~ [g3,c4] ~ [g3,c4] [g3,c4]@2 ~@2", // Bm C5
  C: "[c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~@2 [a3,c4] ~ [a3,c4]!2 ~ [a3,c4] ~", // C Am
  D: "[g3,b3] ~ [g3,b3] ~ [g3,b3] ~ [g3,c4] ~@2 [g3,c4] ~ [g3,c4]!2 ~@3", E: "[c4@57 ~@7]/4",
  F: "~@6 [c5,f5,a5] ~ [c5,f5,a5]@3 [c5,e5,g5] ~@4", G: "~@6 [e5,a5,c6] ~ [d5,g5,b5]@3 [e5,a5,c6] ~@4",
  H: "[f3,g3,c4,e4]@15 ~", I: "[f3,c4,g4]", J: "[[g4,a4,d5]@26 ~@4 g4@31 ~@3]/4", K: "e4@3 c4@5", L: "b3@5 ~ g3@9 ~",
  M: "b3@3 c4@3 ~@2", N: "b3@3 g3@4 ~", O: "b3@6 c4@7 ~@3",
})).s("gm_string_ensemble_1").gain(0.5).pan(0.7)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  A ~@15 B ~@3 C ~@19 B ~@3 C ~@2 D ~@3 C ~@13 C ~@3 B ~@13 C ~@3 B ~@3 C ~@7 C ~@3 E ~@3
>`.pickRestart({
  A: "~@8 x!2 ~ x!3 ~@2", B: "~@2 x ~@2 x ~ x", C: "~@8 x!2 ~ x ~ x ~ x", D: "~@7 x", E: "~@4 x ~@3 x!6 ~@2",
})).gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@16 A ~@23 A ~@28 A ~@8 B ~@8 A ~@15 A ~@3>".pickRestart({
  A: "~@8 x ~@6 x", B: "~@3 x ~@4",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C D B C B C B C B C E@6 B
  C B C B C B C F@10 B C B C B C B C B C B C B C B C B C B C B C B C ~@3
>`.pickRestart({
  A: "x!4", B: "x!8", C: "x ~ x ~ x ~ x ~ x!8", D: "x ~ x ~ x!3 ~ x ~@3 x ~@3", E: "x!16", F: "~ x ~ x",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A ~@23 A ~@28 A ~@8 B ~@8 A ~@15 A ~@3>".pickRestart({
  A: "~@5 x ~@8 x ~", B: "~ x ~@2",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@47 A ~@22 B ~ B ~ B ~ B ~ B ~@25 B ~@2>".pickRestart({
  A: "~@5 x ~ x", B: "x",
})).gain(0.5)

// drums · high tom
const high_tom = s("ht").struct("<~@16 A ~@23 A ~@28 A ~@8 B ~@8 A ~@15 A ~@3>".pickRestart({
  A: "~@2 x ~@8 x ~@4", B: "~@3 x ~@12",
})).gain(0.5)

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

// drums · ride
const ride = s("rd").struct("<~@56 A@6 ~@8 B ~ B ~ B ~ B ~ B ~@28>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.5)

// drums · congas
const congas = s("conga:13").struct("<~@70 A B A B A B A B A B ~@27>".pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@7", B: "~@2 x ~@2 x ~@4 x ~@2 x ~@2",
})).gain(1.59)

// drums · congas
const congas_2 = s("conga:33").struct("<~@70 A B A B A B A B A B ~@27>".pickRestart({
  A: "~@10 x!2 ~@2 x!2", B: "~@6 x ~ x ~@2 x ~@2 x ~",
})).gain(1.59)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@70 [x!16]!10 ~@27>").gain(0.75)

stack(
  bass, epiano2, trumpet, string_ensemble_1, kick, snare, snare_soft, low_tom, hihat, mid_tom, open_hat, high_tom,
  crash, ride, congas, congas_2, cabasa
)

More by Go West