Strudelify

The Weapon

Rush

KeyG majorTempo120 bpm
0:00/0:00
// The Weapon — Rush
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 94 bars on a 32-step grid, each part at one level. 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.

// other · acoustic guitar steel · "Steel String Guitar"
const acoustic_guitar_steel = note(`<
  A B@3 C@8 ~@10 D E F E G E ~@4 H@2 I@2 J K L M N O P Q R S T U V W X@2 ~@10 D E F E G E ~@4 H Y I@2 J K L M N Z AA@2
  AB AC@8 ~
>`.pickRestart({
  A: "g4@5 d5@3 ~@5 d5@2 g5@6 d5@3 ~ f5@2 e5@2 d5@3, ~@9 f5@4 ~@19, ~@11 e5@4 ~@17",
  B: "~ g4@4 d5@3 ~@5 d5@2 g5@6 d5@3 ~ f5@2 e5@2 d5@3, ~@9 f5@4 ~@19, ~@11 e5@4 ~@17",
  C: "[~ g4@4 d5@3 ~ f5@2 e5@2 d5@2 g5@6 d5@3 ~@5 d5@8 a#4@3 ~ c5@2 f5@5 ~ a4@2 c5@2 f5@4 ~@4 c5@3, ~@25 f5@4 ~@30 a#4@4 ~, ~@27 e5@4 ~@26 a4@4 ~@3]/2",
  D: "~ [a4,c5,e5]@12 ~@3 [d5,e5,a5]@13 ~@3", E: "[c5,d5,g5]@27 ~@5",
  F: "[a4,c5,e5] [a4,c5]@11 ~@4 [d5,e5,a5]@13 ~@3, ~ e5 ~@30", G: "[a4,c5,e5] [a4,c5,e5]@11 ~@4 [d5,e5,a5]@13 ~@3",
  H: "~ g4@4 d5@3 ~ f5@2 e5@2 d5@2 g5@6 d5@3 ~ f5@2 e5@2 d5@2 c5",
  I: "[~@2 [a4,c5,d5,g5]@13 ~@2 [a4,c5,d5,a5]@6 ~@2 [a4,c5,d5,g5]@21 ~@3 [a4,c5,d5,g5]@6 ~ [a4,c5,d5,e5]@7 ~, ~@25 a5 ~@38]/2", // Am7 D7 Am7 Am
  J: "~ [a4,c5,e5]@29 ~@2", K: "~ [c5,e5,a5]@14 ~@2 [c5,e5,a5]@14 ~, ~@17 b5 ~@14", L: "[d5,f#5]@14 ~@3 [c5,e5]@14 ~",
  M: "~ [b4,d5]@30 ~", N: "~ [c5,e5]@13 ~@3 [b4,d5]@12 ~@3", O: "[a4,c5]@14 ~@2 [e4,a4,c5]@15 ~",
  P: "~ g3@2 b3@2 d4@2 b3 ~ g3@4 d4@2 g3 ~ d3@4 ~@4 d3@4 g3@2 d3",
  Q: "~ [d3,a3]@4 d4@3 ~ [d3,a3]@4 d4@2 a3 ~ d3@2 a3@2 d4@2 d4 ~ d3@4 d3@3", // D5
  R: "~ [d#5,f5,a#5]@22 ~@2 [d#5,f5,a#5]@6 ~", S: "~ [f5,g5,c6]@22 ~@2 [f5,g5,c6]@4 ~@3",
  T: "~ [d#5,f5,a#5]@22 ~@2 [d#5,f5,a#5]@4 ~@3", U: "~ [c5,d5,g5]@12 ~@4 [a#4,c5,f5]@12 ~@3",
  V: "~ g4@4 d5@3 ~ f5@2 e5@2 d5@2 g5@6 d5@3 ~ f5@2 e5@2 d5@3",
  W: "~@5 a#4@3 ~ c5@2 f5@5 ~@5 f5@3 ~ a4@2 a#4@2 c5@3, ~@17 a4@4 ~@11, ~@19 c5@4 ~@9",
  X: "[~ g4@4 d5@3 ~ f5@2 e5@2 d5@2 g5@6 d5@4 f5@2 e5@2 d5@8 a#4@4 [c5,c#5]@2 f5@5 ~ a4@2 c5@2 f5@4 a4@2 a#4@2 c5@3]/2", // C#maj7
  Y: "~ g4@4 d5@3 ~ f5@2 e5@2 ~ g5@6 ~ d5@3 ~ f5@2 e5@2 d5@2 c5, ~@13 d5@2 ~@17", Z: "[a4,c5]@7 ~@9",
  AA: "[~ [a4,c5,d5,g5]@63]/2", AB: "~ c5@4 a4@3 ~@3 c5@2 a4@2 f#5@4 ~@2 e5@3 ~ d5@2 c5@2 a4@2 c5, ~@9 g5@4 ~@19",
  AC: "~ c5@4 a4@3 ~ g5@2 c5@2 a4@2 f#5@4 ~@2 e5@3 ~ d5@2 c5@2 a4@2 c5",
})).s("gm_acoustic_guitar_steel").gain(0.14)

