Strudelify

Don't Go Knockin' on My Door

Britney Spears

KeyB♭ minorTempo112 bpm
0:00/0:00
// Don't Go Knockin' on My Door — Britney Spears
// 112 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 65, 4/4 at bar 66) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 16 "Staff-7" distortion guitar (copy of ch 15 "Staff-6" acoustic guitar steel)
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · acoustic guitar steel · "Staff-5"
const acoustic_guitar_steel = note("<~ A B C ~@55 A B C ~ D ~@27>".pickRestart({
  A: "~@4 a3 c4 f4 a4 ~@2 f4@2 eb4@2 db4@2", B: "bb3@3 ~ db4 f4 bb4 db5 ~@8", C: "~@4 db4 f4 ab4 db5 ~@8",
  D: "~@4 a3 c4 f4 a4 ~@8",
})).s("gm_acoustic_guitar_steel").gain(0.72)

// other · acoustic guitar steel · "Staff-6"
const acoustic_guitar_steel_2 = note(`<
  ~ A B C D E F G D E F H I E J K L M N O P Q R S P T ~@2 D E F G D E F H I E J K L M N O P Q R S P T N O P Q R S P T ~
  A B C D U ~ V W@2 X Y Z AA AB AC W@2 X Y Z AA AB AC W@2 X Y Z AA AD AE AF
>`.pickRestart({
  A: "f2 a2 c3 f3 ~@4 f2@2 ~@6", B: "bb2 db3 f3 bb3 ~@12", C: "ab2 db3 f3 ab3 ~@8 bb2@3 ~", D: "gb2@3 ~ gb2@3 ~@9",
  E: "f2@3 ~ f2@3 ~@9", F: "bb2@2 db3@2 bb2@3 ~@9", G: "db3@3 db3@3 ~@4 f2@2 f2@2 bb2@2",
  H: "db3@3 db3@3 ~@4 f2@2 f2@2 f2@2", I: "gb2@7 ~@9", J: "bb2@7 ~@9", K: "db3@3 db3@3 ~@4 f2@2 f2@3 ~",
  L: "gb2@7 ~@7 f2@2", M: "~@2 f3 ab3 gb3 f3 eb3 db3", N: "gb2@2 bb2@2 gb2@2 ~@2 gb2@3 gb2 ~@2 gb2@2",
  O: "f2@3 ~ f2@7 ~@5", P: "bb2@2 db3@2 bb2@2 ~@2 bb2@3 bb2 ~@4", Q: "db3@3 db3@4 ~ db3@2 f2@2 f2@2 f2@2",
  R: "gb2@2 bb2@2 gb2@2 ~@2 gb2@3 gb2 ~@4", S: "f2@3 ~ f2@3 ~ f2@7 ~", T: "ab2 ~@2 ab2 ~@6 ab2 ~ ab2!2 ~@2",
  U: "f2 a2 c3 f3 f2@3 ~ f3 ~ f3!2 ~ f3!2 ~", V: "~@4 gb2 bb2 gb2 ~",
  W: "[gb2@3 gb2 ~@4 f2@3 ~ f2@7 ~@5 bb2@2 db3@2 bb2@2 ~@2]/2", X: "bb2@3 bb2 ~@4 db3@3 db3@3 db3@2",
  Y: "~ f2!3 gb2 bb2 gb2 ~", Z: "gb2@3 gb2 ~@4 f2@3 ~ f2@3 ~", AA: "f2@7 ~ bb2@2 db3@2 bb2@2 ~@2",
  AB: "bb2@3 bb2 ~@4 ab2@3 ~ f3@2 ab3@2", AC: "gb3 f3 eb3 db3 gb2 bb2 gb2 ~",
  AD: "bb2@3 bb2 ~@4 ab2@3 ~ [f2,f3] ~ [ab2,ab3] ~", AE: "[gb2,gb3] ~ [f2,f3] ~ [eb2,eb3] ~ [db2,db3] ~@9",
  AF: "~@8 [db2,db3] ~@7", // Db
})).s("gm_acoustic_guitar_steel").gain(0.72)

