Strudelify
She Bop cover art

1984 · Twelve Deadly Cyns...And Then Some

She Bop

Cyndi Lauper

KeyA minorTempo140 bpm
0:00/0:00
// She Bop — Cyndi Lauper
// 140 bpm, 4/4, key A minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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.

// bass · electric bass finger
const bass = note(`<
  ~ A B A B A B A C A B A B A B A B D C A C E F G H A C A B D C A C A B A B I J K L A C A M N O P Q R S T U V W P Q R X
  A B A C A C A C A C A C E F G H A C A B A B A C A C A C E F G H A C A Y W O P Z R S T AA W@2 P AB R X A C A C A C ~ AC
>`.pickRestart({
  A: "a1 ~ a1 ~ c2 ~ c2 ~ d2 ~ d2 ~ d#2@2 e2@2", B: "a1 ~ a1 ~ c2 ~ c2@2 a1@2 ~@6", C: "a1 ~ a1 ~ c2 ~ c2 ~ a1@2 ~@6",
  D: "a1 ~ a1@2 c2 ~ c2 ~ d2 ~ d2 ~ d#2@2 e2@2", E: "f1@3 ~ f1 ~ f1 ~ e1@2 f1 ~ f1 ~ f1 ~",
  F: "e1@2 f1 ~ f1 ~ f1 ~ e1@2 f1 ~ f1 ~ f1 ~", G: "g1@3 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", H: "g1 ~@7",
  I: "f1@3 ~ f1 ~ f1 ~ e1@2 f1 ~ f1 ~ f1 ~, a1 ~@15", J: "e1@2 f1 ~ f1 ~ f1@2 e1@2 f1 ~ f1 ~ f1 ~",
  K: "g1@3 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@3 ~", L: "g1@3 ~@13", M: "a1@4 b1@3 ~ c2@4 e2@3 ~",
  N: "d2 ~ d2@2 ~@2 a1 ~ d2 ~ d2@2 ~@2 a1 ~", O: "d2 ~ d2@2 ~@2 a1 ~ d2 ~ d2@3 ~ a1 ~",
  P: "c2 ~ c2@2 ~@2 c2 ~ c2 ~ c2@2 ~@2 c2 ~", Q: "f1 ~ f1@2 ~@2 f1 ~ f1 ~ f1@2 ~@2 f1 ~",
  R: "g1 ~ g1@2 ~@2 g1 ~ g1 ~ g1@2 ~@2 g1 ~", S: "e1 ~ e1@3 ~ e1 ~ e1 ~ e1@2 ~@2 e1 ~",
  T: "a1 ~ a1@2 ~@2 a1 ~ a1 ~ a1@2 ~@2 a1 ~", U: "a1@4 b1@4 c2@3 ~ e2@3 ~", V: "d2 ~ d2@2 ~@2 a1 ~ d2 ~ d2@2 ~@2 a1@2",
  W: "d2 ~ d2@3 ~ a1 ~ d2 ~ d2@3 ~ a1 ~", X: "e1@3 ~@13", Y: "a1@3 ~ b1@3 ~ c2@4 e2@3 ~",
  Z: "f1 ~ f1@2 ~@2 f1 ~ f1 ~ f1@3 ~ f1 ~", AA: "a1@3 ~ b1@3 ~ c2@2 ~@2 e2@3 ~",
  AB: "f1 ~ f1@3 ~ f1 ~ f1 ~ f1@3 ~ f1 ~", AC: "a1@2 b1@2 c2@2 b1 ~ a1@2 ~@6",
})).s("gm_electric_bass_finger").gain(0.46)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@5 A B@3 C D@2 E ~@7 F@3 G ~@13 H@2 G ~@4 I J@4 K@2 L@2 M@2 N@2 O ~@4 P Q R@2 S T U V W@5 X@2 Y@2 ~@8 Z@3 ~@4 I AA@6
  AB AC AD@4 AE ~@9
