Strudelify

Circumstances

Rush

KeyD majorTempo155 bpm
0:00/0:00
// Circumstances — Rush
// 155 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 4, 2/4 at bar 5, 7/8 at bar 5, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(155/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.

// chords · distortion guitar · "Guitar"
const distortion_guitar = note(`<
  ~@2 A B@2 ~@3 C D E F G H E F G H F I J K L M N@2 ~@3 O P@3 O Q@2 ~ R S@8 T@7 U@3 ~@2 V W X@2 V Y@2 ~ Z AA@2
>`.pickRestart({
  A: "~@5 [b3,d4,g4]!3", B: "[[a3,d4,f#4]@3 [b3,d4,g4]!3 [a3,d4,f#4]@5 ~@5]/2",
  C: "[b3,d4,g4]!3 [a3,d4,f#4]@3 [b3,d4,g4]!2", D: "[b3,d4,g4] [a3,d4,f#4]@7", E: "[d#3,f#3,b3]", F: "[b3,d4,g4]",
  G: "[f#3,a3,d4]@3 [e3,a3,c#4]@2 [f#3,a3,d4]@3", H: "[a#3,c#4,f#4]", I: "[b3,d#4,f#4]", J: "[c4,e4,g4]",
  K: "[a3,c#4,e4]", L: "[f#3,a3,d4]", M: "[f#3,a3,d#4]", N: "[[g#3,b3,e4]@6 [e3,g3,c4] [d3,g3,b3]]/2",
  O: "~@6 [b3,d4,g4]!2", // G
  P: "[[b3,d4,g4] [a3,d4,f#4]@4 [e3,g3,c4]@2 [e3,g3,c4]@2 [e3,g3,c4] [e3,g3,c4]@2 [g3,b3,d4]@6 ~@6]/3", // G D C G
  Q: "[[b3,d4,g4] [a3,d4,f#4]@4 [e3,g3,c4]@5 b3 a3 g3 ~@3]/2", R: "~ [b3,d4,g4]!3 [a3,d4,f#4]@3 [b3,d4,g4]",
  S: "[[b3,d4,g4]!2 [a3,d4,f#4]@7 [d#3,f#3,b3]@8 [b3,d4,g4]@8 [f#3,a3,d4]@3 [e3,a3,c#4]@2 [f#3,a3,d4]@3 [a#3,c#4,f#4]@8 [d#3,f#3,b3]@8 [b3,d4,g4]@8 [f#3,a3,d4]@3 [e3,a3,c#4]@2 [f#3,a3,d4]@2]/8", // G D B G D A D F# …
  T: "[~ [a#3,c#4,f#4]@8 [b3,d4,g4]@8 [b3,d#4,f#4]@8 [c4,e4,g4]@8 [a3,c#4,e4]@8 [f#3,a3,d4]@8 [f#3,a3,d#4]@7]/7", // F# G B C A D D#dim
  U: "[~ [g#3,b3,e4]@12 [e3,g3,c4]@2 [d3,g3,b3]@2 ~@7]/3", V: "~@7 [b3,d4,g4]",
  W: "[b3,d4,g4]!2 [a3,d4,f#4]@4 [e3,g3,c4]@2", X: "[[e3,g3,c4]@2 [e3,g3,c4] [e3,g3,c4]@2 [g3,b3,d4]@6 ~@5]/2",
  Y: "[[b3,d4,g4]!2 [a3,d4,f#4]@4 [e3,g3,c4]@5 b3 a3 g3 ~@2]/2", Z: "~@2 [b3,d4,g4]!3 [a3,d4,f#4]@3",
  AA: "[[b3,d4,g4]!3 [a3,d4,f#4]@7 ~@6]/2", // G D
})).s("gm_distortion_guitar").gain(0.4).pan(0.2)

