Strudelify
On Broadway cover art

1963 · Under the Boardwalk

On Broadway

The Drifters

KeyF♯ majorTempo147 bpm
0:00/0:00
// On Broadway — The Drifters
// 147 bpm, 4/4, key F# major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 119 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(147/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 · rock organ · "Organ 3 Lead"
const rock_organ = note(`<
  ~ A B C@2 D E@2 F G H I J K L@2 M N O P Q R L@2 M A B C@2 D E@2 F S T U V W E@2 F G H I J K L@2 M N O P Q G X Y@3 Z@3
  G H I J K L@2 M N O P Q R L@2 M A B C@2 D E@2 F S T U V W E@2 F G H I J K L@2 M N O P Q G X Y@3 Z@3 W AA AB C AC@2
>`.pickRestart({
  A: "~@4 d#5 [d#5,g5]@3", B: "[c5,f5]@2 ~ [g4,a#4]@3 [a#4,d#5]@2", C: "[a4,c5]@3 [g4,a#4]@5", D: "~@4 [a#4,d#5] ~@3",
  E: "[[c5,f5]@2 ~ [g4,a#4]@3 ~ [a4,c5]@4 [g4,a#4]@5]/2", F: "[a4,c5]@3 [g4,a#4]@3 [a4,c5]@2",
  G: "~ c5 a5 f5 [d#5,g5] [d#5,g5,c6]@3", H: "[c5,f5,a5]@2 f5 [g4,a#4,d#5]@3 [a#4,d#5,g5]@2",
  I: "[a4,c5,f5]@3 [g4,a#4,c5]@5", J: "a4@3 [g4,a#4]@5, c5", K: "~ c5 a5 f5 [a#4,d#5,g5] c6@3",
  L: "[[c5,f5,a5]@2 f5 [g4,a#4,d#5]@3 f5 a4@4 [g4,a#4]@5, ~@7 c5@9]/2", M: "a4@3 [g4,a#4]@3 [a4,c5]@2, c5@3 ~",
  N: "~ f5 d6 a#5 [g#5,c6] [g#5,c6,f6]@3", O: "[f5,a#5,d6]@2 a#5 [d#5,g#5,c6]@5",
  P: "~ f5 d6 a#5 [d#5,g#5,c6] [g#5,c6,f6]@3", Q: "[f5,a#5,d6]@2 a#5 [e5,g5,c6]@5",
  R: "~ c5 a5 f5 [a#4,d#5,g5] [d#5,g5,c6]@3", S: "~@4 g#5 [g#5,c6]@3", T: "[f5,a#5]@2 ~ [d#5,g#5]@5",
  U: "~@4 [d#5,g#5] [g#5,c6]@3", V: "[f5,a#5]@2 ~ [e5,g5]@5", W: "~@4 [a#4,d#5] [d#5,g5]@3",
  X: "[c5,f5,a5]@2 f5 [g4,a#4,d#5]@3 [a#4,c5,d#5]@2", // F D# Cm7
  Y: "[[a4,c5,d#5]@3 [g4,a#4]@5 [a4,c5]@3 [g4,a#4]@5 ~@4 [a#4,d#5] ~@3, ~ f5@7]/3", // Adim Gm Am Gm D#5
  Z: "[c5@2 ~ [g4,a#4]@3 ~ [a4,c5]@4 [g4,a#4]@5 [a4,c5]@3 [g4,a#4]@3 [a4,c5]@2, f5@3 ~]/3", // Gm Am Gm Am Gm Am
  AA: "[c5,f5]@2 ~ [g4,a#4]@3 ~@2", AB: "d#5@3 c5@2 [g4,a#4]@3", AC: "[[a4,c5]@3 [g4,a#4]@3 [a4,c5]@4 ~@6]/2",
})).s("gm_rock_organ").gain(0.72).pan(0.4)

