Strudelify
On the Down Low cover art

1995 · I Remember You

On the Down Low

Brian McKnight

KeyD♭ majorTempo93 bpm
0:00/0:00
// On the Down Low — Brian McKnight
// 93 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: The whole transcription plays 24 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(93/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
const bass = note(`<
  ~@2 A@2 B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B
  D B C B D B C B D B C B D B C B D
>`.pickRestart({
  A: "[~@4 db2@25 ~ ab1 ~]/2", B: "db2 ~@2 ab1 ~@3 b1 ~@5 ab1 db2 ab1",
  C: "db2 ~@2 ab1 ~@3 b1 gb2 ~ g2 ~ ab2 gb2 ab1@2", D: "db2 ~@2 ab1 ~@3 b1 gb2 ~ g2 ~ ab2 gb2 ab1 ~",
})).s("gm_electric_bass_finger").gain(0.41)

// chords · electric guitar jazz
const electric_guitar_jazz = note("<~@4 A@72>".pickRestart({
  A: "[[bb3,db4,eb4,gb4]@11 ~@5]/2", // Ebm7
})).s("gm_electric_guitar_jazz").gain(0.51)

// chords · pad new age
const pad_new_age = note("<~@20 A@3 B C@3 D ~@16 A@3 B C@3 D ~@16 A@3 B C@3 D>".pickRestart({
  A: "[~@2 [ab4,db5] ~ [gb4,db5] ~ [d4,e4,db5] ~ [gb4,db5] ~ [ab4,db5] ~ [gb4,db5]@6 [ab4,db5] ~ [gb4,db5] ~ [e4,db5] ~ [gb4,db5] ~ [ab4,db5] ~ [gb4,db5]@6 ab4@2 [gb4,db5] ~ [e4,db5] ~ [gb4,db5] ~ [ab4,db5] ~ [gb4,db5]@3 gb4, ~@34 db5 ~@13]/3", // Db5 Gb5 Dbm Gb5 Db5 Gb5 Db5 Gb5 …
  B: "db5 e4 [gb4,db5] e4 [ab4,db5] ~ [gb4,db5]@6 ~@4", // Gb5 Db5 Gb5
  C: "[~@2 [ab4,db5] ~ [gb4,db5] ~ [e4,db5] ~ [gb4,db5] ~ [ab4,db5] ~ [gb4,db5]@6 [ab4,db5] ~ [gb4,db5] ~ [e4,db5] ~ [gb4,db5] ~ [ab4,db5] ~ [gb4,db5]@6 [ab4,db5] ~ [gb4,db5] ~ [e4,db5] ~ [gb4,db5] ~ [ab4,db5] ~ [gb4,db5]@3 [gb4,db5]]/3", // Db5 Gb5 Dbm Gb5 Db5 Gb5 Db5 Gb5 …
  D: "e4 ~ [e4,gb4,db5] ~ [ab4,db5] ~ [gb4,db5]@5 ~@5", // Gb7 Db5 Gb5
})).s("gm_pad_new_age").gain(0.36)

// chords · epiano1
const epiano1 = note(`<
  A B A C D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D B D
  B D B D B D B D B D B D B D B D B
>`.pickRestart({
  A: "[db2,ab2,db3]@2 ~@2 [ab3,db4,eb4,gb4]@11 ~", B: "[db2,ab2,db3] ~ [ab3,db4,e4]@6",
  C: "[db2,ab2,db3]@2 ~@2 [ab3,db4,e4]@7 ~ [ab3,db4,gb4]@4", D: "~@4 [ab3,db4,eb4]@11 ~",
})).s("gm_epiano1").gain(0.46)

// drums · kick
const kick = s("bd").struct("<~@4 [x ~@9 x ~ x!3 ~]!64 x ~@7>").gain(0.46)

// drums · clap
const clap = s("cp").struct("<~@4 [~ x ~ x]!64 [~ x ~@2] ~@7>").gain(0.46)

// drums · snare
const snare = s("sd").struct("<~@4 [~ x ~ x]!64 [~ x ~@2] ~@7>").gain(0.46)

// drums · low tom
const low_tom = s("lt").struct("<~@4 x!65 ~@7>").gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x!7 ~]!64 [x!4 ~@4] ~@7>").gain(0.46)

// drums · open hat
const open_hat = s("oh").struct("<~@4 [~@7 x]!64 ~@8>").gain(0.36)

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

stack(bass, electric_guitar_jazz, pad_new_age, epiano1, kick, clap, snare, low_tom, hihat, open_hat, crash)

More by Brian McKnight