Strudelify
Losing It cover art

Signals

Losing It

Rush

KeyG♭ majorTempo125 bpm
0:00/0:00
// Losing It — Rush
// 125 bpm, 5/8, key Gb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (5/8 at bar 1, 4/4 at bar 33, 5/8 at bar 40, 4/4 at bar 74, ...) are rendered on a constant 5/8 grid of one bar per cycle
// note: Full arrangement: all 147 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(125/2.5)

// 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(`<
  ~@29 A@3 B@7 C@2 ~@29 D@3 E@7 F G H@2 I@4 J@4 K@2 L@6 M@8 N@8 O@8 N@8 O@8 P@5 ~@2
>`.pickRestart({
  A: "[~@10 [b3,eb4,gb4]@9 [b3,eb4,gb4]@3 ~@4 [b3,eb4,gb4]@9 [b3,eb4,gb4]@3 ~@4 [b3,eb4,gb4]@6]/3", // B
  B: "[~@3 [b3,eb4,gb4]@3 ~@4 [ab3,db4,eb4,f4]@76 [db4,gb4,bb4]@26]/7", C: "[gb3,bb3,eb4]@10 [gb3,bb3,eb4]@3 ~@3",
  D: "[b3,eb4,gb4]@10 [b3,eb4,gb4]@3 ~@3", E: "[[ab3,db4,eb4,f4]@77 [db4,gb4,bb4]@25 [gb3,bb3,eb4]@10]/7",
  F: "[gb3,bb3,eb4]@3 ~@3 [gb3,bb3,eb4]@10", G: "[gb3,bb3,eb4]@3 ~@3 eb3@3 ~ gb3@3 bb3@3",
  H: "[ab3@3 db4@3 [f3,g3,bb3,eb4]@26]/2", I: "[[eb3,f3,ab3,db4]@26 [eb3,f3,ab3,c4]@28 c4@3 ~ db4@3 eb4@3]/4",
  J: "[[eb3,f3,ab3,db4]@13 [f3,g3,bb3,eb4]@25 [eb3,f3,ab3,db4]@26]/4", K: "[[eb3,f3,ab3,c4]@29 c4@3]/2",
  L: "[db4@3 eb4@3 ab3@3 ~ [eb3,f3,ab3,db4]@9 [f3,g3,bb3,eb4]@26 [eb3,f3,ab3,db4]@25 [eb3,f3,ab3,c4]@26]/6", // Db Eb Db Fm7
  M: "[~@3 c4@3 db4@3 ~ eb4@3 [eb3,f3,ab3,db4]@13 [a3,c4,e4,f4]@25 [g3,b3,d4,f4]@26 [a3,c4,e4,f4]@25 [g3,b3,d4,f4]@26]/8", // Db Fmaj7 G7 Fmaj7 G7
  N: "[[b3,db4,eb4,gb4]@26 [ab3,b3,db4,eb4,f4]@25 [b3,db4,eb4,gb4]@26 [ab3,b3,db4,eb4,f4]@25 [b3,db4,eb4,gb4]@26]/8", // B Db7 B Db7 B
  O: "[[ab3,b3,db4,eb4,f4]@26 [b3,db4,eb4,gb4]@25 [ab3,b3,db4,eb4,f4]@26 [b3,db4,eb4,gb4]@25 [ab3,b3,db4,eb4,f4]@26]/8", // Db7 B Db7 B Db7
  P: "[[b3,db4,eb4,gb4]@26 [ab3,b3,db4,eb4,f4]@25 [b3,db4,eb4,gb4]@26 ~@3]/5", // B Db7 B
})).s("gm_distortion_guitar").gain(0.22).pan(0.3)

// chords · string ensemble 1 · "Violin"
const string_ensemble_1 = note("<~@10 A@6 B@8 C@6 D@2 E ~@8 F@4 G@2 H@4 F@4 G@2 H@4 F@4 G@2 I@3 J@3 ~@74>".pickRestart({
  A: "[~@10 eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 f3@3 eb3@3 ~ db3@3 gb3@3 bb3@3 eb3@3 ab3@3 ~ db3@3 gb3@3, ~@5 eb2@32 gb2@11]/6",
  B: "[bb3@3 eb3@3 ab3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 ab3@3 f3@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3, ~@5 b1@32 eb2@27]/8",
  C: "[bb3@3 f3@3 eb3@3 ~ db3@3 gb3@3 bb3@3 eb3@3 ab3@3 ~ db3@3 gb3@3 bb3@3 eb3@3 ab3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ [b1,b2]@3 eb3@3, ~@5 gb2@16 b1@24 ~@3]/6", // B
  D: "gb3@3 db3@3 f3@3 ~ [b1,b2]@3 eb3@3", E: "gb3@3 db3@3 f3@3 ~@7",
  F: "[eb3@3 gb3@3 bb3@3 ~ ab3@3 db4@3 eb3@3 gb3@3 bb3@3 ~ ab3@3 db4@3 eb3@3 gb3@3 bb3@3 ~ ab3@3 db4@3 eb3@3 gb3@3 bb3@3 ~ f3@3 eb3@3, eb2]/4",
  G: "[db3@3 gb3@3 bb3@3 ~ eb3@3 ab3@3 db3@3 gb3@3 bb3@3 ~ eb3@3 ab3@3, gb2]/2",
  H: "[b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ ab3@3 f3@3, b1]/4",
  I: "[b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ db3@3 f3@3, b1]/3",
  J: "[b1,b2]@3 eb3@3 gb3@3 ~ db3@3 f3@3", // B
})).s("gm_string_ensemble_1").gain(0.29).pan(0.7)

// chords · pad poly · "Synth"
const pad_poly = note("<~@32 A@7 ~@34 B@7 ~ C D@2 E@4 F@4 G@2 H@6 I@8 J@8 K@8 J@8 K@8 L@7>".pickRestart({
  A: "[~@5 [ab3,db4,eb4,f4]@38 [db4,gb4,bb4]@13]/7", B: "[[ab3,db4,eb4,f4]@77 [db4,gb4,bb4]@26 ~@9]/7",
  C: "~@6 eb3@3 ~ gb3@3 bb3@3", D: "[ab3@3 db4@3 [f3,g3,bb3,eb4]@26]/2",
  E: "[[eb3,f3,ab3,db4]@26 [eb3,f3,ab3,c4]@28 c4@3 ~ db4@3 eb4@3]/4", // Db Fm7
  F: "[[eb3,f3,ab3,db4]@13 [f3,g3,bb3,eb4]@25 [eb3,f3,ab3,db4]@26]/4", G: "[[eb3,f3,ab3,c4]@29 c4@3]/2",
  H: "[db4@3 eb4@3 ab3@3 ~ [eb3,f3,ab3,db4]@9 [f3,g3,bb3,eb4]@26 [eb3,f3,ab3,db4]@25 [eb3,f3,ab3,c4]@26]/6", // Db Eb Db Fm7
  I: "[~@3 c4@3 db4@3 ~ eb4@3 [eb3,f3,ab3,db4]@13 [a3,c4,e4,f4]@25 [g3,b3,d4,f4]@26 [a3,c4,e4,f4]@25 [g3,b3,d4,f4]@26]/8", // Db Fmaj7 G7 Fmaj7 G7
  J: "[[b3,db4,eb4,gb4]@26 [ab3,b3,db4,eb4,f4]@25 [b3,db4,eb4,gb4]@26 [ab3,b3,db4,eb4,f4]@25 [b3,db4,eb4,gb4]@26]/8", // B Db7 B Db7 B
  K: "[[ab3,b3,db4,eb4,f4]@26 [b3,db4,eb4,gb4]@25 [ab3,b3,db4,eb4,f4]@26 [b3,db4,eb4,gb4]@25 [ab3,b3,db4,eb4,f4]@26]/8", // Db7 B Db7 B Db7
  L: "[[b3,db4,eb4,gb4]@26 [ab3,b3,db4,eb4,f4]@25 [b3,db4,eb4,gb4]@26 [ab3,b3,db4,eb4,f4]@26 ~@9]/7", // B Db7 B Db7
})).s("gm_pad_poly").gain(0.22).pan(0)

// chords · lead 8 bass lead · "Synth Bass"
const lead_8_bass_lead = note(`<
  A@6 B@8 C@6 D@6 E@4 F@2 G@7 ~@2 H@4 I@2 J@4 H@4 I@2 J@4 H@4 I@2 K@3 L@3 M@6 N ~ O P ~@64