// chords · piano
const piano = note(`<
  ~ A B C@2 D E@2 F A B C G D E@2 H I J K L M N@2 H A B C@2 D E@2 F I J K L M E@2 F A B C G D N@2 H I J K L A B C@2 D
  O@3 A B C G D N@2 H I J K L M E@2 H A B C@2 D E@2 F I J K L M E@2 F A B C G D N@2 H I J K L A B C@2 D O@3 M P Q C R@2
>`.pickRestart({
  A: "f2@3 f3 d#4 ~ f3 c3, ~@2 f2 ~, ~@5 [d#4,g4]@3", B: "f2 f3 ~ f3 f2 f3 ~ f3, [c4,f4]@2 ~ [g3,a#3]@3 [a#3,d#4]@2",
  C: "f2 f3 c3 f2 ~ f3@2 f2, [a3,c4]@3 [g3,a#3]@5", D: "f2@3 f3 [a#3,d#4] ~ f3 c3, ~@2 f2 ~",
  E: "[f2 f3 ~ f3 f2 f3 ~ f3 f2 f3 c3 f2 ~ f3@2 f2, [c4,f4]@2 ~ [g3,a#3]@3 ~ [a3,c4]@4 [g3,a#3]@5]/2", // F5 Gm Am Gm
  F: "f2 f3 c3 [f2,g3,a#3]@3 f3 f2, [a3,c4]@3 ~@3 [a3,c4]@2", G: "f2 f3 c3 f2 ~ f3@2 f2, c4, a3@3 [g3,a#3]@5",
  H: "f2 f3 c3 [f2,g3,a#3]@3 f3 f2, c4@3 ~, a3@3 ~@3 [a3,c4]@2", I: "a#1@3 a#2 g#4 ~ a#2 f2, ~@2 a#1 ~, ~@5 [g#4,c5]@3",
  J: "a#1 a#2 ~ a#2@2 a#2 f2 a#1, [f4,a#4]@2 ~ [d#4,g#4]@5", // A#5 G#5
  K: "a#1@3 a#2 [d#4,g#4] ~ a#2 f2, ~@2 a#1 ~, ~@5 [g#4,c5]@3", L: "a#1 a#2 ~ c2@2 c3 g2 c2, [f4,a#4]@2 ~ [e4,g4]@5",
  M: "f2@3 f3 [a#3,d#4] ~ f3 c3, ~@2 f2 ~, ~@5 [d#4,g4]@3", // D#5 D#
  N: "[f2 f3 ~ f3 f2 f3 ~ f3 f2 f3 c3 f2 ~ f3@2 f2, [c4,f4]@2 ~ [g3,a#3]@3 ~ c4@9, ~@7 a3@4 [g3,a#3]@5]/2", // F5 Gm
  O: "[f2 f3 ~ f3 f2 f3 ~ f3 f2 f3 c3 f2 ~ f3@2 f2 f2 f3 c3 [f2,g3,a#3]@3 f3 f2, f4@3 ~, c4@2 ~ [g3,a#3]@3 ~ [a3,c4]@4 [g3,a#3]@5 [a3,c4]@3 ~@3 [a3,c4]@2]/3", // Gm7 Gm Am Gm Am
  P: "f2 f3 ~ f3 f2 f3 ~ f3, [c4,f4]@2 ~ [g3,a#3]@3 ~@2", Q: "f2 f3 c3 c4@2 ~ f3 c3, d#4@3 f2@3 ~@2, ~@5 [g3,a#3]@3",
  R: "[f2 f3 c3 [f2,g3,a#3]@3 f3 f2@3 ~@6, [a3,c4]@3 ~@3 [a3,c4]@4 ~@6]/2", // Gm7 Am
})).s("gm_piano").gain(0.72).pan(0.3)

// other · acoustic guitar nylon · "Nylon Gtr Lead"
const acoustic_guitar_nylon = note(`<
  ~@25 A B C@2 A D@3 E F E F A D@3 ~@2 A B C@2 A G@2 F E H ~@2 A I J@4 ~@16 A B C@2 A D@3 E F E F A D@3 ~@2 A B C@2 A
  G@2 F E H ~@2 A I J@4 ~@6
>`.pickRestart({
  A: "~ c3 a3 f3 g3 c4@3", B: "a3@2 f3 d#3@3 g3@2", C: "[f3@3 c3@13]/2", D: "[a3@2 f3 d#3@3 f3 c3@17]/3",
  E: "~ f3 d4 a#3 c4 f4@3", F: "d4@2 a#3 c4@5", G: "[a3@2 f3 d#3@3 f3 c3@2 f3 d4 a#3 c4 f4@3]/2", H: "d4@2 d#4 e4@5",
  I: "a3@2 f3 d#3@3 c3@2", J: "[d#3@3 f3@23 ~@6]/4",
})).s("gm_acoustic_guitar_nylon").gain(0.59).pan(0.2)

// bass · fretless bass · "Fretless Elec Bass"
const bass = note(`<
  ~ A B C@2 A B C D A B C@2 A B C D E F E G A B C D A B C@2 A B C D E F E G A B C D A B C@2 A B C D E F E G A B C@2 A B
  C D A B C@2 A B C D E F E G A B C D A B C@2 A B C D E F E G A B C D A B C@2 A B C D E F E G A B C@2 A B C D A B H C
  I@2
>`.pickRestart({
  A: "f2@3 f3 f2@2 f3 c3", B: "f2 f3 ~ f3 f2 f3 ~ f3", C: "f2 f3 c3 f2 ~ f3@2 f2", D: "f2 f3 c3 f2@3 f3 f2",
  E: "a#1@3 a#2 a#1@2 a#2 f2", F: "a#1 a#2 ~ a#2@2 a#2 f2 a#1", G: "a#1 a#2 ~ c2@2 c3 g2 c2", H: "f2 f3 c3 f2@3 f3 c3",
  I: "[f2 f3 c3 f2@3 f3 f2@3 ~@6]/2",
})).s("gm_fretless_bass").gain(0.59).pan(0.6)

