Strudelify

Sailing

Rod Stewart

KeyG majorTempo80 bpm
0:00/0:00
// Sailing — Rod Stewart
// 80 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 54 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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
const bass = note(`<
  ~@5 A B C D E F G H A B C D E F G H A B C D E F I J A B C D E F I J K A B C D E F I J L M L M L M L N
>`.pickRestart({
  A: "g2@41 ~ f#2@5 ~", B: "e2", C: "c2@42 d2@5 ~", D: "g2@41 ~ g2@5 ~", E: "a2@35 ~ a2@12", F: "e2@23 ~",
  G: "c2@23 ~ d2@10 ~@2 d2@3 e2@2 ~ g2@5 ~", H: "g2@11 ~ d2@10 ~@2 f#2@11 ~ d2@11 ~", I: "a1@23 ~ a2@12 ~@6 a2@6",
  J: "g2@11 ~ g1@10 ~@2 d2@11 ~@7 d2@3 ~@3", K: "d2@5 ~ d2 ~ d3@6 d2 ~", L: "a2@5 ~ a2 ~ a2@6 a1 ~", M: "g1 g2 d2!2",
  N: "g1 g2 ~@2",
})).s("gm_fretless_bass").gain(0.27)

// chords · piano
const piano = note(`<
  ~ A B@2 C D E F G H I J K L E M N O P@2 Q R@2 S T U V W X Y Z AA@2 AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR
  AS AT AU AV
>`.pickRestart({
  A: "~@12 d4@12 [c4,d4]@23 ~, [g3,b3]@25 ~@23", // Csus2 G
  B: "[~@12 d4@12 [c4,d4]@23 ~ [g3,b3]@24 [f#3,b3,d4]@24, [g3,b3]@25 ~@22 d4@25 ~@24]/2", // Csus2 G Bm G
  C: "~ [e3,c4]@23 [d3,a3,c4]@24, g3 ~", D: "~@12 b3@12 ~@12 b3@11 ~, g3@23 ~ g3@24, ~@6 d4@18 ~@6 d4@17 ~",
  E: "~ g3 ~ g3, e3!2, ~@6 b3@19 ~@5 b3@18", F: "~@6 g3@6 e3@11 ~@13 c4@12, c3@15 ~@8 g3@25, ~@5 e4@3",
  G: "~ b3 ~ b3, g3!2, ~@6 d4@19 ~@4 d4@18 ~", H: "~ e4 c#4@2 ~@2 a3@2, a3@11 ~@13 e3@24, ~@29 c#4@18 ~",
  I: "~ g3 ~ g3, e3!2, ~@3 b3@10 ~@2 b3@9", J: "~ e4 ~@4 c4@2, a3 c4@2 ~, ~ a3, ~@5 e4@3",
  K: "~ b3 ~ c4, g3@25 ~@5 d4@18, ~@5 d4@19 f#3@24", L: "~ d4 b3@2 ~@2 b3@2, g3@13 ~@11 g3@24, ~@5 d4@3",
  M: "~ g3 e3@2 ~@2 c4@2, c3 ~ g3@2, ~@5 e4@3", N: "~@6 d4@6 b3@11 ~@13 b3@12, g3 ~ g3@2, ~@5 d4@3",
  O: "~ e4 c#4@2 ~@2 a3@2, a3@13 ~@11 e3@24, ~@5 c#4@3",
  P: "[~@12 g3@12 ~@12 g3@11 ~@6 e4@7 c4@12 ~@12 c4@12, e3@24 e3@23 a3@13 ~@12 a3@24, ~@6 b3@19 ~@5 b3@19 ~@29 e4@18]/2",
  Q: "~@12 b3@12 ~@12 c4@11 ~, g3 f#3, ~@6 d4@19 ~@5 d4@18",
  R: "[~@41 g3@6 ~@19 b3@5 ~@19 e3@6, g3@24 g3@17 ~@6 e3@24 e3@19 ~@6, ~@6 d4@12 d4@12 d4@19 ~@11 g3@12 ~@12 g3@12, ~@12 b3@24 b3@13 ~@5 b3@12 ~@12 b3@18]/2",
  S: "~@18 g3@6 ~@17 g3@6 ~, c3@24 c3@23 ~, ~@6 g3@12 ~@12 g3@11 ~@7, ~@12 e3@13 ~@11 e3@12",
  T: "~@3 d4 ~@3 d4, g3!2, ~@6 d4@12 ~@11 d4@12 ~@7, ~@12 b3@13 ~@11 c4@12",
  U: "~@17 e4@7 ~@18 g3@6, a3@4 g3@3 ~, ~@6 e4@11 ~@13 e4@18, ~@11 c#4@13 ~@12 c#4@12",
  V: "~@18 b3@5 ~@7 b3@5 ~@7 b3@6, e3@22 ~ e3@11 ~@14, ~ b3@2 ~@5, ~@12 g3@11 ~@12 g3@12 ~",
  W: "~@7 e4, a3!2, ~@6 e4@11 e4@12 ~ e4@12 ~@6, ~ c#4@2 c#4",
  X: "~@17 d4@6 ~ [a3,c4]@12 [f#3,c4]@12, g3@23 ~@25, ~@6 d4@11 ~@31, ~ b3 ~@2", // Am F#dim
  Y: "~ d4 ~ d4 ~@3 g3, ~ g3@11 b3@12 g3@18 ~@6, ~@5 d4@3, ~@3 b3",
  Z: "~@18 b3@5 ~@19 e3@6, e3@23 ~ e3@18 ~@6, ~@5 b3@12 ~@13 b3@18, ~@12 g3@11 ~@13 g3@12",
  AA: "[~@6 g3@5 ~@7 g3@5 ~@7 g3@6 ~@6 g3@5 g3@7 d4@5 ~@7 d4@6 ~@17 d4@7, c3@10 ~@2 e3@11 c3@12 ~ e3@15 ~@9 b3@11 ~ g3@24, ~@77 d4@12 ~@7, ~@83 b3@13]/2",
  AB: "~@6 e4@6 ~@5 e4@7 g3@5 ~@13 g3@6, a3@2 c#4@2 ~ e4@3, ~@3 c#4",
  AC: "~@9 b3@3 ~@9 b3@2 ~, e3@12 e3@11 ~, ~ b3@2 ~@2 b3@2 ~, ~@6 g3@6 ~@6 g3@5 ~",
  AD: "~@3 e4 ~@3 e4, a3@24 a3@23 ~, ~ e4@2 ~@2 e4@2 ~, ~@12 c4@12 ~@12 c4@11 ~",
  AE: "~@3 d4 [a3,c4]@4, g3@2 ~ b3@3 ~@6, ~@5 d4@12 ~@31", AF: "[f#3,a3,c4] [f#3,c4], ~@12 d3@5 ~@7",
  AG: "~@6 d4@6 b3@5 ~ d4@6 g3@6 d4@6 ~@5 g3@7, g3@13 ~@23 b3@12",
  AH: "~@6 b3@6 ~@6 b3@6 ~@17 e3@7, e3@6 g3@6 e3@5 ~ g3@6, ~@5 b3@3",
  AI: "~@6 g3@6 ~@6 g3@5 ~@19 g3@6, c3@12 e3@11 c3@25, ~@29 g3@12 ~@7, ~@35 e3@13",
  AJ: "~@6 d4@6 ~@5 d4@6 ~@19 d4@6, g3@11 ~ b3@11 g3@24 ~, ~@5 d4@2 ~, ~@3 b3",
  AK: "~@5 e4@7 ~@29 g3@7, a3@12 c#4@10 ~@2 g3@17 ~@7, ~@3 e4@2 e4@3, ~@35 c#4@13",
  AL: "~@6 b3@5 ~@7 b3@6 ~@6 b3@5 ~@7 b3@6, e3@10 ~@2 g3@12 e3@11 ~ g3@12",
  AM: "~@3 e4 ~@3 e4, a3@5 ~ c4@5 ~ a3@12, ~@6 e4@12 ~@11 e4@12 ~@7, ~@3 c4",
  AN: "~@17 d4@6 ~ [f#3,c4,d4]@24, g3 ~, ~@6 d4@11 ~@31, ~ b3 ~@2", // D7
  AO: "~@6 e4@6 c4@5 ~ e4@6 ~@17 a3@7, a3@13 ~@11 a3@17 ~@7, ~@5 e4@3, ~@3 c4",
  AP: "~@3 d4 [f#3,c4,d4]@4, g3@13 ~@11, ~@5 d4@12 ~@31, ~@6 b3@7 ~@11", // D7
  AQ: "a3 e4 ~ e4 ~ e4 ~ a3, ~@6 c4@5 ~ a3@5 ~ c4@6", AR: "~@3 d4 [f#3,c4,d4]@4, g3@10 ~ b3@13 ~@24, ~@5 d4@12 ~@31",
  AS: "~@6 e4@6 c4@5 ~ e4@5 ~@19 e4@6, a3@12 ~@11 a3@25, ~@29 e4@12 ~@7, ~@3 c4",
  AT: "~@17 d4@6 ~ [f#3,c4,d4]@24, g3@3 ~ b3@4 ~@8, ~@5 d4@12 ~@31", // D7
  AU: "~@5 e4@7 c4@6 e4@5 ~@19 e4@6, a3@13 ~@10 a3@24 ~, ~@30 e4@11 ~@7, ~@35 c4@12 ~",
  AV: "~@11 b3@13 ~@24, g3@25 ~@23, ~@5 d4@18 ~@25",
})).s("gm_piano").gain(0.4).pan(0.4)