>`.pickRestart({
  A: "[~@10 eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 f3@3 eb3@3 ~ db3@3 gb3@3 bb3@3 eb3@3 ab3@3 ~ db3@3 gb3@3, ~@5 eb2@32 gb2@11]/6",
  B: "[bb3@3 eb3@3 ab3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 ab3@3 f3@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3, ~@5 b1@32 eb2@27]/8",
  C: "[bb3@3 f3@3 eb3@3 ~ db3@3 gb3@3 bb3@3 eb3@3 ab3@3 ~ db3@3 gb3@3 bb3@3 eb3@3 ab3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3, ~@5 gb2@16 b1@27]/6",
  D: "[gb3@3 ab3@3 f3@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 ab3@3 db4@3 ~ eb3@3 gb3@3 bb3@3 f3@3 eb3@3 ~ db3@3 gb3@3 bb3@3 eb3@3 ab3@3 ~ db3@3 gb3@3, ~@5 eb2@32 gb2@11]/6",
  E: "[bb3@3 eb3@3 ab3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ b2@3 eb3@3 gb3@3 db3@3 f3@3 ~ [b1,b2]@3 eb3@3, ~@5 b1@24 ~@3]/4", // B
  F: "gb3@3 db3@3 f3@3 ~ [b1,b2]@3 eb3@3", // B
  G: "[gb3@3 db3@3 f3@3 ~ db3@6 db3@6 db3@6 ~ db3@6 db3@6 ~ db3@6 db3@6 db3@6 ~ db3@6 db3@6 ~ db3@6 db3@6 gb2@6 ~ gb2@6 gb2@6 ~ gb2@6, ~@10 db2@77 ~@25]/7",
  H: "[eb3@3 gb3@3 bb3@3 ~ ab3@3 db4@3 eb3@3 gb3@3 bb3@3 ~ ab3@3 db4@3 eb3@3 gb3@3 bb3@3 ~ ab3@3 db4@3 eb3@3 gb3@3 bb3@3 ~ f3@3 eb3@3, eb2]/4",
  I: "[db3@3 gb3@3 bb3@3 ~ eb3@3 ab3@3 db3@3 gb3@3 bb3@3 ~ eb3@3 ab3@3, gb2]/2",
  J: "[b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ ab3@3 f3@3, b1]/4",
  K: "[b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ db3@3 f3@3, b1]/3",
  L: "[b1,b2]@3 eb3@3 gb3@3 ~ db3@3 f3@3", // B
  M: "[db3@6 db3@6 ~ db3@6 db3@6 ~ db3@6 db3@6 db3@6 ~ db3@6 db3@6 ~ db3@6 db3@6 db3@6 ~ gb2@6 gb2@6 ~ gb2@6, db2@77 ~@19]/6",
  N: "gb2@3 ~@5", O: "~@6 eb2@3 ~ gb2@3 bb2@3", P: "ab2@3 db3@3 ~@10",
})).s("gm_lead_8_bass_lead").gain(0.17).pan(1)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@29 A@3 B@7 C@2 ~@29 D@3 E@6 F G H I@2 J@3 K L@4 M@4 N@4 O@3 P Q@4 R@8 S@4 T@4 U@8 V@8 W@7
>`.pickRestart({
  A: "[~@10 b1@9 b1@3 ~@4 b1@9 b1@3 ~@4 b1@6]/3",
  B: "[~@3 b1@3 ~@4 db3@6 db3@6 db3@6 ~ db3@6 db3@6 ~ db3@6 db3@6 db3@6 ~ db3@6 db3@6 ~ db3@6 db3@6 gb2@6 ~ gb2@6 gb2@6 ~ gb2@6, ~@10 db2@77 ~@25]/7",
  C: "eb2@10 eb2@3 ~@3", D: "b1@10 b1@3 ~@3",
  E: "[db3@6 db3@6 ~ db3@6 db3@6 ~ db3@6 db3@6 db3@6 ~ db3@6 db3@6 ~ db3@6 db3@6 db3@6 ~ gb2@6 gb2@6 ~ gb2@6, db2@77 ~@19]/6",
  F: "gb2@3 eb2@5", G: "eb2@3 ~@3 eb2@10", H: "eb2@3 ~@3 eb2@3 ~ gb2@3 bb2@3", I: "[ab2@3 db3@3 eb2@13 eb2@10 eb2@3]/2",
  J: "[db2@13 db2@9 db2@3 ~ c2@12 c2@10]/3", K: "c2@3 c2@13", L: "[db2@13 eb2@13 eb2@9 eb2@3 db2@13 db2@10 db2@3]/4",
  M: "[ab1@13 ab1@9 ab1@3 ~ ab1@16 db2@9 eb2@13]/4", N: "[eb2@10 eb2@3 db2@13 db2@9 db2@3 ab1@13 ab1@10 ab1@3]/4",
  O: "[ab1@13 ab1@9 ab1@3 ~ c2@12 c2@10]/3", P: "c2@3 d2@13", Q: "[d2@10 d2@3 c2@13 c2@9 c2@3 g1@13 g1@10 g1@3]/4",
  R: "[b1@26 db2@25 b1@26 db2@13 ab1@12 b1@26]/8", S: "[db2@26 b1@25 db2@13]/4", T: "[ab1@13 b1@25 db2@26]/4",
  U: "[b1@26 db2@12 ab1@13 b1@26 db2@25 b1@26]/8", V: "[db2@13 ab1@13 b1@25 db2@26 b1@25 db2@13 ab1@13]/8",
  W: "[b1@26 db2@25 b1@26 db2@13 ab1@13 ~@9]/7",
})).s("gm_electric_bass_finger").gain(0.4).pan(0.7)

