Strudelify
The Camera Eye cover art

Moving Pictures

The Camera Eye

Rush

KeyF minorTempo171 bpm
0:00/0:00
// The Camera Eye — Rush
// 171 bpm, 4/4, key F minor. 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 (4/4 at bar 1, 1/4 at bar 163, 4/4 at bar 164, 3/4 at bar 243, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 263 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(171/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 · pad poly
const pad_poly = note(`<
  A@4 B@8 ~@5 C@6 D@3 E@3 F@6 G@6 H@6 I@6 J@4 K@6 L M@6 N@5 O@7 P@4 Q@7 R@3 S T@4 R@3 S U@3 V R@3 S T@4 R@3 S U@3 W@8
  X@8 Y ~@4 Z@3 AA@2 AB AC@4 AD@2 AE@3 AF AG@2 ~@10 AH@4 AI@4 R@4 U@4 AJ@4 AK@4 AL@4 AM@4 AN@4 AO@4 AN@4 AO@4 AN@4 AO@4
  AP@4 AQ@4 AR@2 AS@2 AT@6 AU@6 AV@5 AW@5
>`.pickRestart({
  A: "[~@55 f4@9, ~@11 c3@53, ~@11 f3@21, ~@33 bb3@31, ~@11 c4@5]/4",
  B: "[~@2 bb4@11 c5@63 ~@10 c5@42, ~@13 [c3,g3,bb3,c4,f4,bb4]@115, ~@13 db3@2 ~@113]/8", // Csus4
  C: "[~@3 c3@16 ~@28 [g3,c4,e4]@9 ~ [g3,b3,d4]@15 [f3,a3,c4,f4]@24, ~@3 [g3,bb3,c4]@40 ~@53, ~@3 f4 ~@15 c3@32 ~@45, ~@31 f4@21 ~@44]/6", // C G F C7
  D: "[bb1,f2,bb2,c3,f3,bb3]/3", E: "[~ [g3,c4,e4]@9 [g3,b3,d4]@15 ~ [f3,a3,c4,f4]@22]/3",
  F: "[~@2 [bb1,f2,bb2,c3,f3,bb3]@49 [g3,c4,e4]@9 [g3,b3,d4]@15 [f3,a3,c4,f4]@21]/6", // Bbsus2 C G F
  G: "[~@4 [bb1,f2,bb2,c3,f3,bb3]@48 [g3,c4,e4]@9 [g3,b3,d4]@15 ~ [f3,a3,c4,f4]@19]/6", // Bbsus2 C G F
  H: "[~@5 [bb1,f2,bb2,c3,f3,bb3]@48 [g3,c4,e4]@9 [g3,b3,d4]@15 [f3,a3,c4,f4]@19]/6", // Bbsus2 C G F
  I: "[~@2 [bb1,f2,bb2,c3,f3,bb3]@16 [g3,c4,e4]@3 [g3,b3,d4]@5 [f3,a3,c4,f4]@6]/6", // Bbsus2 C G F
  J: "[~@6 [bb1,f2,bb2,c3,f3,bb3]@48 ~ [g3,c4,e4]@9]/4", // Bbsus2 C
  K: "[[g3,b3,d4]@15 [f3,a3,c4,f4]@24 [bb1,f2,bb2,c3,f3,bb3]@48 ~ [g3,c4,e4]@8]/6", L: "~ [g3,b3,d4]@15",
  M: "[[f3,a3,c4,f4]@24 [bb1,f2,bb2,c3,f3,bb3]@48 ~ [g3,c4,e4]@9 [g3,b3,d4]@14]/6", // F Bbsus2 C G
  N: "[~ [f3,a3,c4,f4]@24 [bb1,f2,bb2,c3,f3,bb3]@48 [g3,c4,e4]@7]/5", // F Bbsus2 C
  O: "[~@3 [g3,b3,d4]@9 [f3,a3,c4,f4]@6 [f2,bb2,c3,f3,bb3]@48 [g3,c4,e4]@9 [g3,b3,d4]@15 [f3,a3,c4,f4]@22]/7", // G F Fsus4 C G F
  P: "[~@3 [bb1,f2,bb2,c3,f3,bb3]@48 [g3,c4,e4]@9 [g3,b3,d4]@4]/4", // Bbsus2 C G
  Q: "[~@5 [f3,a3,c4,f4]@6 [f2,bb2,c3,f3,bb3]@97 [db4,ab4]@2 [db4,ab4]@2]/7", R: "[db4,ab4]!8",
  S: "[db4,ab4]!6 [c4,g4]!2", T: "[[c4,g4]!8 [c4,g4]!8 [c4,g4]!8 [c4,g4]!6 [db4,ab4]!2, ~ c2@29 ~@2]/4", U: "[c4,g4]!8",
  V: "[c4,g4]!6 [db4,ab4]!2", // C5 Db5
  W: "[[c4,g4]!6 [db4,ab4]!2 [db4,ab4]!8 [db4,ab4]!8 [db4,ab4]!8 [db4,ab4]!6 [c4,g4]!2 [c4,g4]!8 [c4,g4]!8 [c4,g4]!8, ~@3 db6@16 c6@13]/8", // C5 Db5 C5
  X: "[[c4,g4]!6 [db4,ab4]!2 [db4,ab4]!8 [db4,ab4]!8 [db4,ab4]!8 [db4,ab4]!6 [c4,g4]!2 [c4,g4]!8 [c4,g4]!8 [c4,g4]!8, ~@3 ab5@16 g5@13]/8", // C5 Db5 C5
  Y: "[c4,g4]!6 ~@2", Z: "[~ [g3,c4,e4]@3]/3",
  AA: "[[g3,c4,e4]@3 ~ [g3,c4,e4]@3 ~ [c4,f4,a4]@6 [c4,f4,g4]@4 a4@2 [c4,f4,bb4]@2 ~@2 [c4,f4,bb4]@4 [c4,f4,a4]@4]/2", // C F Csus4 Fsus4 F
  AB: "[c4,f4,a4]@3 [c4,f4,g4]@2 a4 [c4,f4,bb4] ~", // F Csus4 Fsus4
  AC: "[[c4,f4,bb4]@2 [c4,f4,a4]@2 [g3,c4,e4]@18 [g3,c4,e4]@4 [c4,f4,a4]@3 [c4,f4,g4]@2 a4]/4", // Fsus4 F C F Csus4
  AD: "[[c4,f4,bb4] ~ [c4,f4,bb4]@2 [c4,a4]@2 [c4,f4,a4]@3 [c4,f4,g4]@2 a4 [c4,f4,bb4] ~ [c4,f4,bb4]@2, ~@4 f4 ~@11]/2", // Fsus4 F Csus4 Fsus4
  AE: "[[c4,a4] [g3,c4,e4]@9 [g3,c4,e4]@2, f4 ~@23]/3", AF: "[c4,f4,a4]@3 [c4,f4,g4]@2 [c4,f4,a4] [c4,f4,bb4] ~",
  AG: "[[c4,f4,bb4]@2 [c4,f4,a4]@2 [c4,f4,a4]@3 [c4,f4,g4]@2 a4 [c4,f4,bb4] ~ [c4,f4,bb4]@2 [c4,f4,a4]@2]/2", // Fsus4 F Csus4 Fsus4 F
  AH: "[[db4,ab4]!8 [db4,ab4]!8 [db4,ab4]!8 [db4,ab4]!8, db6]/4", AI: "[[c4,g4]!8 [c4,g4]!8 [c4,g4]!8 [c4,g4]!8, c6]/4",
  AJ: "[ab4,db5]/4", AK: "[g4,c5]/4", AL: "[db3,ab4,db5]/4", AM: "[c3,g4,c5]/4",
  AN: "[[db5,ab5]!3 [db5,ab5]@5 [db5,ab5]!3 [db5,ab5]@5 [db5,ab5]!3 [db5,ab5]@5 [db5,ab5]!3 [db5,ab5]@5, [db3,ab4]]/4", // Db5
  AO: "[[c5,g5]!3 [c5,g5]@5 [c5,g5]!3 [c5,g5]@5 [c5,g5]!3 [c5,g5]@5 [c5,g5]!3 [c5,g5]@5, [c3,g4]]/4", // C5
  AP: "[db3,db5,ab5]/4", AQ: "[[c3,g5], c5@31 ~]/4", AR: "[db4@3 ab3@3 db4@2 ab4@3 gb4@3 f4@2, ab5]/2",
  AS: "[db4,gb4,ab4,db5,ab5]@3 [db4,gb4,ab4,db5,ab5]@3 ~@2", // Dbsus4
  AT: "[~@8 [db4,gb4,ab4,db5,ab5]@20 [f2,bb2,c3,f3,bb3]@49 [g3,c4,e4]@9 [g3,b3,d4]@10]/6", // Dbsus4 Fsus4 C G
  AU: "[~@5 [f3,a3,c4,f4]@24 ~ [f2,bb2,c3,f3,bb3]@49 [g3,c4,e4]@9 [g3,b3,d4]@8]/6", // F Fsus4 C G
  AV: "[~@7 [f3,a3,c4,f4]@24 [f2,bb2,c3,f3,bb3]@49]/5", // F Fsus4
  AW: "[[g3,c4,e4]@9 [g3,b3,d4]@9 ~ [f3,a3,c4,f4]@6 [f2,bb2,c3,f3,bb3]@49 ~@6]/5", // C G F Fsus4
})).s("gm_pad_poly").gain(0.19)