// chords · lead 2 sawtooth · "Staff-8"
const lead_2_sawtooth = note(`<
  ~@4 A B@2 C D E B F G H@2 I J K L K M N O@2 P Q R ~ A B@2 C D E S F G H@2 I J K L K M N O@2 P Q L K M N O@2 P T U ~@3
  V ~ W X@4 Y@3 Z AA AB AC AD AE@3 Z AA AB AC AD AE@3 AF AG AH
>`.pickRestart({
  A: "~@2 bb4 db5 eb5 ~@3", B: "~@2 bb4 db5 eb5 f5 eb5 db5", C: "eb5@2 db5 eb5@2 db5 eb5@2 eb5@2 f5@2 eb5@2 db5@2",
  D: "~@4 bb4@2 db5@2 eb5@7 ~", E: "~@4 bb4@2 db5@2 eb5@2 db5@2 f5@3 ~",
  F: "eb5@2 db5 eb5@2 db5 f5@2 eb5@2 db5@2 db5@3 ~", G: "[db4,gb4,bb4]@3 ~@5 [db4,gb4,bb4]@3 ~@5",
  H: "[[c4,f4,a4]@3 ~ a4@2 [c4,f4,bb4]@4 c5@3 ~ [f4,bb4,c5]@4 [f4,bb4,db5]@5 ~@9]/2", // F Fsus4 Bbm
  I: "[db4,f4,ab4] ab4!2 [db4,f4,ab4]@2 bb4 c5 bb4", J: "[bb3,db4,gb4]@5 ~ gb4@2 bb4@2 bb4@2 bb4@2 [f4,a4]@2",
  K: "~@2 f5 ab5 gb5 f5 eb5 db5", L: "[bb4,db5,f5]@7 ~ [bb3,db4,f4]@5 ~ [a3,c4,eb4]@2",
  M: "[bb4,db5,f5]@3 eb5 db5@3 ~ [db4,f4,bb4]@3 ~@3 db5@2", // Bbm
  N: "[ab4,eb5]@2 db5 [ab4,eb5]@2 db5 f5@2 [ab4,eb5]@2 db5@2 [ab4,db5]@2 bb4@2", // Ab5 Db5
  O: "[[gb4,bb4]@3 ~ [bb4,db5]@2 [c5,eb5]@5 ~ [bb4,db5]@2 [bb4,c5,eb5]@5 ~ f5@2 eb5 [a4,c5,f5]@3 ~@4 db5@2]/2", // Gb Bbm Cm Bbm Cm7 F
  P: "[bb4,db5,f5] gb5 ab5 [bb4,db5,gb5] f5 [bb4,db5,f5] eb5 [bb4,db5,f5]", // Bbm Gb Bbm
  Q: "[ab4,c5,eb5]@3 ~ f5@2 ab5@2 gb5@2 f5@2 eb5@2 db5@2", R: "~@4 bb4@3 ~@9", S: "~@4 bb4@2 db5@2 ab5@2 ab5@2 bb5@3 ~",
  T: "[ab4,c5,eb5]@2 bb5@4 bb5 ab5 f5@2 f5 eb5 f5 eb5@3", U: "bb4@3 ~ bb4@3 ~ bb4@2 bb4@2 bb4@3 ~",
  V: "[gb4,bb4,db5,gb5]@3 ~@5 eb4@5 ~ c4@2", W: "bb4@2 db5@2 f5@2 eb5@5 ~@3 db5@2",
  X: "[db5!3 db5@3 ab5@2 [bb4,bb5]@3 ~ ab5@2 [bb4,db5,gb5]@5 ~ f5@2 [bb4,eb5]@5 ~ db5@2 [a4,f5]@5 ~@5 [f4,bb4]@3 ~ ab5@2 [bb4,db5,gb5]@5 ~ f5@2 [ab4,db5,eb5]@4 [ab4,db5,f5]@3 ~ [db4,db5]@2]/4", // Bb Gb Eb5 Dm Bb5 Gb Absus4 Db
  Y: "[[c4,c5]@2 [c4,c5]@2 [bb3,bb4]@2 [bb3,bb4]@5 ~@3 db5 [gb4,bb4,eb5]@4 ~ db5@2 [bb4,eb5]@5 ~ f5@2 eb5 [a4,f5]@4 ~@3 db5@2 [bb4,db5,f5]@2 gb5@2 ab5@2 [bb4,db5,gb5]@2]/3", // C Bb Ebm Eb5 Dm Bbm Gb
  Z: "f5@2 [bb4,db5,f5]@2 eb5@2 [bb4,db5,f5]@2 [ab4,c5,eb5]@3 ~ f5@2 ab5@2", // Bbm Ab
  AA: "gb5@2 f5@2 eb5@2 db5@2 [bb4,db5,f5]@7 ~", AB: "[bb3,db4,f4]@5 ~ [a3,c4,eb4]@2 ~@4 f5@2 ab5@2",
  AC: "gb5@2 f5@2 eb5@2 db5@2 [bb4,db5,f5]@3 eb5 db5@3 ~", // Bbm
  AD: "[db4,f4,bb4]@3 ~@3 db5@2 [ab4,eb5]@2 db5 [ab4,eb5]@2 db5 f5@2", // Bbm Ab5
  AE: "[[ab4,eb5]@2 db5@2 [ab4,db5]@2 bb4@2 [gb4,bb4]@3 ~ [bb4,db5]@2 [c5,eb5]@5 ~ [bb4,db5]@2 [bb4,c5,eb5]@5 ~ f5@2 eb5 [a4,c5,f5]@3 ~@4 db5@2 [bb4,db5,f5]@2 gb5@2 ab5@2 [bb4,db5,gb5]@2]/3", // Ab5 Db5 Gb Bbm Cm Bbm Cm7 F …
  AF: "f5@2 [bb4,db5,f5]@2 eb5@2 [bb4,db5,f5]@2 [ab4,c5,eb5]@3 ~ f5 ~ ab5 ~", AG: "gb5 ~ f5 ~ eb5 ~ db5 ~@9",
  AH: "~@4 [bb4,db5,f5,bb5] ~@3", // Bbm
})).s("gm_lead_2_sawtooth").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@2 B@11 ~ B@7 C ~@2 B@13 D B@7 C B@8 ~ E ~@2 B@2 ~ F G@6 H I G@7 I G@7 J ~
>`.pickRestart({
  A: "x ~@2 x ~@12", B: "x ~@2 x ~@3 x ~@2 x ~@5", C: "x", D: "x ~@2 x ~@3 x!2 ~ x ~ x ~ x ~", E: "~ x ~@2",
  F: "x ~@7 x ~@2 x ~@3 x", G: "~@2 x ~@5 x ~@2 x ~@3 x", H: "~ x ~@6", I: "x ~ x ~ x ~ x ~ x ~@2 x ~@3 x",
  J: "~ x ~@2 x ~@3",
})).gain(0.36)

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

// drums · low tom
const low_tom = s("lt").struct("<~ A B@2 ~@13 C ~@7 D ~@23 D ~@9 E B@2 ~@3 F ~@7 G ~@15 H@2>".pickRestart({
  A: "~@6 x!2", B: "~ x ~@2", C: "~@2 x!6", D: "~@4 x!4", E: "x ~@5 x!2", F: "x", G: "x!4 ~@4", H: "~ x",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B C@2 D C@7 E ~ C@7 ~@3 C@13 F C@7 ~ C@8 ~@4 C@2 ~ G H@6 I G H@7 J H@7 I ~
>`.pickRestart({
  A: "~ x!3 ~@12", B: "~ x!3 ~@4 x ~@3 x ~@3", C: "~ x!6 ~ x!8", D: "~ x!6 ~ x!4 ~@4", E: "~ x!6 ~ x!7 ~",
  F: "~ x!6 ~ x ~ x ~ x ~ x ~", G: "~@9 x!6 ~", H: "x!8 ~ x!6 ~", I: "x!8 ~@8", J: "x ~ x ~ x ~ x ~@2 x!6 ~",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A B C ~@55 D B C ~@27 E@2>".pickRestart({
  A: "~@5 x ~@2", B: "x ~@4 x ~@10", C: "x ~@4 x ~@6 x ~@3", D: "~ x ~@4 x ~@3 x ~@5", E: "~ x",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@2 B@11 ~ B@7 A ~@2 B@21 A B@8 A ~@3 B@2 ~ C@7 ~ C@16 ~@2>".pickRestart({
  A: "x", B: "x ~@6 x ~@8", C: "~@8 x ~@6 x",
})).gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<~@2 [~ x ~@4 x ~@9]!2 ~@55 [~@2 x ~@4 x ~@8] [~ x ~@4 x ~@9]!2 ~@28 [~ x]>")
  .gain(0.36)

// drums · ride bell
const ride_bell = s("rd").struct("<~@2 A B ~@55 C A B ~@28 D>".pickRestart({
  A: "~@2 x!2 ~@3 x ~@8", B: "~@2 x ~@4 x ~@8", C: "~@3 x ~@12", D: "~ x",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@3 [~@3 x ~@12] ~@57 [~@3 x ~@12] ~@28 [~ x]>").gain(0.36)

// drums · congas
const congas = s("conga:13").struct("<~@90 [~ x]>").gain(1.47)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, lead_2_sawtooth, kick, snare, low_tom, hihat, mid_tom, open_hat,
  high_tom, ride_bell, crash, congas
)

More by Britney Spears