Strudelify

Welcome to the Machine

Pink Floyd

KeyE minorTempo138 bpm
0:00/0:00
// Welcome to the Machine — Pink Floyd
// 138 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 30, 4/4 at bar 31, 3/4 at bar 74, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: ch 4 "Bass" named as a bass, played on electric bass finger (its pad halo patch is not one)
// note: Full arrangement: all 170 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(138/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@8 A@3 B@3 C@3 D@2 E@2 F@4 E@2 G@2 H@4 I@2 J@2 K@2 L@2 I@2 J@2 M@3 N@4 O P Q R S@4 T U T U V@4 W@4 X@2 Y Z@2 Y AA@2
  AB AC@3 X@2 Y Z@2 Y AA@2 AB AC@3 AD@2 AE AD@2 AE X@2 Y Z@2 Y AA@2 AB AF@3 K@2 AG@2 AH@4 AG@2 AI@5 AJ@6 AK@6 AL@7 AM@6
  AN AO AN AP AN AO AN AP AN AO AN AP AN AO AN AQ
>`.pickRestart({
  A: "[~@4 [g3,b3,e4]@43 ~]/3", B: "[~@2 c4 e4 [c4,e4,g4]@43 ~]/3", C: "[~@2 g3 b3 [g3,b3,e4]@43 ~]/3",
  D: "[~@2 g3 b3 [g3,b3,e4]@27 ~]/2", E: "[~@4 [b3,e4,g4]@27 ~]/2", F: "[~@4 [g3,b3,e4]@59 ~]/4",
  G: "[~ [c4,e4,a4]@6 ~]/2", H: "[[e4,g4,b4]@59 ~@5]/4", I: "[[c4,e4,g4,b4]@27 ~@5]/2", J: "[[e5,g5,b5,e6]@27 ~@5]/2",
  K: "[[g3,b3,e4]@27 ~@5]/2", L: "[[g4,b4,d5,f#5]@27 ~@5]/2", M: "[[g3,b3,e4]@43 ~@5]/3",
  N: "[[e5,g5,b5]@59 ~ b3 ~ e4 ~]/4", O: "[b3,e4,g4]@8 ~@4 [b3,e4,g4] ~ [b3,e4,g4] ~",
  P: "[c4,e4,g4,b4]@8 ~@4 [c4,e4,g4,b4] ~ [c4,e4,g4,b4] ~", Q: "[g4,b4,e5]@8 ~@4 [g4,b4,e5] ~ [g4,b4,e5] ~",
  R: "[b4,e5,g5]@11 ~@5", S: "[[e5,g5,b5]@59 ~@5]/4", T: "[g4,b4,e5]@5 ~@3 [g4,b4,e5]@5 ~@3",
  U: "[g4,b4,e5]@5 ~@3 [g4,b4,e5] ~ [g4,b4,e5]@5 ~", V: "[[g5,b5]@59 ~@5]/4", W: "[[b4,e5]@59 ~@5]/4",
  X: "[[g3,b3,e4]@2 ~ [g3,b3,e4]@2 ~ [g3,b3]@2]/2", Y: "~ [b3,e4]@2 ~", Z: "[[b3,e4]@2 ~ [b3,e4,g4]@2 ~ [b3,e4]@2]/2",
  AA: "[[c5,e5,g5]@5 ~ [b4,e5]@2]/2", AB: "~ [c5,e5]@2 ~", AC: "[[g4,b4,e5]@11 ~]/3",
  AD: "[[c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4]@2 ~ [b3,e4,g4]@2]/2", // Cmaj7 Em
  AE: "~@4 [b3,e4,g4]@3 ~ [b3,e4,g4] ~ [b3,e4,g4] ~ [b3,e4,g4]@3 ~", AF: "[[g4,b4,e5]@44 ~@2 g3 b3]/3",
  AG: "[[b3,e4,g4]@27 ~@5]/2", AH: "[[g3,b3,e4]@59 ~@5]/4", AI: "[[c#4,e4,a4]@6 ~ [e4,g4,b4]@13]/5",
  AJ: "[~@12 [c4,e4,g4,b4]@27 ~@5 [e5,g5,b5,e6]@27 ~@5 [g3,b3,e4]@20]/6", // Cmaj7 Em
  AK: "[~@12 [g4,b4,d5,f#5]@27 ~@5 [c4,e4,g4,b4]@27 ~@5 [e5,g5,b5,e6]@20]/6", // Gmaj7 Cmaj7 Em
  AL: "[~@12 [g3,b3,e4]@59 ~@3 b3 e4 [b3,e4,g4]@8 ~@4 [b3,e4,g4] ~ [b3,e4,g4] ~ [c4,e4,g4,b4]@8 ~@4 [c4,e4,g4,b4] ~ [c4,e4,g4,b4] ~ [g4,b4,e5]@4]/7", // Em Cmaj7 Em
  AM: "[~@8 [g4,b4,e5] ~ [g4,b4,e5] ~ [b4,e5,g5]@11 ~@5 [e5,g5,b5]@59 ~@5 [b4,e5,g5]@4]/6", // Em
  AN: "~@4 [b4,e5,g5]@5 ~@3 [b4,e5,g5]@4", AO: "~@4 [b4,e5,g5] ~@3 [b4,e5,g5]@4 [b4,e5,g5]@4",
  AP: "~@4 [b4,e5,g5] ~ [b4,e5,g5]@5 ~ [b4,e5,g5]@4", AQ: "~@4 [b4,e5,g5] ~ [b4,e5,g5]@5 ~@5",
})).s("gm_string_ensemble_1").gain(0.21).pan(0.7)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A B@18 C D E B@3 C D F G B@3 H D@4 B@3 H D@4 B@6 H D@4 B@7 H D@3 I B@10 D@3 B@9 D@3 B@3 D J B D J B@7 D@3 B@5 D@2 B@4
  D@2 K L B@3 M D@3 N B@3 O D@3 N B@3 O D@3 N B@19 P
>`.pickRestart({
  A: "~@4 e1@3 ~ e1@3 ~ e1@3 ~", B: "e1@3 ~ e1@3 ~ e1@3 ~ e1@3 ~", C: "e1@3 ~ c1@3 ~ c1@3 ~ c1@3 ~",
  D: "c1@3 ~ c1@3 ~ c1@3 ~ c1@3 ~", E: "c1@3 ~ e1@3 ~ e1@3 ~ e1@3 ~", F: "c1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~",
  G: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~", H: "e1@3 ~ e1@3 ~ e1@3 ~ e1 ~ d1 ~", I: "c1@3 ~ c1@3 ~ c1@3 ~ c1 ~ b0 ~",
  J: "c1@3 ~ c1@3 ~ e1@3 ~ e1@3 ~", K: "a0@3 ~ a0@3 ~ a0@3 ~ a0@3 ~", L: "a0@3 ~ a0@3 ~ a0@3 ~ e1@3 ~",
  M: "e1@3 ~ e1@3 ~ e1 ~ d1 ~ c1@3 ~", N: "c1@3 ~ c1@3 ~ c1@3 ~ e1@3 ~", O: "e1@3 ~ e1@3 ~ e1@3 ~ c1@3 ~",
  P: "e1@3 ~ e1@3 ~ e1@3 ~@5",
})).s("gm_electric_bass_finger").gain(0.44)

