Strudelify

Prime Time

Alan Parsons

KeyD minorTempo118 bpm
0:00/0:00
// Prime Time — Alan Parsons
// 118 bpm, 4/4, key D 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 155 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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 · epiano1 · "Piano"
const epiano1 = note(`<
  ~@2 A@24 B@2 C@2 D@2 E@2 F@2 E@2 G@2 C@2 H@2 I@2 J@2 K@2 L@2 M N O@3 P@4 Q@3 R@2 E@2 G@2 C@2 H@2 I@2 J@2 K@2 L@2 M N S
  T@2 U@4 V@7 R@2 E@2 G@2 C@2 H@2 I@2 J@2 K@2 L@2 M N W X Y Z@3 AA AB@5 AC AD@2 AE AC AD@2 AE AC AD@2 AE AC AD@2 AE AC
  AD@2 AE AF AG ~@3
>`.pickRestart({
  A: "[~@32 [bb2,a3]@31 ~, e4@31 ~, d3 ~, ~@16 c4@45 ~@3]/4", // Bbmaj7
  B: "[~@14 e4@17 ~, a2@31 ~, e4@7 ~@9, db4@12 db4@19 ~, ~ a4@30 ~]/2",
  C: "[~@7 d4@9, [g2,g4,b4], d4@7 ~@9, ~@12 b3@19 ~]/2", // G
  D: "[db4@12 ~@2 e4@17 ~, [a2,a4]@31 ~, e4@7 ~@9, ~@12 db4@19 ~]/2", // A
  E: "[~@14 d4@17 ~, [g2,g4,b4]@31 ~, d4@7 ~@9, ~@12 b3@19 ~]/2", // G
  F: "[db4@12 ~@2 e4@17 ~, [a2,a4], e4@7 ~@9, ~@3 db4@5]/2", // A
  G: "[db4@12 ~@17 d4@2 ~, [a2,a4]@31 ~, e4@14 e4@17 ~, ~@12 db4@19 ~]/2", // A
  H: "[~@7 e4@9, a2@31 ~, e4@7 ~@9, db4@3 db4@5, ~ a4@31]/2", I: "[~@7 d4@9, [g2,g4,b4]@31 ~, d4@7 ~@9, ~@3 b3@5]/2",
  J: "[~@14 gb4@17 ~, d3@31 ~, d4@12 d4@19 ~, ~ [d2,a4]@30 ~, ~ gb4@13 ~@18]/2", // D5
  K: "[d4@6 ~ f4@8 ~, [d2,d3,a4]@31 ~, f4@7 ~@9, ~@6 d4@9 ~]/2", // D5
  L: "[d4@12 ~@2 g4@17 ~, [d2,d3,b4]@31 ~, g4@7 ~@9, ~@12 d4@19 ~]/2", M: "[bb2,d4,f4,bb4]@15 ~",
  N: "[a2,db4,e4,a4]@13 ~@3", // A
  O: "[[f4,a4]@11 ~ [f4,a4]@2 [f4,a4]@12 [c2,c3,c4,a4]@5 ~ [bb2,d4]@15 ~, d2@25 ~@7 bb4@12 ~@4, ~@12 c4 ~ d4@10 ~@2 f4@18 ~@4]/3", // F Bb
  P: "[[g2,g4]@6 [a2,e4,a4]@6 ~@2 d4@13 ~ c4 ~ d4@7 ~ [c2,c3,c4]@7 ~ [bb2,d4]@17 ~, d4@2 ~@5 a4@15 ~ bb4@7 ~@2, ~@14 [d2,d3]@23 ~@27, ~@14 f4@16 f4@31 ~@3]/4", // G A5 C Bb D
  Q: "[[g2,g4]@6 [a2,e4,a4]@6 ~@26 d4@9 ~, d4@4 ~@10 [d3,f4,a4]@33 ~, ~@14 d4@23 ~@11, ~@15 d2@32 ~]/3", // G A5 Dm
  R: "[~@14 e4@17 ~, [a2,a4], e4@7 ~@9, ~@3 db4@5]/2", // A
  S: "f4@4 a4@4 [c4,f4,a4]@2 [d4,f4,a4]@5 ~, [d2,d3]@15 ~, ~@2 d4@3 ~@3, ~@2 f4 ~@5", // F Dm D
  T: "[[d4,f4,a4]@4 ~ a4 [d4,f4,a4]@3 ~ [c2,c3,c4,a4]@4 ~@2 [bb2,d4,bb4]@15 ~, d2@5 ~@11, d3 ~@3, ~@4 [d4,f4]@2 ~@4 f4@21 ~]/2", // Dm F Bb Dm
  U: "[[g2,d4,g4]@6 [a2,e4]@8 ~ [d4,f4]@5 [f4,a4]@4 [f4,a4]@2 [d4,f4,a4]@2 ~@4 [d4,f4,a4]@2 [c4,f4] ~ [c4,a4] ~ [d4,f4,a4]@2 d3 ~ [c2,c3,c4,a4]@5 ~@2 bb4@14 ~, ~@6 a4@5 ~@3 d2@27 ~@23, ~@14 a4@5 ~ d4@2 ~@2 c4@5 ~@7 f4@2 ~@4 f4@21 ~, ~@15 d3@13 d3@7 ~@13 [bb2,d4]@15 ~]/4", // G5 A5 Dm F Dm F5 F Dm …
  V: "[[g2,d4,g4]@6 [a2,a4]@4 e4@2 ~@2 d4@14 ~@18 f4@14 ~@2 bb4@15 ~ [d2,d3,f4,a4]@33 ~, ~@6 e4 ~@7 bb2@30 [bb2,d4]@16 [bb2,d4,f4]@17 ~@35, ~@7 [f4,bb4]@8 f4@8 bb4@8 ~@25, ~@28 d4@16 ~@34 d4@13 ~@21]/7", // G5 A Dm Bb Bb5
  W: "[d4,f4,a4]@3 ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [c4,f4,a4] ~ [d4,f4,a4] ~@2 d2@2 ~, [d2,d3]@3 ~", // Dm F Dm D
  X: "[d4,f4,a4] ~ [d4,f4]@2 [c4,f4] ~ [f4,a4]@2 ~@2 [c2,c3,c4,f4]@2 ~@2 [d4,bb4] ~, [d2,d3]@9 ~@7, ~@2 a4@4 d4 ~@3 a4 ~@3 f4@2", // Dm F5 F F5 Gm D
  Y: "[d4,f4,bb4]@11 ~ [d4,f4]@3 ~, bb2@15 ~", // Bb Dm
  Z: "[[g2,g4]@6 a2@4 [e4,a4] ~@3 [d4,f4,a4]@5 ~ [d4,f4,a4] ~ [d4,f4] ~ [c4,f4,a4] ~ [d4,f4,a4] ~@5 [d4,f4,a4] ~ [c4,f4,a4] ~ [f4,a4] ~ [d4,f4,a4] ~@3 [c2,c3,c4,f4,a4]@3 ~ f4@2, d4@2 ~ a4 ~@20, ~@6 e4 ~@7 [d2,d3]@26 ~@8]/3", // G A5 Dm F Dm F Dm F …
  AA: "[d4,f4,bb4]@10 [f4,bb4]@3 ~@3, bb2@15 ~, ~@10 d4@5 ~", // Bb Bb5
  AB: "[[g2,g4]@6 e4@2 ~@2 e4 ~@3 [f4,bb4]@14 d4 ~ [d4,f4,bb4]@13 ~ [bb2,f4] ~ [bb2,f4,bb4]@14 d4 ~ [d4,f4,bb4] ~@3 f4 ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4]@5 ~, d4@4 ~@2 [a2,a4]@6 ~@2 bb2@29 ~@19 bb2@17 ~, ~@14 d4@13 ~@19 d4@13 ~@21]/5", // G Bb5 Bb Bb5 Bb A
  AC: "~@4 [d4,f4,a4] ~ [d4,f4,a4] ~ [c4,f4] ~ [d4,f4,a4] ~@5, [d2,d3]@7 ~", // Dm F5 Dm D
  AD: "[[d4,f4,a4] ~ [d4,f4,a4] ~ [c4,f4,a4] ~ [f4,a4]@2 ~@2 [c2,c3,a4]@4 ~@2 [d4,bb4]@5 ~ [d4,bb4]@5 ~ [d4,f4]@2 bb2@2, [d2,d3]@9 ~@7 bb2@6 ~@10, ~@6 d4 ~@3 [c4,f4]@2 ~@2 f4@13 ~ bb4 ~@3]/2", // Dm F Gm Dm D F5
  AE: "[g2,g4]@6 e4@3 ~ e4@4 ~@2, d4@2 ~ [a2,a4]@4 ~", // G A
  AF: "~@4 [d4,f4,a4] ~ [d4,f4] ~ [c4,f4] ~ [d4,f4,a4] ~@5, [d2,d3]@7 ~", AG: "f4 ~@15",
})).s("gm_epiano1").gain(0.19)

