Strudelify

I Disappear

Metallica

KeyE♭ minorTempo128 bpm
0:00/0:00
// I Disappear — Metallica
// 128 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// chords · overdriven guitar
const overdriven_guitar = note(`<
  A@4 B@8 C@7 D@2 E@2 F@2 E@2 G@4 E@2 H@6 E@2 F@2 E@2 G@4 E@2 I@2 ~@8 J@5 E@2 F@2 E@2 G@4 E@2 I@2 ~@8 K L M N K L M N
  O@3 P Q@3 R Q@3 R ~@4 S@4 K L M N K L M T K L M N K L M T U@4
>`.pickRestart({
  A: "[eb2,bb2,eb3]@2 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]", // Eb5 Eb Eb5
  B: "[[eb2,bb2,eb3]@2 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]]/8", // Eb5 Eb Eb5 Eb Eb5 Eb Eb5 Eb …
  C: "[~@2 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~@3 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]!4 [ab2,eb3,ab3]@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]!4 [ab2,eb3,ab3]@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]!4 [ab2,eb3,ab3]@2 [eb2,bb2,eb3]]/7", // Eb Eb5 Eb Eb5 Eb Eb5 Eb Eb5 …
  D: "[~@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2 [gb2,db3,gb3]@2 ~@2 [gb2,db3,gb3]@6 [eb2,bb2,eb3]@3 ~@3 [eb2,bb2,eb3]@2 ~ [eb2,bb2,eb3]@2 ~]/2", // Eb5 Gb5 Eb5
  E: "[eb2,bb2,eb3]@4 ~@6 [eb2,bb2,eb3]@2 ~ [eb2,bb2,eb3]@2 ~", // Eb5
  F: "[[eb2,bb2,eb3]@4 ~@6 [gb2,db3,gb3]@2 ~@2 [gb2,db3,gb3]@6 [eb2,bb2,eb3]@3 ~@3 [eb2,bb2,eb3]@2 ~ [eb2,bb2,eb3]@2 ~]/2", // Eb5 Gb5 Eb5
  G: "[[eb2,bb2,eb3]@4 ~@6 [gb2,db3,gb3]@2 ~@2 [gb2,db3,gb3]@4 [f2,c3,f3]@2 ~@2 [f2,c3,f3]@4 [ab2,eb3,ab3]@2 ~@2 [ab2,eb3,ab3]@4 bb2@2 gb2@2 eb2@2 ab2@2 bb2@4 [eb2,bb2,eb3]@6 ~@6 [eb2,bb2,eb3]@2 ~ [eb2,bb2,eb3]@2 ~]/4", // Eb5 Gb5 F5 Ab5 Eb5
  H: "[[eb2,bb2,eb3]@4 ~@6 [gb2,db3,gb3]@2 ~@2 [gb2,db3,gb3]@6 [eb3,eb4]@4 ~@2 [eb2,bb2,eb3]@2 ~@2 [eb2,bb2,eb3]@6 [eb3,eb4]@4 ~@2 [eb2,bb2,eb3]@2 ~@2 [eb2,bb2,eb3]@6 [eb3,eb4]@4 ~@2 [eb2,bb2,eb3]@2 ~@2 [eb2,bb2,eb3]@6 [eb3,eb4]@4 ~@6 [eb2,bb2,eb3]@6 [eb2,bb2,eb3]@3 ~@3 [eb2,bb2,eb3]@2 ~ [eb2,bb2,eb3]@2 ~]/6", // Eb5 Gb5 Eb Eb5 Eb Eb5 Eb Eb5 …
  I: "[[eb2,bb2,eb3]@2 ~@3 [gb2,db3,gb3] ~ [gb2,db3,gb3]@5 [f2,c3,f3]@4]/2", // Eb5 Gb5 F5
  J: "[[eb2,bb2,eb3]@4 [eb2,bb2,eb3]@4 [eb2,bb2,eb3]@2 [ab2,eb3,ab3]@4 [eb2,bb2,eb3]@4 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@4 [eb2,bb2,eb3]@2 [ab2,eb3,ab3]@4 [eb2,bb2,eb3]@4 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@4 [eb2,bb2,eb3]@2 [ab2,eb3,ab3]@4 [eb2,bb2,eb3]@4 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@4 [eb2,bb2,eb3]@2 [gb2,db3,gb3]@2 ~@2 [gb2,db3,gb3]@6 [eb2,bb2,eb3]@3 ~@3 [eb2,bb2,eb3]@2 ~ [eb2,bb2,eb3]@2 ~]/5", // Eb5 Ab5 Eb5 Ab5 Eb5 Ab5 Eb5 Gb5 …
  K: "eb4", L: "gb4@3 f4@3 db4@2", M: "db4", N: "gb4@3 f4",
  O: "[[eb2,bb2,eb3]@2 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]]/3", // Eb5 Eb Eb5 Eb Eb5 Eb Eb5
  P: "[eb2,bb2,eb3]", Q: "eb2@4 [db4,gb4]@2 bb3 [db4,gb4]@3 bb3@2 db4 eb4 gb4@2",
  R: "ab4 gb4 eb4 ab4 gb4 eb4 ab4 gb4 eb4 ab4 gb4 eb4 ab4 gb4 eb4@2", S: "~ [eb3,eb4] ~@2", T: "gb4@3 db4",
  U: "[[eb2,bb2,eb3]@2 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~ [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@3 [eb3,eb4]@2 ~@4]/4", // Eb5 Eb Eb5 Eb Eb5 Eb Eb5 Eb
})).s("gm_overdriven_guitar").gain(0.4)

