Strudelify
Bette Davis Eyes cover art

Mistaken Identity

Bette Davis Eyes

Carnes Kim

KeyF majorTempo115 bpm
0:00/0:00
// Bette Davis Eyes — Kim Carnes
// 115 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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 · pad poly · "tk1"
const pad_poly = note(`<
  A@2 B@2 A@2 B@2 A@2 C@2 B@2 D B@2 E@2 B@2 F@2 G H I J K H I L I K M A@2 B@2 A@2 C@2 B@2 D B@2 E@2 B@2 F@2 N H O P Q R
  O S T Q M B@6 F@2 N H O P Q R O S T Q M B@12 U@2 C@2 B@4 U@2 V@2
>`.pickRestart({
  A: "[~@3 bb3 a3 ~ d4 [c3,e3,g3,c4]@9, [bb2,f3]@4 d3@3 ~@9, ~ f4@3 ~@12, ~@2 c4@2 ~ a3@2 ~@9]/2", // C Bb5
  B: "[~@3 bb3 ~@2 f4 [c3,g3,c4,e4]@9, [bb2,f3]@4 [d3,a3]@3 ~@9, ~ f4@3 ~@12, ~@2 c4@2 ~ d4@2 ~@9]/2", // C Bb5 D5
  C: "[~@6 bb3@2 ~@4 f4 ~ [f2,a3,c4,f4]@18, bb2@4 [c3,f3]@3 ~@9, f3@3 ~@13, ~ f4@3 ~@12, ~@2 c4@2 ~ bb3@2 ~@9]/2", // F F5
  D: "~@2 f4 c4 ~@3 d4, f2@7 ~ a2@8, c4@2 ~@3 c4@2 ~, ~@2 a4@5 ~@5 a3@4",
  E: "[~@3 bb3 ~ c4 e4 [d3,a3,d4,f4]@9, [bb2,f3]@7 ~ [c3,g3]@5 ~@19, ~@2 f4@5 ~@25, ~ c4 ~@6]/2", // Dm Bb5 C5
  F: "[~@15 f4, f3@15 ~ eb3@16, f4@2 a4@3 ~ a4@3 ~ a4@3 ~ a4@2, ~@2 c5@7 ~ c5@7 ~ c5@7 ~ c5@6, ~@6 f4@6 ~@2 f4@7 ~ f4@6 ~@4]/2",
  G: "[a3,d5], [f4,a4] ~@15", H: "[c4,f4,a4,c5]", I: "[bb3,f4,bb4,c5,f5]", J: "[f3,c4,f4,a4,c5,f5]", K: "[a3,f4,a4,d5]",
  L: "[c4,f4,a4,c5,f5]", M: "[g3,e4,g4,c5]", N: "[a3,d5]@15 ~, [f4,a4] ~@15", O: "[bb3,f4,bb4,c5,f5]@15 ~",
  P: "[f4,a4,c5,f5], c4@7 ~", Q: "[a3,f4,a4,d5]@15 ~", R: "[c4,f4,a4,c5]@15 ~", S: "[c4,f4,c5,f5]@15 ~, a4@13 ~@3",
  T: "[bb3,f4,bb4,c5,f5]@7 ~", // Bbsus2
  U: "[~@6 bb3@2 ~@4 a4@2 [c3,c4,e4,g4]@17 ~, [bb2,f3]@4 [d3,d4]@3 ~@9, ~ f4@3 ~ f4@2 ~@9, ~ c4 ~@6]/2", // C Bb5 D
  V: "[~@6 bb4@2 ~@4 f5 ~ [f2,a4,c5,f5]@18, bb2@4 [c3,f4]@3 ~@9, f4@3 ~@13, ~ f5@3 ~@12, ~@2 c5@2 ~ bb4@2 ~@9]/2", // F F5
})).s("gm_pad_poly").gain(0.24)