// chords · epiano1 · "Piano" · soft notes
const epiano1_soft = note(`<
  ~@84 A ~@3 B C ~@2 D@2 ~@2 E@3 ~@19 F ~@3 G H ~@3 I ~ J K ~ L ~ K ~ L ~ K ~ L ~ K ~ L ~ K ~ L ~ M N@2 O ~
>`.pickRestart({
  A: "[d4,a4]@2 ~ f4 ~@4", B: "~@3 d4@2 ~@3", C: "~ d3 ~@2", D: "[~@7 bb4@8 ~]/2", E: "[~@6 d4 d4@16 ~]/3",
  F: "~@13 d3@2 ~", G: "~@6 a4 ~@9", H: "~@4 c4 ~@11", I: "~@12 d4 ~@3", J: "[d4,f4,bb4] ~ [d4,bb4] ~@13",
  K: "~@8 a4 ~@7", L: "~@2 bb2 ~", M: "~@6 a4 ~ a4 ~@7",
  N: "[[d4,a4] ~ [d4,f4,a4] ~ [c4,f4,a4] ~ [f4,a4]@2 ~@2 [c2,c3,a4]@4 ~@2 [d4,bb4]@5 ~@3 bb2@4 [d4,f4]@2 bb2@2, [d2,d3]@9 ~@7 bb2@6 [d4,bb4]@5 ~@5, ~@6 d4 ~@3 [c4,f4]@2 ~@2 f4@13 ~ bb4 ~@3]/2", // D5 Dm F Gm Dm D Gm F5
  O: "[g2,g4]@6 e4@3 ~ e4@4 ~@2, d4@2 ~ [a2,a4]@4 ~", // G A
})).s("gm_epiano1").gain(0.1)

