Strudelify

Exterminate

Snap

KeyA majorTempo130 bpm
0:00/0:00
// Exterminate — Snap
// 130 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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.

// other · taiko drum
const taiko_drum = note("<~@67 A ~@8 A ~@14 A ~@7 A ~@27 A ~@7>".pickRestart({
  A: "a2 ~@3 a2 ~@3 a2 ~@3 a2 ~@3",
})).s("gm_taiko_drum").gain(0.52).pan(1)

// bass · synth bass 2
const bass = note(`<
  ~@24
  [a1@3 a1@3 a1@4 e2@4 c2@2]!4
  [a1@3 a1@3 a1@3 ~ e2@3 ~ c2@2]!5
  [a1@3 a1@3 a1@4 e2@4 c2@2]!99
  ~@3
>`).s("gm_synth_bass_2").gain(0.45)

// bass · synth bass 1
const bass_2 = note("<~@44 [a2!3 ~ a2 ~ g2 a2 ~ g2 a2 ~@5]!23 ~@68>").s("gm_synth_bass_1").gain(0.35).pan(0.2)

// other · synth brass 2
const synth_brass_2 = note(`<
  ~@36 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B ~@3
>`.pickRestart({
  A: "e4@2 a3 d4@2 a3 d4 a3", B: "d4@2 a3 d4@2 a3 d4 a3",
})).s("gm_synth_brass_2").gain(0.35)

// other · synth brass 1
const synth_brass_1 = note("<~@52 A@3 B A@3 B A@3 B A@3 ~@33 A@3 B A@3 B A@3 B A@3 ~@20>".pickRestart({
  A: "~@2 a4 ~ a4 g4 ~ a4 ~@2 a4 ~@5", B: "~@2 a4 ~ a4 g4 ~ a4 ~@2 e4 ~@5",
})).s("gm_synth_brass_1").gain(0.35).pan(0.8)

// other · piano
const piano = note("<~@77 A B ~@2 C B A B A B C B A B A B ~@30 A D A B C B A B ~@4>".pickRestart({
  A: "~@10 a4 ~ a4@2 g4@2", B: "a4@3 d4@3 ~@2", C: "~@10 a4 ~ a4@2 c5@2", D: "a4",
})).s("gm_piano").gain(0.35)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@34 A@2 ~@8 B C B C B C B C B C B C B C B C B C B C B C B C ~@6 D E ~@4 D F ~@10 G H G H G H G H G H G H G H G H G H
  G H G H G H ~@6 D E ~@4 D F ~@2 I J ~
>`.pickRestart({
  A: "[~ [g5,g6]@17 ~ [g5,g6]@5 ~@2 [g5,g6]@5 ~]/2", B: "[e5,e6]@3 ~ a4@2 [d5,d6]@3 ~ a4@2 [d5,d6]@2 a4@2",
  C: "[d5,d6]@3 ~ a4@2 [d5,d6]@3 ~ a4@2 [d5,d6]@2 a4@2", D: "~ [g5,g6]@15", E: "~@3 [g5,g6]@3 ~@10",
  F: "~@3 [g5,g6]@3 ~@3 [g5,g6]@3 ~@4", G: "[e5,e6]@3 ~ [a4,a5]@2 [d5,d6]@3 ~ [a4,a5]@2 [d5,d6]@2 [a4,a5]@2",
  H: "[d5,d6]@3 ~ [a4,a5]@2 [d5,d6]@3 ~ [a4,a5]@2 [d5,d6]@2 [a4,a5]@2", I: "[g5,g6]!2", J: "[g5,g6] ~",
})).s("gm_string_ensemble_1").gain(0.2)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@44 A@24 ~@7 B ~@47 C@2 ~@8 D E>".pickRestart({
  A: "~@2 a5 ~@2 a5 ~ a5", B: "~@9 [g5,g6]@3 ~@4", C: "[~@9 [g5,g6]@3 ~@3 [g5,g6]@3 ~@14]/2", D: "~ [g5,g6]",
  E: "[g5,g6] ~", // G
})).s("gm_string_ensemble_1").gain(0.15)

// other · shakuhachi
const shakuhachi = note(`<
  ~@52 A@2 B@2 C@2 D@2 A@2 B@2 E@2 F@2 ~@32 A@2 B@2 G@2 H@2 I@2 B@2 E@2 F@2 ~@16 J@2 ~