// bass · shakuhachi
const bass_2 = note(`<
  A B@18 C D E B@3 C D F G B@4 D@4 B@4 D@4 B@7 D@4 B@8 D@4 B@10 D@3 B@9 D@3 B@3 D H B D H B@7 D@3 B@5 D@2 B@4 D@2 G I
  B@3 J D@3 K B@3 J D@3 K B@3 J D@3 K B@19 L
>`.pickRestart({
  A: "~@4 e2@3 ~ e2@3 ~ e2@3 ~", B: "e2@3 ~ e2@3 ~ e2@3 ~ e2@3 ~", C: "e2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~",
  D: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", E: "c2@3 ~ e2@3 ~ e2@3 ~ e2@3 ~", F: "c2@3 ~ a1@3 ~ a1@3 ~ a1@3 ~",
  G: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~", H: "c2@3 ~ c2@3 ~ e2@3 ~ e2@3 ~", I: "a1@3 ~ a1@3 ~ a1@3 ~ e2@3 ~",
  J: "e2@3 ~ e2@3 ~ e2@3 ~ c2@3 ~", K: "c2@3 ~ c2@3 ~ c2@3 ~ e2@3 ~", L: "e2@3 ~ e2@3 ~ e2@3 ~@5",
})).s("gm_electric_bass_finger").gain(0.35)