// bass · synth bass 2 · "Arpeggiando"
const bass = note(`<
  A B@3 A C B C A C B C D E D E D E D E D F G H I J I K L M L N O@2 P@2 Q@2 R O S T U@2 V W X Y Z AA Z C D E D E D E D E
  D F AB H AC H I K L M L N O AD P AE Q@2 R O S AF AG@2 AH AG@8 ~
>`.pickRestart({
  A: "~ g1@2 d2@2 g2@2 d2 ~@3 d2@2 g2@2 d2 ~@3 d2@2 g2@2 d2 ~@3 d2@2 g2@2 d2, ~@9 g1@4 ~@4 g1@4 ~@4 g1@7",
  B: "~@3 d2@2 g2@2 d2 ~@3 d2@2 g2@2 d2 ~@3 d2@2 g2@2 d2 ~@3 d2@2 g2@2 d2, ~ g1@4 ~@4 g1@4 ~@4 g1@4 ~@4 g1@7",
  C: "~@3 f2@2 a#2@2 f2 ~@3 f2@2 a#2@2 f2 ~@3 c2@2 f2@2 c2 ~@3 c2@2 f2@2 c2, ~ a#1@4 ~@4 a#1@4 ~@4 f1@4 ~@4 f1@4 ~@3",
  D: "~ g2@2 d3@2 g3@2 d3 ~ g2@2 d3@2 g3@2 d3 ~@3 a2@2 d3@2 a2 ~@3 a2@2 d3@2 a2, ~@17 d2@4 ~@4 d2@4 ~@3",
  E: "~ a#1@2 f2@2 a#2@2 f2 ~@3 f2@2 a#2@2 f2 ~@3 f2@2 a#2@2 f2 ~ a#1@2 f2@2 a#2@2 f2, ~@9 a#1@4 ~@4 a#1@4 ~@11",
  F: "~ a#1@2 f2@2 a#2@2 f2 ~ a#1@2 f2@2 a#2@2 f2 ~@16",
  G: "~ a1@2 e2@2 a2@2 e2 ~ a1@2 e2@2 a2@2 e2 ~ e2@2 b2@2 e3@2 b2 ~@3 b2@2 e3@2 b2, ~@25 e2@4 ~@3",
  H: "~@3 g2@2 c3@2 g2 ~@3 g2@2 c3@2 g2 ~@3 g2@2 c3@2 g2 ~@3 g2@2 c3@2 g2, ~ c2@6 ~@2 c2@4 ~@4 c2@6 ~@2 c2@4 ~@3",
  I: "~ a1 ~ e2@2 a2@2 e2 ~ a1@2 e2@2 a2@2 e2 ~ e2@2 b2@2 e3@2 b2 ~@3 b2@2 e3@2 b2, ~@25 e2@4 ~@3",
  J: "~@3 g2@2 c3@2 g2 ~@3 g2@2 c3@2 g2 ~@3 g2@2 c3@2 g2 ~@3 g2@2 c3@2 g2, ~ c2@5 ~@3 c2@4 ~@4 c2@6 ~@2 c2@4 ~@3",
  K: "~@3 g2@2 c3@2 g2 ~@3 g2@2 c3@2 g2 ~@3 b2@2 a2@2 g2 ~@3 a2@2 f2@2 d2, ~ c2@6 ~@2 c2@4 ~@4 c3@6 ~@2 f2@4 ~@3",
  L: "~ d#2@2 a#2@2 d#3@2 a#2 ~ d#2@2 a#2@2 d#3@2 a#2 ~ d#2@2 a#2@2 d#3@2 a#2 ~ d#2@2 a#2@2 d#3@2 a#2",
  M: "~ f2@2 c3@2 f3@2 c3 ~ f2@2 c3@2 f3@2 c3 ~ f2@2 c3@2 [c3,f3]@2 c3 ~ f2@2 c3@2 f3@2 c3", // F5
  N: "~ c2@2 g2@2 c3@2 g2 ~ c2@2 g2@2 c3@2 g2 ~ a#1@2 f2@2 a#2@2 f2 ~ a#1@2 f2@2 a#2@2 f2",
  O: "~ g1@2 d2@2 g2@2 d2 ~ g1@2 d2@2 g2@2 d2 ~ g1@2 d2@2 g2@2 d2 ~ g1@2 d2@2 g2@2 d2",
  P: "~ d2@2 a2@2 d3@2 a2 ~ d2@2 a2@2 d3@2 a2 ~ d2@2 a2@2 d3@2 a2 ~ d2@2 a2@2 d3@2 a2",
  Q: "~ e2@2 b2@2 e3@2 b2 ~ e2@2 b2@2 e3@2 b2 ~ e2@2 b2@2 e3@2 b2 ~ e2@2 b2@2 e3@2 b2",
  R: "~ b1@2 f#2@2 b2@2 f#2 ~ b1@2 f#2@2 b2@2 f#2 ~ a1@2 e2@2 a2@2 e2 ~ a1@2 e2@2 a2@2 e2",
  S: "~ a1@2 e2@2 a2@2 e2 ~ a1@2 e2@2 a2@2 e2 ~ g1@2 d2@2 g2@2 d2 ~ g1@2 d2@2 g2@2 d2",
  T: "~ f1@2 c2@2 f2@2 c2 ~ f1@2 c2@2 f2@2 c2 ~ e1@2 b1@2 e2@2 b1 ~ e1@2 b1@2 e2@2 b1",
  U: "~ d1@2 a1@2 d2@2 a1 ~ d1@2 a1@2 d2@2 a1 ~ d1@2 a1@2 d2@2 a1 ~ d1@2 a1@2 d2@2 a1",
  V: "~@3 a#2@2 d#3@2 a#2 ~@3 a#2@2 d#3@2 a#2 ~@3 a#2@2 d#3@2 a#2 ~@3 a#2@2 d#3@2 a#2, ~ d#2@4 ~@4 d#2@6 ~@2 d#2@4 ~@4 d#2@4 ~@3",
  W: "~@3 c3@2 f3@2 c3 ~@3 c3@2 f3@2 c3 ~@3 c3@2 f3@2 c3 ~@3 c3@2 f3@2 c3, ~ f2@6 ~@2 f2@6 ~@2 f2@6 ~@2 f2@4 ~@3",
  X: "~@3 a#2@2 d#3@2 a#2 ~@3 a#2@2 d#3@2 a#2 ~@3 a#2@2 d#3@2 a#2 ~ d#2@2 a#2@2 d#3@2 a#2, ~ d#2@6 ~@2 d#2@4 ~@4 d#2@4 ~@11",
  Y: "~@3 g2@2 c3@2 g2 ~@3 g2@2 c3@2 g2 ~@3 f2@2 a#2@2 f2 ~ a#1@2 f2@2 a#2@2 f2, ~ c2@6 ~@2 c2@4 ~@4 a#1@4 ~@11",
  Z: "~@3 d2@2 g2@2 d2 ~@3 d2@2 g2@2 d2 ~@3 d2@2 g2@2 d2 ~@3 d2@2 g2@2 d2, ~ g1@4 ~@4 g1@4 ~@4 g1@4 ~@4 g1@4 ~@3",
  AA: "~@3 f2@2 a#2@2 f2 ~ a#1@2 f2@2 a#2@2 f2 ~@3 c2@2 f2@2 c2 ~@3 c2@2 f2@2 c2, ~ a#1@4 ~@12 f1@4 ~@4 f1@4 ~@3",
  AB: "~ a1@2 e2@2 a2@2 e2 ~ a1@2 e2@2 a2@2 e2 ~@3 b2@2 e3@2 b2 ~@3 b2@2 e3@2 b2, ~@17 e2@4 ~@4 e2@4 ~@3",
  AC: "~ a1 ~ e2@2 a2@2 e2 ~ a1@2 e2@2 a2@2 e2 ~@3 b2@2 e3@2 b2 ~@3 b2@2 e3@2 b2, ~@17 e2@4 ~@4 e2@4 ~@3",
  AD: "~ g1@2 d2@2 g2@2 d2 ~ g1@2 d2@2 ~ d2@2 ~ g1@2 d2@2 g2@2 d2 ~ g1@2 d2@2 g2@2 d2, ~@13 g2@2 ~@17",
  AE: "~ d2@2 a2@2 d3@2 a2 ~ d2@2 a2@2 d3@2 a2 ~ d2@2 a2@2 d3@2 a2 ~ d2@2 a2@2 ~ a2@2, ~@29 d3@2 ~",
  AF: "~ f1@2 c2@2 f2@2 c2 ~ f1@2 c2@2 f2@2 c2 ~@5 e2@2 b1 ~@3 b1@2 e2@2 b1, ~@17 e1@4 ~@4 e1@4 ~@3, ~@19 b1@4 ~@9",
  AG: "~@3 a2@2 d3@2 a2 ~@3 a2@2 d3@2 a2 ~@3 a2@2 d3@2 a2 ~@3 a2@2 d3@2 a2, ~ d2@4 ~@4 d2@4 ~@4 d2@4 ~@4 d2@4 ~@3",
  AH: "~ d2@2 a2@2 d3@2 a2 ~@3 a2@2 d3@2 a2 ~@3 a2@2 d3@2 a2 ~ d2@2 a2@2 d3@2 a2, ~@9 d2@4 ~@4 d2@4 ~@11",
})).s("gm_synth_bass_2").gain(0.17)

