Strudelify
Bad Girls cover art

Bad Girls

Bad Girls

Donna Summer

KeyD minorTempo120 bpm
0:00/0:00
// Bad Girls — Donna Summer
// 120 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: The whole transcription plays 11 ms behind the beat; the grid follows it, so its parts stay together.
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.

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@4 A@2 B@2 C@14 D@2 C@4 E@2 F@2 E@2 G H C@14 D@2 C@4 E@2 F@2 E@2 G H C@14 D@2 C@4 E@2 F@2 E@2 G H ~@8 C@14 D@2 C@12 I
  ~@8
>`.pickRestart({
  A: "[~ d1@6 c2 db2 d2 ~ a1@2 ~@2 g1@6 ~@2 f1 gb1 g1@2 ~@2 a1@3]/2",
  B: "[~ d1@5 ~ c2 db2 d2 ~ a1 ~@3 g1@6 ~@2 f1 gb1 g1@2 ~@2 a1@2 ~]/2",
  C: "[~ d1@6 c2 db2 d2 ~ a1@2 ~@2 g1@6 ~@2 f1 gb1 g1@2 ~@2 a1@2 ~]/2",
  D: "[~ d1@5 ~ c2 db2 d2 ~ a1 ~@3 g1@6 ~@2 f1 gb1 g1 ~ g1 ~ a1@2 ~]/2",
  E: "[~ bb1@2 bb1 ~@5 a1 ~ a1 ~@3 bb1@2 ~@15]/2", F: "[~ bb1 ~ bb1 ~@5 a1 ~ a1@2 ~@2 g1@2 ~@10 d1 ~ f1@2 g1]/2",
  G: "~@3 a1@2 a0 ~ a0 ~ a0 ~ a0 ~ a0 ~ a0", H: "~ a0 ~ a0 ~ a0 ~ a0 ~ a0 ~@6", I: "~ d1@2 ~@13",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · electric guitar clean · "Strat Guitar"
const electric_guitar_clean = note(`<
  A B C D E B C D E B C D E B C D E B C D E B C D E B C D F@6 G H E B C D E B C D E B C D E B C D E B C D F@6 G H E B C
  D E B C D E B C D E B C D E B C D F@6 G H ~@4 E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D I ~@8
>`.pickRestart({
  A: "~ c4 [a3,c4] c4 ~ c4 ~ c4!3 ~@6", B: "~ [g3,bb3] bb3 [g3,bb3] ~ bb3!5 ~@6",
  C: "~ [a3,c4] c4 [a3,c4] c4!2 [a3,c4] c4 ~ c4 ~@6, ~@4 c4 ~@3", D: "~ [g3,bb3]!2 bb3!4 [g3,bb3] bb3 [g3,bb3] ~@6",
  E: "~ [a3,c4]!2 c4 ~ c4 ~ c4!3 ~@6", // Am
  F: "[~ [a3,bb3,d4,f4]@2 [a3,bb3,d4,f4] ~@5 [g3,a3,c4,e4]@2 [g3,a3,c4,e4] ~@3 [a3,bb3,d4,f4]@2 ~@15]/2", // Bbmaj7 Am7 Bbmaj7
  G: "~@3 [g3,b3,db4,e4] ~ [g3,b3,db4,e4] ~ [g3,b3,db4,e4] ~ [g3,b3,db4,e4] ~ [g3,b3,db4,e4] ~ [g3,b3,db4,e4] ~ [g3,b3,db4,e4]", // Dbm7b5
  H: "~ [g3,b3,db4,e4] ~ [g3,b3,db4,e4] ~ [g3,b3,db4,e4] ~ [g3,b3,db4,e4] ~ [g3,b3,db4,e4] ~@6", I: "~ [a3,c4] ~@14",
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.7)

// chords · electric guitar clean · "Strat Guitar" · soft notes
const electric_guitar_clean_2 = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D A B C D ~@8 A B C D A B C
  D A B C D A B C D A B C D ~@12 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@9
>`.pickRestart({
  A: "~@3 a3!3 ~ a3@3 ~@6", B: "~@5 g3!5 ~@6", C: "~@4 a3 ~@2 a3 a3@2 ~@6", D: "~@3 g3 g3@3 ~ g3 ~@7",
})).s("gm_electric_guitar_clean").gain(0.15).pan(0.7)

