Strudelify
KeyD majorTempo100 bpm
0:00/0:00
// Roger and Out — Crosby, Stills, Nash & Young
// 100 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar, Guitar2, Guitar4, Solo Guitar1.
setcpm(100/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.

// bass · fretless bass · "Bass"
const bass = note(`<
  A B C D E F G H E F G H E F G H E F G I J K L K L K M N O@4 P@2 A B C D E F G H E F G Q R S@2 T@2 S@2 U M V W V W V X
  Y Z AA AB AA AB AC AD AE@2 AF@2 S@2 T@2 S@2 T@2 S@2 T@2 S@2 U AG A B C AH@2 ~@3
>`.pickRestart({
  A: "a2@2 a2@2 ~@4 g2@2 g2@2 ~@3 e2", B: "d3 ~ b2 ~ a2@2 d3@8 g2 e2", C: "a2@2 a2@2 ~@3 a2 g2@2 g2@2 ~@3 g2",
  D: "d3 ~ b2 ~ a2@2 a2@8 ~@2", E: "a2@2 a2@2 ~@3 a2 g2@2 g2@2 ~@3 e2", F: "d3@2 b2@2 a2@2 d3@8 g2 e2",
  G: "a2@2 a2@2 ~@4 g2@2 g2@2 ~@3 g2", H: "d3@2 b2@2 a2@2 a2@8 g2 e2", I: "d3 b2 a2!2 a2@2 a2@2",
  J: "a2@4 a2@4 g2@2 g2@2 ~@3 b2, ~@7 a2", K: "d3@2 d3@2 ~@2 d3 a2 g2@2 g2@2 ~@2 g2 e2",
  L: "a2@2 a2@2 ~@2 g2 e2 g2@2 g2@2 ~@3 b2, ~@7 a2", M: "a2!4", N: "a2@2 a2@2 a2@2 a2@2 a2@2 a2@2 a2@2 ~ b2, ~@7 a2",
  O: "[d3@8 g2@6 a2@6 a2@2 e3 d3 a2@2 ~ f#2 f#2@2 a2@2, ~@26 g2@3 ~@3]/2",
  P: "[d3@8 g2@6 a2@4 a2@2 a2@2 a2@2 a2 ~@7]/2", Q: "d3@2 b2@2 a2@2 a2@2 a2@4 a2@3 a2",
  R: "a2 ~@5 g2 e2 a2@2 a2@2 ~@3 a2", S: "[g2@2 g2@2 ~@3 e2 d3@2 b2@2 a2@2 d3@8 g2 e2 a2@2 a2@2 ~@4]/2",
  T: "[g2@2 g2@2 ~@3 g2 d3@2 b2@2 a2@2 a2@8 g2 e2 a2@2 a2@2 ~@3 a2]/2", U: "g2@2 g2@2 ~@3 g2 d3@2 b2@2 a2@2 a2@2",
  V: "g2@2 g2@2 ~@3 b2 d3@2 d3@2 ~@2 d3 a2, ~@3 a2 ~@4", W: "g2@2 g2@2 ~@2 g2 e2 a2@2 a2@2 ~@2 g2 e2",
  X: "g2@2 g2@2 ~@2 g2 e2 a2@4 a2@4", Y: "a2@2 a2@2 a2!4", Z: "a2@2 a2@2 a2@2 ~ b2 d3@8, ~@3 a2 ~@4",
  AA: "g2@6 a2@6 a2@2 e3 d3", AB: "a2@2 ~ f#2 f#2@2 a2@2 d3@8, ~@2 g2@3 ~@11", AC: "g2@3 a2@2 a2!3",
  AD: "a2 ~@7 a2@2 a2@2 ~@4", AE: "[g2@2 g2@2 ~@3 e2 d3 ~ b2 ~ a2@2 d3@8 g2 e2 a2@2 a2@2 ~@3 a2]/2",
  AF: "[g2@2 g2@2 ~@3 g2 d3 ~ b2 ~ a2@2 a2@8 ~@2 a2@2 a2@2 ~@3 a2]/2", AG: "a2@11 ~@5",
  AH: "[d3 ~ b2 ~ a2@2 d3@18 ~@8]/2",
})).s("gm_fretless_bass").gain(0.64).pan(0.7)

// bass · acoustic bass · "Bass2"
const bass_2 = note(`<
  A B C D E F G H E F G H E F G H E F G I J K L K L K M N O@4 P@2 A B C D E F G H E F G Q R S@2 T@2 S@2 U M V W V W V X
  Y Z AA AB AA AB AC AD AE@2 AF@2 S@2 T@2 S@2 T@2 S@2 T@2 S@2 U AG A B C AH@2 ~@3
>`.pickRestart({
  A: "a1@2 a1@2 ~@4 g1@2 g1@2 ~@3 e1", B: "d2 ~ b1 ~ a1@2 d2@8 g1 e1", C: "a1@2 a1@2 ~@3 a1 g1@2 g1@2 ~@3 g1",
  D: "d2 ~ b1 ~ a1@2 a1@8 ~@2", E: "a1@2 a1@2 ~@3 a1 g1@2 g1@2 ~@3 e1", F: "d2@2 b1@2 a1@2 d2@8 g1 e1",
  G: "a1@2 a1@2 ~@4 g1@2 g1@2 ~@3 g1", H: "d2@2 b1@2 a1@2 a1@8 g1 e1", I: "d2 b1 a1!2 a1@2 a1@2",
  J: "a1@4 a1@4 g1@2 g1@2 ~@3 b1, ~@7 a1", K: "d2@2 d2@2 ~@2 d2 a1 g1@2 g1@2 ~@2 g1 e1",
  L: "a1@2 a2@2 ~@2 g1 e1 g1@2 g1@2 ~@3 b1, ~@7 a1", M: "a1!4", N: "a1@2 a1@2 a1@2 a1@2 a1@2 a1@2 a1@2 ~ b1, ~@7 a1",
  O: "[d2@8 g1@6 a1@6 a1@2 e2 d2 a1@2 ~ f#1 f#1@2 a1@2, ~@26 g1@3 ~@3]/2",
  P: "[d2@8 g1@6 a1@4 a1@2 a1@2 a1@2 a1 ~@7]/2", Q: "d2@2 b1@2 a1@2 a1@2 a1@4 a1@3 a1", R: "a1 ~@7 a1@2 a1@2 ~@3 a1",
  S: "[g1@2 g1@2 ~@3 e1 d2@2 b1@2 a1@2 d2@8 g1 e1 a1@2 a1@2 ~@4]/2",
  T: "[g1@2 g1@2 ~@3 g1 d2@2 b1@2 a1@2 a1@8 g1 e1 a1@2 a1@2 ~@3 a1]/2", U: "g1@2 g1@2 ~@3 g1 d2@2 b1@2 a1@2 a1@2",
  V: "g1@2 g1@2 ~@3 b1 d2@2 d2@2 ~@2 d2 a1, ~@3 a1 ~@4", W: "g1@2 g1@2 ~@2 g1 e1 a1@2 a2@2 ~@2 g1 e1",
  X: "g1@2 g1@2 ~@2 g1 e1 a1@4 a1@4", Y: "a1@2 a1@2 a1!4", Z: "a1@2 a1@2 a1@2 ~ b1 d2@8, ~@3 a1 ~@4",
  AA: "g1@6 a1@6 a1@2 e2 d2", AB: "a1@2 ~ f#1 f#1@2 a1@2 d2@8, ~@2 g1@3 ~@11", AC: "g1@3 a1@2 a1!3",
  AD: "a1 ~@7 a1@2 a1@2 ~@4", AE: "[g1@2 g1@2 ~@3 e1 d2 ~ b1 ~ a1@2 d2@8 g1 e1 a1@2 a1@2 ~@3 a1]/2",
  AF: "[g1@2 g1@2 ~@3 g1 d2 ~ b1 ~ a1@2 a1@8 ~@2 a1@2 a1@2 ~@3 a1]/2", AG: "a1@11 ~@5",
  AH: "[d2 ~ b1 ~ a1@2 d2@18 ~@8]/2",
})).s("gm_acoustic_bass").gain(0.23).pan(0.4)

// chords · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note(`<
  ~@4 A B C D A B C E A B F D A G F ~@19 A B C D A B C ~ H I J ~ K I L ~@7 M ~@11 H I N ~ K I N ~ O I J ~ K I L ~@10
>`.pickRestart({
  A: "~@6 a4@2 ~@4 b4 ~ g4@2, ~@2 e4@3 c#5@4 ~@2 g4@2 b4@3, ~@3 a4@3 ~@4 d4@4 ~@2, ~ e5 ~ g5", B: "~@13 f#5@2 ~",
  C: "~@7 a3 ~@8, ~@3 [a3,e4] ~@4", D: "~@13 e5 ~@2", E: "~@13 e5 c#5 a4", F: "~@6 a3!2 ~@8", G: "~@13 [a4,f#5]@2 ~",
  H: "~@7 a4, ~@10 e4@3 c#5@3, ~@11 a4@3 ~@2, ~@3 e5",
  I: "~@4 b4 ~ g4@2 ~@8, ~@2 d4@3 b4@3 ~@8, ~@3 g4@3 ~@10, ~ g5 ~@2", J: "~@5 f#5@2 ~@7 a3!2",
  K: "~@5 e5 ~@8 a4@2, ~@10 e4@3 c#5@3, ~@11 a4@3 ~@2, ~@3 e5", L: "~@5 [a4,f#5]@2 ~@7 a3!2",
  M: "~@5 [e4,a4,c#5,e5,a5] ~@2", N: "~@5 f#5@2 ~@8 a3, ~@7 [a3,e4]",
  O: "~@5 e5 c#5 a4 ~@6 a4@2, ~@10 e4@3 c#5@3, ~@11 a4@3 ~@2, ~@3 e5",
})).s("gm_acoustic_guitar_nylon").gain(0.64).pan(0.3)

// other · electric guitar muted · "Guitar2"
const electric_guitar_muted = note("<~@22 A B A ~@31 C ~ D ~@38>".pickRestart({
  A: "d4 ~ d4 ~@13", B: "~@14 a3!2", C: "~@8 d4 ~ d4 ~@5", D: "~@6 a3!2 d4 ~ d4 ~@5",
})).s("gm_electric_guitar_muted").gain(0.61).pan(0.2)

// chords · electric guitar clean · "Guitar3"
const electric_guitar_clean = note(`<
  A B A C D E F G D E F H D E F G D I F J K L M N M N O P Q R Q R Q S A B A C D E F G D E F T U V@2 W@2 X@2 Y Z@7 AA
  AB@2 AC@4 AD@7 AE@8 AF@5 AG AH@2 AI@6
>`.pickRestart({
  A: "[a3,e4,a4,c#5,e5]!2 ~@2 [g3,d4,g4,d5,g5]!2 ~@2", B: "[d4,a4,d5,e5]@2 [d4,a4,d5,f#5] ~@3 [d4,a4,d5,f#5]@8 ~@2",
  C: "[d4,a4,d5,e5]@2 [d4,a4,d5,f#5] ~@3 [a3,e4,a4,c#5,e5]@8 ~@2", D: "[a3,e4,a4,c#5,e5]@6 ~@2 [g3,d4,g4,b4,g5]@5 ~@3",
  E: "[d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 ~@2 [d4,a4,d5,f#5]@7 [d4,a4]@2 ~", // D D5
  F: "[a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]!2 [a3,e4,a4,c#5,e5]@4 [g3,d4,g4,b4,g5]@2 [g3,d4,g4,b4,g5]!2 [g3,d4,g4,b4,g5]@4", // A G
  G: "[d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 a3@2 [a3,e4,a4,c#5,e5]@8 c#5 a4", // D A
  H: "[d4,a4,d5,f#5]!2 a3 [a3,e4,a4,c#5,e5]@4 ~", I: "[d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 ~@2 [d4,a4,d5,f#5]@7 d4@2 ~",
  J: "[d4,a4,d5,f#5]@3 ~ [b3,f#4,b4,d5,f#5]@3 ~ [a3,e4,a4,c#5,e5]@4 [a3,e4,a4,c#5,e5]@4", // D Bm A
  K: "[a3,e4,a4,c#5,e5]@4 [a3,e4,a4,c#5,e5]@4 [g3,d4,g4,b4,g5]!8", // A G
  L: "[d4,a4,d5,f#5]!8 [g3,d4,g4,b4,g5]!6 [a3,e4,a4,c#5,e5]!2", M: "[a3,e4,a4,c#5,e5]!8 [g3,d4,g4,b4,g5]!8",
  N: "[d4,a4,d5,f#5]!8 [g3,d4,g4,b4,g5]!8", O: "[a3,e4,a4,c#5,e5]!4", P: "[a3,e4,a4,c#5,e5]!8",
  Q: "[d4,a4,d5,f#5]@5 ~@3 [g3,d4,g4,b4,g5]@5 ~ [a3,e4,a4,c#5,e5]@2", // D G A
  R: "~@2 [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]@2 [a3,d4,a4,d5,f#5]!2 [a3,d4,a4,d5,f#5]@2 [a3,e4,a4,c#5,e5]@2", // A D A
  S: "~ [a3,e4,a4,c#5,e5]!4 ~@3", // A
  T: "[d4,a4,d5,f#5]@3 ~ [b3,f#4,b4,d5,f#5]@3 ~ [a3,e4,a4,c#5,e5]@4 [a3,e4,a4,c#5,e5]@3 [a3,e4,a4,c#5,e5]", // D Bm A
  U: "[a3,e4,a4,c#5,e5] ~@7 [a3,e4,a4,c#5,e5]@6 ~@2", // A
  V: "[[g3,d4,g4,b4,g5]@5 ~@3 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 ~@2 [d4,a4,d5,f#5]@7 [d4,a4]@2 ~ [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]!2 [a3,e4,a4,c#5,e5]@4]/2", // G D D5 A
  W: "[[g3,d4,g4,b4,g5]@2 [g3,d4,g4,b4,g5]!2 [g3,d4,g4,b4,g5]@4 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 a3@2 [a3,e4,a4,c#5,e5]@8 c#5 a4 [a3,e4,a4,c#5,e5]@6 ~@2]/2", // G D A
  X: "[[g3,d4,g4,b4,g5]@5 ~@3 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 ~@2 [d4,a4,d5,f#5]@7 d4@2 ~ [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]!2 [a3,e4,a4,c#5,e5]@4]/2", // G D A
  Y: "[g3,d4,g4,b4,g5]@2 [g3,d4,g4,b4,g5]!2 [g3,d4,g4,b4,g5]@4 [d4,a4,d5,f#5]@3 ~ [b3,f#4,b4,d5,f#5]@3 ~", // G D Bm
  Z: "[[a3,e4,a4,c#5,e5]@4 [a3,e4,a4,c#5,e5]@4 [a3,e4,a4,c#5,e5]@4 [a3,e4,a4,e5]@4 [g3,d4,g4,b4,g5]!8 [d4,a4,d5,f#5]!8 [g3,d4,g4,b4,g5]!6 [a3,e4,a4,c#5,e5]!9 [a3,e4,a4,e5] [g3,d4,g4,b4,g5]!8 [d4,a4,d5,f#5]!8 [g3,d4,g4,b4,g5]!8 [a3,e4,a4,c#5,e5]!7 [a3,e4,a4,e5] [g3,d4,g4,b4,g5]!8 [d4,a4,d5,f#5]!8 [g3,d4,g4,b4,g5]!8 [a3,e4,a4,c#5,e5]@4 [a3,e4,a4,c#5,e5]@4, ~@12 c#5@26 ~@9 c#5@25 ~@7 c#5@25 ~@8]/7", // A A5 G D G A A5 G …
  AA: "[a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]!4", // A
  AB: "[[a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,e5]@2 [d4,a4,d5,f#5]@5 ~@3 [g3,d4,g4,b4,g5]@5 ~ [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5] ~ [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]@2, ~@3 c#5@8 ~@5]/2", // A A5 D G A
  AC: "[[a3,e4,a4,e5]@2 [a3,d4,a4,d5,f#5]!2 [a3,d4,a4,d5,f#5]@2 [a3,e4,a4,e5]@2 [d4,a4,d5,f#5]@5 ~@3 [g3,d4,g4,b4,g5]@5 ~ [a3,e4,a4,c#5,e5]@3 ~ [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]@2, c#5@3 c#5@8 ~@5]/2", // A5 D A5 D G A
  AD: "[[a3,e4,a4,e5]@2 ~@6 [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,e5]@2 ~@4 [g3,d4,g4,d5,g5]@2 [g3,d4,g4,d5,g5]@2 ~@4 [d4,a4,d5,e5]@2 [d4,a4,d5,f#5] ~@3 [d4,a4,d5,f#5]@8 ~@2 [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,e5]@2 ~@4 [g3,d4,g4,d5,g5]@2 [g3,d4,g4,d5,g5]@2 ~@4 [d4,a4,d5,e5]@2 [d4,a4,d5,f#5] ~@3 [a3,e4,a4,e5]@8 ~@2 [a3,e4,a4,e5]@6 ~@2 [g3,d4,g4,b4,g5]@5 ~@3 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 ~@2 [d4,a4,d5,f#5]@7 [d4,a4]@2 ~ [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]!2 [a3,e4,a4,c#5,e5]@4, c#5@4 ~ c#5@15 ~ c#5@10 c#5@5 c#5@16 ~@4]/7", // A5 A A5 G5 Dsus2 D A A5 …
  AE: "[[g3,d4,g4,b4,g5]@2 [g3,d4,g4,b4,g5]!2 [g3,d4,g4,b4,g5]@4 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 a3@2 [a3,e4,a4,c#5,e5]@8 ~ a4 [a3,e4,a4,e5]@6 ~@2 [g3,d4,g4,b4,g5]@5 ~@3 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 ~@2 [d4,a4,d5,f#5]@7 [d4,a4]@2 ~ [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]!2 [a3,e4,a4,e5]@4 [g3,d4,g4,b4,g5]@2 [g3,d4,g4,b4,g5]!2 [g3,d4,g4,b4,g5]@4 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 a3@2 [a3,e4,a4,e5]@8 ~@2 [a3,e4,a4,e5]@6 ~@2 [g3,d4,g4,b4,g5]@5 ~@3 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 ~@2 [d4,a4,d5,f#5]@7 [d4,a4]@2 ~ [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]!2 [a3,e4,a4,c#5,e5]@4, ~@11 c#5 c#5@16 ~@2 c#5@9 c#5@5 c#5@16 ~@4]/8", // G D A A5 G D D5 A …
  AF: "[[g3,d4,g4,b4,g5]@2 [g3,d4,g4,b4,g5]!2 [g3,d4,g4,b4,g5]@4 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 a3@2 [a3,e4,a4,c#5,e5]@8 ~ a4 [a3,e4,a4,e5]@6 ~@2 [g3,d4,g4,b4,g5]@5 ~@3 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 ~@2 [d4,a4,d5,f#5]@7 d4@2 ~ [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]!2 [a3,e4,a4,e5]@4 [g3,d4,g4,b4,g5]@2 [g3,d4,g4,b4,g5]!2 [g3,d4,g4,b4,g5]@4 [d4,a4,d5,f#5]@3 ~ [b3,f#4,b4,d5,f#5]@3 ~, ~@11 c#5 c#5@16 ~@2 c#5@10]/5", // G D A A5 G D A A5 …
  AG: "[a3,e4,a4,e5]@11 ~@5, c#5", // A5
  AH: "[[a3,e4,a4,c#5,e5]@2 [a3,e4,a4,e5]@2 ~@4 [g3,d4,g4,d5,g5]@2 [g3,d4,g4,d5,g5]@2 ~@4 [d4,a4,d5,e5]@2 [d4,a4,d5,f#5] ~@3 [d4,a4,d5,f#5]@8 ~@2, ~ c#5@15]/2", // A A5 G5 Dsus2 D
  AI: "[[a3,e4,a4,c#5,e5] [a3,e4,a4,e5] ~@2 [g3,d4,g4,d5,g5]!2 ~@2 [d4,a4,d5,f#5] b3 [a3,e4,a4,e5] [d4,a4,d5,f#5]@5 ~@32, ~@2 c#5@18 c#5@75 ~]/6", // A A5 G5 D A5 D
})).s("gm_electric_guitar_clean").gain(0.19).pan(0.4)

// chords · acoustic guitar nylon · "Guitar4"
const acoustic_guitar_nylon_2 = note("<~@72 A@8 ~@17>".pickRestart({
  A: "[~@12 [b5,d6] ~ [a5,c#6] [b5,d6]@4 ~ [a5,c#6] ~ [e5,g5] [e5,g5]@2 [f#5,a5]@11 ~@8 [b5,d6] ~ [a5,c#6] [b5,d6]@4 ~ [a5,c#6] ~ [e5,g5] [e5,g5]@2 [f#5,a5]@4 ~ f#5@8 ~@6 [b5,d6] ~ [a5,c#6] [b5,d6]@4 ~ [a5,c#6] ~ [e5,g5] [e5,g5]@2 [f#5,a5]@11 ~@8 [b5,d6] ~ [a5,c#6] [b5,d6]@4 ~ [a5,c#6] ~ [e5,g5] [e5,g5]@2 [f#5,a5]@4 ~ f#5@2]/8", // Bm A Bm A Em F#m Bm A …
})).s("gm_acoustic_guitar_nylon").gain(0.13).pan(0.4)

// chords · epiano1 · "Keys"
const epiano1 = note("<A B A C ~@30 A B A C ~@30 D E@2 F@2 ~@24>".pickRestart({
  A: "[a3,e4,a4,c#5,e5]!2 ~@2 [g3,d4,g4,d5]!2 ~@2, ~@8 g5 ~ g5 ~@5", // A G5
  B: "[d4,a4,d5,e5]@2 [d4,a4,d5,f#5] ~@3 [d4,a4,d5,f#5]@8 ~@2", // Dsus2 D
  C: "[d4,a4,d5,e5]@2 [d4,a4,d5,f#5] ~@3 [a3,e4,a4,c#5,e5]@8 ~@2", D: "~@4 [a3,e4,a4,c#5,e5]!2 ~@2",
  E: "[[g3,d4,g4,d5]@2 [g3,d4,g4,d5]@2 ~@4 [d4,a4,d5,e5]@2 [d4,a4,d5,f#5] ~@3 [d4,a4,d5,f#5]@8 ~@2 [a3,e4,a4,c#5,e5]@2 [a3,e4,a4,c#5,e5]@2 ~@4, g5 ~ g5 ~@29]/2", // G5 Dsus2 D A
  F: "[[g3,d4,g4,d5]@2 [g3,d4,g4,d5]@2 ~@4 [d4,a4,d5,e5]@2 [d4,a4,d5,f#5] ~@3 [a3,e4,a4,c#5,e5]@8 ~@10, g5 ~ g5 ~@29]/2", // G5 Dsus2 D A
})).s("gm_epiano1").gain(0.61).pan(0.6)

// chords · percussive organ · "Organ"
const percussive_organ = note(`<
  A B A C D E D F D G H I D J K L D G H M N O P O P O Q@2 ~@10 D E D F D G H R S T@2 U V W@2 X ~ Y Z Y Z Y AA@3 ~@9 AB
  AC@2 AD@2 W@2 AE@2 T@2 U V W@2 X ~@9
>`.pickRestart({
  A: "[a3,e4]!2 ~@2 g3!2 ~@2", B: "a3!2 ~ d4@4 ~", C: "a3!2 ~ a3@4 ~", D: "c#5 d5", E: "b4 a4!2 a4@4 ~, a4 ~@15",
  F: "b4 a4 g#4 e4@4 ~, a4 ~@15", G: "b4 a4 f#4 d4@4 ~, a4 ~@15", H: "c#5 d5, b4 ~@7 b4 ~@7",
  I: "b4 a4!2 [c#4,e4]@4 ~, a4 ~@15", J: "b4@2 a4@2 f#4@2 ~@7 f#4@3, a4 ~@5 [d4,a4]@8 ~@2, ~@6 g#4 ~",
  K: "c#5 d5, ~@8 b4 ~@7", L: "[b4,d5]@2 [d5,f#5] f#5@3 [a4,f#5] ~ [e5,a5]@4 c#5@4, a4 ~@2 a4 ~@4 a4 ~@7",
  M: "[d4,a4] b3 ~@2", N: "~@9 g4 d4 ~@5, ~@8 [b4,d5]@3 ~@5", O: "d4@2 d4@2 ~@8 b3@3 ~, ~ [g3,d4]",
  P: "~@2 a4@3 ~@4 g4 d4 ~@5, e4@5 ~@3 [b4,d5]@3 ~@5", Q: "[[a3,e4]@7 ~, a4@11 ~@21]/2",
  R: "[d4,a4]@4 b3@4 [a3,e4,a4]@4 [a3,e4,a4]@3 [a3,e4,a4]", S: "[a3,e4,a4] ~@7 c#5@8",
  T: "[d5@8 b4@2 a4@2 f#4@2 ~@7 f#4@3 c#5@8, ~@8 a4 ~@5 [d4,a4]@8 ~@10, ~@10 g#4 ~@5]/2", // D5
  U: "d5@8 [b4,d5]@2 [d5,f#5] f#5@3 [a4,f#5] ~, b4 ~@7 a4 ~@2 a4 ~@4", V: "[e5,a5] c#5 c#5@2, a4 ~@15",
  W: "[d5@4 b4 a4 f#4 d4@4 ~ c#5@4, ~@8 a4 ~@15 b4 ~@7]/2", X: "d5@2 [d4,a4] b3, b4 ~@15",
  Y: "~ g4 d4 ~@5 d4@2 d4@2 ~@4, [b4,d5]@3 ~@13", Z: "~@4 b3@3 ~@3 a4@3 ~@3, [g3,d4]@8 e4@5 ~@3",
  AA: "[~@4 b3@3 ~ [a3,e4]@28 ~@12, [g3,d4]@8 a4@11 ~@29]/3", AB: "~ c#5",
  AC: "[d5@4 b4 a4!2 a4@4 ~ c#5@4, ~@8 a4 ~@23]/2", AD: "[d5@4 b4 a4 g#4 e4@4 ~ c#5@4, ~@8 a4 ~@23]/2",
  AE: "[d5@4 b4 a4!2 [c#4,e4]@4 ~ c#5@4, b4 ~@7 a4 ~@23]/2", // C#m
})).s("gm_percussive_organ").gain(0.25).pan(0.6)

// other · electric guitar jazz · "Solo Guitar2"
const electric_guitar_jazz = note("<~@72 A ~ B ~ C ~ D ~ E ~@16>".pickRestart({
  A: "~@8 c#6@5 ~@3, ~@8 b5 ~@7", B: "~@2 [b5,c#6] a6 c#6 b5 a5 f#5 a5!2 f#5 ~@5",
  C: "[e6,f#6] e6 d6 b5 d6 b5 [e6,f#6]@2 ~@8", D: "[e6,f#6] e6@3 d6@2 b5 a5@2 ~ f#5 a5 a5@4",
  E: "[e6,f#6] e6 d6 e6 d6 e6@2 f#6 a6@8", // Esus2
})).s("gm_electric_guitar_jazz").gain(0.8).pan(0.6)

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

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@21 [~@3 x ~@4]!5 ~@29 [~@7 x]!5 ~@37>").gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@20 [~@6 x!2 ~@8] [~@4 x!2 ~@10]!5 ~@28 [~@14 x!2] [~@12 x!2 ~@2]!5 ~@37>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@19 A B ~@12 C ~@11 D ~@8 E ~@12 F G ~@19 H ~@8>".pickRestart({
  A: "~@5 x ~ x", B: "~ x ~ x ~@4", C: "~@3 x!2 ~@3", D: "~ x", E: "~ x ~ x ~ x ~ x", F: "~@7 x", G: "x",
  H: "x ~ x!3 ~ x ~ x ~@7",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@20 [~ x ~@2] ~@33 [~@3 x] ~@42>").gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@15 B ~@8 C D C D C ~@12 E ~@7 F E ~@7 G A H A H A ~@19 G ~@4 I ~@4
>`.pickRestart({
// … 50 more lines

More by Crosby, Stills, Nash & Young