// bass · electric bass finger · "Bajo"
const bass = note(`<
  ~@6 A ~ B ~ A@2 B@2 A@2 B C D E F G D E F@2 H I J K H I J K H I J K H I J K H I J L D@5 M F N D O P Q D R S Q D T H I
  J K H I J K H I J L D@5 M F N D O P Q D O U V F S F G D W H I J X H I J K H I J L D@5 M F N D O U Y D O U V F@3 Z D AA
  AB AC D AA AB AC D AA AB AC D AA AB AC D AA AB AC D AA AB AC ~
>`.pickRestart({
  A: "~@4 d2 ~ d2@2 ~@8", B: "~@4 bb1 ~ bb1@2 ~@8", C: "~@4 bb1 ~ bb1@2 ~@6 c2 db2",
  D: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", E: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ f2 ~ d2 ~ c2 ~",
  F: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~", G: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ c2 ~",
  H: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", I: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ ab1 ~",
  J: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", K: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ ab1 ~",
  L: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ c2@2", M: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ c2 ~",
  N: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ c2 ~", O: "d2 ~ d2 ~ d2 ~ d2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  P: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ a1 ~", Q: "g1 ~ g1 ~ g1 ~ a1 ~ a1 ~ a1 ~ a1 ~ d2 ~",
  R: "d2 ~ d2 ~@2 d2!2 ~ c2 ~ c2 ~ c2 ~ c2 ~", S: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ a1@2",
  T: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ f1 ~ g1@4", U: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1@2",
  V: "g1 ~ g1 ~ g1 ~ a1 ~ a1 ~ a1 ~ a1 ~ bb1 ~", W: "d2 ~ d2 ~ d2 ~ d2 ~ d2@2 e1@2 g1@2 f1@2",
  X: "g1 ~ g1 ~ f2@2 e2@2 d2@2 g1@2 ab1@2 a1 ~", Y: "g1 ~ g1 ~ g1 ~ a1@2 a1 ~ a1 ~ a1 ~ d2 ~",
  Z: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ db2 ~", AA: "d2 ~ d2 ~ d2@2 c2 ~ c2 ~ c2@2 c2@2 bb1@2",
  AB: "~@2 bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1@2 a1@2", AC: "g1@3 ~ g1 ~ a1@3 ~ a1@3 ~ d2@2",
})).s("gm_electric_bass_finger").gain(0.48)

