Strudelify
No Diggity cover art

Another Level

No Diggity

Blackstreet

KeyF♯ minorTempo89 bpm
0:00/0:00
// No Diggity — Blackstreet
// 89 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 76 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(89/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.

// other · harpsichord · "HARPSICHOD"
const harpsichord = note("<~ A ~@2 A@2 B ~ C D E F G H@2 I ~@41 A ~@2 C D E F G H@2 I ~@8>".pickRestart({
  A: "~@9 c#4 ~ a3 ~@3 e3 ~ f#3 ~@6", B: "~@9 c#4 a3 ~@6 f#3 ~@6",
  C: "~@3 a3@2 ~ a3 ~@2 a3 ~ f#3 a3 ~@2 a3 ~@2 a3 ~ f#3 e3 ~ f#3",
  D: "~@2 f#3 a3 ~@2 a3 ~@2 f#3 ~ e3 b3@2 f#3 a3 ~@2 a3 ~ f#3 e3 ~ f#3",
  E: "~@3 a3 ~@2 a3 ~@2 a3 ~ f#3 b3@2 ~ a3 ~@2 a3 ~ f#3 e3 ~ f#3",
  F: "~@2 f#3 a3 ~@2 a3@2 ~ e3 ~ f#3 d#4 ~@2 b3 ~@2 a3 ~ f#3 e3 ~@2",
  G: "~@2 e3 a3 ~@2 a3 ~@2 a3 ~ f#3 b3 ~ f#3 a3 ~@2 a3 ~ f#3 e3 ~ f#3",
  H: "[~@2 f#3 a3@2 ~ a3 ~@2 a3 ~ f#3 b3 ~ f#3 a3 ~@2 a3 ~ f#3 e3 ~ f#3@2 ~@2 a3 ~@2 a3 ~@2 a3 ~ f#3 b3 ~ f#3 a3 ~@2 a3 ~ f#3 e3 ~ f#3]/2",
  I: "~@2 f#3 a3 ~@2 a3 ~ e3 b3 ~ f#3 c#4@2 ~ b3@2 ~ a3 ~ f#3 e3 ~@2",
})).s("gm_harpsichord").gain(0.45)

// other · harpsichord · "HARPSICHOD" · soft notes
const harpsichord_soft = note("<~@6 A ~ B ~@3 C ~ D ~@45 B ~@3 C ~ D ~@9>".pickRestart({
  A: "~@15 e3 ~@8", B: "~@2 e3 ~@14 f#3 ~@6", C: "e3 ~@23", D: "~@2 [e3,f#3] ~@21",
})).s("gm_harpsichord").gain(0.25)

// bass · piano · "PIANO1"
const bass = note(`<
  ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "~@12 d#1 ~ d#2 d#1@2 d#2 e1 ~@2 f1 ~@2",
})).s("gm_piano").gain(0.52)

// chords · piano · "PIANO1"
const piano = note(`<
  A@2 B@2 C A D E A@2 B@2 C A D E A@2 B@2 C A D E A@2 B@2 C A D E A@2 B@2 C A D E A@2 B@2 C A D E A@2 B@2 C A D E A@2
  B@2 A@2 B@2 C A D E A@2 B@2 C A D E
>`.pickRestart({
  A: "[f#3,a3]@2 ~@7 [f#3,a3]@2 ~@13", B: "[f#3,a3] ~@8 [f#3,a3] ~@14", C: "a3@2 ~@7 a3@2 ~@13, f#3 ~@8 f#3 ~@14",
  D: "[f#3,a3]@2 ~@7 [f#3,a3] ~@14", E: "[f#3,a3] ~@23",
})).s("gm_piano").gain(0.31)

// chords · epiano2 · "ELECPIANO2"
const epiano2 = note("<A B@2 ~ B@3 ~@21 C D C E C F C G ~@7 H@2 ~@3 C D I J C G K D A B@2 ~@17>".pickRestart({
  A: "~@5 c#2 f#2@2", B: "~@15 c#2@3 f#2@5 ~", C: "~@21 [a3,c#4,f#4] ~@2", D: "[a3,c#4,f#4] ~ [a3,c#4,f#4]!2 ~@20",
  E: "[a3,c#4,f#4] ~ [a3,c#4,f#4] [c#4,f#4] ~@20", F: "[a3,c#4,f#4] ~ [c#4,f#4]!2 ~@20, ~ a3 ~@10",
  G: "[a3,c#4,f#4] ~ a3 [a3,c#4,f#4] ~@20", H: "[~@21 [a3,c#4,f#4]@5 ~@22]/2", I: "~@21 [a3,f#4]@2 ~, ~@21 c#4 ~@2",
  J: "[a3,c#4,f#4] ~ c#4 [c#4,f#4] ~@20, ~ a3 ~@10", K: "~@21 [a3,c#4,f#4]@2 ~",
})).s("gm_epiano2").gain(0.48)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@9 A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~@9 A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ A ~
  A ~ B
>`.pickRestart({
  A: "~@23 x", B: "~@5 x",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@8 [~ x ~ x]!32 ~@8 [~ x ~ x]!28>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@8 [~ x ~ x]!32 ~@8 [~ x ~ x]!28>").gain(0.72)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A@8 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C A@8 B C B C B C B C B C B C B C B C B C B C B C B
  C B C B C
>`.pickRestart({
  A: "~ x ~ x", B: "~ x!7", C: "x!8",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~
>`.pickRestart({
  A: "x",
})).gain(0.8)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@8 [~ x ~ x]!32 ~@8 [~ x ~ x]!28>").gain(4.08)

stack(
  harpsichord, harpsichord_soft, bass, piano, epiano2, kick, kick_soft, clap, snare, pedal_hat, open_hat, agogo_bells
)

More by Blackstreet