Strudelify
He's So Fine cover art

1963 · The Chiffons Absolutely The Best!

He's So Fine

The Chiffons

KeyG majorTempo144 bpm
0:00/0:00
// He's So Fine — The Chiffons
// 144 bpm, 4/4, key G major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(144/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano · "Ac Piano"
const piano = note(`<
  A B A C D E D E D E D E F G H I J K I ~ D E D E D E D E F G H I J K I ~ L M L@2 N@4 L@3 O P Q R S D E D E D E D E F G
  H I F G H I F G H I F G H I T
>`.pickRestart({
  A: "~@4 [c#5,f5,g#5] ~@7 [c#5,f5,g#5] ~@3", B: "~@4 [d#5,g5,a#5] ~@7 [d#5,g5,a#5] ~@3", C: "[d#5,g5,a#5] ~@15",
  D: "~@4 [c#5,f5,g#5] ~ [c#5,f5,g#5] ~@5 [c#5,f5,g#5] ~ [c#5,f5,g#5] ~", // C#
  E: "~@4 [d#5,g5,a#5] ~ [d#5,g5,a#5] ~@5 [d#5,g5,a#5] ~ [d#5,g5,a#5] ~", // D#
  F: "~@3 [d#6,g#6] c7 ~ c7 ~@3 g#6 ~ d#6 ~ g#6 ~", G: "~@2 d#6 g#6 c7 ~ c7 ~@3 g#6 ~ d#6 ~ g#6 ~",
  H: "~@2 d#6 g#6 c7 ~ g#6 ~@3 c7 ~ d#6 ~ g#6 ~", I: "~@2 d#6 g#6 c7 ~ g#6 ~@3 c7 g#6 d#6 ~ g#6 ~",
  J: "~@2 d#6 g#6 c7 ~ c7 ~@3 c7 g#6 d#6 ~ g#6 ~", K: "~@3 [d#6,g#6] c7 ~ c7 ~@3 c7 g#6 d#6 ~ g#6 ~",
  L: "~@2 c#6 f6 g#6 ~ c#7 ~ g#6 ~ f6 ~ c#6 ~ f6 ~", M: "~@2 c#6 f6 g#6 ~ c#7 ~ g#6 ~ f6 ~ g#6 ~ f6 ~",
  N: "~@2 c6 d#6 g#6 ~ c7 ~ g#6 ~ d#6 ~ c6 ~ d#6 ~", O: "~@2 c#6 [f6,g#6] ~@2 c#7 ~ g#6 ~ f6 ~ c#6 ~ f6 ~",
  P: "[d#6,g6,a#6] ~@15", Q: "[d6,f6,a#6] ~@15", R: "[c#6,g6,a#6] ~@7 [c#6,g6,a#6] ~@7",
  S: "~@2 [d#6,d#7] ~ [d#6,d#7] ~@3 [d#6,d#7] ~@3 d#6@2 ~@2, ~@12 d#7 ~@3", T: "[g#5,g#6] ~@15",
})).s("gm_piano").gain(0.28)