// other · electric guitar clean · "Acustica"
const electric_guitar_clean = note(`<
  ~@26 A B C D A B C D A B C D A B C D A B C D ~@18 A B C D A B C D A B C D ~@22 A B C D A B C D A B C D ~@45
>`.pickRestart({
  A: "a4@2 e4@2 db4@2 a4@2 e4@2 db4@2 b4@3 ~", B: "e4 db4 a3 e4 db4 a3 e4 ~", C: "g4@2 d4@2 b3@2 g4@2 d4@2 b3@2 a4@3 ~",
  D: "d4 b3 g3 d4 b3 g3 d4 ~",
})).s("gm_electric_guitar_clean").gain(0.04)

// other · overdriven guitar · "Distorsión"
const overdriven_guitar = note(`<
  ~@54 A B@2 C@2 D@2 E@3 ~@20 A B@2 C@2 D@2 F@3 G@4 H@2 I@2 H@2 I@2 H@2 I@2 J@2 K@2 J@2 L M A D@2 N@2 D@2 F@3 O@2 P Q@2
  R P Q@2 R P Q@2 R P Q@2 R P Q@2 R P S ~@3
>`.pickRestart({
  A: "d3@4 d3@4 a2@2 d3 ~@5", B: "[d3@4 ~@2 d3@3 ~ c3@3 ~ bb2@18]/2",
  C: "[g2@6 a2@3 ~@5 d3@5 ~ d3@3 ~ a2@2 d3@2 ~@4]/2", D: "[d3@4 a2@2 d3@3 ~ c3@3 ~ bb2@18]/2",
  E: "[g2@6 a2@4 a2@3 ~ d3@32 ~@2]/3", F: "[g2@6 a2@4 a2@3 ~ bb2@5 ~ bb2@11 bb2@14 ~ bb3@2]/3",
  G: "[bb2@29 ~ d3@33 ~]/4", H: "[a2@7 ~]/2", I: "[g2@7 ~]/2", J: "[d3@7 ~]/2", K: "[d3@15 ~]/2", L: "bb2@15 ~",
  M: "a2@15 ~", N: "[g2@6 a2@3 ~ a2@4 d3@5 ~ d3@3 ~ a2@2 d3@2 ~@4]/2", O: "[~@14 bb3@11 ~@7, bb2]/2",
  P: "d3@3 ~ d3@2 a2@2 c3@2 d3@3 ~@3", Q: "[d3@2 a2 ~ c3 ~ d3@2 ~@2 c3@2 ~@2 bb2@18]/2", R: "g2@6 a2@7 ~ d3@2",
  S: "d3@2 a2 ~ c3 ~ d3@2 ~@8",
})).s("gm_overdriven_guitar").gain(0.4)

// other · overdriven guitar · "Distorsión" · soft notes
const overdriven_guitar_soft = note("<~@55 A ~ B ~@27 A ~ B ~@6 C@2 ~@55 D@2 E@2>".pickRestart({
  A: "~@2 a2 ~@5", B: "~@10 a2@5 ~", C: "[~@14 bb3@11 ~@7]/2", D: "[~@5 c3 ~ bb2@9]/2", E: "[g2@6 a2@7 ~ d3@5 ~@13]/2",
})).s("gm_overdriven_guitar").gain(0.24)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@18 A@7 ~ A@27 ~ A@29 ~ A@21 ~ A@11 ~ A@31 ~@2 B C@2 ~>".pickRestart({
  A: "x", B: "~ x ~@2 x!2 ~@2", C: "x!2 ~@2 x!2 ~@2",
})).gain(0.24)

// drums · snare
const snare = s("sd").struct("<~@10 A ~ A@6 B@7 C B@27 C B@29 C B@21 C B@11 C B@19 D B@16 ~>".pickRestart({
  A: "~ x", B: "~ x ~ x", C: "~@4 x ~@6 x!2 ~ x ~", D: "~@2 x ~@2 x!3",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!151 ~@4>").gain(0.8)

// drums · hihat · soft notes
const hihat_soft = s("hh").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 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 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 B A B A B A B A B A B A C D C ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "x!7 ~", D: "x!8",
})).gain(0.16)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@7 x",
})).gain(0.24)

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

stack(
  epiano1, epiano1_soft, bass, electric_guitar_clean, overdriven_guitar, overdriven_guitar_soft, kick, kick_soft, snare,
  hihat, hihat_soft, open_hat, crash
)

More by Alan Parsons