// chords · marimba
const marimba = note("<A B C@2 D E D E D E D E ~@70 F@2 G F@8 ~>".pickRestart({
  A: "~@5 [b4,d5]@4 ~@3 [b4,d5]@4 ~@5 d5@4 ~@4 d5@3, ~@5 b4 ~ b4", // Bm
  B: "~@4 [b4,d5]@4 ~@4 [b4,d5]@4 ~@4 [b4,d5]@5 ~@3 [b4,d5]@4", // Bm
  C: "[~@4 [b4,d5]@4 ~@4 [b4,d5]@4 ~@4 [b4,d5]@4 ~@5 b4@5 ~@3 [b4,d5]@5 ~@3 d5@5 ~@2 [b4,d5]@5 ~@3 [b4,d5]@4, ~@28 d5@5 ~@11 b4@5 ~@15]/2", // Bm
  D: "~@5 [b4,d5]@3 ~@5 [b4,d5]@3 ~@5 [b4,d5]@3 ~@5 [b4,d5]@3", // Bm
  E: "~@5 [c5,f5]@3 ~@5 [c5,f5]@3 ~@5 [a4,c5]@3 ~@5 [a4,c5]@3", // F5 Am
  F: "~@5 [d4,g4]@3 ~@5 [d4,g4]@3 ~@5 [d4,g4]@3 ~@5 [d4,g4]@3", // G5
  G: "~@5 [e4,g4]@3 ~@5 [e4,g4]@3 ~@5 [e4,g4]@3 ~@5 [e4,g4]@3", // Em
})).s("gm_marimba").gain(0.09)

