Strudelify

The Platters Mix: Smoke Gets in Your Eyes The Great Pretender Twilight Time Harbour Lights Only You

The Platters

KeyE majorTempo95 bpm
0:00/0:00
// The Platters Mix: Smoke Gets in Your Eyes   The Great Pretender   Twilight Time   Harbour Lights   Only You — The Platters
// 95 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 40 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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.

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@2 A B A C D E F G H I J K L M N I O P Q R S T U V W X Y G Z AA AB I AC AD AE AF AG AH
>`.pickRestart({
  A: "e2@12 b1@10 e1 ~", B: "e2@12 b2@10 e2 ~", C: "f#2@8 c2@2 a#1 ~ b1@10 b0 ~", D: "e2@10 e1 ~ e2@10 a#1@2",
  E: "a1@12 a#1@8 a#0 ~ a#1 ~", F: "b1 c#2", G: "f#2@8 c2@2 a#1 ~ b1@12", H: "e2@5 d2 c#2@5 g2", I: "f#2 b1",
  J: "e2@12 b1@11 ~", K: "f#2@12 b1@10 b0 ~", L: "e2!2", M: "a1 a#1", N: "b1@8 b0 ~ b1 ~ c#2@8 g2@2 f2 ~",
  O: "e2@6 b1@5 f2", P: "e2 g2", Q: "c2@12 g2@9 ~ c#2@2", R: "c2@10 c1 ~ c2@12", S: "g2!2",
  T: "g2@10 d3@2 g3@3 ~ d3@2 g2@5 ~", U: "c2@12 g2@10 c2 ~", V: "a1@12 b1@8 b0 ~ b1 ~", W: "e2@12 b1@9 ~ c2@2",
  X: "b1@10 f#2@2 b2@3 ~ f#2@2 b1@5 ~", Y: "e2@12 b1@9 ~ g2@2", Z: "e2@10 e1 ~ e2@8 a#1@2 g#1 ~", AA: "a1@5 g2 a#1@6",
  AB: "b1@8 d2@2 c2 ~ c#2@12", AC: "e2@8 a#1@2 g#1 ~ a1@12", AD: "e2@12 a1@8 g2@2 f2 ~", AE: "f#2@12 c#3@10 f#2 ~",
  AF: "e2 b2", AG: "e2@7 g#2@6 a2@6 a#2@5", AH: "~ b2@5 ~ e3@2 ~ e3@8 ~ e2@3 ~@2",
})).s("gm_acoustic_bass").gain(0.19)

// chords · piano
const piano = note(`<
  ~@2 A B C@2 D E F G H I J G K L@2 M N O P Q R S T U V W V X Y Z AA AB AC@2 AD B ~ AE