>`.pickRestart({
  A: "[a5@9 ~ a5@16 g5@2 ~ f5@3, g5 ~@25 f5 ~@5]/2", B: "[e5@10 e5@21 ~]/2",
  C: "[e5@9 ~ e5@16 f5@3 ~ g5@2, d5 ~@25 e5 ~@5]/2", D: "[d5@7 d5@9]/2", E: "[e5@9 ~ e5@16 f5@3 g5@3, d5 ~@31]/2",
  F: "[a5@5 a5@11]/2", G: "[e5@9 ~ e5@15 ~ f5@3 ~ g5@2, d5 ~@25 e5 ~@5]/2", H: "[d5@14 d5@17 ~]/2",
  I: "[a5@9 ~ a5@15 ~ g5@2 ~ f5@3, g5 ~@25 f5 ~@5]/2", J: "[a5@7 ~ a5@24, g5 ~@7 d6 ~@23]/2",
})).s("gm_shakuhachi").gain(0.45)

// other · oboe
const oboe = note("<~@116 A@2 B C D@4 ~@11>".pickRestart({
  A: "e4/2", B: "f4@6 e4 d4", C: "e4", D: "d4/4",
})).s("gm_oboe").gain(0.3)

// other · synth strings 1
const synth_strings_1 = note("<A@3 B@3 C@6 D@3 E@4 ~@49 F@4 G@4 ~@40 F@4 G@4 ~@11>".pickRestart({
  A: "[~@13 a2@18 g2@13 f2@4]/3", B: "[~ e2@36 a2@11]/3", C: "[~@2 b2@4 ~ g2@13 f2@4 ~ e2@35 f2@18 d2@13 ~ f2@4]/6",
  D: "[e2@3 f2]/3", E: "[~@2 g2@4 d2@13 f2@4 ~ e2@38 ~@2]/4", F: "[~@17 b4@15, [a2,e3], ~ e4]/4", G: "[a2,d3]/4",
})).s("gm_synth_strings_1").gain(0.35)

// other · alto sax
const alto_sax = note(`<
  ~@28 A B@2 ~ A B@2 C@2 ~@31 A D@2 ~ A E@2 C@2 ~@2 F@2 ~@2 G@2 ~@2 F@2 ~@2 G@2 ~@6 H I H I H I H I J K L@2 M@2 L@2 ~ A
  B@2 ~ A B@2 C@2 ~@2 F@2 ~@2 N O ~@2
>`.pickRestart({
  A: "~@2 e4!7 ~ e4 e4@2 d4 e4 ~", B: "[e4!9 ~ e4 e4@2 d4 e4@5 ~@13]/2", C: "[~@10 a4 ~ a4@2 g4 a4@2 ~@15]/2",
  D: "[e4!9 ~ e4 e4@2 d4 e4@6 ~@12]/2", E: "[e4!9 ~ e4 e4@2 d4 e4@7 ~@11]/2", F: "[~@10 f4 ~ e4@2 d4 d4@2 ~@15]/2",
  G: "[~@10 g4 ~ a4@2 g4 a4@2 ~@15]/2", H: "~@5 c4 d4 e4", I: "f4@2 f4 e4 ~ e4 d4 ~ c4@2 d4@3 ~@3",
  J: "~@10 c5@2 a4@2 g4 ~", K: "a4@2 f4 e4 ~ e4 d4 ~ c4@2 d4@3 ~@3", L: "[~@10 c5 ~ a4 ~ g4 a4@5 g4 e4 ~@10]/2",
  M: "[~@10 c5 ~ a4 ~ g4 a4@3 f4 e4 ~ e4 d4 ~ c4@2 d4@3 ~@3]/2", N: "~@2 e4 ~ d4@4 e4@2 g4@4 f4 e4", O: "d4 ~",
})).s("gm_alto_sax").gain(0.64)

// drums · kick
const kick = s("bd").struct("<~@36 [x ~@2 x ~@4 x ~ x ~@2 x ~@2]!31 ~@25 [x ~@2 x ~@4 x ~ x ~@2 x ~@2]!23 ~@20>")
  .gain(0.35)

// drums · snare
const snare = s("sd").struct("<~@36 [~ x ~ x]!31 ~@25 [~ x ~ x]!23 ~@20>").gain(0.5)

// drums · clap
const clap = s("cp").struct("<~@68 [~@4 x ~@7 x ~@2 x]!8 ~@8 [~@4 x ~@7 x ~@2 x]!8 ~@24 [~@4 x ~@7 x ~@2 x]!8 ~@11>")
  .gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<~@28 A@7 ~ A@31 ~ B@8 ~@8 A@31 ~ C@8 ~@11>".pickRestart({
  A: "x!7 ~ x!6 ~ x", B: "x!7 ~ x!5 ~@2 x", C: "x!16",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@28 A@7 ~ A@31 ~ B@8 ~@8 A@31 ~@20>".pickRestart({
  A: "~@7 x ~@6 x ~", B: "~@7 x ~@5 x!2 ~",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@28 [x!16]!7 ~ [x!16]!31 ~@17 [x!16]!31 ~@20>").gain(0.2)

stack(
  taiko_drum, bass, bass_2, synth_brass_2, synth_brass_1, piano, string_ensemble_1, string_ensemble_1_soft, shakuhachi,
  oboe, synth_strings_1, alto_sax, kick, snare, clap, hihat, open_hat, tambourine
)

More by Snap