// other · electric guitar muted · "Muted guitar"
const electric_guitar_muted = note(`<
  A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~@8 A B@3 A B@3 A B@3 A B@3 A B@3 ~@8 A B@3 A B@3 A B@3 A B@3 A B@3 ~@12 A
  B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 C ~@8
>`.pickRestart({
  A: "~ c4!3 ~ d4 ~@5 c4 ~@4", B: "~ c4!3 d4 ~@6 c4 ~@4", C: "~ c4 ~@14",
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.6)

// other · electric guitar muted · "Funky guitar"
const electric_guitar_muted_2 = note("<A B@27 ~@8 B@20 ~@8 B@20 ~@12 B@32 C ~@8>".pickRestart({
  A: "~ [a3,c4] ~@2 d4 ~@2 c4 ~ f4 ~@2 d4 ~@2 c4", B: "~ c4 ~@2 d4 ~@2 c4 ~ f4 ~@2 d4 ~@2 c4", C: "~ c4 ~@14",
})).s("gm_electric_guitar_muted").gain(0.35).pan(0.8)

// chords · piano
const piano = note(`<
  ~@4 A@2 B@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 D@2 E@2 F@2 G H A@2 C@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 D@2 E@2
  F@2 G H A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 D@2 E@2 F@2 G H ~@8 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 B@2
  A@2 C@2 I ~@8
>`.pickRestart({
  A: "[~ [a3,c4,d4,f4]@9 ~ [g3,c4,e4] ~@3 [f3,bb3,d4]@10 ~@4 [g3,c4,e4,g4]@2 ~]/2", // Dm7 C Bb C
  B: "[~ [a3,c4,d4,f4]@9 ~ [g3,c4,e4] ~@3 [f3,bb3,d4]@10 ~@4 [g3,c4,e4]@2 ~]/2", // Dm7 C Bb C
  C: "[~ [a3,c4,d4,f4]@9 ~ [g3,c4,e4] ~@4 [f3,bb3]@10 ~@3 [g3,c4,e4]@2 ~, ~@15 d4@10 ~@7]/2", // Dm7 C Bb5 C
  D: "[~ [bb3,d4,f4,a4]@2 [bb3,d4,f4,a4] ~@5 [a3,c4,e4,g4] ~ [a3,c4,e4,g4] ~@3 [d4,f4,a4]@2 ~@15, ~@15 bb3 ~@16]/2", // Bbmaj7 Am7 Dm
  E: "[~ [f4,a4]@2 [bb3,d4,f4,a4] ~@5 [a3,c4,e4,g4]@2 [a3,c4,e4,g4] ~@3 [bb3,d4,a4] ~@16, ~ [bb3,d4] ~@13 f4@2 ~@15]/2", // F Bbmaj7 Am7 Bbmaj7 Bb
  F: "[~ [bb3,d4,f4,a4]@2 [bb3,d4,f4,a4] ~@5 [a3,c4,e4,g4] ~ [a3,c4,e4,g4] ~@3 bb3 db4 ~@15, ~@15 [d4,f4,a4]@2 ~@15]/2", // Bbmaj7 Am7 Dm
  G: "~@3 [b3,db4,e4,g4] ~ [b3,db4,e4,g4] ~ [b3,db4,e4,g4] ~ [b3,db4,e4,g4] ~ [b3,db4,e4,g4] ~ [b3,db4,e4,g4] ~ [b3,db4,e4,g4]", // Dbm7b5
  H: "~ [b3,db4,e4,g4] ~ [b3,db4,e4,g4] ~ [b3,db4,e4,g4] ~ [b3,db4,e4,g4] ~ [b3,db4,e4,g4] ~@6", // Dbm7b5
  I: "~ [a3,c4,d4,f4]@2 ~@13", // Dm7
})).s("gm_piano").gain(0.35).pan(0.4)

// chords · electric guitar clean · "Chorus guitar"
const electric_guitar_clean_3 = note(`<
  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 ~@8 A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A
  B A B A B A B A B A B A B ~@12 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 C ~@8
>`.pickRestart({
  A: "~ [d4,f4,a4] c4 [d4,f4,a4] c4 ~@6 c4 ~ [e4,g4]@2 c4", B: "~ [d4,f4,gb4] bb3 [d4,f4] bb3 ~@6 bb3 ~ [e4,g4]@2 c4",
  C: "~ [d4,f4,a4] ~@14", // Dm
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.1)

// other · distortion guitar · "Solo Guitar"
const distortion_guitar = note("<~@85 A ~ B ~ C@2 D@2 ~@44>".pickRestart({
  A: "~@6 [a5,bb5] ~ [f5,g5] e5@4 d5@3, ~@2 d6 ~@5, ~@5 c6@2 ~@9", B: "~@3 f4!3 ~ f4 ~ f4 ~ f4 ~ g4@3, ~@13 gb4 ~@2",
  C: "[~@3 a4@3 ~ c5 ~ ab4 a4@2 c5@2 ~ a4@3 ~ c5 ~ ab4 a4@2 ~ c5@2 ab4 a4@2 ~ c5, ~@3 ab4 ~@11 ab4 ~@16]/2",
  D: "[~ d5@2 c5 ~ a4 ~ ab4 ~ g4 ~ f4 ~ g4 f4 d4@5 ~@12]/2",
})).s("gm_distortion_guitar").gain(0.48)

// other · trumpet
const trumpet = note(`<
  ~@8 A B A B A B A C D E D E ~@8 F ~ G ~ F ~ H@2 D E D E A B A B A B A B I ~@7 F ~ G ~ F ~ H@2 D E D E A B A B A B A B
  I ~@7 F ~ G ~ F ~ H@2 ~@8 A B A B A B A C D E D E D E D E A B A B A B A C D E D E D E D E D E D E ~
>`.pickRestart({
  A: "~ f5!4 ~@6 e5 ~@3 d5", B: "~@9 d5!3 ~ e5!3", C: "~@9 d5!3 ~ e5 ~@2", D: "~@3 f5 d5 e5 f5 ~ g5@3 f5 ~ e5 d5 ~",
  E: "~@3 f5 d5 e5 f5 ~@2 d5@2 ~ g5 ~@3", F: "~ f5@2 f5 ~@5 e5@2 e5 ~@3 f5", G: "~ f5 ~ f5 ~@5 e5@2 e5 ~@3 d5",
  H: "[~ e5@23 ~ e5 ~@6]/2", I: "~ f5 ~@14",
})).s("gm_trumpet").gain(0.35).pan(0.6)

// other · tenor sax · "Sax"
const tenor_sax = note(`<
  ~@8 A B A B A C A D E F E F ~@8 G ~ H ~ G ~ I@2 E F E F A B A B A B A B J ~@7 G ~ H ~ G ~ I@2 E F E F A B A B A B A B
  J ~@7 G ~ H ~ G ~ I@2 ~@8 A B A B A C A D E F E F E F E F A B A B A C A D E F E F E F E F E F E F ~
>`.pickRestart({
  A: "~ d5!4 ~@6 c5 ~@3 bb4", B: "~@9 bb4!3 ~ c5!3", C: "~@9 bb4!3 ~ c5!2 ~", D: "~@9 bb4!3 ~ c5 ~@2",
  E: "~@3 d5 a4 c5 d5 ~ e5@2 ~ d5 ~ c5 a4 ~", F: "~@3 d5 a4 c5 d5 ~@2 bb4@3 e5 ~@3", G: "~ d5 ~ d5 ~@5 c5 ~ c5 ~@3 d5",
  H: "~ d5 ~ d5 ~@5 c5 ~ c5 ~@3 bb4", I: "[~ db5@23 ~ db5@2 ~@5]/2", J: "~ d5 ~@14",
})).s("gm_tenor_sax").gain(0.35)

// other · trombone
const trombone = note(`<
  ~@8 A B A B A B A C D E D E ~@8 F ~ G ~ F ~ H@2 D E D E A B A B A B A B I ~@7 F ~ G ~ F ~ H@2 D E D E A B A B A B A B
  I ~@7 F ~ G ~ F ~ H@2 ~@8 A B A B A B A C D E D E D E D E A B A B A B A C D E D E D E D E D E D E ~
>`.pickRestart({
  A: "~ a4!4 ~@6 g4 ~@3 f4", B: "~@9 f4!3 ~ g4!3", C: "~@9 f4!3 ~ g4 ~@2", D: "~@3 a4 f4 g4 a4 ~ bb4@2 ~ a4 ~ g4 f4 ~",
  E: "~@3 a4 f4 g4 a4 ~@2 g4@2 ~ c5 ~@3", F: "~ bb4@2 bb4 ~@5 a4 ~ a4 ~@3 bb4", G: "~ bb4 ~ bb4 ~@5 a4 ~ a4 ~@3 g4",
  H: "[~ a4@22 ~@2 a4@2 ~@5]/2", I: "~ a4 ~@14",
})).s("gm_trombone").gain(0.35).pan(0.6)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  [~ x ~@3 x ~@3 x ~@3 x ~@2]!30
  ~@10
  [~ x ~@3 x ~@3 x ~@3 x ~@2]!22
  ~@10
  [~ x ~@3 x ~@3 x ~@3 x ~@2]!30
  ~@10
  [~ x ~@3 x ~@3 x ~@3 x ~@2]!24
  ~
>`).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A@22 B ~ C ~ C ~ C ~ C ~ A@22 B ~ C ~ C ~ C ~ C ~ A@30 B D@2 ~ C ~ C ~ C ~ A@16 ~@8 C
>`.pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~ x ~@13 x", C: "~ x ~@14", D: "~@15 x",
})).gain(0.3)

// drums · whistle
const whistle = s("ballwhistle:1").struct(`<
  ~@93 A ~ A ~ A ~ A ~ A ~ A ~ B ~ B ~ B ~ B ~ B ~ B ~@8 B@2 ~@2 B ~ C D B ~ C D ~
>`.pickRestart({
  A: "~@3 x!2 ~ x ~ x!2 ~ x ~ x ~@2", B: "~@3 x!2 ~ x ~ x!2 ~ x ~@4", C: "~@11 x ~ x!2 ~", D: "x!2 ~@14",
})).gain(0.45)

// drums · whistle
const whistle_2 = s("ballwhistle:0").struct("<~@105 A ~ A ~ A ~ A ~ A ~ A ~@8 A@2 ~@11>".pickRestart({
  A: "~@13 x ~@2",
})).gain(0.45)

stack(
  bass, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_muted, electric_guitar_muted_2, piano,
  electric_guitar_clean_3, distortion_guitar, trumpet, tenor_sax, trombone, kick, snare, hihat, open_hat, whistle,
  whistle_2
)

More by Donna Summer