// chords · tinkle bell · "Bells"
const tinkle_bell = note("<~@41 A@4 B@2 C@4 ~@96>".pickRestart({
  A: "[eb3@3 gb3@3 bb3@3 ~ ab3@3 db4@3 eb3@3 gb3@3 bb3@3 ~ ab3@3 db4@3 eb3@3 gb3@3 bb3@3 ~ ab3@3 db4@3 eb3@3 gb3@3 bb3@3 ~ f3@3 eb3@3, eb2]/4",
  B: "[db3@3 gb3@3 bb3@3 ~ eb3@3 ab3@3 db3@3 gb3@3 bb3@3 ~ eb3@3 ab3@3, gb2]/2",
  C: "[b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ db3@3 f3@3 b2@3 eb3@3 gb3@3 ~ ab3@3 f3@3, b1]/4",
})).s("gm_tinkle_bell").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@41 A@32 ~@9 B ~ C D E F G H I ~ J D E K G A L ~ J D E F G H B ~ J D E K G H B ~ J D E K G H B ~ J M E K G H B ~ C N
  E K G H B ~ J D E K G A ~
>`.pickRestart({
  A: "x ~@2 x ~@12", B: "~@6 x ~@6 x ~@2", C: "x ~@2 x ~@2 x ~@9", D: "~@5 x ~@2", E: "x", F: "~@3 x ~@2 x ~@3 x ~@5",
  G: "~@13 x ~@2", H: "~@3 x ~@12", I: "~@6 x ~ x ~ x!2 ~ x ~@2", J: "x ~@2 x ~@4", K: "~@3 x ~@6 x ~@5",
  L: "~@6 x ~@3 x ~@2 x ~@2", M: "~@10 x ~@2 x ~@2", N: "~@10 x!2 ~ x!2 ~",
})).gain(0.6)

// drums · rim
const rim = s("rim").struct("<~@41 [~@5 x ~@2]!10 ~@96>").gain(0.6)

// drums · snare
const snare = s("sd").struct(`<
  ~@29 A B@2 C ~@6 D@2 ~@9 E A@18 F A@3 ~@10 C G ~ H ~ I A ~ C G ~ H ~ J A ~ K ~@2 H ~ J A ~ C G ~ H ~ J A ~ C G ~ H ~@2
  A ~ C G ~ H ~ J A ~ C G ~ H ~ J A ~ C G ~ H ~ J A ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~@6 x ~@5", C: "~@3 x ~@12", D: "x ~@4 x ~@2", E: "~@11 x ~ x!2 ~", F: "~@10 x!6",
  G: "~@13 x ~@2", H: "~@3 x ~@4", I: "x ~@2 x ~@2 x ~ x ~ x!2 ~@4", J: "x", K: "~@3 x ~@2 x ~@9",
})).gain(0.6)

