Strudelify
Hungry Eyes (From "Dirty Dancing") cover art

1988

Hungry Eyes (From "Dirty Dancing")

Eric Carmen

KeyF majorTempo120 bpm
0:00/0:00
// Hungry Eyes (From "Dirty Dancing") — Eric Carmen
// 120 bpm, 4/4, key F major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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, A@4 for four bars: edit a riff to change every repeat.

// other · piano · "FILE#1"
const piano = note("<~@70 A@6 B ~@25 C@2>".pickRestart({
  A: "[~@2 a4@2 f5 ~ g4 ~ d5@2 c5@2 g4@2 f4@17 ~]/2", B: "~ a4 f5 g4 d5 c5 g4 f4", C: "[~@12 f4@7 ~@13]/2",
})).s("gm_piano").gain(0.31)

// chords · brass section
const brass_section = note("<~@16 A@4 B@2 C D@3 C E@2 F ~@10 G@6 C H@3 C E@2 F ~@50>".pickRestart({
  A: "[[a4,c5] [g4,b4] [a4,c5] [g4,b4], e5]/4", B: "[c5 [g4,b4], e5, a4@7 ~@9]/2", C: "[a4,d5,f5]",
  D: "[[c5,e5]@16 d5@23 ~ d5@4 e5@4, g4@47 ~, ~ b4@2]/3", E: "[e5@16 [b4,d5]@15 ~, g4, c5@15 ~@17]/2",
  F: "[bb4,d5,f5] [c5,e5,g5]", G: "[[a4,c5] [g4,b4] [a4,c5] [g4,b4] [a4,c5] [g4,b4], e5]/6",
  H: "[[c5,e5]@16 [b4,d5]@23 ~ d5@4 e5@4, g4@39 ~ [g4,b4]@8]/3", // C Bm G
})).s("gm_brass_section").gain(0.2)

// other · alto sax
const alto_sax = note(`<
  ~@4 A B C D A B C E ~@10 F G D ~ H I J ~ C K ~@2 C L ~@10 M@2 E ~ N@2 E ~ O E ~@2 C P ~@2 C P ~@2 C D ~@10 C P C P A Q
  C P R S ~@2 C P ~@2 T B C D U@2 C P ~@2
>`.pickRestart({
  A: "~@4 f4@5 ~ g4@6", B: "c4@3 ~", C: "~@2 f4@3 c4@3", D: "d4@11 ~@5", E: "d4@3 ~", F: "~@4 g4@6 f4@5 ~",
  G: "~@4 e4@4 ~@2 c4@5 ~", H: "~@4 f4@3 ~@3 e4@3 ~@3", I: "~@4 e4@3 ~@3 c4@4 ~@2", J: "d4@13 ~@3", K: "d4@5 ~@3",
  L: "d4 ~@3", M: "[~@4 g4@6 f4@8 ~@2 e4@4 ~@2 c4@5 ~]/2", N: "[~@4 f4@5 ~ e4@8 ~@2 e4@4 ~@2 c4@5 ~]/2",
  O: "~@4 f4@6 c4@3 ~@3", P: "d4@7 ~@9", Q: "c4@7 ~@9", R: "~@4 f4@3 ~@3 c4@3 ~@3", S: "d4@3 ~@13", T: "~@2 f4@3 g4@3",
  U: "[~@4 f4@6 ~@6 c4@11 ~@5, ~@10 g4@9 ~@13]/2",
})).s("gm_alto_sax").gain(0.31)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@4 A@2 B@2 C@4 ~@18 D@4 E@2 A@2 ~@2 F@6 G@2 H@3 I@2 J D@4 E@2 A@2 D@4 E@2 K@3 L M L M L M N A@2 O@4 A@2 P@6 A@2 D@4
  E@2 A@2 Q@2