// chords · overdriven guitar
const overdriven_guitar_2 = note(`<
  A ~@3 A@4 B@7 C ~@11 D@3 ~@4 A@3 C ~@7 D@3 ~@3 E@2 F@2 G H F@2 G I@8 ~@4 D@3 ~@5 J G@2 H J G@2 H J G@2 H J K L K A@3 ~
  M@8 N@3 O N@3 O P Q R S P Q T U V W X Y V W Z AA A@3 C
>`.pickRestart({
  A: "~ [eb2,bb2,eb3] ~@2", B: "~@2 [eb2,bb2,eb3]@3 [bb2,f3,bb3]@2 ~", C: "~@4 [eb2,bb2,eb3]@3 ~@9",
  D: "[~@5 gb3 ~ gb3@2 ab3 ~ ab3@2 bb3 ~ b3@2 bb3 gb3 eb3 ab3 bb3@2 ~]/3", E: "[~@7 gb3@5 ab3@4]/2",
  F: "[eb3@7 gb3@9]/2", G: "gb3", H: "ab3", I: "ab3/8", J: "eb3", K: "db4", L: "eb4",
  M: "[eb2,bb2,eb3]!5 [ab2,eb3,ab3] [gb2,db3,gb3] [ab2,eb3,ab3]", // Eb5 Ab5 Gb5 Ab5
  N: "[eb2,bb2,eb3]@2 [gb2,db3,gb3] [eb2,bb2,eb3] ~ [gb2,db3,gb3] [gb2,db3,gb3]@2", // Eb5 Gb5 Eb5 Gb5
  O: "[eb2,bb2,eb3]@2 [gb2,db3,gb3] [eb2,bb2,eb3] ~ [gb2,db3,gb3] [f2,c3,f3] [e2,b2,e3]", // Eb5 Gb5 Eb5 Gb5 F5 E5
  P: "[eb2,bb2,eb3] [eb2,bb2]!4 [f2,c3,f3] [f2,c3] [gb2,db3,gb3]", Q: "[gb2,db3]!5 [bb2,f3,bb3] [bb2,f3] [b2,gb3,b3]",
  R: "[b2,gb3]!5 [bb2,f3,bb3] [bb2,f3] [ab2,eb3,ab3]", S: "[ab2,eb3]!5 [gb2,db3,gb3] [f2,c3,f3]@2",
  T: "[b2,gb3]!5 [bb2,f3,bb3] [bb2,f3] [db3,ab3,db4]", U: "[db3,ab3]!5 [ab2,eb3,ab3] [gb2,db3,gb3]@2",
  V: "[eb2,bb2,eb3]!5 [f2,c3,f3]!2 [gb2,db3,gb3]", W: "[gb2,db3,gb3]!5 [bb2,f3,bb3]!2 [b2,gb3,b3]",
  X: "[b2,gb3,b3]!5 [bb2,f3,bb3]!2 [ab2,eb3,ab3]", Y: "[ab2,eb3,ab3]!5 [gb2,db3,gb3] [f2,c3,f3]@2",
  Z: "[b2,gb3,b3]!5 [bb2,f3,bb3]!2 [db3,ab3,db4]", AA: "[db3,ab3,db4]!5 [ab2,eb3,ab3] [gb2,db3,gb3]@2",
})).s("gm_overdriven_guitar").gain(0.34)

