Strudelify
Only You cover art

Smoke Gets In Your Eyes

Only You

The Platters

KeyE♭ majorTempo80 bpm
0:00/0:00
// Only You — The Platters
// 80 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2, 2/4 at bar 50) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 52 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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.

// other · tenor sax · "TEN SAX"
const tenor_sax = note("<~@2 A B C D E F A B ~@8 A B C D E F A B ~@8 A B C D E F A B ~@10>".pickRestart({
  A: "eb3@4 ~ eb3 g3@3 bb3@3", B: "eb3 ~@2", C: "g3@4 ~ g3 b3@3 d4@3", D: "g3 ~@2", E: "c3@4 ~ c3 eb3@3 g3@3",
  F: "c3 ~@2",
})).s("gm_tenor_sax").gain(0.15).pan(0.7)

// chords · piano
const piano = note(`<
  A B C@2 D@2 E@2 F G H I J K L@2 M N C@2 D@2 E@2 F G H O C P Q R S T C@2 D@2 E@2 F G H O C U V W@5
>`.pickRestart({
  A: "[bb2,bb3,d4,f4]!9 [a2,a3,db4,e4]!3", B: "[bb2,bb3,d4,f4] ~@11", C: "[eb2,g3,bb3,eb4]!12", D: "[g2,g3,b3,d4]!12",
  E: "[c3,g3,c4,eb4]!12", F: "[eb2,g3,bb3,eb4] [eb2,g3,bb3,db4]!11", G: "[eb2,g3,bb3,db4]!12", H: "[ab2,ab3,c4,eb4]!12",
  I: "[bb2,bb3,d4,f4]!12", J: "[g3,bb3,eb4]!6 [g3,b3,d4]!6", K: "[g3,c4,eb4]!12", L: "[a3,c4,f4]!12",
  M: "[f3,bb3,d4]@2 ~@10 [f3,bb3,d4]@2 ~@2 [f3,bb3,d4]@3 ~ [f3,bb3,d4]@3 ~", N: "[f3,bb3,d4] ~@7",
  O: "[ab2,ab3,b3,eb4]!6 [ab2,b3,eb4] [ab2,ab3,b3,eb4]!5", P: "[c3,g3,c4,e4]!11 [c3,ab3,c4,e4]",
  Q: "[f2,a3,c4,f4] [f2,c4,f4] [f2,a3,c4,f4]!10", R: "[bb2,bb3,d4,f4]!11 [bb3,d4,f4]",
  S: "[eb2,g3,bb3,eb4]!6 [ab2,ab3,b3,eb4]!6", T: "[eb2,g3,bb3,eb4] ~@11", U: "[c3,g3,c4,e4]!12", V: "[f2,a3,c4,f4]!12",
  W: "[[bb1,f3,bb3,d4]@28 ~@15 [ab2,ab3,c4,eb4]@21 [eb2,g3,bb3,eb4]@44 ~@12]/5", // Bb Ab Eb
})).s("gm_piano").gain(0.15).pan(0.7)

// bass · acoustic bass · "ACC. BASS"
const bass = note(`<
  A B C@2 D@2 E@2 C@2 F G H I J K L B C@2 D@2 E@2 C@2 F@2 M N O P Q R C@2 D@2 E@2 C@2 F@2 M N J S@5
>`.pickRestart({
  A: "bb1@2 bb1 a1", B: "bb1 ~@7", C: "eb2@2 g2 bb2", D: "g2@2 b2 d3", E: "c2@2 eb2 g2", F: "ab2@2 ab2!2",
  G: "bb2@2 bb2!2", H: "eb2 g2", I: "c3@2 c2!2", J: "f2!2", K: "f2@2 f2!2", L: "bb1@11 ~ bb1@4 bb1@4 bb1@4",
  M: "eb2@2 eb2 g2", N: "c2@12 c2@6 c2@4 g2 ~", O: "f2@11 ~ f2@11 ~", P: "bb1@11 ~ bb1@11 ~", Q: "eb2@5 ~ ab2@4 g2 f2",
  R: "eb2 ~@7", S: "[bb1@27 ~@16 ab1@21 eb1@44 ~@12]/5",
})).s("gm_acoustic_bass").gain(0.28).pan(0.1)

// chords · electric guitar clean · "EL GUITAR"
const electric_guitar_clean = note(`<
  A B C@2 D@2 E@2 F@2 G H I E J@2 K L C@2 D@2 E@2 F@2 G M C N O P Q ~ C@2 D@2 E@2 F@2 G M C N J ~@5
>`.pickRestart({
  A: "[d4,f4,bb4]!9 [db4,e4,a4]!3", B: "[d4,f4,bb4] ~@5", C: "~@6 [bb4,eb5,g5] ~@11 [bb4,eb5,g5] ~@5",
  D: "~@6 [b4,d5,g5] ~@11 [b4,d5,g5] ~@5", E: "~@6 [c5,eb5,g5] ~@11 [c5,eb5,g5] ~@5",
  F: "~@6 [bb4,db5,g5] ~@11 [bb4,db5,g5] ~@5", G: "~@6 [c5,eb5,ab5] ~@11 [c5,eb5,ab5] ~@5",
  H: "~@6 [d5,f5,bb5] ~@11 [d5,f5,bb5] ~@5", I: "~@6 [bb4,eb5,g5] ~@11 [b4,d5,g5] ~@5",
  J: "~@6 [c5,f5,a5] ~@11 [c5,f5,a5] ~@5", K: "~@6 [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~", L: "[d4,f4,bb4] ~@11",
  M: "~@6 [b4,eb5,ab5] ~@11 [b4,eb5,ab5] ~@5", N: "~@6 [c5,e5,g5] ~@11 [c5,e5,g5] ~@5",
  O: "~@6 [c5,f5,a5] ~@11 [c5,a5] ~@5", P: "~@6 [bb4,d5,f5] ~@11 [bb4,d5,f5] ~@5",
  Q: "~@6 [bb4,eb5,g5] ~@11 [b4,eb5,ab5] ~@5", // Eb Abm
})).s("gm_electric_guitar_clean").gain(0.14).pan(0.2)

// drums · kick
const kick = s("bd").struct("<A B A@14 C B A@15 B A@13 B ~ D ~@2>".pickRestart({
  A: "x!2", B: "x", C: "x ~@2 x!3", D: "~@2 x",
})).gain(0.28)

// drums · snare
const snare = s("sd").struct("<A ~ A@14 B ~ A@15 ~ A@13 ~@5>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<A B A@14 C B A@15 B A@13 ~@5>".pickRestart({
  A: "x!12", B: "x", C: "x!4 ~@2 x ~ x ~ x ~",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@47 x ~ [~@2 x] ~@2>").gain(0.24)

stack(tenor_sax, piano, bass, electric_guitar_clean, kick, snare, hihat, crash)

More by The Platters