// chords · piano
const piano_2 = note(`<
  ~ A B C D E F G H I J K L M N G H O P Q R M S T U V W X Y Z AA AB@2 AC AD AE AF AG AH AI AJ AK@2 AL AM AN AO AP AQ AR
  AS AT AU@2
>`.pickRestart({
  A: "~@18 g4@6 ~@12 f#4@11 ~, ~@6 b4@18 [g4,a4]@23 ~, ~@12 d5@13 ~@23", // Gsus2
  B: "~@17 g4@6 ~@13 f#4@12, ~@5 b4@19 [g4,a4]@24, ~@11 d5@13 ~@24", // Gsus2
  C: "~@3 b4 d5 ~ b4@2, ~ d5@3 ~@4, ~@2 g5@2 ~ f#5@3", D: "c5@5 ~@7 g4@12 ~@18 e4@6, ~ e5@3 [f#4,a4]@4, ~@3 d4",
  E: "g4@2 ~@5 d5, ~@12 g4@35 ~, ~@36 b4@11 ~", F: "e5@12 e5@24 ~@8 d5@3 ~, ~@3 e5", G: "d5@4 c5@8 c5@3 b4",
  H: "~@7 b4, b4@41 ~@7, ~@3 c5", I: "~@6 a4@5 ~@31 a4@6, b4@11 ~ a4@30 ~@6, ~@3 [g4,b4]",
  J: "g4@12 g4@13 ~@17 e4@6, ~@3 d4", K: "~ a4 a4@4 ~ g4, b4@13 ~@23 a4@12", L: "g4@4 ~@3 e4, ~@3 d4",
  M: "g4@2 ~@5 d5, ~ g4@3, ~@3 b4", N: "e5@7 ~@5 e5@24 e5@9 d5@3",
  O: "~@6 a4@6 a4@13 ~@16 a4@7, b4@13 ~@22 b4@13, ~@3 g4", P: "g4@12 g4@19 ~@11 e4@6, ~@3 d4",
  Q: "b4@5 ~ a4@6 a4@23 ~@6 g4@6 ~, ~@35 a4@13", R: "g4@9 ~@5 e4@2, ~@3 d4", S: "e5@4 e5@8 e5@3 d5",
  T: "d5@5 ~ c5@6 c5@22 ~ d5@10 b4@3", U: "~@41 b4@6 ~, b4@41 ~@7, ~@35 c5@12 ~",
  V: "~@6 a4@23 ~ e5@6 e5@9 b4@3, [g4,b4]@13 ~@35", W: "~ g4@7 ~@4 g4@22 ~@7 g4@7, ~@35 e4@13",
  X: "~@3 a4@3 a4@10 ~@5 g4@3, b4@13 ~@23 a4@12", Y: "g4@23 ~ [g4,c5,d5]@12 [a4,c5,d5]@12",
  Z: "e5@6 d5@6 ~@29 d5@7, ~@12 d5@29 ~@7, ~@35 b4@13", AA: "e5@8 ~@4 e5@19 ~@5 e5@9 d5@3",
  AB: "[d5@3 ~@3 c5@3 ~@3 c5@23 ~@54 b4@7, ~@36 d5@12 b4@41 ~@7, ~@45 c5@6 ~@32 d5@13]/2",
  AC: "g4@2 ~ b4@3 g4@7 ~@8 b4@3, e5 a4@3, ~@11 b4@3 ~@2, ~@3 e5", AD: "g4@7 ~@35 e4@4 ~@2, ~@6 g4@17 ~, ~@18 d4@5 ~",
  AE: "~@12 a4@19 ~@10 g4@6 ~, b4@24 ~@11 a4@12 ~, ~ g4@3 ~@4", AF: "g4@12 f#4@4 ~@5 g4@3, ~@3 f#4",
  AG: "a4@12 ~@5 b4@7 ~@18 d5@6, ~ a4 c5@2, ~@3 e5", AH: "~@6 d5@6 d5@22 ~@7 d5@7, e5@13 ~@22 b4@13",
  AI: "e5@12 e5@19 ~@4 e5@10 d5@3", AJ: "~@6 c5@6 ~@23 d5@10 c5@3, d5@4 c5@11 ~",
  AK: "[~@41 b4@6 g4@3 ~@4 b4@6 ~@30 b4@6, b4@41 ~@19 [g4,a4]@36, ~@35 d5@12 e5@13 ~@20 b4@9 ~@7, ~@83 e5@13]/2", // Gsus2
  AL: "g4@7 ~@5 g4@24 d4@3 ~@3 e4@6", AM: "b4@6 g4@6 a4@24 a4@5 ~ g4@2 ~@4",
  AN: "~@12 d5@12 e5@5 ~@7 b4@12, g4@24 ~@5 d5@19", AO: "~@6 a4@6 a4@23 ~@6 g4@5 ~@2, b4@13 ~@22 a4@10 ~@3",
  AP: "~@2 d5@2 e5 ~ b4@2, g4@9 ~ d5@6", AQ: "b4@5 ~ a4@2 ~@4 a4@21 ~@8 g4@6 ~, ~@3 a4",
  AR: "~@11 d5@13 e5@6 ~@6 b4@12, g4@25 ~@5 d5@18", AS: "b4@5 ~ a4@6 a4@24 ~@5 g4@6 ~, ~@3 a4",
  AT: "~@2 d5@2 e5 d5 b4@2, g4 ~", AU: "[b4@5 ~ a4@6 a4@23 ~@6 g4@6 ~@12 d5@13 ~@24, ~@35 a4@12 g4@25 ~@24]/2",
})).s("gm_piano").gain(0.56).pan(0.6)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@21 A@8 B@7 C@2 D E@7 F@2 G@2 H@4>".pickRestart({
  A: "[~@130 a4@12 ~ d4@47 ~ c#4@48 ~@48 a4@46 ~@2 g3@23 ~@2 e4@11 ~ [d4,f#4]@11 ~, g4@133 ~@10 g4@143 c#4@49 g4@36 ~@13, ~@46 e4@96 b3@49 ~@48 b3@48 ~@47 d4@25 a3@24 ~, ~@95 c4@48 ~@47 a3@49 ~ e4@97 ~@47]/8", // D
  B: "[~@130 a4@12 ~ d4@47 ~ c#4@48 ~@48 a4@46 ~@3, g4@133 ~@10 g4@143 c4@50, ~@46 e4@96 b3@49 ~@48 b3@48 ~@49, ~@95 c4@48 ~@47 a3@49 ~ e4@96]/7",
  C: "[[g3,d4,g4]@23 f#4@6 d4@3 f#4@3 g4@6 e4@3 g4@3 a4@2 f#4@3 g4@3 a4@3 b4@3 g4@3 ~@3 b4@3 c5@3 a4@3 b4@3 c5@3 d5@4 b4@3 c5@3 d5@4, ~@64 a4@5 ~@27]/2", // G5
  D: "e5 d5@3",
  E: "[b4@47 c5@47 ~ b4@48 c#5@48 [g4,b4]@48 ~ a4@46 ~@24 f#4@25 c5, e5@94 d5@49 e5@144 d5@49, ~@239 c5@46 ~ g4@25 ~@25, ~@287 b4@37 ~@12]/7", // G
  F: "[[a4,e5]@23 g4@12 f#4@13, ~@23 d5@25, ~@23 b4@18 ~@7]/2", // A5
  G: "[[a4,c5,e5]@23 ~@12 f#4@13, ~@23 d5@25, ~@23 g4@12 ~@13, ~@47 b4@35 ~@14]/2", // Am
  H: "[[a4,c5,e5]@46 g4@24 f#4@25 [a4,c5]@47 d5@49 ~, ~@46 d5@49 ~@97]/4", // Am
})).s("gm_string_ensemble_1").gain(0.2).pan(0.2)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@39 A@4 ~@7 B@4>".pickRestart({
  A: "[g4@71 a4@25]/4", B: "[~@47 b4@36 ~@12 e5@48 g4@23 f#4@25 ~, ~@143 b4@36 ~@13]/4",
})).s("gm_string_ensemble_1").gain(0.1).pan(0.2)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~ A@4 B@7 C D E F@4 G@2 H@7 C I@7 C ~@17>".pickRestart({
  A: "[~@18 b3@5 ~@42 b3@6 ~@36 g3@6 a3@4 ~@14 d3@6 b2@6 c3@7 ~@6 g3@6 c4@6 [f#3,a3]@5 ~ [e3,g3]@5 ~ [d3,f#3]@10 ~@2, g2@39 ~@9 g2@23 d4@30 ~@18 b3@26 ~@47, ~@6 d3@37 ~@10 d3@39 ~@4 g2@22 ~@74, ~@12 g3@30 ~@17 g3@32 ~@11 d3@18 ~@30 e3@19 ~@23, ~@23 [a3,d4]@42 ~@6 a3@36 ~@11 a3@2 ~@5 f#3@10 ~@57]/4", // F#m Em D D5
  B: "[~@18 a3@6 ~@41 f#3@6 ~ g3@23 ~@19 d4@3 ~@3 d4 ~@10 g3@7 ~@23 a3@3 ~@3 a3 ~@11 d3@12 ~@18 b3@6 ~@43 f#3@5 g3@24 ~@18 b3@6 d4@25, g2@37 ~@10 e2@36 ~@37 e4@29 ~@19 b3@30 ~@5 a3@23 ~@25 e3@29 ~@13 e3@32 ~@11, ~@6 d3@32 ~@15 b2@31 ~@11 c3@36 ~@13 g2@33 ~@14 a2@39 ~@9 e2@29 ~@68, ~@12 g3@26 ~@21 e3@30 ~@13 g3@27 ~@20 d3@26 ~@22 e3@31 ~@17 b2@26 ~@16 a2@39 ~@10, ~@24 b3@30 ~@54 c4@15 ~@3 c4@8 ~@21 g3@15 ~@3 g3@16 ~@26 c#4@31 ~@53 a3@25 ~@12]/7",
  C: "~@12 g3@5 ~@18 f#3@7 a3@4 ~@2, g2@17 b3@13 d3@13 ~@5, ~ d3@2 ~ f#2@3 ~",
  D: "~@18 a3@6 ~@12 d3@6 g2 ~@5, g2@3 ~, ~ d3@4 g3@2 ~, ~ g3 b3@2",
  E: "~@18 f#4@3 ~@3 f#4 ~@11 b3@6 e3@6, e3@3 ~, ~ b3@4 e4@2 ~, ~@12 e4@12 g4@23 ~",
  F: "[~@17 d4@3 ~ d#4 ~@7 c4@7 g3@6 c4@3 ~@20 a3@3 ~@3 a#3 ~@6 g3@6 d3@6 g3@5 ~@18 a3@7 ~@12 g3@6 e3@3 ~@15 e3@6 f#3@2 ~@4 g3@6 ~@12 b2@2 ~@4, c3@41 ~@6 g2@38 ~@10 a2@42 ~@7 e2@42 ~@6, ~@6 g3@27 ~@20 d3@25 ~@23 e3@31 ~@18 b2@32 ~@10, ~@11 c4@16 ~@32 g3@15 ~@34 g3@18 a3@25 ~@16 e3@4 ~@9 e3@11 ~, ~@23 e4@31 ~@18 b3@41 ~@7 c#4@24 ~@24 f#3 ~@5 f#3@17 ~]/4",
  G: "[~@17 b3@6 ~@12 a3@6 e3@2 ~@23 f#3@2 ~ g3@2 ~ a3@3 b3@3 c4@3 d4@3 e4@3 f#4@3 g4@3 a4@3, a2@43 ~@5 g2@24 ~@24, ~@6 e3@31 ~@17 b2@18 ~@24, ~@11 a3@17 ~ b3@26 ~@5 d3@12 ~@24, ~@23 c4@12 ~@61]/2",
  H: "[~@18 a3@6 ~@41 f#3@6 ~ g3@23 ~@19 d4@3 ~@3 d4 ~@5 c4@5 g3@7 ~@23 a3@3 ~@3 a3 ~@11 d3@12 ~@18 b3@6 ~@43 f#3@5 g3@24 ~@18 b3@7 c#4@24, g2@37 ~@10 e2@36 ~@37 e4@29 ~@19 b3@30 ~@5 a3@23 ~@25 e3@29 ~@13 e3@32 ~@11, g4@12 g3@26 ~@22 e3@30 ~@12 g3@27 ~@20 d3@26 ~@22 e3@31 ~@17 b2@26 ~@16 a2@39 ~@10, ~@6 d3@32 ~@15 b2@31 ~@11 c3@36 ~@13 g2@33 ~@14 a2@39 ~@9 e2@29 ~@68, ~@24 b3@30 ~@54 c4@15 ~@32 g3@15 ~@3 g3@16 ~@26 c#4@31 ~@53 a3@24 ~@13]/7",
  I: "[~@18 a3@6 ~@41 f#3@6 ~ g3@23 ~@19 d4@3 ~@3 d4 ~@5 c4@5 g3@7 ~@23 a3@3 ~@3 a3 ~@11 d3@12 ~@18 b3@6 ~@43 f#3@5 g3@24 ~@18 b3@7 c4@24, g2@37 ~@10 e2@36 ~@37 e4@29 ~@19 b3@30 ~@5 a3@23 ~@25 e3@29 ~@13 e3@32 ~@11, ~@6 d3@32 ~@15 b2@31 ~@11 c3@36 ~@13 g2@33 ~@14 a2@39 ~@9 e2@29 ~@68, ~@12 g3@26 ~@22 e3@30 ~@12 g3@27 ~@20 d3@26 ~@22 e3@31 ~@17 b2@26 ~@16 a2@39 ~@10, ~@24 b3@30 ~@54 c4@15 ~@32 g3@15 ~@3 g3@16 ~@26 c#4@31 ~@53 a3@24 ~@13]/7",
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.8)