// bass · electric bass finger · "tk2"
const bass = note(`<
  ~@4 A@6 B@2 C@2 D A@2 E@2 A@2 F G H I J K L F M N J O P A@6 B@2 C@2 D A@2 E@2 A@2 F G H I J K L F M N J O P A@6 F G H
  I J K L F M N J O P A@14 B@2 A@6 B@2
>`.pickRestart({
  A: "[bb1@7 ~ d2@6 c2@17 ~]/2", B: "[bb1@7 ~ c2@5 ~ f1@17 ~]/2", C: "[bb1@7 ~ d2@5 ~ c2@17 ~]/2", D: "f1@7 ~ a1@8",
  E: "[bb1@7 ~ c2@6 d2@17 ~]/2", F: "f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~", G: "eb2@3 ~ eb2@3 ~ eb2@3 ~ eb2 ~ eb2 ~",
  H: "d2@2 ~@2 d2@3 ~ d2@2 ~@2 d2@2 ~@2", I: "f2@3 ~ f2@2 ~@2 f2@3 ~ f2@3 ~",
  J: "bb1@3 ~ bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2", K: "f2@2 ~@2 f2@3 ~ f2@2 ~@2 f2@2 ~@2",
  L: "d2@3 ~ d2@3 ~ d2@2 ~@2 d2@3 ~", M: "bb1@2 ~@2 bb1@3 ~ bb1@2 ~@2 bb1@2 ~@2", N: "f2@3 ~ f2@2 ~@2 f2@3 ~ f2@2 ~@2",
  O: "d2@3 ~ d2@2 ~@2 d2@2 ~@2 d2@3 ~", P: "c2 ~ c2 ~ c2 ~ c2 ~",
})).s("gm_electric_bass_finger").gain(0.33)

// other · electric guitar muted · "tk5"
const electric_guitar_muted = note(`<
  ~@14 A B C D E F C ~@12 G H@17 ~@13 H I H I H I J@2 ~@19 H K H K H K H L H K H K H K M ~
>`.pickRestart({
  A: "~@6 c4 ~@7 d4 ~", B: "~@2 d4 ~@3 bb3 ~@3 d4 ~@3 c4 ~", C: "~@2 c4 ~@3 c4 ~@3 c4 ~@3 c4 ~",
  D: "~@2 d4 ~@3 bb3 ~@3 c4 ~@3 d4 ~", E: "~@2 d4 ~@3 d4!2 a3 ~ d4 ~ a3 ~ g3 ~", F: "f3 ~ f3 ~@3 f3 ~@3 f3 ~@3 f3 ~",
  G: "~@10 f3 ~ d3 ~ f3 ~", H: "~@2 f3 ~ d3 ~ f3 ~@3 f3 ~ d3 ~ f3 ~", I: "~@2 f3 ~ d3 ~ f3 ~@3 f3!2 d3 ~ f3 ~",
  J: "~@2 f3 ~@3 f3 ~@3 f3 ~@3 f3 ~", K: "~@2 f3!2 d3 ~ f3 ~@3 f3 ~ d3 ~ f3 ~",
  L: "[f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~", // F5
  M: "~@2 f3 ~ d3 ~ f3 ~@3 f3 ~ d3 ~ f3@2",
})).s("gm_electric_guitar_muted").gain(0.27).pan(0.8)

// other · synth strings 1 · "tk6"
const synth_strings_1 = note(`<
  ~@4 A B C D ~@26 A B C E ~@7 A B C E A B ~@13 A B A B A B ~@17 A B A B A B A B A B A B A B A B A B F ~
>`.pickRestart({
  A: "[d5,d6] ~@3 [d5,d6] ~@3 [f5,f6] ~@5 [d5,d6] ~", B: "~@2 [c5,c6] ~@3 [c5,c6] ~@3 [c5,c6] ~@3 [c5,c6] ~",
  C: "[d5,d6] ~@3 [d5,d6] ~@3 [f5,f6] ~@3 [d5,d6] ~ [c5,c6] ~", D: "~ [c5,c6]@3", E: "~@4 [c5,c6] ~@11",
  F: "[d5,d6] ~@3 [d5,d6] ~@3 [f5,f6] ~@7", // D F
})).s("gm_synth_strings_1").gain(0.27).pan(0.9)