// chords · lead 8 bass lead
const lead_8_bass_lead = note("<~@5 A@8 ~@11 B@2 C@3 D@6 E@6 F@3 G@6 H@6 I@6 J@6 K@6 L@5 M@6 N@8 ~@170>".pickRestart({
  A: "[~@5 c2@123]/8", B: "[~@9 c2@23]/2", C: "[~ c2@9 g1@15 ~ f1@22]/3",
  D: "[~@26 c2@24 ~ c2@9 g1@15 f1@21, ~@2 bb1@49 ~@45]/6", E: "[~@28 c2@24 c2@9 g1@15 ~ f1@19, ~@4 bb1@49 ~@43]/6",
  F: "[~@29 c2@19, ~@5 bb1@43]/3", G: "[~@5 c2@9 g1@15 f1@24 ~@25 c2@18, ~@5 g3@91, ~@9 [bb1,c5]@7]/6",
  H: "[~@6 c2@9 g1@15 f1@24 ~@25 c2@17, ~ g3@15, ~@9 [bb1,c5]@7]/6", // Bbsus2
  I: "[~@7 c2@9 g1@15 f1@24 ~@25 c2@16, ~@7 g3@89, ~@55 [bb1,c5]@41]/6", // Bbsus2
  J: "[~@8 c2@9 g1@15 f1@24 ~@24 c2@16, ~ g3@11, ~@7 [bb1,c5]@5]/6", // Bbsus2
  K: "[~@3 c2@3 g1@5 f1@8 ~@8 c2@5, ~@3 g3@29, ~@19 [bb1,c5]@13]/6", L: "[~@9 c2@9 ~ g1@9 f1@6 bb1@46, ~@9 g3@71]/5",
  M: "[~@2 c2@9 g1@15 f1@24 ~@25 c2@21, ~ g3@47, ~@17 [bb1,c5]@15]/6", // Bbsus2
  N: "[~@3 c2@9 g1@9 ~@6 bb1@97 ~@4, ~@3 g3@73 ~@52, ~@21 f1@32 ~@75]/8",
})).s("gm_lead_8_bass_lead").gain(0.48)