// chords · pad bowed
const pad_bowed = note("<~@5 A B@5 C@3 D@5 E@3 ~@32>".pickRestart({
  A: "g4@32 ~@3 g4@6 a4@6 ~",
  B: "[b4@35 ~ b4@6 d5@2 ~@3 g4@33 ~@3 c5@6 d5@6 ~ g4@40 ~ b4@6 a4@41 ~ a4@6 g4@40 ~@2 g4@6 ~, e4@91 ~@4 d4@42 ~@6 c#4@48 b3@48 ~]/5",
  C: "[[c4,a4]@47 g4@14 ~@10 f#4@17 ~@7 [g4,d5]@37 ~@6 a4@6, ~@132 g4@11 ~]/3", // F G5
  D: "[[e4,b4]@33 ~@2 b4@7 d5@5 g4@34 ~ g4@6 ~ a4@6 ~@30 d4@5 ~@2 b4@11 ~ a4@34 c#5@12 ~@12 b4@38, ~@47 c4@47 ~ b4@35 ~@13 c#4@47 b3@47 ~@3, ~@191 e5@43 ~@6]/5", // E5
  E: "[e4@11 c4@11 ~@19 b4@6 [d4,g4]@22 ~@2 f#4@11 ~@13 g4@23 ~@26, a4@41 ~@103, ~@11 e4@12 ~@49]/3", // G5
})).s("gm_pad_bowed").gain(0.31).pan(0.1)