// other · lead 2 sawtooth · "Saw Wave"
const lead_2_sawtooth = note(`<
  ~@48 A@4 ~@4 A@4 ~@4 B@4 C@4 ~ D@2 E F@2 G@2 H I@3 ~ D@2 E F@2 G@2 H I@3 ~@7 D@2 E F@2 G@2 H I@3 ~@4 J@4 ~@3 K@5 ~@11
  L@5 ~@3 M@8 N@3 ~ O@4 P@5
>`.pickRestart({
  A: "[[e6,g6]@59 ~@5]/4", B: "[[g5,b5]@59 ~@5]/4", C: "[[b4,e5]@59 ~@5]/4", D: "[~@8 e4@2 f#4@9 ~ f#4@5 ~@7]/2",
  E: "f#4@2 g4@9 ~@5", F: "[~@8 g4@2 a4@9 ~ a4@8 ~@4]/2", G: "[b5@5 ~ g5@2]/2", H: "~ a5@2 ~", I: "[e5@11 ~]/3",
  J: "[[g4,b4,e5]@59 ~@5]/4", K: "[~@12 [e5,g5,b5]@59 ~@9]/5", L: "[~@12 [g4,b4,e5]@59 ~@9]/5",
  M: "[~@12 [b5,e6,g6]@59 ~@5 b5@27 ~@5 a5@20]/8", N: "[~@4 a5@3 ~ e5@3 ~ f#5@27 ~@9]/3",
  O: "[~@12 e5@8 f#5@19 ~@5 a5@20]/4", P: "[~@4 a5@3 ~ e5@3 ~ f#5@27 ~@5 [g5,b5]@27 ~@9]/5",
})).s("gm_lead_2_sawtooth").gain(0.24).pan(0.3)

