Strudelify

Volatile Reaction-Action Music

Xander Karafin

KeyD majorTempo156 bpm
0:00/0:00
// Volatile Reaction-Action Music — Xander Karafin
// 156 bpm, 7/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (7/4 at bar 1, 12/8 at bar 21, 7/4 at bar 37) are rendered on a constant 7/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/4084946; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 61 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(156/7)

// 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 · piccolo
const piccolo = note("<A@4 ~@4 A@4 ~@7 B@2 C@16 ~@24>".pickRestart({
  A: "d6 e6 d6 [d6,e6] e6 d6 e6 d6 e6 [d6,e6] d6 e6 d6 e6 d6 [d6,e6] e6 d6 e6 d6 e6 [d6,e6] d6 e6 d6 e6 d6 [d6,e6] e6 d6 e6 d6 e6 [d6,e6] d6 e6 d6 e6 d6 [d6,e6] e6 d6 e6 d6 e6 [d6,e6] d6 e6", // Dsus2
  B: "d6/2",
  C: "f6 [f6,g6]!3 g6 [f6,g6]!3 f6 [f6,g6]!3 g6 [f6,g6]!3 f6 [f6,g6]!3 g6 [f6,g6]!3 f6 [f6,g6]!3 g6 [f6,g6]!3 f6 [f6,g6]!3 g6 [f6,g6]!3 f6 [f6,g6]!3 g6 [f6,g6]!3", // Fsus2
})).s("gm_piccolo").gain(0.25)

// other · oboe
const oboe = note("<A@2 B C ~@4 A@2 B C ~@7 A@2 D@2 E@2 F@2 G@2 H@2 I@6 ~@24>".pickRestart({
  A: "f#5/2", B: "g5", C: "g#5", D: "[b4@14 c#5@13 b4@14 c#5@14 d5@14 e5@13 d5@14]/2",
  E: "[e5@14 b4@13 c#5@14 b4@14 c#5@14 d5@13 e5@14]/2", F: "[d5@14 e5@13 c5@14 d5@14 c5@14 d5@13 d#5@14]/2",
  G: "[f5@14 d#5@13 f5@14 c5@14 d5@14 c5@13 d5@14]/2", H: "[d#5@14 f5@13 d#5@14 f5@14 d5@14 e5@13 d5@14]/2",
  I: "[e5@14 f5@55 f5@54 d5@14 e5@14 d5@14 e5@13 f5@55 f5@55]/6",
})).s("gm_oboe").gain(0.2)

// other · french horn · "Horn in F"
const french_horn = note("<~@12 A B A B ~@2 B@3 ~@5 C@2 ~ D@2 E@3 ~ F@2 ~@14 A B A B ~@2 B@3 G>".pickRestart({
  A: "b3@2 ~@5 b3@2 ~@5 b3@2 ~@8 b3@2 ~@5 b3@2 ~@5 d4@2 ~ d4@2 ~@2 b3@2 ~",
  B: "b3@2 ~@5 b3@2 ~@5 b3@2 ~@8 b3@2 ~@5 b3@2 ~@5 f4@2 ~ f4@2 ~@2 d4@2 ~", C: "[~@32 a3 e4 a4@55 ~@7]/2",
  D: "[a3 e4 a4@7 a4@46 ~@41]/2", E: "[~@11 b3 ~ e4 b4@103 ~@27]/3", F: "[~@39 b3 e4 b4@55]/2", G: "b3 ~@23",
})).s("gm_french_horn").gain(0.5)

// other · trumpet · "B♭ Trumpet"
const trumpet = note("<~@11 A ~@3 B C@2 D@3 ~@29 A ~@3 B C@2 D@3 E>".pickRestart({
  A: "e4@2 ~ e5@45, ~ f5 ~@22", B: "~@38 f5@2 ~ f5@2 ~@2 d5@2 ~", C: "b4@5 ~@33 f5@2 ~ f5@2 ~@2 d5@2 ~",
  D: "b4@2 ~@5 b4@2 ~@5 b4@2 ~@8 b4@2 ~@5 b4@2 ~@5 f5@2 ~ f5@2 ~@2 d5@2 ~", E: "b4 ~@23",
})).s("gm_trumpet").gain(0.5)

// other · trombone
const trombone = note("<~@3 A B C B C B C B C D E D E F C F C F ~@14 G@2 H ~@13 D E D E F C F C F I>".pickRestart({
  A: "~@38 f2@2 ~ f2@2 ~@2 f2@2 ~", B: "b2@2 ~@5 b2@2 ~@5 b2@2 ~@8 b2@2 ~@5 b2@2 ~@5 d3@2 ~ d3@2 ~@2 b2@2 ~",
  C: "b2@2 ~@5 b2@2 ~@5 b2@2 ~@8 b2@2 ~@5 b2@2 ~@5 f3@2 ~ f3@2 ~@2 d3@2 ~", D: "b2", E: "f3",
  F: "b2@2 ~@5 b2@2 ~@5 b2@2 ~@8 b2@2 ~@5 b2@2 ~@5 f3@2 ~ f3@2 ~@2 b2@2 ~", G: "[~@41 d#3@55]/2", H: "e3 ~@23",
  I: "b2 ~@23",
})).s("gm_trombone").gain(0.5)