// chords · percussive organ
const percussive_organ = note("<~@37 A B@5 C D@8 E@2>".pickRestart({
  A: "~@41 g4 [a4,b4] [c5,d5] [e5,f5] g5 [a5,b5] c6", // Asus2 Csus2 Fmaj7 Asus2
  B: "[[d6,g6]@27 ~@3 d6@14 ~@2 d#6 e6@45 ~@3 d#6 e6@33 ~@2 d#6 e6@8 ~@3 [d6,g6]@35 ~ d6@9 ~@3 e6@46 ~@3, ~@30 g6@62 ~@3 g6@47 ~@37 g6@60 ~, ~@191 c#6@35 ~@14]/5", // G5
  C: "[d6,g6]@23 ~", // G5
  D: "[a6@33 ~@3 a6@11 f#6 g6@21 ~@2 f#6@24 ~ a6@47 [d6,g6]@25 [d6,f#6]@23 [c6,a6]@35 ~ g#6 [c6,a6]@11 [d6,g6]@23 ~ f#6@24 g#6 ~ a6@33 ~@2 [c6,a6]@10 ~ g6@23 ~ d6@20 ~@4 [c6,g#6], e6@47 d6@45 ~@3 c6@48 ~@120 d6@21 ~@3 c6@35 ~@12 d6@22 ~@28, ~@48 f6 ~@335]/8", // G5 D F G5 F Fm
  E: "[a6@34 ~@2 [c6,a6]@11 g6@24 ~@25, ~@47 d6@20 ~@29]/2", // F
})).s("gm_percussive_organ").gain(0.21).pan(0.9)

