Strudelify
Tell Me Something Good (live) cover art

Tell Me Something Good (live)

Chaka Khan

KeyE♭ minorTempo76 bpm
0:00/0:00
// Tell Me Something Good (live) — Chaka Khan
// 76 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: The whole transcription plays 10 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(76/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "Track 2"
const bass = note(`<
  ~@2 A B C D E F C D E F C D E F G H I ~ J K J K J K J K C D E F C D E F C D E F G H I ~ J K J K J K J K C D E L C D E
  F C D E L G H I ~ J K J K J K J K J K J K J K J K J K J K J
>`.pickRestart({
  A: "~@14 gb3 ~", B: "gb3@4 ~@2 db3 ~ db3@3 ~ bb2@2 gb2 ~", C: "ab1 ~ gb1 ~ f1 ~ eb2 ~", D: "db2 ~ b1 ~ bb1 ~ ab1 ~",
  E: "gb1 ~ gb1 ~@2 gb1 ~@2", F: "~ gb1 ~@6", G: "bb1 ~ c2 ~ db2 ~ d2 ~", H: "eb2@2 ~@2 e2@2 ~@2 f1@2 ~@2 gb1 ~ g1 ~",
  I: "ab1 ~@7", J: "ab1@2 ~ ab1 bb1 ~ eb2 ~ f2@2 ~@6", K: "bb1@2 ~@2 bb1 c2 db2 d2 eb2 bb1 eb2@2 ~@4",
  L: "~ gb1 ~@3 gb1 ~@2",
})).s("gm_electric_bass_finger").gain(0.72)

// bass · slap bass 1 · "Track 3"
const bass_2 = note(`<
  A B C D E B C F E B C D E B C F G H I ~ J K J K J K J K E B C D E B C F E B C D G H I ~ J K J K J K J K E B C D E B C
  F E B C D G H I ~ J K J K J K J K J K J K J K J K J K J K J
>`.pickRestart({
  A: "ab1 ~ gb1 ~ f1 ~ eb2 ~", B: "db2 ~ b1 ~ bb1 ~ ab1 ~", C: "gb1@2 ~@2 gb1@2 f2 gb2 gb1@2 ~@2 gb1@2 f2 gb2",
  D: "gb1@2 ~@2 gb1@2 f2 gb2 gb1@2 ~@2 gb1@2 ~@2", E: "ab2 ~ gb2 ~ f2 ~ eb2 ~",
  F: "gb1@2 ~@2 gb1@2 f2 gb2 gb1@2 f2 gb2 gb1@2 ~@2", G: "bb1 ~ c2 ~ db2 ~ d2 ~",
  H: "eb2@2 ~@2 e2@2 ~@2 f2@2 ~@2 gb2 ~ g2 ~", I: "ab2 ~@7", J: "ab1@2 ~ ab1 bb1 ~ eb2 ~ f2@2 ~@6",
  K: "bb1@2 ~@2 bb1 c2 db2 d2 eb2 bb1 eb2@2 ~@4",
})).s("gm_slap_bass_1").gain(0.29)

// chords · overdriven guitar · "Track 4"
const overdriven_guitar = note(`<
  A B C D A B D@2 A B D@2 A B D@2 E@2 F ~ G H@6 I A B D@2 A B D@2 A B D@2 E@2 F ~ H@7 I A J D@2 A K D@2 A K D@2 E@2 ~@2
  H@12 L H@7 ~
>`.pickRestart({
  A: "~@2 [eb4,ab4] ~@3 [eb4,gb4] ~@3 [eb4,ab4] ~@3 [eb4,gb4] ~", // Ab5 Ebm Ab5 Ebm
  B: "~@2 [db4,f4] ~@3 [b3,eb4] ~@3 [ab3,db4] ~@3 [gb3,b3] ~", // Db B Db5 B5
  C: "~@2 [d4,gb4] ~@3 [db4,gb4] ~@3 [db4,gb4] ~@3 [db4,gb4] ~", // D Gb5
  D: "~@2 [db4,gb4] ~@3 [db4,gb4] ~@3 [db4,gb4] ~@3 [db4,gb4] ~", // Gb5
  E: "~@2 [eb4,ab4] ~@3 [eb4,ab4] ~@3 [eb4,ab4] ~@3 [eb4,ab4] ~", F: "~@2 [eb4,ab4] ~@13",
  G: "~@2 [eb4,f4,ab4] ~@3 [eb4,ab4] ~@3 [eb4,ab4] ~@3 [eb4,ab4]!2", // Fm7 Ab5
  H: "~@2 [eb4,ab4] ~@3 [eb4,ab4] ~@3 [eb4,ab4] ~@3 [eb4,ab4]!2", I: "~@2 [eb4,ab4] ~@3 [eb4,ab4] ~@3 [eb4,ab4] ~@5",
  J: "~@2 [db4,d4,f4] ~@3 [b3,eb4] ~@3 [bb3,db4] ~@3 [gb3,b3] ~", // Db B Bbm B5
  K: "~@2 [db4,f4] ~@3 [b3,eb4] ~@3 [bb3,db4] ~@3 [gb3,b3] ~", // Db B Bbm B5
  L: "~@2 [eb4,ab4] ~@3 [eb4,ab4] ~@3 [eb4,a4] ~@3 [eb4,ab4]!2", // Ab5 Ebdim Ab5
})).s("gm_overdriven_guitar").gain(0.45)