// chords · rock organ
const rock_organ = note(`<
  ~@5 A@3 B@4 C@2 D@2 E F G@3 ~@2 H I J@2 ~@2 K@3 L ~@2 M@2 N@2 ~@2 O@4 ~@2 P@2 Q@2 ~@2 R@4 ~ S T@4 ~@23 U@2 V@3 W@2
  ~@170
>`.pickRestart({
  A: "[~@12 c3@2 ~@2 bb2 ~@2 [bb2,f3]@2 ~@3 [bb2,f3]@2 [bb3,c4]@2 ~@6 bb2 c3@2 bb2@2 [c3,f3]@3 ~ bb2@2 c3 bb2@2, ~@10 bb2@4 bb3@2 ~@2 c3@3 ~ c3@10 bb3@7 ~@3 [bb3,c4]@4 ~@2, ~@15 c4@2 ~@4 [bb3,c4]@3 ~@4 bb2@2 ~ bb2@2 c3@2 ~@4 bb2@2 ~@7, ~@29 f3@5 c4@5 ~@9]/3", // Bb5 Bbsus2 F5 Bbsus2
  B: "[~ bb3@6 ~ c3@2 ~ bb2@3 c3 bb2 c3 bb2 ~ [bb2,c3] ~@3 bb2@2 c4 ~ c3 [c3,c4] c3 c4 ~ [bb2,c3] [c3,c4]@2 [bb2,c3] ~ bb2 ~ d4 ~@3 [bb2,d4] ~@2 c4 ~ c3 ~ c4@2 c3 [c3,c4] [c3,c4]@2 ~@2 c4 ~@2 [bb2,c3] ~@2, c3@4 ~@4 bb3@6 f3@5 ~@2 c3@5 [bb2,c4]@2 ~ bb2@2 c4@2 ~@5 bb2@2 bb3@10 ~@7 c3@3 ~@4, ~ bb2@2 ~@7 c4@4 ~@2 bb3@6 f3@3 ~@3 f3@4 ~@3 f3@6 bb2@2 ~ [c3,f3]@4 f3@2 ~@3 f3@6 ~@2 f3@3, ~@11 c3 ~@5 c4@5 ~ bb3@6 ~ [c3,bb3]@3 ~@3 [c3,bb3]@3 c4@2 f4@4 ~@2 c4@2 ~ f4@5 ~@5 f4@3 ~, ~@40 c3@2 c4@2 ~ bb2@2 ~@2 c3@2 ~@2 bb2@2 ~ [bb2,c4]@3 ~@5]/4", // Bbsus2 C Bbsus2 C Bbsus2 Bb C Bbsus2 …
  C: "[[bb2,c3] [bb2,c3]@2 ~@2 [bb2,c3,c4] ~ bb2 ~ c4 ~ c3 [bb2,c3] ~@2 c3 [bb2,c3] bb2!2 c3 ~ [bb2,c3] ~@2 c3 c3@2 ~@3 bb2@2, bb3@6 c4@2 ~ bb3@5 bb2@2 ~ c3@2 ~@3 f3@4 ~ c4@4 ~, ~ c4@4 f3@4 c3@2 ~@2 f3@5 ~@3 c4@2 ~@2 bb3@4 f3@3, ~@5 c4!2 ~@2 [bb3,c4]@2 ~ bb2 ~ bb2 ~]/2", // Bbsus2
  D: "[~ bb2 ~@2 [bb2,c3] ~ [bb2,f3]@2 ~ [bb2,c3]@2 ~ [bb2,c3,f3]@2 c3 ~@2 bb2@2 c3 [bb2,f3]@2 ~ bb2 c4@3 [f3,bb3] [bb2,c4]@2 bb3 [bb2,bb3,c4], c3@2 [bb3,c4]@3 c3@3 [bb3,c4]@4 ~@3 [bb3,c4]@5 ~@2 c3@2 ~@6 c3@2]/2", // Bbsus2 Bb5 Bbsus2 Bb5 Bbsus2
  E: "[bb3,c4]@2 [bb2,c4] bb3 ~ bb2 c4 [c3,f3,f4] ~@2 [f3,c4] ~@2 c4 [f3,bb3,c4] bb2, ~@2 f3@2 f4@2 ~ [bb3,c4]@4 ~@5, ~@3 c3@2 ~@3 bb2@2 bb2@2 [bb2,c3,f4]@2 ~@2, ~@9 f4@2 ~@5", // Bbsus2 F5 Fsus4 Bbsus2
  F: "bb2@2 bb2@2 ~ f4 [bb2,c4] ~ bb2 c4 ~ [bb2,c3]@2 ~ bb2 ~, c3@4 [f3,bb3]@3 bb4@2 ~@7, ~@4 c4@2 c3@4 [f3,bb3,c4]@2 ~ [f3,bb3,c4]@3", // Bbsus2 Bb5 Fsus4
  G: "[~ f3 c3@2 f3 [bb2,c3] ~ bb2 ~@2 bb2@2 c3 ~@2 [bb2,c3]@2 ~ [bb2,c3] ~@3 bb2@2 ~ bb2 c3 ~ [bb2,c3] ~ [bb2,c3] [bb2,c3]@2 ~@15, c3@2 ~@2 [bb3,c4]@2 ~@2 [bb2,f3]@2 ~@3 bb2@2 ~@4 [c3,f3]@5 ~@24, ~ bb2@3 ~@3 c3@4 ~@3 f3@3 ~@11 f3@7 ~@13, ~@9 [bb3,c4]@4 ~@4 [bb3,c4]@4 ~@3 [bb3,c4]@4 ~@20]/3", // Bbsus2 Bb5 F5 Bbsus2
  H: "~@11 c4@2 bb2 c3@2, ~@3 bb2@8 ~@5, ~@3 c3@5 ~ c3@5 c4 ~, ~@5 f3@6 ~@2 bb3@3",
  I: "~@2 c3 bb2@2 c3 bb2@2 c3 bb2@2 c3 bb2 c3 [bb2,f3] ~, bb2@2 ~@7 f3@4 ~@3, ~ c4@3 ~ c4@3 ~@6 bb3@2", // Bb5
  J: "[c3 [bb2,f3,c4] ~ [bb2,f3] c3@2 bb2 ~ c3 bb2 c3 bb2 bb3@2 c3@2 bb2@2 c3 ~ c3 ~@11, ~@2 c3@2 ~@4 f3@2 ~ f3@3 c4@4 f3@3 ~@11, ~@3 c4@3 ~@3 bb3@2 ~ c3 ~ bb2 ~ bb3@3 bb2@4 ~@9]/2", // Bbsus2 Bb5
  K: "[~@4 c3@2 ~ bb2 c3 bb2 ~@4 bb2@2 ~ c3@2 bb3@2 ~ bb2 ~ bb2 c4 [bb2,c4]@2 c3 ~@2 c3 bb2 ~ c3 bb2 c3 bb3@2 c3 ~ [bb2,bb3]@2 c3@2 bb3 c4@2, ~@3 bb2@2 ~@2 f3@3 ~ c3@6 f3@4 ~@2 c3@2 c3@2 ~@3 [bb2,bb3]@3 ~@4 bb2 ~ bb2@2 c3 ~ [bb2,f3]@4 ~, ~@8 bb3@3 bb2@3 bb3@4 ~@8 f3 ~@4 f3@5 c4@3 ~@7 bb2 ~, ~@12 c4@4 bb2@2 ~ bb2 ~ [c3,c4]@3 ~@16 f3@2 ~@3 c3@3]/3", // Bbsus2 Bb Bb5 C
  L: "~ bb2 f3@2 ~@12, c3@3 ~@13",
  M: "[~@2 bb2@2 c3@3 [c3,f3] ~@4 bb2@2 ~@2 c3 ~ [bb2,f3]@2 ~ c3 ~ c3 ~@2 c3 bb2 ~ [f3,b3] c3@2, ~@9 [bb2,bb3]@2 ~ bb3@4 [bb2,f3]@2 ~@3 bb2@2 ~@5 c3@2 ~@2, ~@10 [c3,f3]@4 c4@3 [c3,bb3]@2 ~ bb3@2 c4@4 ~ bb3@5, ~@29 [bb2,c4]@2 ~]/2", // F5 Bb5 Fdim Bb Bb5 F5 C7 Bbsus2
  N: "[~ [bb2,c4] c3 [bb2,c4]@2 c3 bb2 c3 bb2@2 c3 [bb2,f3] c3 bb2 c3 bb2 ~@2 bb2@2 ~@12, f3@2 bb3@3 f3@2 c4@3 ~ c4@2 f3@8 ~@11, ~@4 [c3,c4] ~@3]/2", // Bbsus2 Bb5 C
  O: "[~@5 [bb2,c3]@3 ~@2 [bb2,c4]@2 bb2@2 ~@2 bb2 [c3,bb3] [bb2,c4] ~ c3 bb2 ~ [bb2,bb3]@2 bb2@2 ~ c3 ~@2 c4@2 ~@2 [bb2,c4]@2 ~@3 c4@3 c3 bb2 c3@2 ~@2 c4@2 [bb2,bb3]@2 c3 ~@10, ~@8 bb3@2 c3@7 ~@3 f3@2 c3@5 ~ bb2@5 bb2@2 ~@2 c3@2 [c3,bb3]@2 ~@2 bb3@2 f3@5 ~@14, ~@9 f3@6 c4@2 ~@6 [f3,c4]@4 bb3@2 ~ [c3,bb3]@4 [c3,bb3]@4 bb2@5 ~@4 bb2@3 ~@14, ~@12 c3 ~@3, ~@24 bb3 ~@7]/4", // Bbsus2 C7 Bbsus2 Bb Bbsus2 Bb C7 F5 …
  P: "[~@7 [bb2,c3]@4 bb2 c3 bb2@2 ~ bb2@2 bb2 ~@2 bb2 ~ [bb2,c4]@3 bb2 [bb2,c3]@2 ~ c3@2, ~@15 c3@6 bb3@2 ~@3 bb3@2 ~@4, ~@15 c4@3 ~@2 f3@4 ~@3 f3@5, ~@11 c3@2 ~@3]/2", // Bbsus2
  Q: "[~ bb2@2 ~ c3 bb2 ~ [f3,bb3] ~ c3 bb2 c3 ~ bb2 c3 ~ c3@2 c3@2 [bb2,f3] [c3,bb3] ~@10, bb3@2 ~@2 bb3@2 c4@4 ~@6 c4@5 ~@11, ~ c3 ~@4 c3@2 ~@5 f3@4 ~@15, ~@7 bb2@2 ~@6 [bb2,bb3]@3 ~@14]/2", // Bb5 C7 Bb
  R: "[~@7 bb2@4 ~@2 bb2@2 ~@2 c4@2 [bb2,f3]@2 ~ [bb2,f3] ~ c4@2 ~ bb2 [bb2,f3]@2 ~ [bb2,c4]@4 [c3,f3] ~@3 [c3,c4]@2 ~ f3 bb2 ~ [c3,f3]@2 ~ f3 c4@2 c3 bb2@2 ~@10, ~@11 [bb2,c3]@2 ~@3 bb2@3 ~@5 bb2 ~@5 c3@2 ~@4 [bb2,c4]@2 bb2@3 [bb2,bb3]@2 ~@4 bb2@4 ~@13, ~@12 bb3@3 f3@2 ~@2 bb3@3 ~@15 c3@2 ~@3 c3@2 ~@4 c3@3 ~@13]/4", // Bb5 Bbsus2 F5 C F5 Bbsus2 Bb
  S: "~@7 bb2", T: "[bb2 ~@3 c4@26 ~@2, ~@6 [c3,f3]@51 ~@7, ~@8 bb3@49 ~@7]/4",
  U: "[~@16 c4@2 ~ [c3,c4]@2 ~ bb2 ~@4 [f3,bb3]@2 bb2 c3@2, ~@11 bb2@10 ~ bb3@3 ~@7, ~@11 c3@7 ~@3 c3@2 c3@2 c3@5 ~@2, ~@14 f3@10 c4@3 ~@2 c4@2 ~]/2", // C Bb5
  V: "[~@2 c4 c3 bb2@2 [c3,f3] ~ c3!2 bb2 [c3,c4] ~@2 c3 c4 [bb2,c3]@2 ~ c3 c4 ~@3 c4 ~ [bb2,c4] ~@2 [bb2,c3] ~ [bb2,c3] ~@2 bb2 ~ [bb2,c3]@2 [c3,f3]@2 bb2 c3 bb2 [c3,bb3]@2 ~ [c3,bb3]@2, f3@2 ~ f3@3 ~@2 [bb2,c4]@2 ~ bb2@2 ~ [bb2,f3]@2 f3@3 bb2@3 f3@10 ~@9 [f3,c4]@2 ~@5, ~ c3@2 ~ c4 ~@4 f3@4 ~@2 bb3@3 bb3@2 c3@7 ~@3 bb3@4 ~@6 bb3@2 ~@6, ~@22 c4@2 ~@5 c4@3 ~@16, ~@23 bb2@3 ~@6 [c3,f3]@4 ~@9 [bb2,c4]@3]/3", // F5 C Bbsus2 F5 C7 Bbsus2 Bb5 F5 …
  W: "[bb2 c3 bb3@2 c3 ~ bb3@2 bb2 [c3,c4] bb2 [c3,bb3]@2 ~ c3 bb2@2 c3 bb2 c3@2 c4 bb3 ~ bb2 ~ [bb2,f3]@2 bb3 [bb2,c3] ~@2, f3@6 c3 ~@2 f3@4 ~@5 bb3@2 ~@2 c3@2 bb3@2 ~@6, ~@2 bb2 ~ c4@3 ~@7 bb3@3 c4@2 ~@4 [f3,c4]@2 ~@7, ~@5 bb2@2 ~@6 [bb2,c4]@3 ~@5 bb2@2 ~@2 c3@3 ~@4]/2", // C C7 Bb5 Bbsus2 F5 Bbsus2
})).s("gm_rock_organ").gain(0.25)