>`.pickRestart({
  A: "[f5,f6]/2", B: "[[f5,f6]@23 ~ f6@2 [g5,g6]@6, ~@24 f5 ~@7]/2", C: "[[f5,f6]@55 f5 f6@2 [g5,g6]@6]/4",
  D: "[[f5,f6]@63 ~]/4", E: "[[f5,f6]@13 [g5,g6]@3]/2", F: "[a4@63 a4@32 ~]/6", G: "[d5@15 c5@17]/2", H: "[g4@2 d5]/3",
  I: "[~@15 g4@17, c5@17 ~@15]/2", J: "bb4 c5", K: "[[f5,f6]@31 ~ f6@16, ~@31 [a5,d6]@16 ~]/3", L: "[g5,c6,e6]",
  M: "[a5,d6,f6]", N: "[bb5,d6] [g5,c6,e6], f5@7 ~@9", O: "[[f5,f6]@31 ~ f5@25 ~ [g5,g6]@6, ~@31 f6@26 ~@7]/4",
  P: "[[f5,f6]@63 ~ f5@25 ~ [g5,g6]@6, ~@63 f6@26 ~@7]/6", Q: "[[f4,c5,f5]@3 ~]/2",
})).s("gm_string_ensemble_1").gain(0.2)

// chords · epiano1
const epiano1 = note(`<
  ~@15 A B C D@2 E F G H I@2 J H F K L M L M L M L M ~ N E F E O E F J H I@2 J H F K L M L M L M L M L M L M L M L M P@2
  Q@2 R@2 S ~ L M L M L M L M L M L M L M L M L M L M L M L M T@2
>`.pickRestart({
  A: "~@4 [c4,f4,a4] ~ [b3,e4,g4] ~", B: "[a3,c4,e4]", C: "[g4,b4,d5]",
  D: "[[a4,c5,e5]@21 ~@3 [c5,a5] ~@3 [d5,g5] ~@3, ~@12 e5 ~ b4 ~]/2", E: "[a4,c5,e5]@15 ~", F: "[g4,b4,d5]@15 ~",
  G: "[a4,d5,f5]@15 ~, e5 ~@15", H: "[g4,c5,e5]@15 ~", I: "[[g4,b4,d5]@23 ~ [g4,b4,d5]@2 ~@2 [g4,b4,e5]@2 ~@2]/2",
  J: "[a4,d5,f5]@15 ~", K: "[bb4,d5,f5]@7 ~ [c5,e5,g5]@8", L: "[a3,c4,f4]@15 ~", M: "[bb3,d4,f4]@7 ~ [g3,c4,e4]@7 ~",
  N: "~@4 [c5,e5,a5] ~ [b4,d5,g5] ~", O: "[g4,b4,d5]@7 ~ [c5,e5,a5]@2 ~@2 [b4,d5,g5]@2 ~@2",
  P: "[~@2 a4 ~ f5 ~ g4@2 ~ c5@2 ~ g4@2 f4@17 ~, ~@4 d5 ~@11]/2", Q: "[~@2 a4@2 f5 ~ g4@2 d5@2 c5@2 g4@2 f4@18]/2",
  R: "[~@2 a4@2 f5@2 g4@2 d5@2 c5@2 g4@2 f4@17 ~]/2", S: "~ a4 f5 g4 d5 c5 g4 f4",
  T: "[~@3 f3@3 ~@2 bb3@2 ~@2 [c4,f4]@12 ~@8, f4@2 ~ f4@2 ~@11, ~ c4@6 ~@3 f3@15 ~@7]/2", // F5
})).s("gm_epiano1").gain(0.36)

// bass · electric bass finger
const bass = note(`<
  ~@2 A@3 B C B A D A D A@4 E@6 F@2 G H F I G J K B A L A B A D A M E@6 N O P H Q F G R A D A L A L A D A D A L A B A L
  S F@2 T F U V D A D A B A B A L A B A B A L A L A L A B A B A B W@2