// chords · distortion guitar · "Track 5"
const distortion_guitar = note(`<
  ~@20 A@2 ~@2 B ~@19 B ~@3 B ~@19 C@2 ~@2 C@2 ~@2 C@2 ~@2 C@2 ~@2 C@2 ~@3
>`.pickRestart({
  A: "[~@12 [ab3,db4] ~ [bb3,db4]@4 ~@14]/2", B: "~@12 [ab3,db4] ~ [bb3,db4]@2",
  C: "[~@12 [ab3,db4] ~ [bb3,db4]@5 ~@13]/2", // Db5 Bbm
})).s("gm_distortion_guitar").gain(0.62)

// chords · brass section · "Track 9"
const brass_section = note(`<
  ~@4 A B C ~ D E F@2 G E C ~ H I ~@2 J ~ K L J ~ K L M B N ~ O P Q R M S C ~ T U V ~ W ~ K L W ~ K L M B N ~ O X Y ~ M
  S C ~ T U V ~ W ~ K L W ~ K L W ~ K Z W ~ K Z W ~ K Z W
>`.pickRestart({
  A: "~@2 c5@2 bb4@4 ab4@3 ~ gb4@3 ~", B: "f4@2 ~@2 eb4@3 ~ db4@3 ~ b3@2 ~@2", C: "bb3@3 ab3@5",
  D: "~@2 c5@2 bb4@4 ab4@3 ~ gb4 ~ gb4 ~", E: "f4 ~ f4 ~ eb4 ~ eb4 ~ db4@3 ~ b3@2 ~@2",
  F: "[bb3@3 ab3@3 bb3@4 ab3@3 ~@3]/2", G: "~@2 c5@2 bb4@4 ab4@3 ~ gb4@2 gb4 ~",
  H: "~@2 eb4 ~ ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2", I: "ab4@2 ~@2 ab4@2 ~@2 ab4@3 ~ ab4 ~ ab4@2",
  J: "[eb3,ab3]@2 ~ [eb3,ab3] [ab3,c4] ~ [bb3,eb4] ~ [c4,f4]@3 ~@5", // Ab5 Ab Eb5 F5
  K: "[eb3,ab3]@2 ~ [eb3,ab3] [ab3,c4] ~ [bb3,eb4] ~ [c4,f4] ~ [c4,f4]@2 ~@2 c4 bb3", L: "ab3 ~@3",
  M: "~@2 c5 ~ bb4@3 ~ ab4@3 ~ gb4@2 ~@2", N: "bb3@3 ab3@4 ~", O: "~@2 c5 ~ bb4@3 ~ ab4@2 ~@2 gb4 ~ gb4 ~",
  P: "f4 ~ f4 ~ eb4@2 ~@2 db4 ~ db4 ~ b3@2 ~@2", Q: "bb3@3 ab3@2 bb3@3", R: "ab3@3 ~@5",
  S: "f4 ~ f4 ~ eb4 ~ eb4 ~ db4 ~ db4 ~ b3@2 ~@2", T: "~@2 eb4 ~ ab4@2 ~@2 ab4@2 ~@2 b4@2 ~@2",
  U: "ab4@3 ~ eb4@3 ~ db4 ~ b3 ~ db4 ~ b3 ~", V: "gb4 ~@7",
  W: "[eb3,ab3]@2 ~ [eb3,ab3] [ab3,c4] ~ [bb3,eb4] ~ [c4,f4]@2 ~@6", X: "f4 ~ f4 ~ eb4@3 ~ db4@3 ~ b3 ~ b3 ~",
  Y: "bb3@5 ~ ab3@10", Z: "ab3@3 ~@13",
})).s("gm_brass_section").gain(0.66)

// other · lead 1 square · "Track 11"
const lead_1_square = note("<~@45 A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3>".pickRestart({
  A: "~@4 gb3@2 eb3@2 gb3@2 eb3 gb3@3 ab3@2",
})).s("gm_lead_1_square").gain(0.57)

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

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

// drums · hihat
const hihat = s("hh").struct("<~@4 A@14 ~@2 A@22 ~@2 A@22 ~@2 A@20 ~>".pickRestart({
  A: "x!8",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~ x] ~@85>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@2 B ~@3 B ~@3 B ~@15 B@2 ~@2 B@2 ~@2 B@2 ~@14 C@2 ~@2 B@2 ~@2 B@2 ~@25
>`.pickRestart({
  A: "~@2 x ~@2 x ~@10", B: "~@14 x!2", C: "~@6 x!2 ~@8",
})).gain(0.64)

// drums · shaker
const shaker = s("sh").struct("<~@4 [x!2]!14 ~@10 [x!2]!14 ~@10 [x!2]!14 ~@23>").gain(0.71)

stack(
  bass, bass_2, overdriven_guitar, distortion_guitar, brass_section, lead_1_square, kick, snare, hihat, low_tom,
  mid_tom, shaker
)

More by Chaka Khan