// chords · rock organ · soft notes
const rock_organ_soft = note(`<
  ~@5 A ~@2 B ~@2 C D ~@2 E ~ F ~@5 G H I ~@4 J K L ~@2 M N O ~@3 P Q R ~@3 S T U ~@4 V@2 W ~ X Y ~@26 Z AA AB Y AC
  ~@172
>`.pickRestart({
  A: "~@3 f3", B: "f3@3 ~@13", C: "~ bb2@4 ~@2 bb3@4 ~@5", D: "~@10 bb2 ~@5", E: "~@8 bb3@3 ~@5", F: "~@14 c3 ~",
  G: "~@5 bb3@3 ~ bb3@2 ~@2 f3 ~@2", H: "~@3 bb3@3 bb3@3 ~@3 bb3 ~@3", I: "~@2 bb3@2 ~@2 bb3 ~@9",
  J: "~@7 bb3@2 ~ bb3 ~@5", K: "~@3 bb3 ~@5 c4 ~@6", L: "bb3@3 ~@13", M: "~@5 bb2@2 ~@7 bb2@2",
  N: "~@8 bb3 ~ f3@2 ~@4, ~@7 bb2@2 ~@7", O: "~@8 bb3@3 ~ bb3 ~@2 bb3", P: "~@6 bb3 ~", Q: "~@4 bb3@2 ~@7 f3@3",
  R: "~@7 f3 ~@5 c4@2 ~", S: "~@12 c4 bb3@3, ~@12 f3@3 ~", T: "~ bb3@2 ~@11 bb3 bb2", U: "~@3 f3@2 ~@6 bb3 ~@4",
  V: "[~@7 c3 bb3 ~@2 bb3@8 ~@2 bb3 ~@5 bb3@3 ~@2]/2", W: "bb3 ~@3", X: "~@8 bb2@2 ~ bb2@2 ~@3", Y: "~@6 bb3 ~@9",
  Z: "~@15 bb3", AA: "~@2 bb3@3 ~@3 [bb2,f3] ~@2 bb2 ~@4", AB: "[bb2,bb3]@2 bb2 bb3@5 ~ bb3 ~@3 bb3 ~@2",
  AC: "~@3 bb3@3 ~@10",
})).s("gm_rock_organ").gain(0.15)

