Strudelify

Disappear

INXS

KeyE majorTempo120 bpm
0:00/0:00
// Disappear — INXS
// 120 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 134 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 B C D E F G H B I J K L M N O B I J K L M N O B I P Q A R S T S U S T S U B I J K L M N O B I J K L M N O B I P Q A
  R S T S U S T S U S T S U S T S U B I J K L M N O B I J K B I J K L M N O B I P Q A R S T S U S T S U S T S U S T S U
  S T S U S T S U V@3 ~@5
>`.pickRestart({
  A: "e2@2 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", B: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  C: "a1@2 a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2", D: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ e2@2",
  E: "~@2 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", F: "e2 ~ e2 ~ e2@2 e2 ~ e2@2 e1@2 e2@2 e2@2",
  G: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ d2@2", H: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  I: "e2 ~ e2 ~ e2@2 e2 ~ e2 ~ e2 ~ e2@2 e2@2", J: "a1 ~ a1 ~ a1@2 a1 ~ a1@2 a1 ~ a1@2 a1@2",
  K: "d2 ~ d2 ~ d2 ~ d2 ~ d2@2 d2 ~ d2@2 d2 ~", L: "e2 ~ e2@2 e2 ~ e2 ~ e2 ~ e2 ~ e2@2 e2 ~",
  M: "e2 ~ e2@2 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", N: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2",
  O: "d2 ~ d2 ~ d2@2 d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", P: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  Q: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1@2", R: "e2 b1 e2 b1 e1 e2 e1 e2", S: "e2 e1 e2 e1 d2 d1 d2 e1",
  T: "e2 e1 e2 e1 d2 d1 d2 d1", U: "e2@2 e1@2 e2@2 e1@2 d2@2 d1@2 d2@2 d1 ~", V: "[e1@11 ~@5]/3",
})).s("gm_acoustic_bass").gain(0.59)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E@2 F G H@2 I J K@2 L M H@2 I J K@2 L M H@2 N@2 O@2 P@8 H@2 I J K@2 L M H@2 I J K@2 L M H@2 N@2 O@2 P@16 H@2 I
  J K@2 L M H@2 I J H@2 I J K@2 L M H@2 N@2 O@2 P@24 Q@8
>`.pickRestart({
  A: "e4@2 e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~", B: "e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~",
  C: "a3@2 a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3@2", D: "d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ e4@2",
  E: "[~@2 e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4@2 e4 ~ e4@2 e3@2 e4@2 e4@2, [b4,e5,g#5]@7 ~]/2", // E
  F: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ d4@2, [a4,c#5,e5]@7 ~", // A
  G: "d4 ~ [d4,a4,d5,f#5] ~ d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4 ~, ~@2 [a4,d5,f#5] ~", // D
  H: "[e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4@2 e4 ~ e4 ~ e4 ~ e4@2 e4@2, [b4,e5,g#5]@13 ~@3]/2", // E
  I: "a3 ~ [a3,a4,c#5,e5] ~ a3@2 a3 ~ a3@2 a3 ~ a3@2 a3@2, ~@4 [a4,c#5,e5]@3 ~", // A
  J: "d4 ~ [d4,a4,d5,f#5] ~ d4 ~ d4 ~ d4@2 d4 ~ d4@2 d4 ~, ~@8 [a4,d5,f#5]@7 ~", // D
  K: "[e4 ~ e4@2 e4 ~ e4 ~ e4 ~ e4 ~ e4@2 e4 ~ e4 ~ e4@2 e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~, [b4,e5,g#5]@27 ~@5]/2", // E
  L: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3@2, [a4,c#5,e5]@13 ~@3", // A
  M: "d4 ~ [d4,a4,d5,f#5] ~ d4@2 d4 ~ d4 ~ d4 ~ d4 ~ d4 ~, ~@2 [a4,d5,f#5] ~", // D
  N: "[[b4,f#5]@10 [b4,f#5]@3 [b4,d#5,f#5]@3, b3, d#5@13 ~@3, ~@5 c#5@3]/2", // B5 B
  O: "[[e5,g#5]@18 [e5,a5] ~ [e5,g#5]@2 b4@2 e5@2 [e5,g#5]@2 [e4,b4] ~@3, [e4,b4]@22 e4 ~ a5@5 ~@3]/2", // E A5 E E5
  P: "[[e4,b4,e5,g#5,b5]@4 [e5,g#5,b5]@2 ~@2 [d4,a4,d5,f#5,a5] ~ [d4,a4,d5,f#5,a5] ~@3 [e4,b4,e5,g#5,b5]@6 [e5,g#5,b5] ~@3 [d4,a4,d5,f#5,a5] ~ [d4,a4,d5,f#5,a5] ~@3 [e5,g#5,b5]@4 [e5,f#5,b5] ~ [e5,g#5,b5]@2 ~@2 [d4,a4,d5,f#5,a5] ~ [d4,a4,d5,f#5,a5] ~@3 [e5,g#5,b5]@4 [e5,g#5,b5]@4 [e5,g#5,b5] ~ [d4,a4,d5,f#5,a5] ~ [d4,a4,d5,f#5,a5] ~@3 [d4,a4,d5,f#5,a5] ~, ~@30 [e4,b4]@8 ~@8 [e4,b4]@9 ~@9]/4", // E D E D E Esus2 E D …
  Q: "[[e3,e4,b4], g#4@33 ~@95]/8", // E5
})).s("gm_piano").gain(0.54)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@16 A@2 B C D E F G A@2 H@2 I@2 J@8 ~@8 A@2 B C D E F G A@2 H@2 I@2 J@16 A@2 B C D E F G A@2 B C A@2 B C D E F G A@2
  H@2 I@2 J@24 K@2 ~@6
>`.pickRestart({
  A: "[[e2,e3,g#3,b3]@4 [e3,g#3,b3] ~ e2 ~@3 [e3,g#3,b3] ~@3 [e3,g#3,b3]@6 [e3,g#3,b3] ~@5 [e3,g#3,b3] ~@3 [e3,g#3,b3] ~]/2", // E
  B: "~@4 [c#3,e3,a3]@6 [c#3,e3,a3] ~@5", C: "[d3,f#3,a3] ~ [d3,f#3,a3]@8 [d3,f#3,a3] ~@3 [d3,f#3,a3] ~",
  D: "~@4 [e3,g#3,b3]@6 [e3,g#3,b3] ~@3 [e3,g#3,b3] ~", E: "~@2 e2@2 [e3,g#3,b3]@6 [e3,g#3,b3] ~@3 [e3,g#3,b3] ~",
  F: "~@4 [a2,c#3,e3]@6 [a2,c#3,e3] ~@5", // A
  G: "~@2 [f#3,a3,d4] ~ [f#3,a3,d4]@2 [f#3,a3,d4]@2 d3 ~ [f#3,a3,d4]@2 d3 ~ [f#3,a3,d4] ~", // D
  H: "[b2@10 b2@4 ~@6 b2@2 [b3,d#4] ~ b2 ~ [b3,d#4]@6, [d#4,f#4]@11 ~@5, b3@9 b3@2 ~@5, ~@7 b2@3 ~@6]/2", // B D#m
  I: "[e3@8 e3@2 e3@4 e3@4 e3@2 e3@2 [e3,a3,b3] ~@3 [e3,a3,b3] ~@3 [e3,a3,b3] ~, [g#3,b3]@11 ~@5, e2 ~@31]/2", // Esus4 G#m
  J: "[~@6 [e3,b3] ~ [d3,f#3,a3] ~ [d3,f#3,a3] ~@3 [e2,e3,b3]@4 ~@4 e2@2 [d3,f#3,a3] ~ [d3,f#3,a3]@3 ~ [e2,e3,b3]@4 ~@4 [e3,b3] e2 [d3,f#3,a3] ~ [d3,f#3,a3]@3 ~ [e2,e3,b3]@4 [e2,e3,b3]@2 [e2,e3,b3]@2 [e2,e3,b3]@2 [e2,d3,f#3,a3] ~ [e2,d3,f#3,a3] ~ [e2,d3,f#3,a3] ~ [e2,d3,f#3,a3] ~, [e3,b3]!3 ~@6 [e3,b3] [e3,b3]@2 ~@5 [e3,b3]!2 ~@13, ~ e2@2 e2@2 e2@2 ~@12 e2@3 ~@13 e2@2 e2@2 ~@25]/4", // E5 D E5 D E5 D E5 D …
  K: "[e2,b2,e3]/2", // E5
})).s("gm_acoustic_guitar_nylon").gain(0.42)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@4 A@2 B C@3 D E A@2 F G H@2 D E A@2 F G H@2 ~@2 H@2 I@8 H@2 D E A@2 F G H@2 D E A@2 F G H@2 ~@2 H@2 I@16 H@2 D E A@2
  F G H@2 D E H@2 D E A@2 F G H@2 ~@2 H@2 I@24 ~@8
>`.pickRestart({
  A: "[[e4,g#4,b4]@31 ~]/2", B: "[e4,a4]", C: "[[a3,d4]@15 b4@32 ~]/3", D: "[e4,a4]@15 ~", E: "[a3,d4,f#4]@15 ~",
  F: "[c#4,e4]@15 ~", G: "d4@7 ~", H: "[b4@31 ~]/2",
  I: "[[b3,b4]@7 ~ [a3,a4]@5 ~ [b3,b4]@9 ~ [a3,a4]@5 ~ [b3,b4]@9 ~ [a3,a4]@5 ~ [b3,b4]@9 ~ [a3,a4]@7 ~]/4", // B A B A B A B A
})).s("gm_string_ensemble_2").gain(0.3)