// bass · electric bass finger
const bass = note(`<
  ~@4 A@8 B@7 C@2 D@2 E@2 D@2 F@4 D@2 G@6 D@2 E@2 D@2 F@4 D@2 H@2 I@2 J K I@2 L M N@5 D@2 E@2 D@2 F@4 D@2 H@2 I@2 J K
  I@2 L M I@2 J K I@2 L M O@3 P Q@8 R@3 S R@3 S T U V W T U X Y T U V W T U X Y Z@4
>`.pickRestart({
  A: "[~@2 eb1@2 ~ eb1 ~ eb1@3 eb1@2 ~ eb1 ~ eb1@3 eb1@2 ~ eb1 ~ eb1@3 eb1@2 ~ eb1 ~ eb1@3 eb1@3 bb1@2 eb1@3 eb1@3 bb1@2 eb1@3 eb1@3 bb1@2 eb1@3 eb1@3 bb1@2 eb1]/8",
  B: "[~@4 eb1@6 bb1@4 eb1@6 eb1@6 bb1@4 eb1@6 eb1@6 bb1@4 eb1@6 eb1@3 ~@7 eb1@4 eb1@2 eb1@2 eb1@2 eb1@2 ab1@4 eb1@4 eb1@2 eb1@2 eb1@2 eb1@2 ab1@4 eb1@4 eb1@2 eb1@2 eb1@2 eb1@2 ab1@4 eb1@2]/7",
  C: "[~@2 eb1@2 eb1@2 eb1@2 eb1@2 gb1@2 ~@2 gb1@6 eb1@3 ~@3 eb1@2 ~ eb1@2 ~]/2", D: "eb1@4 ~@6 eb1@2 ~ eb1@2 ~",
  E: "[eb1@4 ~@6 gb1@2 ~@2 gb1@6 eb1@3 ~@3 eb1@2 ~ eb1@2 ~]/2",
  F: "[eb1@4 ~@6 gb1@2 ~@2 gb1@4 f1@2 ~@2 f1@4 ab1@2 ~@2 ab1@4 bb1@2 gb1@2 eb1@2 ab1@2 bb1@4 eb1@6 ~@6 eb1@2 ~ eb1@2 ~]/4",
  G: "[eb1@4 ~@6 gb1@2 ~@2 gb1@6 eb1@4 ~@2 eb1@2 ~@2 eb1@6 eb1@4 ~@2 eb1@2 ~@2 eb1@6 eb1@4 ~@2 eb1@2 ~@2 eb1@6 eb1@3 ~@7 eb1@6 eb1@3 ~@3 eb1@2 ~ eb1@2 ~]/6",
  H: "[eb1@2 ~@3 gb1 ~ gb1@5 f1@4]/2", I: "[eb1@2 eb1!3 f1@2 gb1@2 gb1!4 bb1@2 b1]/2", J: "b1@5 bb1@2 ab1",
  K: "ab1@5 gb1 f1@2", L: "b1@5 bb1@2 db2", M: "db2@5 ab2 gb2@2",
  N: "[eb1@4 eb1@4 eb1@2 ab1@4 eb1@4 eb1@2 eb1@4 eb1@2 ab1@4 eb1@4 eb1@2 eb1@4 eb1@2 ab1@4 eb1@4 eb1@2 eb1@4 eb1@2 gb1@2 ~@2 gb1@6 eb1@3 ~@3 eb1@2 ~ eb1@2 ~]/5",
  O: "[eb1@2 eb1@2 ~ eb1 ~ eb1@3 eb1@2 ~ eb1 ~ eb1@3 eb1@2 ~ eb1 ~ eb1]/3", P: "eb1 eb2 db2 bb1 db2 bb1 ab1 gb1",
  Q: "eb1!5 ab1 gb1 ab1", R: "eb1@2 gb1 eb1 ~ gb1 gb1@2", S: "eb1@2 gb1 eb1 ~ gb1 f1 e1", T: "eb1!5 f1!2 gb1",
  U: "gb1!5 bb1!2 b1", V: "b1!5 bb1!2 ab1", W: "ab1!5 gb1 f1@2", X: "b1!5 bb1!2 db2", Y: "db2!5 ab1 gb1@2",
  Z: "[eb1@2 eb1@2 ~ eb1 ~ eb1@3 eb1@2 ~ eb1 ~ eb1@3 eb1@2 ~ eb1 ~ eb1@3 eb1@2 ~@4]/4",
})).s("gm_electric_bass_finger").gain(0.4)