// chords · harpsichord · "tk7"
const harpsichord = note(`<
  ~@21 A B@7 C@6 ~@16 A B@7 C@6 ~@5 A B@7 C@6 ~@7 D E F G H I J K D E D L D M N@2
>`.pickRestart({
  A: "~@7 a4, f4!2, ~ c5@2 c5, ~@3 a4@4 ~",
  B: "[~@7 a4 [a4,f5]@8 [f4,c5,f5]@8 [f4,c5,f5]@8 [a4,f5]@8 [a4,f5]@8 [f4,a4,c5,f5]@8, f4 f4@3 ~@4 [f4,c5]@4 ~@2, ~ c5@2 c5@5 a4@8 ~@12, ~@3 a4@4 ~ [d4,d5]@16 [bb3,bb4]@16 [d4,d5]@16]/7", // Dm F5 Dm F F5 D Bb D
  C: "[f5@9 ~@10 f5@5 ~@7 c4 [c4,g4,c5,e5]@16, [bb3,bb4,c5]@13 a3@6 f4@5 [a4,d5,f5]@16 ~@8, f4@5 f4@2 c4@5 d4@2 f4@8 ~@2, ~@9 f5@10 [bb3,bb4]@11 d4@16 ~@2, ~@11 a3 f3@7 c5@10 e4@16 ~@3]/6", // C Bbsus2 Dm Bb
  D: "~@4 [bb3,f4] ~@3 [d4,a4] ~@3 [d4,a4] ~ [c4,g4] ~", E: "~@4 [c4,g4] ~@3 [c4,g4] ~ c4@2 ~@2 [c4,g4] ~, ~@10 g4 ~@5",
  F: "~@4 [bb3,f4] ~@3 [d4,a4] ~@3 a4@2 [c4,g4] ~, ~@12 d4 ~@3", G: "~@2 [c4,g4] ~@5 [c4,g4] ~ [c4,g4] ~@3 [c4,g4] ~",
  H: "~@2 bb3 ~ [bb3,f4] ~@3 [d4,a4] ~@3 [d4,a4] ~ [c4,g4] ~", I: "~@4 [c4,g4] ~@3 [c4,g4] ~ c4@2 ~@4, ~@10 g4 ~@5",
  J: "[bb3,f4]@2 ~@2 [bb3,f4] ~@3 [d4,a4] ~ [d4,a4] ~@3 f3 ~", // Bb5 D5
  K: "~@2 [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~", // F5
  L: "~@2 [c4,g4] ~@3 [c4,g4] ~ [c4,g4] ~ [c4,g4] ~@3 [c4,g4] ~", M: "~@4 [c4,g4] ~@3 [c4,g4] ~ [c4,g4] ~@3 [c4,g4] ~",
  N: "[~@4 [bb3,f4] ~@3 [d4,a4] ~ [d4,a4] ~@3 [f3,c4]@17 ~]/2", // Bb5 D5 F5
})).s("gm_harpsichord").gain(0.21).pan(0.3)

// bass · piano · "tk11"
const bass_2 = note("<~@87 [~@4 eb2 ~ eb2 ~@5 eb2 ~@3]!4 ~@16>").s("gm_piano").gain(0.36)

// drums · kick
const kick = s("bd").struct("<~@8 A@25 B C ~@3 A@44 B C ~@3 A@18 B ~>".pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct(`<
  ~@22 A B@10 C ~@18 A B@10 D B@3 E B@3 E B@10 F ~@7 G B@3 H B@3 I B@3 H B@2 F ~
>`.pickRestart({
  A: "~@10 x ~ x ~ x!2", B: "~ x ~ x", C: "~@4 x ~ x ~ x ~ x!3 ~@3", D: "~@2 x ~ x ~@2 x!9", E: "~@4 x ~@5 x ~ x ~ x!2",
  F: "~@2 x ~@2 x!2 ~", G: "~@5 x!3", H: "~@4 x ~@3 x!5 ~@2 x", I: "~@2 x ~@2 x!3",
})).gain(0.41)

// drums · clap
const clap = s("cp").struct("<~@38 A@14 B ~@11 A@6 C B ~@13 A@13 D A@6 E ~>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~@2 x!2 ~@4", C: "~@2 x!2 ~@2 x!2", D: "~@2 x!2 ~ x!3", E: "~@2 x!2 ~ x!2 ~",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~@23 [x!8]!11 ~@19 [x!8]!30 ~@8 [x!8]!8 ~@8>").gain(0.27)

// drums · open hat
const open_hat = s("oh").struct("<~@4 x ~@102>").gain(0.27)

// drums · crash
const crash = s("cr").struct("<~@23 A ~@29 A ~@10 A ~@3 A ~ A@3 ~@10 A ~@7 A ~@3 A ~@3 A ~@3 A ~ B ~>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.36)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!8]!106 ~>").gain(1.14)

stack(
  pad_poly, bass, electric_guitar_muted, synth_strings_1, harpsichord, bass_2, kick, snare, clap, hihat, open_hat,
  crash, cabasa
)