// chords · piano
const piano = note(`<
  ~@8 A@3 B@3 A@3 C@2 D@2 E@4 D@2 F@2 G@4 H@2 I@2 J@2 K@2 H@2 I@2 L@3 M@4 N O P Q R@4 S T S T U V U V W X W X Y@2 Z AA@2
  Z AB@2 AC AD@5 AE AF@2 AE AG@2 AH AI@3 AJ@2 AK AJ@2 AK AL@2 AE AF@2 AE AG@2 AH AI@3 AM@2 AN@2 AO@4 AN@2 AP@5 AQ@6 AR@6
  AS@7 AT@6 AU AV AU AW AU AV AU AW AU AV AU AW AU AV AU AX
>`.pickRestart({
  A: "[~@2 g3 b3 [g3,b3,e4]@43 ~]/3", B: "[~@2 c4 e4 [c4,e4,g4]@43 ~]/3", C: "[~@2 g3 b3 [g3,b3,e4]@27 ~]/2",
  D: "[~@4 [b3,e4,g4]@27 ~]/2", E: "[~@4 [g3,b3,e4]@59 ~]/4", F: "[~ [c4,e4,a4]@6 ~]/2", G: "[[e4,g4,b4]@59 ~@5]/4",
  H: "[[c4,e4,g4,b4]@27 ~@5]/2", I: "[[e5,g5,b5,e6]@27 ~@5]/2", J: "[[g3,b3,e4]@27 ~@5]/2",
  K: "[[g4,b4,d5,f#5]@27 ~@5]/2", L: "[[g3,b3,e4]@43 ~@5]/3", M: "[[e5,g5,b5]@59 ~ b3 ~ e4 ~]/4",
  N: "[b3,e4,g4]@8 ~@4 [b3,e4,g4] ~ [b3,e4,g4] ~", O: "[c4,e4,g4,b4]@8 ~@4 [c4,e4,g4,b4] ~ [c4,e4,g4,b4] ~",
  P: "[g4,b4,e5]@8 ~@4 [g4,b4,e5] ~ [g4,b4,e5] ~", Q: "[b4,e5,g5]@11 ~@5", R: "[[e5,g5,b5]@59 ~@5]/4",
  S: "[g3,b3,e4]@5 ~@3 [g3,b3,e4]@5 ~@3", T: "[g3,b3,e4]@5 ~@3 [g3,b3,e4] ~ [g3,b3,e4]@5 ~",
  U: "[b4,e5,g5]@5 ~@3 [b4,e5,g5]@5 ~@3", V: "[b4,e5,g5]@5 ~@3 [b4,e5,g5] ~ [b4,e5,g5]@5 ~",
  W: "[e4,g4,b4]@5 ~@3 [e4,g4,b4]@5 ~@3", X: "[e4,g4,b4]@5 ~@3 [e4,g4,b4] ~ [e4,g4,b4]@5 ~",
  Y: "[[g3,b3,e4]@2 ~ [g3,b3,e4]@2 ~ [g3,b3]@2]/2", Z: "~ [b3,e4]@2 ~", AA: "[[b3,e4]@2 ~ [b3,e4,g4]@2 ~ [b3,e4]@2]/2",
  AB: "[[c5,e5,g5]@5 ~ [b4,e5]@2]/2", AC: "~ [c5,e5]@2 ~", AD: "[[g4,b4,e5]@17 ~ [g4,b4]@2]/5", AE: "~ [b4,e5]@2 ~",
  AF: "[[b4,e5]@2 ~ [b4,e5,g5]@2 ~ [b4,e5]@2]/2", AG: "[[c6,e6,g6]@5 ~ [b5,e6]@2]/2", AH: "~ [c6,e6]@2 ~",
  AI: "[[g5,b5,e6]@11 ~]/3", AJ: "[[c5,e5,g5,b5]@2 ~ [c5,e5,g5,b5]@2 ~ [b4,e5,g5]@2]/2",
  AK: "~@4 [b4,e5,g5]@3 ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5]@3 ~", AL: "[[g4,b4,e5]@2 ~ [g4,b4,e5]@2 ~ [g4,b4]@2]/2",
  AM: "[[g4,b4,e5]@27 ~@5]/2", AN: "[[b4,e5,g5]@27 ~@5]/2", AO: "[[g4,b4,e5]@59 ~@5]/4",
  AP: "[[c#5,e5,a5]@6 ~ [e5,g5,b5]@13]/5", AQ: "[~@12 [c5,e5,g5,b5]@27 ~@5 [e4,g4,b4,e5]@27 ~@5 [g4,b4,e5]@20]/6",
  AR: "[~@12 [g5,b5,d6,f#6]@27 ~@5 [c5,e5,g5,b5]@27 ~@5 [e5,g5,b5,e6]@20]/6", // Gmaj7 Cmaj7 Em
  AS: "[~@12 [g4,b4,e5]@59 ~@3 b4 e5 [b4,e5,g5]@8 ~@4 [b4,e5,g5] ~ [b4,e5,g5] ~ [c5,e5,g5,b5]@8 ~@4 [c5,e5,g5,b5] ~ [c5,e5,g5,b5] ~ [g5,b5,e6]@4]/7", // Em Cmaj7 Em
  AT: "[~@8 [g5,b5,e6] ~ [g5,b5,e6] ~ [b4,e5,g5]@11 ~@5 [e5,g5,b5]@59 ~@5 [b3,e4,g4]@4]/6", // Em
  AU: "~@4 [b3,e4,g4]@5 ~@3 [b3,e4,g4]@4", AV: "~@4 [b3,e4,g4] ~@3 [b3,e4,g4]@4 [b3,e4,g4]@4",
  AW: "~@4 [b3,e4,g4] ~ [b3,e4,g4]@5 ~ [b3,e4,g4]@4", AX: "~@4 [b3,e4,g4] ~ [b3,e4,g4]@5 ~@5",
})).s("gm_piano").gain(0.35).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@52 A@4 ~@4 A@12 B ~@2 A C ~ A ~@2 A ~@2 B ~@2 A C ~ A ~@2 A ~@2 B C ~ B C ~ B ~@2 A C ~ A ~@2 A ~@2 A@11 B D@43 ~
>`.pickRestart({
  A: "x", B: "x ~@2 x", C: "~ x", D: "~@3 x",
})).gain(0.27)

// drums · snare
const snare = s("sd").struct("<~@60 [~ x]!12 ~@42 [~ x]!12 [~ x ~@2]!3 [~@2 x ~ x!2 ~@2] [~ x ~@2]!40>").gain(0.27)

// drums · hihat
const hihat = s("hh").struct("<~@52 A@4 ~@4 B@38 C B@2 C B@67 D>".pickRestart({
  A: "x", B: "x!4", C: "x ~ x ~ x!3 ~", D: "x!3 ~",
})).gain(0.27)

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

stack(string_ensemble_1, bass, bass_2, lead_2_sawtooth, piano, kick, snare, hihat, crash)

More by Pink Floyd