// other · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note(`<
  ~@6 A B@3 C ~@3 D E F@2 C ~@3 D E F@2 G@2 F@2 ~@8 F@2 C ~@3 D E F@2 C ~@3 D E F@2 G@2 F@2 ~@16 F@2 C ~@3 D E F@2 C ~
  F@2 C ~@3 D E F@2 G@2 F@2 ~@32
>`.pickRestart({
  A: "c#4", B: "[f#4@15 ~ e4@31 ~, ~@15 g#4@32 ~]/3", C: "c#4@15 ~", D: "a3@15 ~", E: "[a3,f#4]@7 ~",
  F: "[[e4,g#4]@31 ~]/2", G: "[b3,d#4,f#4]/2",
})).s("gm_string_ensemble_2").gain(0.19)

// drums · kick
const kick = s("bd").struct(`<
  A@2 B A@3 B A@24 C A C A C A C A@23 C A C A C A C A C A C A C A C A@27 C A C A C A C A C A C A C A C A C A C A C A C D
  ~@7
>`.pickRestart({
  A: "x ~@2 x ~ x ~ x", B: "x ~@3 x!2 ~ x", C: "x!2 ~ x ~ x ~ x", D: "x",
})).gain(0.66)

// drums · snare
const snare = s("sd").struct("<~@8 A@7 B A@21 C A@7 B A@21 C A@7 C A@33 C A@7 C A@7 C ~@8>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~@4 x ~ x ~@5 x ~ x!2",
})).gain(0.66)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@37 A ~@29 A ~@7 A ~@33 A ~@7 A ~@7 A ~@8>".pickRestart({
  A: "~@8 x!4 ~ x ~@2",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@30 [~ x ~ x]!8 ~@22 [~ x ~ x]!16 ~@26 [~ x ~ x]!24 ~@8>").gain(0.66)

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

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

// drums · open hat
const open_hat = s("oh").struct("<~@126 x ~@7>").gain(0.66)

// drums · crash
const crash = s("cr").struct(`<
  ~@30 A ~@3 A ~@25 A ~@3 A ~@3 A ~@3 A ~@29 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7
>`.pickRestart({
  A: "x",
})).gain(0.66)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@30 [x!16]!8 ~@22 [x!16]!16 ~@26 [x!16]!24 ~@8>").gain(1)

stack(
  bass, piano, acoustic_guitar_nylon, string_ensemble_2, string_ensemble_2_soft, kick, snare, snare_soft, low_tom,
  hihat, hihat_soft, open_hat, crash, cabasa
)

More by INXS