// chords · percussive organ · soft notes
const percussive_organ_soft = note("<~@42 [~@35 c#6@11 ~@2] ~@8 [~@23 f#6@24 ~] ~ [~@23 f#6@25]>")
  .s("gm_percussive_organ").gain(0.14).pan(0.9)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A B C D E@2 F E@2 D G D H I J K D L@2 M L@2 N O P Q L R S T N U A E V W X Y Z AA F AB AC AD ~ AE AF AG AH
>`.pickRestart({
  A: "x", B: "x ~@16 x ~@6 x ~@23", C: "~ x", D: "x ~@2 x!2 ~@3", E: "x!2", F: "x ~@16 x ~@5 x ~@24",
  G: "x ~@17 x ~@4 x ~@24", H: "x ~@17 x ~@4 x ~@23 x", I: "~@3 x!2 ~@3", J: "x ~@17 x ~@4 x ~@18 x ~@5",
  K: "x ~@5 x ~ x ~ x!2 ~@2 x ~", L: "x ~@2 x ~@2 x ~ x ~@7", M: "x ~@8 x ~@8 x ~@4 x ~@24",
  N: "x ~@8 x ~@7 x ~@5 x ~@24", O: "x ~@6 x ~@2 x ~@5", P: "x ~ x ~@3 x ~ x ~@2 x ~@4",
  Q: "x ~@7 x ~@9 x ~@5 x ~@8 x ~@14", R: "x ~@8 x ~@8 x ~@5 x ~@7 x ~@14 x", S: "~@9 x ~@2 x ~@3 x ~@7",
  T: "x ~@5 x ~ x ~@2 x ~@4", U: "x ~@3 x ~@2 x", V: "x ~@8 x ~@8 x ~@4 x ~@9 x ~@7 x ~@6",
  W: "x ~@17 x ~@5 x ~@7 x ~@8 x ~@5 x", X: "~@9 x ~@8 x ~@5 x ~@8 x ~@7 x ~@5 x", Y: "~@18 x ~@5 x ~@7 x ~@8 x ~@5 x",
  Z: "~@6 x ~ x ~@2 x ~@2 x ~", AA: "x ~@5 x ~ x ~@2 x ~@2 x ~", AB: "x ~@7 x ~ x ~@2 x ~@2", AC: "x ~@4 x ~@2",
  AD: "x ~@28 x ~@11 x ~@5 x", AE: "x ~@28 x ~@18", AF: "x ~@40 x ~@6", AG: "x!2 ~ x", AH: "x ~@16 x ~@30",
})).gain(0.35)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@5 A ~ B ~ C@2 ~ C@2 ~@19 D ~@16 E ~@3>".pickRestart({
  A: "~@3 x!2 ~@3", B: "x ~@2 x ~@4", C: "~@3 x ~@4", D: "~@7 x", E: "~@16 x ~@4 x ~@2",
})).gain(0.2)

// drums · rim
const rim = s("rim").struct("<~@12 [~@3 x] ~@8 [~ x ~ x]!3 [~@11 x ~@24 x ~@11] [~ x ~ x]!3 [~ x ~@2] ~@25>").gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@29 A B C A@2 C@3 D C@4 E C@2 F C D A F A G ~@2>".pickRestart({
  A: "~@12 x ~@22 x ~@12", B: "~@11 x ~@24 x ~@11", C: "~ x ~ x", D: "~ x ~@2", E: "~@11 x ~@23 x ~@12",
  F: "~@11 x ~@36", G: "~@11 x ~@17 x ~@18",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@28 A ~@8 B ~@7 C ~ D ~ E ~@4>".pickRestart({
  A: "~@21 x!3", B: "~@41 x ~@6", C: "~@29 x ~@5 x ~@5 x ~@6", D: "~@7 x", E: "~@12 x!3 ~",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C ~ D E F G H F I J K I L M N O P Q A R S T U V W X Y Z AA AB AC AD AE AF AG AH ~@16
>`.pickRestart({
  A: "x!4", B: "~@23 x ~@24", C: "~@23 x ~@5 x ~@18", D: "x!2 ~ x!2 ~@3", E: "x ~@3 x ~ x!2", F: "x ~@5 x!2",
  G: "x ~@40 x ~@6", H: "x ~@3 x ~@7 x ~ x!2", I: "x ~@2 x", J: "x ~@10 x ~@12 x ~@23", K: "x ~@11 x ~@10 x ~@5 x ~@18",
  L: "x ~@22 x ~@5 x ~@5 x ~@12", M: "x ~@2 x!2 ~@3", N: "x!2 ~@2 x ~ x ~", O: "x ~@23 x ~@10 x ~@12",
  P: "x ~@17 x ~@5 x ~@10 x ~@12", Q: "x ~@5 x ~@11 x ~@4 x ~@11 x ~@12", R: "x ~ x!2 ~@2 x ~ x!2 ~@4 x ~",
  S: "x ~ x ~@3 x ~ x!2 ~ x ~@2 x ~", T: "x ~@5 x ~@10 x ~@5 x ~@6 x ~@2 x ~@2 x ~@4 x ~@5 x",
  U: "~@5 x ~@11 x ~@6 x ~@4 x ~@2 x ~@2 x ~@6 x ~@5", V: "x ~@5 x ~@2 x ~@8 x ~@5 x ~ x ~@5 x ~@8 x ~@6",
  W: "x ~ x!2 ~@2 x ~ x ~ x!3 ~ x ~", X: "x ~@5 x ~@10 x ~@5 x ~@5 x ~@2 x ~@2 x ~@5 x ~@6",
  Y: "x ~@5 x ~@10 x ~@6 x ~@2 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@2",
  Z: "x ~@5 x ~@11 x ~@5 x ~@5 x ~@2 x ~@2 x ~@5 x ~@4 x", AA: "~@5 x ~@11 x ~@5 x ~@5 x ~@2 x ~@3 x ~@5 x ~@5",
  AB: "x ~ x ~@3 x ~ x ~ x!3 ~ x ~", AC: "x ~@5 x ~ x ~@9 x ~@5 x ~@2 x ~@5 x ~@7 x ~@5 x",
  AD: "~@6 x ~@11 x ~@5 x ~@8 x ~@7 x ~@6", AE: "x ~@5 x ~@2 x ~@2 x ~@5 x ~@2 x ~ x ~@3 x ~@2 x ~@2 x ~@8 x ~@5",
// … 66 more lines

More by Rod Stewart