// bass · electric bass finger · "Chord Track"
const bass = note(`<
  ~@97 A@4 B@4 C@4 D@3 E F@3 G D@3 E F@3 G D@3 E F@3 G D@3 E F@3 H I J K@5 L@2 M N@2 O P Q@2 R S@2 T U@2 V W X@2 Y Z AA
  AB@2 AC D@4 F@4 D@4 F@4 AD@4 AE@4 AF@4 ~ AG AH AI AF@4 AJ@4 AK@2 AL AM AN@2 AO@2 AP AQ@2 AR AS AT AU AV AW@3 AX AY@4
  AZ BA BB@2 BC@6 BD@6 BE@5 BF@5
>`.pickRestart({
  A: "[~ c2@29 ~@2]/4", B: "[~ db2@29 ~@2]/4", C: "[~ c2@29 db2!2]/4", D: "db2!8", E: "db2!6 c2!2", F: "c2!8",
  G: "c2!6 db2!2", H: "c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c3@3 ~", I: "~ g2@2 c3 ~@2 g2!2",
  J: "c2@3 ~@3 g2@4 c3@2 c3!2 g2@2",
  K: "[c3@2 g2@2 c2@3 ~@3 g2@4 c3@4 c3@2 g2@2 g2@2 c2@3 ~@3 c2@4 g2@2 c3 g2 c3@2 g2@4 c2@6 g2@6 d3@6 c3@4 g2@2 c2@6 g2@4 a2@2]/5",
  L: "[g2@4 g1@4 f1 f2@5 c2@4 f1@2 f2@2 ~@2 f2@4 c2@4]/2", M: "f1@3 c2@2 c2 f2 ~",
  N: "[f2@2 bb1@2 c2@3 g2@3 d3@3 c3@2 g2]/2", O: "c2@3 c3@3 g2@2", P: "c2@2 f1@3 c2@3",
  Q: "[f2 ~ f2@2 c2@2 f1@3 c2@2 c2 f2 ~ f2@2]/2", R: "bb1@2 c2@3 g2@3", S: "[c3@3 g2@3 c2@3 a2@3 g2@2 g1@2]/2",
  T: "f1@3 c2@3 f2 ~", U: "[f2@2 c2@2 f2@3 c2@2 c2 f1 ~ f2@2 bb1@2]/2", V: "c2@3 ~@3 g2@4 c2@2 ~@4",
  W: "g2@2 g2@2 c2@3 ~@3 g2@4 c3@2", X: "[c3!2 g2@2 c3@2 g2@2 c2@3 ~@3 g2@4 c3@4 c3@2 g2@2 g2@2 c2@3 ~]/2",
  Y: "~@2 c3!2 c3@2 c3@2 c3@2 bb2@2 a2@2 g2@2", Z: "f2@3 ~@3 c2@4 bb1@2 ~@2 bb1@2", AA: "c2 bb1 f2 ~@2 f2@2 bb1",
  AB: "[f2@2 bb1@2 f2@4 c2@3 ~@3 g1@4 c2@2 ~@4 g1@4 c2@2 ~@2]/2", AC: "~ g1@2 c2 g1 c2 g2@2", AD: "db2/4",
  AE: "[c2@58 g2!2 c3@2 g2 ~]/4", AF: "[db2 ~@2 db2@29]/4", AG: "~@10 c2!2 c2@2 c2@2", AH: "c2@2 ~@8 c2!2 c2@2 c2@2",
  AI: "c2 ~@7", AJ: "c2/4", AK: "db2/2", AL: "f2", AM: "ab2", AN: "c3/2", AO: "c2/2", AP: "db2@3 db2 ~ db2@2 ab1",
  AQ: "db2@2 ab2 db3 ~ db3@2 ab2", AR: "eb3 ~ eb3@2 db3@2 ab2@2 eb3@2 eb3@2 db3@2 db2@2", AS: "c2@3 c2 ~ c2@2 g1",
  AT: "c2!2 g2 c3@2 g2 c2 g2", AU: "c3@2 g2 c3 ~ c2@2 c3", AV: "f2!4 g2!3 c3", AW: "db2!2", AX: "db2@4 db2 ab1 db2@2",
  AY: "c2!4", AZ: "db2@3 ab1@3 db2@2", BA: "ab2@3 gb2@3 f2@2", BB: "ab2@2 ~ ab2@3 ~@2",
  BC: "[~@8 ab1@20 bb1@49 c3@9 g2@10]/6", BD: "[~@5 f2@24 ~ bb2@49 c3@9 g2@8]/6", BE: "[~@7 f2@24 bb2@49]/5",
  BF: "[c3@9 g2@9 ~ f2@6 bb1@49 ~@6]/5",
})).s("gm_electric_bass_finger").gain(0.42)