>`.pickRestart({
  A: "e6 d6", B: "[c6@8 b5@7 a5@8 ~ g5@7 e5@15 ~@2]/3", C: "e6@7 d6@8 ~", D: "[c6@8 b5@7 a5@8 g5@8 ~]/2",
  E: "e5@13 ~@3", F: "[~@15 [c4,f4,a4]@31 ~@2]/3", G: "[d4,g4,b4]", H: "[[c4,f4,a4]@31 ~]/2",
  I: "a4@4 b4@4 c5@4 g5@3 ~", J: "[f5@26 g5@5 e5@33, d5@30 ~ c5@31 ~@2]/4", K: "[b4,d5]/2",
  L: "[a4@15 a4@4 ~ b4@4 ~@4 g5@4, ~@24 c5@7 ~]/2", M: "[f5@27 g5@4 ~, d5@15 ~]/2", N: "[c5,e5]/2", O: "[b4,d5]",
  P: "~@8 e5@7 ~", Q: "a5@8 b5@7 ~", R: "[c6@6 b5@2 a5@3 ~ e5@18 d5@2]/2", S: "c5@3 e5", T: "a5@4 b5@4 c6@3 d6@4 ~",
  U: "b5@4 c6@4 a5@5 ~ b5@2", V: "a5@14 g5 ~",
  W: "[e5@8 a5@4 c6@3 ~ a5@15 ~ a5@3 ~ b5@4 c6@4 e6@3 ~ d6@6 ~ g5@16 ~ a5@7 ~, ~@15 [c4,f4,a4]@31 ~ [d4,g4,b4]@17 ~@16, ~@27 b5 ~@12]/5", // F G
  X: "[e5@24 a5@4 c6@3 ~]/2", Y: "[c6@6 a5 ~ a5@20 ~@4]/2",
  Z: "[[c4,f4,a4]@23 ~ [f4,a4]@7 ~ b4@16, ~@23 c4@7 ~ [d4,g4]@17]/3", // F G5
  AA: "[f5@27 g5@4 ~ c5@31 [b4,d5]@32 ~, d5@30 ~ e5@32 ~@33]/6", AB: "a4@15 ~", AC: "a4@3 b4@4 ~@5 g5@4, ~@7 c5@7 ~@2",
  AD: "[f5@27 g5@4 ~ c5@31 ~, d5@30 ~ e5@32 ~]/4", AE: "[b4,d5]@15 ~",
})).s("gm_string_ensemble_2").gain(0.22)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B@10 C A B@2 C A B@2 C A C A D A B@2 C A B@2 C A B@2 C A C A D A B@16 D A B@2 C B@11 D A B A C A B@2 C A B@2 C A
  B@2 D B@17 D A B@4 E ~ A
>`.pickRestart({
  A: "x!2", B: "x!4", C: "x ~@3 x!3 ~", D: "x", E: "x!3 ~",
})).gain(0.5)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  A ~@11 A ~@3 A ~@3 A ~ A ~ B ~@3 A ~@3 A ~@3 A ~ A ~ B ~@17 B ~@3 A ~@11 B ~@3 A ~@3 A ~@3 A ~@3 B ~@17 B ~@8
>`.pickRestart({
  A: "~@7 x", B: "x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@11 C B@3 C B@3 C B C B ~ B@3 C B@3 C B@3 C B C B ~ B@3 ~@2 B@6 ~@2 B@4 ~ B@3 C B@11 ~ B@3 C B@3 C B@3 C B@3 ~ B@3
  ~@2 B@6 ~ B@5 ~ B@5 C ~ D
>`.pickRestart({
  A: "x!3 ~", B: "x!8", C: "x!5 ~@3", D: "~ x",
})).gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@11 A ~@3 A ~@3 A ~ A ~@5 A ~@3 A ~@3 A ~ A ~@23 A ~@15 A ~@3 A ~@3 A ~@30
>`.pickRestart({
  A: "~@3 x",
})).gain(0.5)

// drums · high tom
const high_tom = s("ht").struct(`<
  A ~@11 A ~@3 A ~@3 A ~ A ~@5 A ~@3 A ~@3 A ~ A ~@23 A ~@15 A ~@3 A ~@3 A ~@30
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.5)

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

// drums · ride
const ride = s("rd").struct("<~@45 A@7 ~ A@5 ~@5 A@11 ~@21 A@7 ~ A@5 ~@6 B ~@2>".pickRestart({
  A: "x!8", B: "~@5 x!3",
})).gain(0.5)

stack(bass, string_ensemble_2, kick, snare, low_tom, hihat, mid_tom, high_tom, crash, ride)

More by Cyndi Lauper