Strudelify

New Sensation

INXS

KeyE majorTempo113 bpm
0:00/0:00
// New Sensation — INXS
// 113 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "OVERDRIVE" overdriven guitar (copy of ch 3 "A.PIANO 2" piano)
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(113/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(`<
  ~ A@3 B C D E F A@2 G H A@3 B C D E F A@2 G H A@3 B C D E F A@2 I J@2 ~ K J@2 L A@3 B C D E F M A@3 B C D E F A@2 I
  J@2 ~ K J@2 ~ I J@2 ~ K J@2 L A@3 B C D E F A@3 B C D E F N A G@3 O A@3 B C D E F A@2 I J@2 ~ K J@2 ~ I J@2 ~ K J@2 ~
  I J@2 ~ P ~@4
>`.pickRestart({
  A: "e2@2 e2@2 e2@2 e2!4 e2@2 e2@2 e2@2", B: "e2@2 e2@2 e2@2 e2!5 ~ e2@2 e2@2",
  C: "b2 ~ b2@2 b2@2 b2!4 b2@2 b2@2 b2@2", D: "b2@2 b2@2 b2@2 b2!4 b2@2 b2@2 b2 ~",
  E: "a2@2 a2@2 a2@2 a2!4 a2@2 a2@2 a2@2", F: "a2@2 a2@2 a2@2 a2!3 a2@3 a2@2 b2@2",
  G: "b2 ~ b2@2 d3@2 b2@2 d3@2 e3@4 d3@2", H: "e3 ~ e3@2 d3@2 e3@2 ~@8", I: "e2 ~@3",
  J: "[~@4 g#2@3 ~ b2@2 d3@4 e2@6 ~@12]/2", K: "e2@5 ~@11", L: "e3 ~ e3 ~ d3 ~ d3 ~ c#3 ~ c#3 ~ b2 ~ b2 ~",
  M: "e2 ~ e2 ~", N: "e2@2 e2@2 e2@2 e2!4 e2@2 e2@2 e2@2, b2 ~@15",
  O: "[f2,g#2,e3,f#3] g#2 [g#2,f#3] ~ [d#2,g#2,f#3] ~ [g#2,f#3] ~@9, ~ e3 d3 e3 ~@4", P: "e3 ~@7",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~ A@10 B C A@10 B C A@10 D E ~@2 D E ~@11 A@10 D E ~@2 D E ~@2 D E ~@6 F@4 G@4 F@4 G@4 A@2 B@3 ~ A@10 D E ~@2 D E ~@2
  D E ~@2 D E ~@2 H@8 ~
>`.pickRestart({
  A: "[e4,g#4,b4,e5]!5 ~ [e4,a4,c#5]!5 ~@5", B: "[e4,g#4,b4,e5]!5 ~ [e4,a4,c#5]!4 [a4,c#5] ~@5",
  C: "[e4,g#4,b4,e5]!3 [g#4,b4,e5]!2 ~ [e4,g#4,b4,e5] ~@9", D: "~@7 a#1 b1@2 d2@3 b1 e2@2", E: "e1@3 ~@13",
  F: "e2 ~ e2 ~ g2 e2 ~ b2 ~ b2 ~ b2 d3 ~ e3 ~", G: "a2 ~ b2 ~ b2 ~ a2 b2 ~ b2 ~ b2 d3 ~ e3 ~",
  H: "[~@7 a#1 b1@2 d2@3 b1 e2@114]/8",
})).s("gm_piano").gain(0.39)

// drums · kick
const kick = s("bd").struct("<~ A@11 B A@11 B A@10 C@8 A@19 C@15 D A@21 B A@10 C@20 B ~@4>".pickRestart({
  A: "x!2", B: "x", C: "x ~@3 x!2 ~@2", D: "x ~@3 x!3 ~",
})).gain(0.75)

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

// drums · clap
const clap = s("cp").struct("<A ~@34 B@8 ~ C ~ C ~ C ~ C ~@11 B@16 ~@32 B@18 D@2 E ~@4>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@11 x!2 ~ x ~", D: "x!4", E: "x",
})).gain(0.75)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@8 A ~@11 A ~@11 A ~@2 B@8 ~@8 C ~@7 A ~@2 B@15 D ~@7 A ~@7 A ~@13 A ~@2 B@20 E ~@4
>`.pickRestart({
  A: "~@7 x", B: "x ~@3 x!2 ~@2", C: "x!2", D: "x ~@3 x!4", E: "x",
})).gain(0.75)

// drums · hihat
const hihat = s("hh").struct("<~ A@11 B A@11 B A@10 ~@8 C@8 ~ A@10 ~@16 A@9 D A D A@9 B A@10 ~@20 E ~@4>".pickRestart({
  A: "x!3 ~ x ~ x!5 ~@5", B: "x!3 ~ x ~ x ~@9", C: "x!4", D: "x!3 ~ x ~ x ~ x!3 ~@5", E: "x",
})).gain(0.75)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@11 A ~@38 A ~@33 A ~@13 A ~@21 B ~@5>".pickRestart({
  A: "~@2 x!2", B: "~@7 x",
})).gain(0.75)

// drums · open hat
const open_hat = s("oh").struct("<~@129 [~@7 x] ~@5>").gain(0.75)

// drums · high tom
const high_tom = s("ht").struct("<~@129 [~@12 x!2 ~@2] ~@5>").gain(0.75)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@3 A ~@7 A ~@3 A ~@5 A ~ A ~ A ~ A ~ A ~ A B ~@9 A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~@7 A
  ~@5 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@6
>`.pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.75)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@11 B A@11 B A@10 ~@8 A@8 ~ A@10 ~@16 A@21 B A@10 ~@25>".pickRestart({
  A: "x!8", B: "x!4 ~@4",
})).gain(0.75)

// drums · cowbell
const cowbell = s("cb").struct("<~@35 [x!4]!8 ~@19 [x!4]!12 ~@36 [x!4]!18 ~@7>").gain(0.75)

stack(bass, piano, kick, snare, clap, low_tom, hihat, mid_tom, open_hat, high_tom, crash, tambourine, cowbell)

More by INXS