// other · electric guitar clean
const electric_guitar_clean = note("<~@53 A@2 B C D@2 B C ~@19 A@2 B C D@2 B C A@2 B C D@2 B C ~@40>".pickRestart({
  A: "[eb3 bb3 eb4 bb3 db4@9 bb3@3]/2", B: "b3@5 bb3@3", C: "db4", D: "[eb3 bb3 eb4 bb3 db4 bb3@2 bb3@6 bb3@3]/2",
})).s("gm_electric_guitar_clean").gain(0.48)

// other · tenor sax
const tenor_sax = note(`<
  ~@38 A@2 ~@2 A@2 ~@4 B C ~@4 D E F G H E ~@5 A@2 ~@2 A@2 ~@10 D E F G H E ~@2 D E F G H E ~@22 D E F G H E ~@13
>`.pickRestart({
  A: "[~@4 bb3@6 db4@4 eb4@9 ~@9]/2", B: "~@2 eb4@3 gb4@2 gb4", C: "bb4@2 bb4@3 ~@3", D: "bb3@2 bb3 gb3@2 gb3@2 gb3",
  E: "gb3 ~", F: "db3 eb3@2 gb3 eb3 eb3@2 db3", G: "eb3@5 ~@3", H: "bb3@2 bb3 gb3@3 gb3!2",
})).s("gm_tenor_sax").gain(0.37)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@4 B@7 C D E@2 F G H@2 I G H@2 I D J G H@2 I A@3 K G H@2 I G H@2 I D J G H@2 I L ~@8 E@3 F G H@2 I G H@2 I D J G
  H@2 I L ~@8 M@8 N A@2 O E@7 J P@3 Q P@3 Q B@15 ~ P@3 R
>`.pickRestart({
  A: "~@2 x ~@2 x ~ x", B: "x!8", C: "x!2 ~@5 x", D: "~ x ~@2 x!2 ~@2", E: "x!2 ~@2 x!2 ~@2", F: "x!2 ~@2 x ~@3",
  G: "~@2 x ~@7 x ~@2 x ~@2", H: "x ~@9 x ~@2 x ~@2", I: "x ~@4 x ~ x", J: "x!2 ~@2 x!2 ~ x", K: "~@7 x", L: "~ x",
  M: "~ x ~ x", N: "x ~ x ~@2 x ~ x", O: "x ~ x ~ x!2 ~@2", P: "x ~@2 x ~ x ~@2", Q: "x ~@2 x ~@4", R: "x",
})).gain(0.34)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  A B@14 C D E@2 F G H@6 I ~@2 H@3 I B@3 C G H@6 I ~@2 H@3 I ~@9 D E@2 F G H@6 I ~@2 H@3 I ~@17 A B@2 J K H@3 K H@2 I
  H@3 I H@3 I ~@16 H@3 L
>`.pickRestart({
  A: "~@2 x!3 ~ x!3 ~ x!3 ~ x!2", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", C: "x ~ x!2 ~@12", D: "x!2 ~ x!5", E: "x!8",
  F: "x!4 ~@4", G: "~ x!3", H: "x!4", I: "x!3 ~", J: "x ~ x!3 ~ x!3 ~ x ~@5", K: "~@2 x!2", L: "x",
})).gain(0.34)

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

stack(overdriven_guitar, overdriven_guitar_2, bass, electric_guitar_clean, tenor_sax, kick, snare, open_hat, crash)

More by Metallica