// chords · distortion guitar · "Guitar Bass"
const distortion_guitar_2 = note(`<
  A B@2 ~ C D E@2 ~@18 F G H I ~@2 J I ~ A K@2 ~@17 L M N@2 ~@2 O@2 ~ C D P ~@2
>`.pickRestart({
  A: "~@5 [c3,e3,a3]@2 ~", B: "[~@2 [c3,e3,a3]@2 ~ [d3,f#3,b3]@2 [c3,e3,a3]@2 ~@7]/2", C: "~@3 [c3,e3,a3]",
  D: "~ [c3,e3,a3]@3 ~@2 [d3,f#3,b3]@2", E: "[c3,e3,a3]@2 ~ [c3,e3,a3]@3 ~@2", F: "a2 a3 d3 e3 g3 f#3 d3 c3",
  G: "g3 e3 c3 d3 b2 g2 f2 c3", H: "b2 g2 a2 ~@2 [c3,e3,a3]@3", I: "~ [d3,f#3,b3] [c3,e3,a3] ~",
  J: "~@2 [c3,e3,a3]@2 ~ [c3,e3,a3]@3", K: "[[c3,e3,a3]@3 ~@2 [d3,f#3,b3]@2 [c3,e3,a3]@2 ~@7]/2",
  L: "~ a2 a3 d3 e3 g3 f#3 d3", M: "c3 g3 e3 c3 d3 b2 g2 f2",
  N: "[c3 b2 g2 a2 ~@2 [c3,e3,a3]@3 ~@2 [d3,f#3,b3]@2 [c3,e3,a3]@2 ~]/2", // Am Bm Am
  O: "[~@3 [c3,e3,a3]@2 ~ [c3,e3,a3]@3 ~@2 [d3,f#3,b3]@2 [c3,e3,a3]@2 ~]/2", P: "[c3,e3,a3] ~@3",
})).s("gm_distortion_guitar").gain(0.4).pan(0.2)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A B@2 C@2 D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC@2 AD AB AE AF AG@2 AH@2 AI AJ AK AL AM AJ AN@2 AO AP
  AQ AR AS AT AU@2 AV AW@2 AX AY AZ@2 AX BA BB BC BD@2