// bass · acoustic bass · "El Bass"
const bass = note(`<
  A B C D E F E F E F E G H I J I H I J K E F E F E F E G H I J I H I J K L@4 M@3 N L O L@2 P Q R S E F E F E F E G T U
  J V T U J V T U J V T U J V W
>`.pickRestart({
  A: "a#1@11 ~ a#1@4", B: "d#2@11 ~ d#2@3 ~", C: "a#1@11 ~ a#1@3 ~", D: "d#2 ~@7", E: "a#1@5 ~ a#1@5 ~ a#1@3 ~",
  F: "d#2@5 ~ d#2@5 ~ d#2@3 ~", G: "d#2@5 ~ d#2@5 ~ d#2 ~ g2 ~", H: "g#2@5 ~ g#2@6 d#2@3 ~",
  I: "g#2@5 ~ g#2@5 ~ d#2 ~ g2 ~", J: "g#2@4 ~@2 g#2@6 d#2@3 ~", K: "g#2@3 ~@13", L: "c#2@3 ~ f2@3 ~ g#2@3 ~ f2@3 ~",
  M: "g#1@3 ~ c2@3 ~ d#2@3 ~ c2@3 ~", N: "g#1@3 ~ c2@3 ~ d#2@3 ~ g#1@3 ~", O: "c#2@3 ~ f2@3 ~ g#2@3 ~ f2@2 g#2 ~",
  P: "d#2 ~@5 d#2 ~", Q: "a#1 ~@5 a#1 ~", R: "d#2 ~@7 d#2 ~@7", S: "d#2@3 ~ d#2@3 ~ d#2@3 ~ d#2 ~ f2 ~",
  T: "g#2@4 ~@2 g#2@5 ~ g#2@2 d#2 ~", U: "f2@5 ~ f2@5 ~ d#2 ~ f2@2", V: "f2@5 ~ f2@5 ~ d#2 ~ f2 ~", W: "g#2 ~@7",
})).s("gm_acoustic_bass").gain(0.45)

// chords · brass section · "Brass"
const brass_section = note(`<
  A B C D E F G H I J K H L M N O P O Q R E F G H I J K H L M N O P O Q R ~ S ~ S ~ T ~ U ~ S ~ S V W X Y E F G H I J K
  H Z AA AB AC Z AA AB AC Z AA AB AC Z AA AB AC AD
>`.pickRestart({
  A: "~@4 [c#4,f4,g#4] ~@3 [c#4,f4,g#4]@3 ~ [a#2,c#4,f4,g#4]@3 ~, a#2@11 ~@5", // C# A#m7
  B: "[d#4,g4,a#4]@3 ~ [d#4,g4,a#4] ~ [g4,a#4] ~@5 d#3@2 ~@2, d#3@9 ~@7, ~@3 d#4 ~@4", // D# Gm
  C: "~@4 [c#4,f4,g#4] ~@3 [c#4,f4,g#4]@3 ~ [a#2,c#4,f4,g#4]@4, a#2@11 ~@5", D: "[d#3,d#4,g4,a#4] ~@7",
  E: "~@4 [c#4,f4,g#4]@3 ~ [c#4,f4,g#4] ~@3 [c#4,f4] ~@3, ~@6 g#4 ~", // C#
  F: "[d#4,g4,a#4]@3 ~ [d#4,g4,a#4]@2 [d#4,g4,a#4] ~@9", G: "~@4 [c#4,f4,g#4] ~@3 [c#4,f4,g#4]@3 ~ [c#4,f4,g#4]@3 ~",
  H: "[d#4,g4,a#4]@3 ~ [g4,a#4] ~ [d#4,g4,a#4] ~@9, ~@2 d#4 ~@5", // D# Gm D#
  I: "~@4 [c#4,f4,g#4]@3 ~ [c#4,f4,g#4]@3 ~ [c#4,f4,g#4]@3 ~", J: "[d#4,g4,a#4]@3 ~ [d#4,g4,a#4] ~ [d#4,g4,a#4] ~@9",
  K: "~@4 [c#4,g#4] ~ [c#4,f4,g#4] ~ [c#4,f4,g#4]@3 ~ [c#4,f4,g#4] ~ [c#4,f4,g#4] ~, ~@2 f4 ~@5", // C#5 C#
  L: "~@4 [d#4,g#4,c5]@3 ~ [d#4,c5]@2 ~@2 [d#4,g#4,c5]@3 ~, ~@8 g#4 ~@7", // G# Cm G#
  M: "[d#4,g#4,c5]@3 ~ [d#4,g#4,c5] ~ [g#4,c5] ~@9, ~@3 d#4 ~@4", // G#
  N: "~@4 [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5]@2 ~@2 [d#4,g#4,c5]@3 ~", // G#
  O: "[d#4,g#4,c5]@3 ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~@9", // G#
  P: "~@4 [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5]@3 ~ [d#4,g#4,c5]@3 ~", // G#
  Q: "~@4 [d#4,g#4]@2 [d#4,g#4,c5] ~ [d#4,g#4,c5]@3 ~ [d#4,g#4,c5]@3 ~, ~@4 c5 ~@11", R: "[g#4,c5] ~@15, d#4 ~@7",
  S: "[c#4,f4,g#4]@5 ~ [c#4,f4,g#4] ~@9", T: "[c4,d#4,g#4]@4 ~@2 [c4,d#4,g#4] ~@9",
  U: "[c4,d#4,g#4]@5 ~ [c4,d#4,g#4] ~@9", V: "[d#4,g4,a#4] ~@15", W: "[d4,a#4] ~@15",
  X: "[c#4,g4,a#4] ~@7 [c#4,g4,a#4] ~@7", Y: "[d#4,d#5] ~@3 [d#4,d#5] ~@11",
  Z: "g#2@4 [d#4,g#4] ~ [d#4,g#4,c5] ~@9, ~@2 c5 ~@5", AA: "f2@3 ~ [f4,g#4,c5] ~ [f4,g#4,c5] ~@9",
  AB: "g#2@3 ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~@9", AC: "f2@4 [f4,g#4,c5] ~ [f4,g#4,c5] ~@9", AD: "[g#3,g#4] ~@15",
})).s("gm_brass_section").gain(0.25)

