Strudelify
You Got It (The Right Stuff) cover art

Hangin' Tough

You Got It (The Right Stuff)

New Kids on the Block

KeyE♭ majorTempo112 bpm
0:00/0:00
// You Got It (The Right Stuff) — New Kids on the Block
// 112 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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(`<
  ~@2 A B A B A B A B C D C E C D C E A B A B A B A B F G H I F J H@2 A B A B A B A B C D C E C D C E A B A B A B A B F
  G H I F J H@2 A B A B A B A B ~@4 A B A B A B A B A B A B F G H I F J H@2 A B A B A B A B K
>`.pickRestart({
  A: "eb1 ~ g1 ~ ab1 ~ eb2 ~ d2 ~ bb1@2 ~@4", B: "eb1 ~ g1 ~ ab1 ~ eb2 ~ d2 ~@7",
  C: "eb1 ~ ab1 ~ bb1 ~ c2 ~ bb1 ~ f1 ~@5", D: "eb1 ~ ab1 ~ bb1 ~ c2 ~ bb1 ~@7", E: "eb1@2 ab1 ~ bb1 ~ c2 ~ bb1 ~@7",
  F: "gb1 ~@2 gb1 ~@2 gb1 ~@7 gb1!2", G: "f1 ~@2 f1 ~@2 f1 ~@9", H: "eb2 ~@2 eb2 ~@2 eb2 ~@9",
  I: "d2 ~@2 d2 ~@2 a1 ~@9", J: "ab1 ~@2 ab1 ~@2 ab1 ~@9", K: "ab1 ~@2 ab1 ~@2 eb2@2 d2 ~ bb1 ~@5",
})).s("gm_acoustic_bass").gain(0.72)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@2 A B A B A B C D E F E G E F E G E H E G E H E G I J K L I J M N A B C D A B C D E F E G E F E G E H E G E H E G I
  J K L I J M N A B C D A B C D ~@7 D E H E G E H E G I J K L I J M N A B C D A B C D C
>`.pickRestart({
  A: "[ab3,ab4] ~@2 [ab3,ab4] ~@2 [eb4,eb5]@2 [d4,d5]@2 [bb3,bb4] ~@5", // Ab Eb D Bb
  B: "[ab3,ab4] ~@2 [ab3,ab4] ~@2 [eb4,eb5]@2 [d4,d5] ~@7", // Ab Eb D
  C: "[ab3,ab4] ~@2 [ab3,ab4] ~@2 [eb4,eb5]@2 [d4,d5] ~ [bb3,bb4] ~@5", // Ab Eb D Bb
  D: "~@2 [a2,b2] [e3,f3,g3,a3] [b3,c4,eb4,ab4] ~@3 [d4,bb4]@2 ~@6, ~@4 c5@2 ~@2 f4 ~@7", E: "[c4,eb4,ab4] ~@15",
  F: "~@10 [b2,c3,d3] [b3,c4,d4,e4] [f4,d5,ab5] ~@3, ~@6 [f5,bb5] ~", G: "~@4 [eb4,ab4,c5] ~@3 [d4,f4,bb4] ~@7",
  H: "[c4,eb4,ab4] ~@2 [c4,eb4,ab4] ~@4 [d4,f4,bb4] ~@7", I: "[gb3,db4,f4,ab4,bb4,db5,f5]@15 ~",
  J: "[c5,eb5]@7 ab4@7 ~@2, f3@7 ~, ab4@3 ~@5", K: "bb4@2 ~ gb5, [eb3,db4,gb4,db5]@15 ~, ~ bb4",
  L: "[a3,d4,f4,a4,c5]@7 ~, f5@7 ~@9", M: "~ [eb5,gb5,bb5], [eb3,db4,gb4,bb4,db5]@15 ~",
  N: "eb6@4 gb6@3 ~, [eb3,db4,gb4,bb4,db5]@15 ~", // Ebm7
})).s("gm_epiano2").gain(0.44)

// chords · epiano2 · "E.PIANO 2" · soft notes
const epiano2_soft = note(`<
  ~@9 A ~ B ~@3 B ~@11 C D E ~ C F@2 ~@3 A ~@3 A ~ B ~@3 B ~@11 C D E ~ C F@2 ~@3 A ~@3 A ~@7 A ~@9 C D E ~ C F@2 ~@3 A
  ~@3 A ~
>`.pickRestart({
  A: "~@2 [g2,c3] d3 ~@12", B: "~@10 [e3,f3] [g3,a3] ~@4", C: "~@8 [c5,eb5]@7 ~, f2@15 ~", D: "~@2 gb6 bb6, eb4@15 ~",
  E: "a6@3 ~", F: "eb4@15 ~",
})).s("gm_epiano2").gain(0.25)

// chords · pad halo · "HALO PAD"
const pad_halo = note(`<
  ~@2 A B A B A B C D ~@16 E F G H E F G@2 A B C D A B C D ~@16 E F G H E F G@2 A B C D A B C D ~@7 D ~@8 E F G H E F
  G@2 A B C D A B C D C
>`.pickRestart({
  A: "ab4 ~@2 ab4 ~@2 eb5@2 d5@2 bb4 ~@5", B: "ab4 ~@2 ab4 ~@2 eb5@2 d5 ~@7", C: "ab4 ~@2 ab4 ~@2 eb5@2 d5 ~ bb4 ~@5",
  D: "~@2 [eb5,c6] ~ [d5,bb5] ~@3, ~@4 ab5 ~@3 f5 ~@7", E: "[gb4,db5,ab5,bb5,db6,f6]@15 ~",
  F: "[c6,eb6]@7 ab5@7 ~@2, ab5@3 ~@5", G: "[db5,gb5,bb5,db6]@15 ~", H: "[a4,f5,a5,c6]@7 ~",
})).s("gm_pad_halo").gain(0.37)