>`.pickRestart({
  A: "~@2 c2 b1 g1 [a1,c3,e3,a3]@2 ~", // Am
  B: "[~@2 c2 b1 g1 [b1,d3,f#3,b3]@2 [a1,c3,e3,a3]@2 ~@4 g1 b1 c2, ~ [c3,e3,a3] ~@6]/2", // Bm Am
  C: "[d2@3 g1 b1 c2 d2@5 c2 b1 g1 a1@2]/2", D: "~ a1@2 c2 b1 g1 b1@2", E: "a1!2 g1 a1@2 c2 b1 g1",
  F: "a1@2 ~ a1@2 c2 b1 a1", G: "g1 b1 c2 d2@3 g2 f#2", H: "e2 d2@7", I: "b1@4 a1@2 b1@4 a1@2 b1@2 c#2 d2",
  J: "g2 g2@2 f#2 a2 g2 f#2 e2", K: "d2 a1 d2 c#2@2 d2@2 d2", L: "f#1@2 f#1@4 f#1@4 f#1@4 d2 c#2",
  M: "b1@2 b1@2 a1@2 b1@4 a1@2 b1@2 c#2 d2", N: "g2@2 f#2 g2 a2@2 g2 a2 b2@2 a2@2 g2 f#2 e2@2",
  O: "d2@2 a1@2 d2@2 c#2@4 d2@4 e2 f2", P: "f#2 f#1!2 e1 f#1@4", Q: "g1@2 f#1 g1@2 f#1 g1@2 e1@2 g1@2 d2@2 c#2@2",
  R: "b1@2 a1 b1@2 a1 b1@2 f#2!2 b2@2 f#2!2 b1@2", S: "c2@2 b1 c2@2 b1 c2@2 g1@2 a1@2 b1@2 c2@2",
  T: "a1@2 g1 a1@2 b1 c#2 d2 e2 f#2 g2 a2 g2 e2 a2 e2", U: "d2@2 a1 d2@2 a1 d2@3 a1 d2@2 d3 e3 d3@2",
  V: "d#2@2 a1 d#2@2 a1 d#2@3 a1 d#2@2 d#3@2 a2@2", W: "e2@2 b1 e2@2 b1 e2@4 b2@2 e3@2 b2@2", X: "e2@2 c2 g1",
  Y: "[a1,a2] [a2,a3] [d2,d3] [e2,e3] [g2,g3] [f#2,f#3] [d2,d3] [c2,c3]", // A D E G F# D C
  Z: "[g2,g3] [e2,e3] [c2,c3] [d2,d3] [b1,b2] [g1,g2] [f1,f2] [c2,c3]", // G E C D B G F C
  AA: "[b1,b2] [g1,g2] [a1,a2] ~@2 a1@2 c2, ~@5 [c3,e3,a3]@3", AB: "b1 g1 [b1,d3,f#3,b3]@2 [a1,c3,e3,a3]@2 g1 b1",
  AC: "[c2@2 d2@4 e2@2 d2@2 c2@4 c2@4 c2@2 c2@2 d2 e2 g2@6 c2@2]/2",
  AD: "b1 g1 [a1,c3,e3,a3]@2 ~ a1@2 c2, ~@5 [c3,e3,a3]@3", AE: "c2 d2@2 e2 d2 c2@2 c2",
  AF: "c2!2 b1 a1 g1 [a1,c3,e3,a3]@2 ~", // Am
  AG: "[a1@2 c2 b1 g1 [b1,d3,f#3,b3]@2 [a1,c3,e3,a3]@2 g1 b1 c2 d2@3 g2, [c3,e3,a3]@3 ~@13]/2", // Bm Am
  AH: "[f#2 e2 d2@7 b1@2 a1 b1@2 a1 b1]/2", AI: "c#2 d2 g2@2 g2@4 f#2@2 a2@2 g2@2 f#2@2", AJ: "e2 d2 a1 d2 c#2@2 d2@2",
  AK: "d2 f#1 f#1@2 f#1@2 f#1@2", AL: "d2 c#2 b1@2 b1@2 a1@2 b1@4 a1@2 b1@2",
  AM: "c#2 d2 g2@2 f#2 g2 a2@2 g2 a2 b2@2 a2@2 g2 f#2",
  AN: "[e2 f2 f#2@2 f#1@2 f#1@2 e1@2 f#1@8 g1@2 f#1 g1@2 f#1 g1@2 e1@2 g1@2 d2@2]/2",
  AO: "c#2@2 b1@2 a1 b1@2 a1 b1@2 f#2!2 b2@2 f#2!2", AP: "b1@2 c2@2 b1 c2@2 b1 c2@2 g1@2 a1@2 b1@2",
  AQ: "c2@2 a1@2 g1 a1@2 b1 c#2 d2 e2 f#2 g2 a2 g2 e2", AR: "a2 e2 d2@2 a1 d2@2 a1 d2@3 a1 d2@2 d3 e3",
  AS: "d3@2 d#2@2 a1 d#2@2 a1 d#2@3 a1 d#2@2 d#3@2", AT: "a2@2 e2@2 b1 e2@2 b1 e2@4 b2@2 e3@2",
  AU: "[b2 e2@4 c2@2 g1@2 [a1,a2] [a2,a3] [d2,d3] [e2,e3] [g2,g3] [f#2,f#3] [d2,d3]]/2", // A D E G F# D
  AV: "[c2,c3] [g2,g3] [e2,e3] [c2,c3] [d2,d3] [b1,b2] [g1,g2] [f1,f2]", // C G E C D B G F
  AW: "[[c2,c3] [b1,b2] [g1,g2] [a1,a2] ~@2 a1@2 c2 b1 g1 [b1,d3,f#3,b3]@2 [a1,c3,e3,a3]@2 g1, ~@6 [c3,e3,a3]@3 ~@7]/2", // C B G A Bm Am
  AX: "b1 c2 d2@2 e2 d2 c2@2", AY: "c2@4 c2@2 c2@2 d2 e2 g2@6",
  AZ: "[c2 b1 g1 [a1,c3,e3,a3]@2 ~ a1@2 c2 b1 g1 [b1,d3,f#3,b3]@2 [a1,c3,e3,a3]@2 g1, ~@6 [c3,e3,a3]@3 ~@7]/2", // Am Bm Am
  BA: "c2!3 b1 a1 g1 [a1,c3,e3,a3]@2", BB: "~ a1@2 c2 b1 g1 [b1,d3,f#3,b3]@2, ~ [c3,e3,a3]@3 ~@4",
  BC: "[a1,c3,e3,a3]@2 g1 b1 c2 d2@3", BD: "[g2 f#2 e2 d2@7 ~@6]/2",
})).s("gm_electric_bass_finger").gain(0.8).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@10 A@15 ~ B C D ~@10 E@15 ~ F B G ~@11>".pickRestart({
  A: "x!2 ~@2 x ~@3", B: "x ~@2 x ~@3 x", C: "~ x ~ x", D: "~ x ~@3 x ~@2", E: "~ x!2 ~@2 x ~@2", F: "~ x ~@2 x ~@3",
  G: "~ x ~@2",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B C@2 D ~ E@13 F E ~ G H I@5 J K L M ~@2 M@13 N@2 ~ O G P Q@3 R S T ~ U V ~@2
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@6", C: "~@7 x", D: "x!7 ~@9", E: "~ x ~ x", F: "~@4 x!2 ~@6 x ~@3", G: "~@2 x ~@2 x ~@2",
  H: "~ x ~@2 x ~@3", I: "x!2", J: "x ~@8 x!3 ~@4", K: "x ~@3 x ~@2 x", L: "x ~ x ~ x!6 ~@4 x ~", M: "~@3 x ~@3 x",
  N: "~@6 x!2 ~@6 x ~", O: "~@3 x ~@2 x ~", P: "~@2 x ~@3 x ~ x ~ x!4 ~@2", Q: "~ x ~@3 x ~@2", R: "~@2 x!4 ~@4 x ~@5",
  S: "~@2 x ~@11 x!2", T: "x!4 ~@6 x ~@5", U: "x ~@7 x!4 ~@4", V: "x ~@3 x!6 ~@6",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@2 A B ~@2 C D ~@29 E F ~@12 G ~@12 H ~@2 I ~>".pickRestart({
  A: "~@5 x!2 ~", B: "~@3 x!2 ~@3", C: "~@5 x!3", D: "x ~@2 x ~ x!3", E: "~@12 x!2 ~@2", F: "~@2 x!2 ~@12",
  G: "x!2 ~@14", H: "~@8 x!4 ~@4", I: "~@4 x!2 ~@10",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@10 A@15 ~ A@2 B A@4 C D E F ~@2 G A@14 H G A I A@3 J K L M D H ~@2>".pickRestart({
  A: "x!8", B: "x!4 ~ x!3", C: "x!2 ~@4 x!2", D: "x!7 ~", E: "~@5 x!3", F: "x!6 ~ x", G: "~ x!7", H: "x",
  I: "x!3 ~@4 x", J: "x ~@2 x!5", K: "x!3 ~@5", L: "~@3 x!4 ~", M: "~@6 x!2",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 A B ~ C A D ~ E ~@11 F ~@3 G ~@11 H I ~@11 J ~@13 K ~@2 L ~>".pickRestart({
  A: "~@5 x!3", B: "x ~@2 x!4 ~", C: "~@5 x ~@2", D: "x ~@2 x ~ x!3", E: "x!3 ~@13", F: "~@8 x!5 ~@3", G: "~@2 x!2",
  H: "~@8 x!4 ~@4", I: "x!2 ~@14", J: "~@14 x!2", K: "~@4 x!4 ~@8", L: "~@2 x!2 ~@12",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@36 [~@3 x] x ~@27 [~@7 x] [~ x ~@6] ~@2>").gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@2 A B ~ C D E F ~@12 G ~@3 H ~@11 I ~@12 D ~@12 J K ~@2 L ~>".pickRestart({
  A: "~@7 x", B: "x ~@4 x!2 ~", C: "~@3 x!2 ~@3", D: "~@5 x!2 ~", E: "x ~@2 x ~ x!2 ~", F: "~@12 x!4",
  G: "~@4 x!4 ~@5 x ~@2", H: "~@2 x!2", I: "~@2 x ~ x ~ x!2 ~@6 x!2", J: "~@14 x!2", K: "x!4 ~@12", L: "x!2 ~@14",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  A B C D ~ E F ~ G H I ~@10 J ~@3 K L M A N B O P Q ~ A I ~ R S ~@10 T S ~@2 U V L W X Y Z N AA R E AB A N ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~ x", C: "~@5 x!2 ~", D: "x ~@2 x!2 ~ x ~", E: "~@3 x", F: "x ~@2 x ~@4", G: "x!4 ~@2 x!2",
  H: "x!2 ~@6", I: "x", J: "~@7 x", K: "x ~ x!2", L: "~ x ~@2 x ~@3", M: "x ~@2 x ~@3 x", N: "~@3 x ~@4", O: "x!3 ~@5",
  P: "x!3 ~@2 x ~@2", Q: "~ x!3", R: "~ x ~@2", S: "~ x ~@6", T: "~@13 x ~@2", U: "~ x ~@3 x ~ x", V: "~@2 x ~@2 x ~@2",
  W: "x ~@6 x", X: "~@4 x ~@2 x", Y: "x!3 ~@3 x ~", Z: "x!4 ~@4", AA: "~@3 x ~ x ~@2", AB: "~ x ~@4 x ~",
})).gain(0.8)

// drums · ride bell
const ride_bell = s("rd").struct("<A B C A ~ D E ~@18 F ~@5 G ~@28 A ~@3 D H ~@3>".pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~ x", C: "~@7 x", D: "~@3 x", E: "x ~@2 x ~@4", F: "x", G: "~ x", H: "~ x ~@6",
})).gain(0.8)

stack(
  distortion_guitar, distortion_guitar_2, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  ride_bell
)

More by Rush