Strudelify
Ain't Too Proud To Beg cover art

1966 · Gettin' Ready

Ain't Too Proud To Beg

The Temptations

KeyC majorTempo118 bpm
0:00/0:00
// Ain't Too Proud To Beg — The Temptations
// 118 bpm, 4/4, key C major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(118/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@8 A B C B C B C B C D E F E F E F G B C B C B C B C D E F E F E F G B C B C B C H I B C B C B C H I D E F E F E F G
  B C B C B C B C B C B C B C B C G F
>`.pickRestart({
  A: "~@8 a2 ~ g2@2 f2@2 b1@2", B: "c2@4 e2@2 g2 ~ f2@2 a2@2 ~@2 c2@2", C: "~@2 c2@3 ~ c2@2 a2 ~ g2 ~ f2 ~ b1 ~",
  D: "c2 ~", E: "~@8 c3 ~ c3 ~ c3 a2 g2 ~", F: "c2 ~@7", G: "g2 ~ g2 ~@3 g2 ~ g2 ~@3 g2@2 ~@2",
  H: "c2@4 e2@2 g2 ~ f2 ~ a2 ~@3 e2 ~", I: "g2 ~ g2@2 ~@2 g2 ~ g2@2 ~@2 g2@2 b1@2",
})).s("gm_acoustic_bass").gain(0.5)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@2 A B@2 C@4 D@8 E ~ E ~ E ~ E F D@8 E ~ E ~ E ~ E F D@6 G H D@6 G H E ~ E ~ E ~ E F D@16 F I
>`.pickRestart({
  A: "~@6 a3 [a#3,b3] [f3,a3,c4] ~ [a3,c4]@3 ~ a3@2, ~@5 f3@2 ~", // Bmaj7 F Am
  B: "[[c3,e3,g3,c4]@22 a3 [a#3,b3] [f3,a3,c4] ~ [f3,a3,c4] ~ a3@2 a3 ~, ~@7 f3, ~@28 c4 ~@3]/2", // C Bmaj7 F
  C: "[[c3,e3,g3,c4]@21 ~ a3 [a#3,b3] [f3,a3,c4] ~ [f3,a3,c4] ~ a3@2 a3 ~, ~@7 f3, ~@28 c4 ~@3]/2", // C Bmaj7 F
  D: "[~@4 [g3,c4,e4]@3 ~ [a3,c4,f4] ~ [a3,c4,f4]@2 c2 ~ [g3,c4,e4]@4 c3 ~ [g3,c4,e4]@2 c3 ~ [a3,c4,f4] ~ [a3,c4,f4] ~@3 c2 ~, c2@7 ~@7 c2@7 ~@7 [a3,c4,f4]@4]/2", // C F C F
  E: "[c4,e4] ~@15, g3 ~@7", F: "[g3,b3,d4,g4] ~ [g3,b3,d4,g4]@3 ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4]@3 ~ [g3,b3,d4,g4]@3 ~",
  G: "~@4 [g3,c4,e4]@2 ~@2 [a3,c4,f4] ~ [a3,c4,f4]@2 ~@2 [g3,c4,e4] ~, c3@7 ~@9", // C F C
  H: "[g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~@3 [g3,d4,g4]@2 ~@2, ~@12 b3 ~@3", // G G5
  I: "[c4,e4,g4,c5] ~@7", // C
})).s("gm_piano").gain(0.64)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note("<~@9 A@8 ~@8 A@8 ~@8 A@7 B A@7 B ~@8 A@16 ~ C>".pickRestart({
  A: "~@4 [g4,c5,e5] ~@7 [a4,c5,f5] ~@3", B: "g4 ~ g4 ~@3 g4 ~ g4 ~@3 g4 ~@3", C: "[g4,c5,e5] ~@15",
})).s("gm_acoustic_guitar_nylon").gain(0.35)