// chords · acoustic guitar nylon · "Nylon Gtr Rythm"
const acoustic_guitar_nylon_2 = note(`<
  ~ A B A B A B A C A B A B A B A D E F E G A H A C A B A B A B A I E F E G A H A C A B A B A B A D E F E J A B A B A B
  A C A B A B A B A D E F E G A H A C A B A B A B A I E F E G A H A C A B A B A B A D E F E J A B A B A B A C A B A K L
  ~
>`.pickRestart({
  A: "~@4 [f3,a3,c4,f4,a4] ~@5 [d#3,g3,a#3,d#4,g4] ~@5", // F D#
  B: "[f3,a3,c4,f4,a4] ~@3 [d#3,g3,a#3,d#4,g4] ~ [d#3,g3,a#3,d#4,g4]@10", // F D#
  C: "[f3,a3,c4,f4,a4] ~@3 [d#3,g3,a#3,d#4,g4] ~ [d#3,g3,a#3,d#4,g4]@6 [f3,a3,c4,f4,a4] ~@3", // F D# F
  D: "[f3,a3,c4,f4,a4] ~@3 [d#3,g3,a#3,d#4,g4] ~ [d#3,g3,a#3,d#4,g4]@5 ~ [f3,a3,c4,f4,a4]@2 ~@2", // F D# F
  E: "~@4 [f3,a#3,d4,f4,a#4] ~@5 [d#3,g#3,c4,d#4,g#4] ~@5", // A# G#
  F: "[f3,a#3,d4,f4,a#4] ~@3 [d#3,g#3,c4,d#4,g#4] ~ [d#3,g#3,c4,d#4,g#4]@10", // A# G#
  G: "[f3,a#3,d4,f4,a#4] ~@3 [f3,a#3,d4,f4,a#4] ~ [g3,c4,e4,g4,c5]@9 ~", // A# C
  H: "[f3,a3,c4,f4,a4] ~@3 [d#3,g3,a#3,d#4,g4] ~ [d#3,g3,a#3,d#4,g4]@9 ~", // F D#
  I: "[f3,a3,c4,f4,a4] ~@3 [d#3,g3,a#3,d#4,g4] ~ [d#3,g3,a#3,d#4,g4]@6 [f3,a3,c4,f4,a4]@2 ~@2", // F D# F
  J: "[f3,a#3,d4,f4,a#4] ~@3 [f3,a#3,d4,f4,a#4] ~ [g3,c4,e4,g4,c5]@10", // A# C
  K: "[f3,a3,c4,f4,a4] ~@3 [d#3,g3,a#3,d#4,g4] ~ [d#3,g3,a#3,d#4,g4]@5 ~ [f3,a3,c4,f4,a4] ~@3", // F D# F
  L: "~@4 [d#3,g3,a#3,d#4,g4] ~ [d#3,g3,a#3,d#4,g4]@6 [f3,a3,c4,f4,a4]@4", // D# F
})).s("gm_acoustic_guitar_nylon").gain(0.29).pan(0)

// 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 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
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@2 x ~ x ~@2", C: "x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~@2]!116 [~ x ~ x] ~>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<[x!4] [~ x!3] [x!4] [~ x!3]!2 [x!4]!113 x>").gain(0.5)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 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
  ~@2
>`.pickRestart({
  A: "~@7 x",
})).gain(0.45)

// drums · mid tom
const mid_tom = s("mt").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
  ~
>`.pickRestart({
  A: "~@6 x!2",
})).gain(0.45)

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

// drums · cowbell
const cowbell = s("cb").struct("<~ [~@2 x ~@3 x!2]!117 x>").gain(0.4)

// drums · guiro
const guiro = s("guiro:0").struct("<~ [x!2 ~@2 x!2 ~@2]!117 x>").gain(9.43)

// drums · guiro
const guiro_2 = s("guiro:4").struct("<~ [~ x ~ x]!117 ~>").gain(9.43)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~
  [x!2 ~ x!2 ~ x ~]!112
  [x!2 ~ x!3 ~ x]
  [x ~ x ~ x!2 ~ x]
  [x!2 ~ x!2 ~ x ~]!3
  x
>`).gain(3.02)

// drums · triangle
const triangle_2 = s("triangles:35").struct(`<
  ~
  [~@2 x ~@2 x ~ x]!112
  [~ x ~ x]
  [~ x ~ x ~@2 x ~]
  [~@2 x ~@2 x ~ x]!3
  ~
>`).gain(3.02)

stack(
  rock_organ, piano, acoustic_guitar_nylon, bass, acoustic_guitar_nylon_2, kick, snare, hihat, open_hat, mid_tom, crash,
  cowbell, guiro, guiro_2, triangle, triangle_2
)

More by The Drifters