// chords · lead 5 charang
const lead_5_charang = note(`<
  ~@59 A@4 B C@5 B D@5 E F@6 G@4 H@5 ~@17 I@8 J@24 K L M N@3 ~@17 O P Q@2 R S T U@2 V W X W X Y@4 W X W X Y@4 ~@48 Z AA
  AB@2 AC@2 ~@20
>`.pickRestart({
  A: "[~@8 e3 f3@45 ~@2 [c3,e3]@8, ~@4 [f2,bb2,c3]@23 ~@5]/4", B: "~ [b2,d3]@15",
  C: "[[c3,f3]@24 ~@21 c4@2 ~@7 bb3@4 ~@14 [c3,e3]@8, ~@24 f2@49 ~@7, ~@12 [bb2,c3]@21 c4@6 ~, ~@12 f3@17 f3@11, ~@48 c4@15 bb3@10 ~@7]/5", // F5 C Bbsus2
  D: "[[c3,f3]@24 ~@23 c5 ~@25 [c3,e3]@7, ~@24 c2@40 c4@13 ~@3, ~@24 [f2,bb2]@28 bb4@16 f3@7 ~@5, ~@25 c3@33 f4@17 ~@5, ~@25 f3@24 c5@25 ~@6]/5", // F5 C Bb5
  E: "~@2 [b2,d3]@9 [c3,f3]@5", // Bm F5
  F: "[~ [c2,ab2]@5 [db2,g2] ~@42 [c3,e3]@10 [b2,d3]@15 [c3,f3]@22, ~ c3@29 f5@14 bb4@10 ~@42, ~@8 [c2,bb2]@27 f2 c5@5 f4@13 ~@42, ~@10 f2@3 bb5@11 c5@3 ~@21, ~@23 c6@30 ~@43]/6", // Fm Dbdim C Bm F5 C7
  G: "[~@27 c5@3 ~@2 c5@3 ~@16 [c3,e3]@8 ~ [b2,d3]@4, ~@2 f3@37 c5@3 bb5@3 c6@9 ~@10, ~ [f2,bb2,c3]@14 bb4@12 ~@5, ~@23 f4@31 ~@10, ~@27 c2@9 f5@18 ~@10]/4", // C Bm Fsus4
  H: "[~@5 f3@7 ~ f3@65 ~@2, ~@5 c3@4 ~@3 c3@68, ~@6 bb2@33 ~, ~@6 [c2,f2]@31 ~@3, ~@3 gb2@8 ~@9]/5", // F5
  I: "[~@6 [db3,db4]@3 [ab2,ab3]@3 [db3,db4]@2 [ab3,ab4]@3 [gb3,gb4]@3 [f3,f4]@2 [db3,db4]@3 [ab2,ab3]@3 [db3,db4]@2 [ab3,ab4]@3 [gb3,gb4]@3 [f3,f4]@2 [c3,c4]@3 [f2,f3]@3 [g2,g3]@2 [c3,c4]@3 [f2,f3]@3 [g2,g3]@2 [c3,c4]@3 [f2,f3]@3 [g2,g3]@2 [c3,c4]@2]/8", // Db Ab Db Ab Gb F Db Ab …
  J: "[~ [f2,f3]@3 [g2,g3]@2 [db3,db4]@3 [ab2,ab3]@3 [db3,db4]@2 [ab3,ab4]@3 [gb3,gb4]@3 [f3,f4]@2 [db3,db4]@3 [ab2,ab3]@3 [db3,db4]@2 [ab3,ab4]@3 [gb3,gb4]@3 [f3,f4]@2 [c3,c4]@3 [f2,f3]@3 [g2,g3]@2 [c3,c4]@3 [f2,f3]@3 [g2,g3]@2 [c3,c4]@3 [f2,f3]@3 [g2,g3]@2 [c3,c4]@2]/8", // F G Db Ab Db Ab Gb F …
  K: "~@2 [f2,f3]@6 [g2,g3]@4 [c3,e3,g3]@3 ~", L: "~@2 [g2,d3,g3]@4 [c3,f3,g3]@3 ~@3 [g2,d3,g3]@4",
  M: "[c3,e3,g3]@3 ~@3 [g2,d3,g3]@4 [c3,e3,g3]@2 [c3,f3,g3]@2 [g2,f3,g3]@2", // C G5 C Csus4 G7
  N: "[c3@2 g2@2 [c3,e3,g3]@3 ~@3 [g2,d3,g3]@4 [c3,f3,g3]@6 [g2,d3,g3]@2 [g2,d3,g3]@2 [c3,e3,g3]@3 ~@3 [c2,d3,g3]@4 [g2,e3,g3]@2 [c3,f3,g3]@2 [c3,f3,g3]@2 [g2,e3,g3]@4 ~@4, [e3,g3] ~@11]/3", // C G5 Csus4 G5 C Csus2 C Csus4 …
  O: "[c3,e3,g3]@3 ~@3 [g2,d3,g3]@4 [c3,f3,g3]@3 ~@3", P: "[g2,d3,g3]@4 [c3,e3,g3]@3 ~@3 [g2,d3,g3]@4 [c3,e3,g3]@2",
  Q: "[[c3,f3,g3]@2 [g2,f3,g3]@2 c3@2 g2@2 [c3,e3,g3]@3 ~@3 [g2,d3,g3]@4 [c3,f3,g3]@6 [g2,d3,g3]@2 [g2,d3,g3]@2 [c3,e3,g3]@3 ~, ~ [e3,g3] ~@6]/2", // Csus4 G7 C G5 Csus4 G5 C Em
  R: "~ [c2,d3,g3]@2 [g2,e3,g3] [c3,f3,g3]!2 [g2,e3,g3]@2", S: "[f2,a3,c4]@3 ~@3 [c2,g3,c4]@4 [f2,bb3,c4]@3 ~@3",
  T: "[c2,g3,c4]@4 [f2,a3,c4]@3 ~@3 [f2,g3,c4]@4 [c2,a3,c4]@2", // C5 F Fsus2 F
  U: "[[f2,bb3,c4]@2 [c2,bb3,c4]@2 [f2,a3,c4]@4 [c3,e3,g3]@3 ~@3 [g2,d3,g3]@4 [c3,f3,g3]@3 ~@3 [g2,d3,g3]@4 [c3,e3,g3]@3 ~]/2", // Fsus4 C7 F C G5 Csus4 G5 C
  V: "~ [g2,d3,g3]@2 [c3,e3,g3] [c3,f3,g3] [g2,f3,g3] [c2,e3,g3]@2", W: "[db3,db4]@3 [ab2,ab3]@3 [db3,db4]@2",
  X: "[ab3,ab4]@3 [gb3,gb4]@3 [f3,f4]@2", Y: "[c3,c4]@3 [f2,f3]@3 [g2,g3]@2", Z: "[db2,db3]@3 [ab1,ab2]@3 [db2,db3]@2",
  AA: "[ab2,ab3]@3 [gb2,gb3]@3 [f2,f3]@2", AB: "[db2,gb2,ab2,db3,ab3]@2 ~ [db2,gb2,ab2,db3,ab3]@3 ~@2",
  AC: "[~@2 [db2,gb2,ab2,db3,ab3]@5 ~]/2", // Dbsus4
})).s("gm_lead_5_charang").gain(0.32)