// chords · electric guitar clean · "Cl Guitar"
const electric_guitar_clean = note(`<
  ~@4 A B C B D B D B E@7 ~ A B C B D B D B E@7 ~ F@4 G@4 F@4 H I ~ J A B C B D B D B E K E K E K E K E K E K E K E K L
>`.pickRestart({
  A: "~@4 [f4,g#4,c#5] ~@7 [f4,g#4,c#5] ~@3", B: "~@4 [g4,a#4,d#5] ~@7 [g4,a#4,d#5] ~@3",
  C: "~@4 [f4,g#4,c#5] ~@7 [f4,a#4,c#5] ~@3", D: "~@4 [f4,a#4,c#5] ~@7 [f4,a#4,c#5] ~@3",
  E: "~@4 [d#4,g#4,c5] ~@7 [d#4,g#4,c5] ~@3", F: "~@4 [c#4,f4,g#4] ~@7 [c#4,f4,g#4] ~@3",
  G: "~@4 [c4,d#4,g#4] ~@7 [c4,d#4,g#4] ~@3", H: "[d#4,g4,a#4] ~@15", I: "[f4,a#4,d5] ~@15", J: "~@4 d#4 ~@7 d#4 ~@3",
  K: "~@4 [f4,g#4,c5] ~@7 [f4,g#4,c5] ~@3", L: "[c4,d#4] ~@15",
})).s("gm_electric_guitar_clean").gain(0.22)

// drums · kick
const kick = s("bd").struct("<~@36 x ~@11 [x ~@2 x]!2 [x!2] x ~@24 x>").gain(0.5)

// drums · snare
const snare = s("sd").struct("<A@3 B A@15 C A@15 D A@12 C@2 E F A@24 B>".pickRestart({
  A: "~ x ~ x", B: "x", C: "x ~@2 x", D: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~", E: "x!2", F: "x ~@3 x ~@3 x ~@2 x!2 ~ x ~",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<A@3 B A@15 B C A@14 B C A@11 ~@4 A@24 ~>".pickRestart({
  A: "x!8", B: "x", C: "~ x!7",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@3 [~@7 x] ~@73>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@20 x ~@15 x ~@40>").gain(0.4)

stack(piano, bass, brass_section, electric_guitar_clean, kick, snare, hihat, open_hat, crash)

More by The Chiffons