// drums · low tom
const low_tom = s("lt").struct("<~@79 A B C ~@19 D ~@18 E ~@18 F ~@7>".pickRestart({
  A: "~@3 x ~@4", B: "x ~@2 x ~@4", C: "x", D: "~@3 x!2 ~@3", E: "~@8 x ~ x!2 ~@4", F: "~@10 x!2 ~ x!2 ~",
})).gain(0.6)

// drums · hihat
const hihat = s("hh").struct("<~@41 A@28 B A@3 C D C D C D E ~@2 F A@5 G A@5 B H A@50 I>".pickRestart({
  A: "x ~@2 x ~@2 x ~@3 x ~@2 x ~@2", B: "x ~@2 x ~@2 x ~@9", C: "x ~@5 x ~@6 x ~@2", D: "~@3 x ~@6 x ~@5", E: "x",
  F: "~@6 x ~@3 x ~@2 x ~@2", G: "x ~@12 x ~@2", H: "~@3 x ~@2 x ~@3 x ~@2 x ~@2", I: "x ~@2 x ~@12",
})).gain(0.6)

// drums · mid tom
const mid_tom = s("mt").struct("<~@95 x ~@5 [~@3 x ~ x ~@10] ~@18 [~@5 x!2 ~@9] ~@26>").gain(0.6)

// drums · high tom
const high_tom = s("ht").struct("<~@94 [~@10 x ~@2 x ~@2] ~@5 [~@13 x ~@2] [x!2 ~@6] ~@18 [x ~@2 x ~@12] ~@26>")
  .gain(0.6)

// drums · crash
const crash = s("cr").struct(`<
  ~@29 A B@3 ~@3 C D ~ E@2 ~@10 F ~@5 E@2 G ~@10 E@3 F ~@3 H ~ I J F I ~@5 H ~@6 K ~@5 A ~@9 H L A I ~@5 H ~@17 I K F
  ~@3 H A ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~@6 x ~@5", C: "~@10 x!6", D: "x!7 ~@9", E: "x ~@4 x ~@2", F: "x", G: "x ~@2 x ~@12",
  H: "~@13 x ~@2", I: "~@3 x ~@4", J: "x ~@2 x ~@4", K: "~@3 x ~@12", L: "x ~@12 x ~@2",
})).gain(0.6)

stack(
  distortion_guitar, string_ensemble_1, pad_poly, lead_8_bass_lead, bass, tinkle_bell, kick, rim, snare, low_tom, hihat,
  mid_tom, high_tom, crash
)

More by Rush