// chords · electric guitar clean · Ab Db F Gb Ab Db
const electric_guitar_clean = note(`<
  ~@189
  [~@5 [ab3,ab4] [db4,db5]@2, [f3,f4]@3 [gb3,gb4]@3 ~@2, ~ [ab3,ab4]@2 ~@5, ~@2 [db4,db5]@3 ~@3]
  ~@73
>`).s("gm_electric_guitar_clean").gain(0.21)

// chords · lead 2 sawtooth · C5
const lead_2_sawtooth = note(`<
  ~@57
  [~@9 [c5,g5] ~ [c5,g5] ~@4]
  [~@8 [c5,g5] ~@2 [c5,g5] ~@2 [c5,g5] ~]
  [~ [c5,g5] ~ [c5,g5] ~@12]
  ~@203
>`).s("gm_lead_2_sawtooth").gain(0.36)

// chords · electric guitar clean
const electric_guitar_clean_2 = note("<~@190 A@3 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 ~@26>".pickRestart({
  A: "~@5 ab3 db4@2, [f3,f4]@3 [gb3,gb4]@3 ~@2, ~ [ab3,ab4]@2 ~@5, ~@2 [db4,db5]@3 ~@3", // F Gb Ab Db
  B: "~@5 g3 c4@2, [e3,e4]@3 [f3,f4]@3 ~@2, ~ [g3,g4]@2 ~@5, ~@2 [c4,c5]@3 ~@3", // E F G C
})).s("gm_electric_guitar_clean").gain(0.16)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_3 = note("<~@190 A@3 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 ~@26>".pickRestart({
  A: "~@5 ab4 db5@2", B: "~@5 g4 c5@2",
})).s("gm_electric_guitar_clean").gain(0.08)

// drums · kick
const kick = s("bd").struct(`<
  ~@30 A B ~@3 C D E F C ~ G H I G C ~ J G K J L ~ M ~ L N O ~ N P Q R N O R S T U V W X V Y U Z AA AB AC AD AE AF AG AH
  ~ AI AD ~@9 AJ AA ~@3 AA ~@2 AK AA ~@2 AJ AL@15 AM AL@15 AJ AN AO AP AQ@2 AN AP V AM AR AS AT AR AP AU AV AW I AV AR
  AS AA AR AX AY AT AZ AR AX AY AT AV AR@7 BA AR@7 BB AR@15 BB AR@6 BC AR BC BD BC BE BC BD BF BG AR BD AR BH AR@3 BI BJ
  BK AO BL BM@2 BN AV BO@4 BP T ~ BQ C BB BR L W AC BS R BT BU BV M BW U@2 V BX BB
// … 132 more lines

More by Rush