// chords · french horn · "FR.HORN"
const french_horn = note("<~@17 A@6 B C ~@8 A@6 B C ~@16 A@6 B C ~@16 C D>".pickRestart({
  A: "[[c5,g5,c6] ~@3 c3@21 ~@7]/2", B: "[c5,g5,c6] ~@3 c3@11 ~",
  C: "[g4,d5,g5] ~ [g4,d5,g5]@2 ~@2 [g4,d5,g5] ~ [g4,d5,g5]@2 ~@2 [g4,d5,g5]@2 ~@2", D: "[c5,e5,g5,c6] ~@7",
})).s("gm_french_horn").gain(0.44)

// other · alto sax
const alto_sax = note("<~@48 A B C B D E F G ~@27>".pickRestart({
  A: "~@12 g4 a4 a#4 ~", B: "c5@3 ~ c5@2 a4 ~ c5 ~ c5@3 ~@3", C: "~@2 c5 ~ c5@2 a4 ~ c5 ~@2 c5 ~@2 c5 ~",
  D: "~@2 c5 ~ c5@2 a4 ~ c5 ~@2 c5 ~@2 c5 a4", E: "c5@3 ~ c5@2 a4 ~ c5 ~ c5 ~@5",
  F: "~@2 a4 ~ g4@2 a4 ~ c5 ~@2 c5@2 ~ c5 ~", G: "c5@3 ~ c5@2 a4 ~ c5 ~ a4@2 g4@4",
})).s("gm_alto_sax").gain(0.72)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@15 A ~@7 A ~@7 A ~@7 A ~@16 A ~>".pickRestart({
  A: "~@7 x",
})).gain(0.53)

// drums · hihat
const hihat = s("hh").struct("<~@9 A@8 ~@8 A@7 B ~@8 A@7 ~ A@7 ~@9 A@7 B A@7 B ~@2>".pickRestart({
  A: "x!8", B: "x!2 ~ x!5",
})).gain(0.27)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@7 x] ~@7 [~@7 x] ~@74>").gain(0.53)

// drums · high tom
const high_tom = s("ht").struct("<A ~@7 A ~@31 A ~@7 B ~@7 B ~@26>".pickRestart({
  A: "~ x", B: "~@3 x!2 ~@3",
})).gain(0.53)

// drums · ride
const ride = s("rd").struct("<~ [x!4]!7 [x!3 ~] ~@74>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@17 A@7 B ~@8 A@6 C B ~@7 D ~@7 D A@7 B ~@16 B ~>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2 ~ x", D: "~ x ~@2",
})).gain(0.4)

// drums · congas
const congas = s("conga:13").struct("<~@17 A ~ A B A B A ~@9 A C A C A D E F ~@7 A ~@7 A@2 C ~@24>".pickRestart({
  A: "~ x ~@2", B: "~ x ~ x", C: "~ x!2 ~@5", D: "~ x!3 ~@4", E: "~@8 x ~@2 x ~@2 x ~", F: "~ x ~@2 x ~ x ~@9",
})).gain(1.28)

// drums · congas
const congas_2 = s("conga:33").struct("<A ~@7 A B@14 C D B@9 E B E@2 C F G B@7 H B@7 H I J ~@22 D ~>".pickRestart({
  A: "~ x", B: "~@6 x!2", C: "~@9 x!2 ~ x ~ x ~", D: "x!3 ~ x ~ x ~@9", E: "~@3 x ~@2 x!2", F: "~@9 x ~@2 x ~@2 x",
  G: "~ x ~@2 x ~@3", H: "~@3 x!2 ~@3", I: "x ~@5 x!2", J: "~@7 x",
})).gain(1.28)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<~ [~ x ~ x]!4 ~@78>").gain(2.55)

stack(
  bass, piano, acoustic_guitar_nylon, french_horn, alto_sax, kick, snare, low_tom, hihat, mid_tom, high_tom, ride,
  tambourine, congas, congas_2, agogo_bells
)

More by The Temptations