// bass · synth bass 2 · "Bass (synth bass suggested)"
const bass_2 = note(`<
  ~@12 A B C D E@2 F G H@2 I J K L M N O P Q@2 R S T@2 U V W X Y Z AA@2 AB AC AD AE AF AG R AG A B C D E@2 F G H@2 I J K
  J M N O P Q@2 R S T@2 U V W X Y Z AH@11 ~
>`.pickRestart({
  A: "~ g2@16 d2@15", B: "a#1", C: "g2 d2", D: "~ a#1@31", E: "[g2@17 d2@16 a#1@30 ~]/2", F: "g2@17 d2@15",
  G: "~ a#1@30 ~", H: "[g2@17 d2@18 ~@14 a#2@2 c3@2 a#2@2 g2 ~@3 d2@2 g2@2 g#2, ~@57 f2@4 ~@3]/2",
  I: "~ a2@4 c3@3 ~@5 d2@2 d#2 ~ e2@4 g2@3 ~@5 a1@2 ~", J: "~ c2@28 g2@2 g#2",
  K: "~ a2@3 ~ c3@3 ~@5 [c2,d2]@2 d#2 ~ e2@4 g2@3 ~@5 a1@3", L: "~ c2@27 ~ g2@2 g#2",
  M: "~ a2@3 ~ c3@2 ~@6 d2@2 d#2 ~ e2@4 g2@8 a1@3", N: "~@17 c3@2 b2@2 a2@2 g2 ~ f2@2 a2@2 f2@2 d2, ~ c2@28 ~@3",
  O: "~ d#2@6 ~@2 d#2@6 a#1 ~ d#2@6 a#1 ~ d#2@6 a#1, ~@7 a#1@4 ~@21", P: "~ f2@6 c2 ~ f2@6 c2 ~ f2@6 c2 ~ f2@6 c2",
  Q: "[~ d#2@6 a#1 ~ d#2@6 a#1 ~ d#2@6 a#1 ~ d#2@6 ~@2 c2@6 g1 ~ c2@6 g1 ~ a#1@6 f1 ~ a#1@6 f1, ~@31 a#1@4 ~@29]/2",
  R: "~ g1@6 ~@2 g1@6 ~@2 g1@6 ~@2 g1@6 ~", S: "~ g1@6 ~@2 g1@6 ~@2 g1@6 ~@2 g1@7",
  T: "~ d2@4 d3@3 ~ d2@4 d3@3 ~ d2@4 d3@3 ~ d2@4 d3@3", U: "~ e2@4 e3@3 ~ e2@4 e3@3 ~ e2@4 e3@3 ~ e2@4 e3@3",
  V: "~ e2@4 e3@3 ~ e2@4 ~@4 e2@4 e3@3 ~ e2@4 e3@3, ~@13 e3@8 ~@11",
  W: "~ b1@4 b2@3 ~ b1@4 b2@3 ~ a1@4 a2@3 ~ a1@4 a2@3", X: "~ g1@4 g2@3 ~ g1@4 g2@3 ~ g1@4 g2@3 ~ g1@4 g2@3",
  Y: "~ a1@4 a2@3 ~ a1@4 a2@3 ~ g1@4 g2@3 ~ g1@4 g2@3", Z: "~ f1@4 f2@3 ~ f1@4 f2@3 ~ e1@4 e2@3 ~ e1@4 e2@3",
  AA: "~ d1@4 d2@3 ~ d1@4 d2@3 ~ d1@4 d2@3 ~ d1@4 d2@3",
  AB: "~ d#2@5 ~@3 d#2@6 a#1 ~ d#2@6 a#1 ~ d#2@5 ~ a#1, ~@7 a#1@4 ~@21",
  AC: "~ f2@5 ~ c2 ~ f2@6 ~@2 f2@6 c2 ~ f2@6 c2, ~@15 c2@4 ~@13",
  AD: "~ d#2@5 ~ a#1 ~ d#2@6 a#1 ~ d#2@6 a#1 ~ d#2@5 ~ a#1", AE: "~ c2@4 g1@3 ~ c2@6 g1 ~ a#1@5 ~ f1 ~ a#1@4 f1@2 ~",
  AF: "~ g1@5 ~@3 g1@6 ~@2 g1@6 ~@2 g1@6 ~", AG: "~ a#1@6 ~@2 a#1@6 ~@2 f1@6 ~@2 f1@6 ~",
  AH: "~ d2@7 ~ d2@7 ~ d2@7 ~ d2@7",
})).s("gm_synth_bass_2").gain(0.4)

// drums · kick
const kick = s("bd").struct("<[x ~@8 x ~@7 x ~@7 x ~@6] [~ x ~@7 x ~@7 x ~@7 x ~@6]!92 ~>").gain(0.29)

// drums · snare
const snare = s("sd").struct(`<
  ~@12 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 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 ~@10 C ~
>`.pickRestart({
  A: "~@5 x ~@23 x ~@2", B: "~@23 x ~ x ~ x ~@4", C: "~@21 x ~@3 x ~ x ~ x ~ x",
})).gain(0.29)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 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 A B A B A B A B A B A B A B A B A
  B A B A B A C A B A B A B ~@11 D
>`.pickRestart({
  A: "~@8 x ~@2 x ~@13 x ~@6", B: "~@3 x ~@5 x ~@6 x ~@14 x", C: "~@3 x ~@5 x ~@6 x ~@13 x ~", D: "x",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@12 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 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 ~@10 C ~
>`.pickRestart({
  A: "~@5 x ~@15 x ~@10", B: "~@13 x ~@18", C: "~@31 x",
})).gain(0.32)

stack(acoustic_guitar_steel, bass, marimba, bass_2, kick, snare, hihat, open_hat)

More by Rush