>`.pickRestart({
  A: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~", B: "bb1 ~ bb1@2 bb1 ~ bb1 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  C: "f1 ~ f1 ~ f1 ~ f1 ~ f1@2 f1 ~ f1 ~ f1 ~", D: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  E: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", F: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  G: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", H: "g1 ~ g1 ~ g1 ~ g1 ~ g1@3 ~ b1@3 ~",
  I: "d2 ~ d2 ~ d2 ~ d2 ~ d2@2 d2 ~ d2 ~ d2 ~", J: "bb1@4 bb1 ~ bb1 ~ c2@3 ~ c2 ~ c2@2",
  K: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1!2 ~@2", L: "bb1@2 bb1 ~ bb1 ~ bb1 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  M: "f1 ~ f1 ~ f1 ~ f1 ~ f1@3 ~ f1@3 ~", N: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2!2",
  O: "~@2 d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 g1", P: "~@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  Q: "d2 ~ d2 ~ d2@2 d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", R: "bb1@4 bb1 ~ bb1 ~ c2@3 ~ c2@2 c2 ~",
  S: "d2@2 d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", T: "d2 ~ d2 ~ d2 ~ d2 ~ d2@2 e2@2 g2@2 e2@2",
  U: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 d2 ~", V: "d2@2 d2 ~ d2@2 d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  W: "[f1@2 ~ f1@2 ~ f1@5 ~ f1 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.46)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C 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 D B A B A E A B A B A B C 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 F ~
>`.pickRestart({
  A: "x ~@2 x ~ x ~@2", B: "x ~@3 x ~@2 x", C: "x ~@5 x ~@2 x ~@6", D: "x ~@4 x ~@4 x ~@5", E: "x ~ x!2",
  F: "x ~@2 x ~@2 x ~",
})).gain(0.51)

// drums · snare
const snare = s("sd").struct("<~@2 A@11 B A@23 B A C A@13 ~ A@7 B A@7 B A@7 B A@7 D A@7 B A@7 B E ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!3", C: "~ x ~@2", D: "~@2 x ~@3 x!2", E: "~ x!2 ~ x!2 ~@2",
})).gain(0.51)

// drums · low tom
const low_tom = s("lt").struct("<~ A ~@51 B ~@15 C ~@7 C ~@7 B ~@7 C ~@7 C ~@2>".pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "~@5 x!3",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B A@3 C A@5 D A@2 C A@5 C D@2 A@4 D A@5 C A@3 E A F A@2 D A C A@9 B D C A@24 D A@10 B A@3 G A@4 ~
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x!3 ~ x ~ x ~", D: "x ~ x ~ x!3 ~", E: "x!2 ~@2", F: "x!2 ~@2 x ~@3 x ~@3 x ~@3",
  G: "x!3 ~ x ~ x!2",
})).gain(0.51)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 A B A@3 C A@5 D A@2 C A@5 C D@2 A@4 D A@5 C A@3 E A C A@2 D A C A@9 B D C A@3 F A@20 D A@10 B A@3 G A@3 B ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~@3 x ~ x ~ x", D: "~ x ~ x ~@3 x", E: "~ x ~ x ~@4",
  F: "~ x ~@4 x ~@3 x ~@3 x ~", G: "~@3 x ~ x ~@2",
})).gain(0.31)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@51 B ~@15 C ~@7 D ~@7 E ~@7 D ~@7 D ~@2>".pickRestart({
  A: "~@3 x", B: "~@5 x ~@2", C: "~ x ~@2 x ~ x ~ x ~@7", D: "~ x!4 ~@3", E: "~@2 x!3 ~ x!3 ~ x ~@5",
})).gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<~ [~@5 x ~@2] ~@51 [x!3 ~ x ~ x ~ x ~@7] ~@31 x ~@18>").gain(0.51)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!2] [x ~ x ~ x!2 ~@2 x ~@2 x ~@4] ~@102>").gain(1.82)

stack(
  piano, brass_section, alto_sax, string_ensemble_1, epiano1, bass, kick, snare, low_tom, hihat, hihat_soft, mid_tom,
  high_tom, crash, cabasa
)

More by Eric Carmen