// chords · pad halo · "HALO PAD" · soft notes
const pad_halo_soft = note("<~@26 A B C D A B C@2 ~@24 A B C D A B C@2 ~@24 A B C D A B C@2 ~@9>".pickRestart({
  A: "f5@15 ~", B: "~@8 [c6,eb6]@7 ~, [f3,f4]@15 ~", C: "[eb4,eb5]@15 ~", D: "d5@7 ~",
})).s("gm_pad_halo").gain(0.25)

// chords · synth drum · "PERC SYNTH"
const synth_drum = note(`<
  ~@2 A B A B A B C D E F E G E F E G E H E G E H E G I J K L I J M N A B C D A B C D E F E G E F E G E H E G E H E G I
  J K L I J M N A B C D A B C D O P O Q O P O Q E H E G E H E G I J K L I J M N A B C D A B C D C
>`.pickRestart({
  A: "bb4 ~@2 bb4 ~@2 f5@2 e5@2 c5 ~@5", B: "bb4 ~@2 bb4 ~@2 f5@2 e5 ~@7", C: "bb4 ~@2 bb4 ~@2 f5@2 e5 ~ c5 ~@5",
  D: "~@2 [b2,db3] [gb3,g3,a3,b3] [db4,d4,f4,bb4] ~@3 [e4,c5]@2 ~@6, ~@4 d5@2 ~@2 g4 ~@7", E: "[d4,f4,bb4] ~@15",
  F: "~@10 [db3,d3,e3] [db4,d4,e4,gb4] [g4,e5,bb5] ~@3, ~@6 [g5,c6] ~", G: "~@4 [f4,bb4,d5] ~@3 [e4,g4,c5] ~@7",
  H: "[d4,f4,bb4] ~@2 [d4,f4,bb4] ~@4 [e4,g4,c5] ~@7", I: "[ab3,eb4,g4,bb4,c5,eb5,g5]@15 ~",
  J: "[d5,f5]@7 bb4@7 ~@2, g3@7 ~, bb4@3 ~@5", K: "c5@2 ~ ab5, [f3,eb4,ab4,eb5]@15 ~, ~ c5",
  L: "[b3,e4,g4,b4,d5]@7 ~, g5@7 ~@9", M: "~ [f5,ab5,c6], [f3,eb4,ab4,c5,eb5]@15 ~",
  N: "f6@4 ab6@3 ~, [f3,eb4,ab4,c5,eb5]@15 ~", O: "bb3 ~@2 bb3 ~@2 f4@2 e4@2 c4 ~@5", P: "bb3 ~@2 bb3 ~@2 f4@2 e4 ~@7",
  Q: "~@4 d4 ~@3 c4@2 ~@6",
})).s("gm_synth_drum").gain(0.3)

// chords · synth drum · "PERC SYNTH" · soft notes
const synth_drum_soft = note(`<
  ~@9 A ~ B ~@3 B ~@11 C D E ~ C F@2 ~@3 A ~@3 A ~ B ~@3 B ~@11 C D E ~ C F@2 ~@3 A ~@3 A ~@17 C D E ~ C F@2 ~@3 A ~@3 A
  ~
>`.pickRestart({
  A: "~@2 [a2,d3] e3 ~@12", B: "~@10 [gb3,g3] [a3,b3] ~@4", C: "~@8 [d5,f5]@7 ~, g2@15 ~", D: "~@2 ab6 c7, f4@15 ~",
  E: "b6@3 ~", F: "f4@15 ~",
})).s("gm_synth_drum").gain(0.2)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A ~@7 B ~ A ~@3 A ~@13 A ~@3 C ~@9 A ~@3 A ~@13 A ~@3 C ~@17 A ~@3 A ~@5 A ~@3 C ~@7 D ~
>`.pickRestart({
  A: "~@12 x!2 ~@2", B: "~@10 x!2 ~@4", C: "~@12 x!3 ~", D: "~@8 x!4 ~@4",
})).gain(0.24)

// drums · clap
const clap = s("cp").struct("<~@10 [~ x ~ x]!64 ~@8 [~ x ~ x]!24 ~>").gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@26 A@7 B ~@24 A@7 B ~@24 A@7 B ~@8 C>".pickRestart({
  A: "x ~@2 x ~@2 x ~@9", B: "x ~@2 x ~@2 x ~@7 x!2", C: "x ~@2 x ~@4 x ~ x ~@5",
})).gain(0.8)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@10 [~ x ~ x ~ x ~ x]!64 ~@8 [~ x ~ x ~ x ~ x]!24 ~>").gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@10 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@8 B A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@8 B A ~ A ~ A ~ A ~@9 A ~ A ~
  A ~ A ~@8 B A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@12 x!2 ~@2",
})).gain(0.8)

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

stack(
  bass, epiano2, epiano2_soft, pad_halo, pad_halo_soft, synth_drum, synth_drum_soft, kick, snare, snare_soft, clap,
  low_tom, hihat, hihat_soft, mid_tom, crash
)

More by New Kids on the Block