>`.pickRestart({
  A: "[g#3,b3,e4]@3 ~ [g#3,b3,e4]@2 ~@4 [g#3,b3,e4]@12 ~@2", // E
  B: "[g#3,e4,b4]@11 ~ [g#3,e4,b4]@3 ~ e3@2 [g#3,e4,b4]@4 ~@2", // E
  C: "[[g#3,e4,b4]@3 ~ [g#3,e4,b4]@2 ~@4 [g#3,e4,b4]@12 [e3,a3,c#4,f#4]@13 ~ [a3,d#4,f#4,b4]@4 b2@2 [a3,d#4,f#4,b4]@3 ~@3]/2", // E F#m7 B7
  D: "[g#3,e4,b4]@9 ~ [g#3,e4,b4]@13 ~", E: "[g3,c#4,f4,a4]@3 ~@3 [g3,c#4,f4,a4]@6 [a#3,c#4,e4,f#4]@11 ~",
  F: "[g#3,d4,e4,c5]@9 ~@3 [b3,c#4,e4,g#4]@3 ~ [b3,c#4,e4,g#4]@7 ~", // G#aug C#m7
  G: "[a3,e4,f#4,c#5]@4 f#2@2 [a3,e4,f#4,c#5]@3 ~@7 [a3,d#4,f#4,b4]@6 ~@2", // F#m7 B7
  H: "[g#3,e4,b4]@4 e3@2 [g#3,e4,b4]@3 ~@7 [b3,c#4,e4,g#4]@6 ~@2", I: "~@4 [a3,e4,f#4,c#5]@6 [a3,b3,d#4,f#4]@13 ~",
  J: "[g#3,b3,e4]@11 ~ [g#3,b3,e4]@3 ~ e3@2 [g#3,b3,e4]@4 ~@2", // E
  K: "[g#3,e4,b4]@4 e3@2 [g#3,e4,b4]@2 ~@4 [g#3,e4,b4]@4 e3@2 [g#3,e4,b4]@3 ~@3", // E
  L: "[[g3,c#4,f4,a4]@3 ~ [g3,c#4,f4,a4]@7 ~ [a#3,e4,f#4,c#5]@4 a#1@2 [a#3,e4,f#4,c#5]@3 ~ [g#3,d4,e4,c5]@11 ~@3 [e3,b3,c#4,g#4]@4 c#3@2 [e3,b3,c#4,g#4]@2 ~@4]/2", // C#aug F#7 G#aug C#m7
  M: "[e3,a3,c#4,f#4]@2 f#2 [e3,a3,c#4,f#4] ~@4 [a3,d#4,f#4,b4]@3 ~", // F#m7 B7
  N: "[g#3,b3,e4] ~ [g#3,b3,e4]@2 [e3,a3,c#4,f#4] ~ [e3,a3,c#4,f#4]@2", O: "[g#3,e4,b4]@9 ~@3 [b3,f4,g4,d5]@11 ~",
  P: "[c4,e4,g4,c5]@3 ~ [c4,e4,g4,c5]@2 ~@4 [c4,e4,g4,c5]@12 ~@2", // C
  Q: "[a#3,e4,g#4,c5]@3 ~@3 [a#3,e4,g#4,c5]@6 [a3,e4,g4,c5]@3 ~ [a3,e4,g4,c5]@7 ~", // Caug Am7
  R: "[b3,f4,g4,d5]@3 ~ [b3,f4,g4,d5]@7 ~ [a#3,e4,g4,c#5]@4 g2@2 [a#3,e4,g4,c#5]@2 ~@4", S: "[b3,f4,g4,d5]@5 ~",
  T: "[c4,e4,g4,c5]@5 ~", U: "[c4,a4,e5]@11 ~ [d#4,f#4,a4,b4]@9 ~@3", V: "[e4,g#4,b4]@5 ~",
  W: "[d#4,a4,b4,f#5]@3 ~ [d#4,a4,b4,f#5]@2 ~@4 [d#4,a4,b4,f#5]@12 ~@2", // B7
  X: "[a3,c#4,e4,f#4]@4 f#2@2 [a3,c#4,e4,f#4]@2 ~@2 [a3,d#4,f#4,b4]@11 ~@3", // F#m7 B7
  Y: "[g#3,e4,b4]@11 ~ [g#3,e4,b4]@4 e3@2 [g#3,e4,b4]@3 ~@3", // E
  Z: "[g3,c#4,f4,a4]@3 ~@3 [g3,c#4,f4,a4]@6 [e3,a#3,c#4,f#4]@3 ~ [e3,a#3,c#4,f#4]@7 ~", // C#aug F#7
  AA: "~@4 [g#3,d4,e4,c5]@6 ~@2 [e3,b3,c#4,g#4]@3 ~ [e3,b3,c#4,g#4]@7 ~", // G#aug C#m7
  AB: "[e3,a3,c#4,f#4]@11 ~ [a3,d#4,f#4,b4]@9 ~@3", // F#m7 B7
  AC: "[~@4 [g#3,e4,b4]@6 ~@2 [f#3,c4,e4,a4]@4 a2@2 [f#3,c4,e4,a4]@2 ~@2 [g#3,b3,e4]@11 ~@3 [f#3,c4,e4,a4]@9 ~@3]/2", // E F#m7b5 E F#m7b5
  AD: "[a3,e4,f#4,c#5]@11 ~ [a3,e4,f#4,c#5]@3 ~ f#2@2 [a3,e4,f#4,c#5]@4 ~@2", // F#m7
  AE: "[g#3,e4,b4]@3 ~@3 [a3,f4,c5]@3 ~ [g#3,e4,b4]@11 ~@3", // E F E
})).s("gm_piano").gain(0.12)

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

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] [~ x ~ x]!23 [~ x ~@2] [~ x ~ x]!11 ~@3>").gain(0.19)

// drums · snare
const snare = s("sd").struct("<~@25 [~@2 x] ~@11 [x ~@4 x!2 ~@5] [~@2 x ~@2 x ~@2 x ~ x!2] [x ~ x!2 ~@8]>").gain(0.19)

// drums · low tom
const low_tom = s("lt").struct("<~@37 [~@2 x ~@5 x ~@2 x] ~@2>").gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B C@2 D B C E A E F C@2 D C G D C A C F D@2 H C I C J F B F D F B F K L M
>`.pickRestart({
  A: "x!4", B: "x ~@2 x ~@2 x ~ x!2 ~@2", C: "x ~@2 x ~ x!2 ~@2 x ~@2", D: "x ~@2 x ~ x!2 ~ x!2 ~ x",
  E: "x ~@2 x ~ x ~@3 x ~@2", F: "x ~@2 x ~ x!2 ~@2 x ~ x", G: "~@3 x ~ x!2 ~@2 x ~@2", H: "~ x ~@2",
  I: "x ~@2 x!2 ~ x ~ x!2 ~@2", J: "~@3 x ~ x ~@6", K: "~ x ~ x", L: "~ x!2 ~", M: "~@3 x",
})).gain(0.19)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@2 A B C@2 ~ B C ~ C ~@2 C@2 ~ C@2 ~ C@3 ~@4 C B C ~@2 B ~@3 B ~@4>".pickRestart({
  A: "~@5 x ~@5 x", B: "~@5 x ~@6", C: "~@11 x",
})).gain(0.13)

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

// drums · crash
const crash = s("cr").struct("<~@2 x ~@35 x [~@5 x ~@6]>").gain(0.22)

// drums · ride
const ride = s("rd").struct("<~@38 [~ x] ~>").gain(0.25)

stack(bass, piano, kick, rim, snare, low_tom, hihat, hihat_soft, open_hat, crash, ride)

More by The Platters