// bass · tuba
const bass = note(`<
  ~@3 A B C B C B C B C D E D E F C F C F ~@14 G@2 H ~@3 I J I J I J I J I J D E D E F C F C F K
>`.pickRestart({
  A: "~@38 f1@2 ~ f1@2 ~@2 f1@2 ~", B: "b1@2 ~@5 b1@2 ~@5 b1@2 ~@8 b1@2 ~@5 b1@2 ~@5 d2@2 ~ d2@2 ~@2 b1@2 ~",
  C: "b1@2 ~@5 b1@2 ~@5 b1@2 ~@8 b1@2 ~@5 b1@2 ~@5 f2@2 ~ f2@2 ~@2 d2@2 ~", D: "b1", E: "f2",
  F: "b1@2 ~@5 b1@2 ~@5 b1@2 ~@8 b1@2 ~@5 b1@2 ~@5 f2@2 ~ f2@2 ~@2 b1@2 ~", G: "[~@41 d#2@55]/2", H: "e2 ~@23",
  I: "b1@2 ~@5 b1@2 ~@5 b1@2 ~@8 b1@2 ~@5 b1@2 ~@5 f2@2 ~@8",
  J: "b1@2 ~@5 b1@2 ~@5 b1@2 ~@8 b1@2 ~@5 b1@2 ~@5 d2@2 ~@8", K: "b1 ~@23",
})).s("gm_tuba").gain(0.5)

// drums · kick
const kick = s("bd").struct("<A@21 B C D E F G H I B C D E F J ~@2 A@23 K>".pickRestart({
  A: "x ~@6 x ~@6 x ~@9 x ~@6 x ~@6 x ~@9",
  B: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~@3 x ~@4 x ~@3 x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~@4 x ~",
  C: "x ~ x ~@4 x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~@3 x ~@4 x ~@3 x ~@2 x ~ x ~ x ~ x ~@2 x ~",
  D: "x ~@4 x ~ x ~ x ~@4 x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@4 x ~@4 x ~@3 x ~ x ~@2 x ~",
  E: "x ~ x ~@2 x ~ x ~@3 x ~@2 x ~ x ~@4 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@4 x ~@3 x ~@4",
  F: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~@3 x ~@2 x ~ x ~@3 x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~@4 x ~",
  G: "~@2 x ~@4 x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~@3 x ~ x ~@2 x ~@3 x ~@2 x ~ x ~ x ~ x ~@2 x ~",
  H: "x ~@4 x ~@3 x ~@4 x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@4 x ~ x ~@2 x ~@3 x ~ x ~@2 x ~",
  I: "x ~ x ~@2 x ~ x ~@3 x ~@4 x ~@4 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@4 x ~ x ~ x ~@4",
  J: "~@2 x ~@4 x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~@3 x ~ x ~@2 x ~@3 x ~@13", K: "x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@12 x!8 ~@41>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@4
  [~@3 x ~@6 x ~@6 x ~@3 x ~@5 x ~@6 x ~@6 x ~@3 x ~@2]!7
  [~@3 x ~@6 x ~@6 x ~@3 x ~@5 x ~@6 x ~@13]
  [~@10 x ~@6 x ~@3 x ~@5 x ~@6 x ~@6 x ~@3 x ~@2]!8
  [~@3 x ~@6 x ~@6 x ~@3 x ~@5 x ~@6 x ~@13]
  ~@16
  [~@3 x ~@6 x ~@6 x ~@3 x ~@5 x ~@6 x ~@6 x ~@3 x ~@2]!23
  ~
>`).gain(0.3)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<[~@3 x ~@6 x ~@6 x ~@3 x ~@5 x ~@6 x ~@6 x ~@3 x ~@2]!4 ~@57>").gain(0.2)

// drums · cowbell
const cowbell = s("cb").struct("<~@37 [~@3 x ~ x ~@4 x ~@6 x ~@3 x ~@5 x ~@6 x ~@6 x ~@3 x ~@2]!23 ~>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@11 [~@38 x!10] x!8 [~@38 x!10] x ~@38 x>").gain(0.4)

stack(piccolo, oboe, french_horn, trumpet, trombone, bass, kick, snare, mid_tom, mid_tom_soft, cowbell, crash)

More by Xander Karafin