Strudelify

abc

Jackson 5

KeyB♭ majorTempo90 bpm
0:00/0:00
// abc — Jackson 5
// 90 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 20, 4/4 at bar 21, 3/4 at bar 43, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5641638; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 43 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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 · soprano sax · "Soprano Saxophone"
const soprano_sax = note("<~@2 A@2 B C ~ D E F ~@2 G@2 H I J@2 H K L M@2 N O P Q R@2 S T U@8 V@4>".pickRestart({
  A: "[~@7 ab4 c5 eb5@2 eb5@2 c5 f5@4 ~@4 ab4 ~@3 ab4 ~@3 ab4 ~]/2", B: "~@3 ab4 c5@2 eb5@2 eb5@2 c5 eb5@2 f5@3",
  C: "~@2 ab4 bb4 b4!4 bb4@2 ab4 ab4@5, ~@8 ab4 ~@7", D: "~ f4 ab4@2 b4 b4@2 bb4 ~ ab4 ~ ab4@2 ab4 ~ c5",
  E: "~ db5 ~ eb5@3 db5 eb5 c5@2 ab4@2 ~@4, ~@8 b4 ~@7", F: "~@3 f5@2 eb5!2 c5 eb5@2 f5@2 ~@4",
  G: "[~@3 eb5@3 f5@2 ab5 ~@6 c6@2 bb5 ab5 eb5@3 f5@2 ab5 ~@4 b5 ~ b5]/2", H: "~ bb5 ab5 eb5@3 f5@2 ab5 ~@2 bb5@3 c6@2",
  I: "ab5@2 ~ c6@3 bb5@2 ab5@2 ab5!2 bb5 c6@2 c6", J: "[~ ab5@7 ~@7 c6@2 bb5 ab5 eb5@3 f5@2 ab5 ~@4 b5 ~ b5]/2",
  K: "ab5@2 ~ c6@3 bb5@2 ab5@2 ~ bb5@3 c6@2", L: "ab5 ~@3", M: "~@2 ab4 ~@3 ab4 ~@3 ab4 ~ ab4 ~@3",
  N: "ab4!4 db5 c5 db5 c5 db5 eb5 db5 eb5 b4 ab4 ab4@2", O: "c5@2 eb5!2 eb5@2 c5 eb5@2 c5 f5@2 ~@2 ab4 bb4",
  P: "b4!4 bb4@2 ab4 ab4@5 ~@4, ~@4 ab4 ~@11", Q: "~@15 ab4",
  R: "[b4!4 bb4 ~ ab4 ab4@2 ab4 ~ c5 ~ db5 ~ eb5@3 db5 eb5 c5@2 ab4@2 ~@8, ~@20 b4 ~@11]/2",
  S: "eb5!2 c5 f5 eb5@2 c5@2 ~@8", T: "~@7 c5 ~ eb5@2 eb5 eb5@2 ~@2",
  U: "[~@15 eb5@3 f5@2 ab5 ~@4 c6 ~ c6@2 bb5 ab5 eb5@3 f5@2 ab5 ~@4 b5 ~ b5 ~ bb5 ab5 eb5@3 f5@2 ab5 ~@2 bb5@3 c6@2 ab5@2 ~ c6@3 bb5@2 ab5@2 ab5!2 bb5 c6@2 c6 ~ ab5@7 ab5@2 eb5 bb5@2 c6@3 c5 c5@2 eb5@3 c5@2 bb4@2 ab4 c5@3 ~@2 eb5 eb5@2 f5@3 eb5@2 c5@2 eb5 c5@3 ~@5 c6]/8",
  V: "[~@2 eb6@2 c6@2 ab5 bb5@3 c6@2 ab5@2 ~ c6@3 bb5@2 ab5@2 ab5 db6@3 c6@2 ab5@2 ~ eb6@3 c6@2 bb5@2 ab5 bb5@3 c6@2 ab5@2 ~ c6@3 bb5@2 ab5@2 ~ f5@3 eb5@2 ab5@2 ~@2]/4",
})).s("gm_soprano_sax").gain(0.4)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<A B@3 C D@7 E F G H I J K H L@2 M N O@8 P@8 Q@3>".pickRestart({
  A: "~@6 c4 ~@3 c4 ~@3 c4 ~", B: "~@2 c4 ~@3 c4 ~@3 c4 ~@3 c4 ~", C: "~@3 ab3@3 c4@2 ab3@2 ~ db4@3 ab3@2",
  D: "db4@2 ~ ab3@3 c4@2 ab3@2 ~ db4@3 ab3@2", E: "db4@2 ~ ab3@3 bb3@2 c4@2 ~@6", F: "~@3 ab3@3 bb3@2 c4@2 ~@6",
  G: "~@3 ab3@3 bb3@2 c4@2 ~ db4@3 eb4@2", H: "f4@2 ~ ab4@3 g4@2 f4@2 ~ db4@3 eb4@2",
  I: "ab3@2 ~ eb4@3 f4@2 ab4@2 ~ db4@3 ab3@2", J: "db4@2 ~ ab3@3 bb3@2 c4@2 ~ db4@3 ab3@2",
  K: "db4@2 ~ ab3@3 bb3@2 c4@2 ~ db4@3 eb4@2",
  L: "[ab3@2 c4 ~@3 c4 ~@3 c4 ~ c4 ~@2 eb4@2 eb4 ab3!2 bb3 b3 bb3 ab3 ~@2 bb3 b3 bb3 ab3@3]/2",
  M: "~@6 c4 ~@3 c4 ~ c4 ~@3", N: "~@2 c4 ~@3 c4 ~@3 c4 ~ c4 ~@2 ab3",
  O: "[ab3@2 c4@2 ab3@2 ~ db4@3 ab3@2 db4@2 ~ ab3@3 c4@2 ab3@2 ~ db4@3 ab3@2 db4@2 ~ ab3@3 c4@2 ab3@2 ~ db4@3 ab3@2 db4@2 ~ ab3@3 c4@2 ab3@2 ~ db4@3 ab3@2 db4@2 ~ ab3@3 c4@2 ab3@2 ~ db4@3 ab3@2 db4@2 ~ ab3@3 c4@2 ab3@2 ~ db4@3 ab3@2 db4@2 ~ ab3@3 c4@2 ab3@2 ~ db4@3 ab3@2 db4@2 ~ ab3@3 c4@2 ab3@2 ~ db4@3 ab3@2 db4@2 ~ ab3]/8",
  P: "[~@2 bb3@2 c4@2 ~@9 ab3@3 bb3@2 c4@2 ~@9 ab3@3 bb3@2 c4@2 ~ db4@3 eb4@2 f4@2 ~ ab4@3 g4@2 f4@2 ~ db4@3 eb4@2 ab3@2 ~ eb4@3 f4@2 ab4@2 ~ db4@3 ab3@2 db4@2 ~ ab3@3 bb3@2 c4@2 ~ db4@3 ab3@2 db4@2 ~ ab3@3 bb3@2 c4@2 ~ db4@3 eb4@2 f4@2 ~ ab4@3 g4@2 f4@2 ~ db4@3 eb4@2 ab3@2 ~ ab4]/8",
  Q: "[~@2 g4@2 f4@2 ~ db4@3 eb4@2 ab3@2 ~ ab4@3 g4@2 f4@2 ~ db4@3 eb4@2 ab3@2 ~ ab4@3 g4@2 f4@2 ~ db4@3 eb4@2 ab3@2 ~@2]/3",
})).s("gm_tenor_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note("<A B@3 C@4 D@4 E@2 F G H I@2 J K@4 L@4 M@3 N@6 O@2 P@4>".pickRestart({
  A: "~@4 ab2@2 c3@2 ab2@2 ~ db3@3 ab2@2", B: "db3@2 ~ ab2@3 c3@2 ab2@2 ~ db3@3 ab2@2",
  C: "~ eb2 f2 eb2 ab2!4 ab2@2 ~@6", D: "~ eb2 f2 eb2 ab2!4 ab2@2 ~ ab3@2 ab3 ab3@2", E: "~@3 ab2@3 bb2@2 c3 ~@7",
  F: "~@3 ab2@3 bb2@2 c3 ~@2 db3@3 eb3@2", G: "f3 ~@2 ab3@3 g3@2 f3@2 ~ db3@3 eb3@2",
  H: "ab2@2 ~ ab2@3 c3@2 db3@2 c3 db3@3 eb3@2", I: "f3@2 g3@2 ab3@2 c4@2 db4@2 c3 db3@3 eb3@2",
  J: "f3@2 g3@2 ab3@2 g3@2 f3@2 ~ db3@3 eb3@2", K: "ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2!2 ~@3", L: "ab2!4 ab2@2 ~@7 eb2 f2 eb2",
  M: "ab2!4 ab2@2 ~ ab3@2 ab3 ab3@2 ~ eb2 f2 eb2",
  N: "[ab2!4 ab2@2 ~ ab3@2 ab3 ab3@2 ~@3 ab2@3 bb2@2 c3 ~@10 ab2@3 bb2@2 c3 ~@10 ab2@3 bb2@2 c3 ~@2 db3@3 eb3@2 f3 ~@2 ab3@3 g3@2 f3@2 ~ db3@3 eb3@2 ab2@2 ~ ab2@3 c3@2 db3@2 c3 db3@3 eb3@2 f3@2 g3@2]/6",
  O: "ab3@2 c4@2 db4@2 c3 db3@3 eb3@2 f3@2 g3@2",
  P: "[ab3@2 g3@2 f3@2 ~ db3@3 eb3@2 ab2@2 ~ ab3@3 g3@2 f3@2 ~ db3@3 eb3@2 ab2@2 ~ ab3@3 g3@2 f3@2 ~ db3@3 eb3@2 ab2@2 ~ ab3@3 g3@2 f3@2 ~ db3@3 eb3@2 ab2@2 ~@2]/4",
})).s("gm_baritone_sax").gain(0.3)

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

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

// drums · hihat
const hihat = s("hh").struct("<A B@3 C D@11 E D@3 ~@4 F D@17 G>".pickRestart({
  A: "~ x", B: "x!2", C: "x ~@2 x!5", D: "x!8", E: "~@2 x!6", F: "~ x!7", G: "x!6 ~@2",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@4 [~ x ~@2] ~@11 [~@3 x ~@12] ~@7 x ~@17 [~@3 x]>").gain(0.25)

// drums · tambourine
const tambourine = s("tb").struct("<[~@4 x!12] [x!16]!19 ~@4 [x!16]!18 [x!12 ~@4]>").gain(0.2)

stack(soprano_sax, tenor_sax, baritone_sax, kick, snare, hihat, crash, tambourine)

More by Jackson 5