Strudelify
Sailing cover art

Christopher Cross

Sailing

Christopher Cross

KeyB♭ majorTempo99 bpm
0:00/0:00
// Sailing — Christopher Cross
// 99 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "Strings" synth strings 1 (copy of ch 5 "Strings" synth strings 1)
// note: Full arrangement: all 107 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(99/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 · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note("<A B@8 C@8 D@2 E@8 F@8 E@8 F@8 E@8 F@8 G@5 H@8 I@6 J@8 K@8 L@4 M>".pickRestart({
  A: "~@23 eb4",
  B: "[~@2 g4@3 ab4@3 g4@3 ~@3 g4@3 ab4@3 g4@3 ~@3 g4@3 ab4@3 g4@3 ~@3 g4@3 ab4@3 g4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 g4@3 ab4@3 g4@3 ~@3 g4@3 ab4@3 g4@3 ~@3 g4@3 ab4@3 ~@6 g4@3 ab4@3 g4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 a4@3 ~@6 f4@3 a4@3 f4@3 bb3, ~@11 eb4@10 ~@2 eb4@10 ~@2 eb4@12 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@12 eb4@10 ~@2 eb4@10 ~@2 eb4@9 g4@5 ~@43 f4@5 ~@11, ~@131 eb4@12 bb3@10 ~@2 bb3@10 ~@2 f3@10 ~@2 f3@12 ~]/8",
  C: "[~@2 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 ~@6 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 g4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 bb3, ~@11 bb3@10 ~@2 bb3@10 ~@2 bb3@12 g3@10 ~@2 g3@10 ~@2 g3@10 ~@2 g3@9 ~@3 eb3@10 ~@2 eb3@9 g4@5 ~@71, ~@119 eb3@10 ~@2 eb3@11 ~ bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@3]/8",
  D: "[~@2 e4@3 bb4@3 e4@3 ~@3 e4@3 bb4@3 e4@3 ~@3 e4@3 bb4@3 e4@3 ~@3 e4@3 bb4@3 e4@3 bb3, ~@11 bb3@10 ~@2 bb3@10 ~@2 bb3@9 ~@4]/2",
  E: "[~@2 d4@3 g4@3 d4@3 ~@3 d4@3 g4@3 d4@3 ~@3 d4@3 g4@3 d4@3 ~@3 d4@3 g4@3 d4@3 ~@3 eb4@3 g4@3 eb4@3 ~@3 eb4@3 g4@3 eb4@3 ~@3 eb4@3 g4@3 eb4@3 ~@3 eb4@3 g4@3 eb4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 a4@3 f4@3 f3@3 f4@3 a4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 g3, ~@11 bb3@9 ~@3 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@12 f3@10 ~@14 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@12 ~]/8",
  F: "[~@2 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 ~@6 g4@3 bb4@3 g4@3 ~@3 g4@3 bb4@3 g4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 e4@3 bb4@3 e4@3 ~@3 e4@3 bb4@3 e4@3 ~@3 e4@3 bb4@3 e4@3 ~@3 e4@3 bb4@3 e4@3 bb3, ~@11 g3@10 ~@2 g3@10 ~@2 g3@9 ~@3 eb3@10 ~@2 eb3@9 g4@5 ~@119, ~@71 eb3@10 ~@2 eb3@11 ~ bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@9 ~@4]/8",
  G: "[~@2 d4@3 g4@3 d4@3 ~@3 d4@3 g4@3 d4@3 ~@3 d4@3 g4@3 d4@3 ~@3 d4@3 g4@3 d4@3 ~@3 eb4@3 g4@3 eb4@3 ~@3 eb4@3 g4@3 eb4@3 ~@3 eb4@3 g4@3 eb4@3 ~@3 eb4@3 g4@3 eb4@3 ~@3 f4@3 bb4@3 f4@3 ~@3 f4@3 bb4@3 f4@3 bb3, ~@11 bb3@9 ~@3 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@10 ~@2 bb3@12 ~]/5",
  H: "[~@2 f4@3 ab4@3 f4@3 bb3@3 f4@3 ab4@3 ~@3 eb4@3 bb4@3 eb5@3 bb4@3 eb4@3 bb4@3 eb5@3 bb4@3 eb4@3 bb4@3 eb5@3 bb4@3 eb4@3 bb4@3 eb5@3 bb4@3 c4@3 c5@3 eb5@3 c5@3 c4@3 c5@3 eb5@3 c5@3 c4@3 c5@3 eb5@3 c5@3 c4@3 c5@3 eb5@3 c5@3 ab3@3 c5@3 eb5@3 c5@3 ~@3 c5@3 eb5@3 c5@3 ~@3 c5@3 eb5@3 c5@3 ~@3 c5@3 eb5@3 c5@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 bb4@3 eb5@3 bb4@3 eb4, ~@5 f4@43, ~@131 ab3@10 ~@2 ab3@10 ~@2 ab3@10 ~@2 eb4@10 ~@2 eb4@11 ~@2]/8",
  I: "[~@2 bb4@3 eb5@3 bb4@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 a4@3 eb5@3 a4@3 ~@3 a4@3 eb5@3 a4@3 ~@3 a4@3 eb5@3 a4@3 ~@3 a4@3 eb5@3 a4@3 ~@3 g4@3 c5@3 g4@3 ~@3 g4@3 c5@3 ~@6 g4@3 c5@3 g4@3 ~@3 g4@3 c5@3 g4@3 ~@3 ab4@3 c5@3 ab4@3 ~@3 ab4@3 c5@3 ab4@3 eb4, ~@11 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@9 g4@4 ~@48, ~@94 eb4@10 ~@3 eb4@9 ~@3 eb4@10 ~@2 eb4@10 ~@3]/6",
  J: "[~@2 ab4@3 c5@3 ab4@3 ~@3 ab4@3 c5@3 ab4@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 bb4@3 d5@3 bb4@3 ~@3 bb4@3 d5@3 bb4@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 c5@3 eb5@3 c5@3 ~@3 c5@3 eb5@3 c5@3 ~@3 c5@3 eb5@3 c5@3 ~@3 c5@3 eb5@3 c5@3 ~@3 c5@3 eb5@3 c5@3 ~@3 c5@3 eb5@3 c5@3 ab3, ~@11 eb4@10 ~@2 eb4@10 ~@2 eb4@12 bb3@10 ~@2 bb3@12 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@12 c4@10 ~@2 c4@10 ~@2 c4@10 ~@2 c4@12 ab3@10 ~@2 ab3@10 ~@3]/8",
  K: "[~@2 c5@3 eb5@3 c5@3 ~@3 c5@3 eb5@3 c5@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 bb4@3 eb5@3 bb4@3 ~@3 a4@3 eb5@3 a4@3 ~@3 a4@3 eb5@3 a4@3 ~@3 a4@3 eb5@3 a4@3 ~@3 a4@3 eb5@3 a4@3 ~@3 g4@3 c5@3 g4@3 ~@3 g4@3 c5@3 g4@3 ~@3 g4@3 c5@3 g4@3 ~@3 g4@3 c5@3 g4 ~@2 [ab4,c5]@6 ~@12 [f4,ab4,c5]@2 ~ [f4,ab4,c5]@3 ~, ~@11 ab3@12 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@2 eb4@10 ~@27]/8", // Ab Fm
  L: "[~@23 eb4@3 g4@3 ab4@3 g4@3 eb4@3 g4@3 ab4@3 g4@3 eb4@3 g4@3 ab4@3 g4@3 eb4@3 g4@3 ab4@3 g4@3 eb4@3 g4@3 ab4@3 g4@3 eb4@4 g4@5 ab4@4]/4",
  M: "~ g4@7 eb4@7 ~@9",
})).s("gm_acoustic_guitar_nylon").gain(0.3).pan(0.7)

// other · percussive organ · "Organ"
const percussive_organ = note(`<
  ~@3 A@2 B@2 C@3 ~@5 D@2 E@2 F@2 G H@8 I J@8 K@6 L@8 M@2 N@6 O@8 P@4 ~@29 Q@3 R@2
>`.pickRestart({
  A: "[f7@37 ~@2 eb7@4 ~ d7@3 ~]/2", B: "[bb6@47 ~]/2",
  C: "[~@11 f6@3 g6@2 ~ bb6@2 ~ c7@3 d7@9 ~@3 f7@3 g7@3 f7@21 ~@10]/3", D: "[~@17 d7@3 c7@3 bb6@22 ~@3]/2",
  E: "[~@17 e7@3 f7@3 g7@23 ~@2]/2", F: "[~@17 bb6@2 ~ c7@2 ~ d7@2 ~ c7@3 d7@16 ~@3]/2", G: "~@16 eb7@3 ~ f7@2 ~ g7",
  H: "[~@2 f7@3 eb7@16 ~ d7@24 c7@24 ~ f5@48 g5@48 bb5@25]/8", I: "~@23 bb5",
  J: "[~@11 g5@12 f5@21 ~@3 e5@46 ~@2 g5@93 ~@3 f5]/8", K: "[~@11 d5@11 c5@20 ~@5 f6@46 ~@2 bb6@42 ~@3 bb6@2 g6@2]/6",
  L: "[~@2 bb6@2 ~ bb6@37 ~@3 bb6@2 f6@3 bb6@2 ~@2 bb6@35 ~@3 bb6@2 ~ e6@3 g6@2 ~ g6@36 ~@3 g6@2 ~ d6@3 g6@2 ~@2 g6@35 ~@3 g6@2 ~ eb6]/8",
  M: "[~@2 g6@2 ~@2 g6@35 ~@3 g6@2 d6@2, ~@2 f6 ~@45]/2", N: "[~ f6@2 ~@2 f6@39 ~@3 f6@48 bb6@43 ~@2 bb6@2 ~ g6]/6",
  O: "[~ bb6@2 ~@2 bb6@37 ~@2 bb6@2 ~ f6@3 bb6@2 ~ bb6@36 ~@3 bb6@2 ~ e6@3 g6@2 ~ g6@37 ~@2 g6@2 ~ d6@3 g6@2 ~ g6@36 ~@3 g6 ~@2 eb6]/8",
  P: "[~@2 g6@2 ~ g6@36 ~@3 g6@2 ~ d6@2 f6@2 ~@2 f6@13 ~@2 f6 ~@2 f6@3 ab6@2 ~ ab6@17 ~@2]/4",
  Q: "[~@23 bb6@31 ~@5 ab6@5 g6@8]/3", R: "[eb6@11 ~]/2",
})).s("gm_percussive_organ").gain(0.22).pan(0.2)

// chords · synth strings 1 · "Strings"
const synth_strings_1 = note("<~@8 A@7 B@8 C@8 D@6 E@2 F G@8 H@6 I@8 J@2 K@6 L@2 M@8 N@6 O@8 P@8 Q@2 ~@3>".pickRestart({
  A: "[~@23 f4@48 g4@48 bb4@45 ~@3 bb4]/7", B: "[~@11 g4@12 f4@24 e4@48 g4@96 f4]/8",
  C: "[~@11 d4@12 c4@24 bb4@43 ~@2 bb4@2 ~ g4@6 bb4@4 ~@2 bb4@29 ~@4 bb4@2 ~ g4@6 bb4@4 ~@2 bb4@30 ~@3 bb4@3 f4]/8",
  D: "[~@5 bb4@4 ~@2 bb4@30 ~@3 bb4@3 e4@6 g4@4 ~@2 g4@30 ~@3 g4@2 ~ d4@6 g4@4 ~@2 g4@30 ~@3 g4@2 ~ eb4]/6",
  E: "[~@5 g4@4 ~@2 g4@28 ~@5 g4@2 ~ d4]/2", F: "~@5 f4@4 ~@2 f4@6 d4@6 c4",
  G: "[~@23 f4@47 ~@49 eb5@45 ~@3 [f4,d5]@25, ~@23 bb4@169, ~@23 d5@94 ~@75, ~@71 g4@93 ~@28]/8", // Dm
  H: "[~@23 [e4,c5]@47 ~ d4@44 ~@4 eb4@25, ~@23 g4@121, ~@71 bb4@73, ~@71 e4 ~@72]/6", // C
  I: "[~@23 d5@19 ~@5 c5@22 ~@2 f4@46 ~@50 eb5@25, ~@23 bb4@94 ~@2 g4@73, ~@23 f4@45 ~@3 d5@95 ~@26]/8",
  J: "[~@23 [f4,d5]@25]/2", K: "[~@23 [e4,c5]@47 ~ d4@44 ~@4 eb4@25, ~@23 g4@121, ~@71 bb4@73]/6",
  L: "[~@23 [f4,bb4,d5]@24 f5]/2", // Bb
  M: "[~@23 bb5@46 ~@50 ab5@44 ~@4 [g5,bb5]@25, ~@23 eb6@169, ~@23 g5@92 ~@77, ~@71 c6@94 ~@27]/8", // Gm
  N: "[~@23 [a5,f6]@45 ~@3 g5@45 ~@3 [f5,ab5,c6]@25, ~@23 c6@93 ~@28, ~@34 eb6@23 ~@15]/6", // Dm Fm
  O: "[~@23 [g5,eb6]@22 ~@2 [f5,d6]@23 ~ f5@2 ~@91 g5@3 ab5@25, ~@23 bb5@96 c6@73, ~@71 eb6@121, ~@71 g5@91 ~@30]/8", // Cm Dm
  P: "[~@23 [g5,bb5]@46 ~@2 [a5,f6]@46 ~@2 [g5,eb6]@44 ~@4 [f5,ab5,c6]@8 ~@4 [f5,ab5,c6]@8 ~@4 [f5,ab5,c6], ~@71 c6@91 ~@30]/8", // Gm Dm Cm Fm
  Q: "[~@5 [f5,ab5,c6]@21 ~@22]/2", // Fm
})).s("gm_synth_strings_1").gain(0.3).pan(0.9)

// chords · synth strings 1 · "Strings"
const synth_strings_1_2 = note(`<
  ~@8 A@7 B@4 ~@3 C@7 D@8 E@2 F G@8 H@6 I@2 J@8 K@6 L@8 M@2 N@6 O@8 P@8 Q@2 ~@3
>`.pickRestart({
  A: "[~@23 f3@48 g3@48 bb3@45 ~@3 bb3]/7", B: "[~@11 g3@12 f3@24 e3@48 ~]/4",
  C: "[~@23 f3@11 ~ d3@12 c3@24 bb3@43 ~@2 bb3@2 ~ g3@6 bb3@4 ~@2 bb3@29 ~@4 bb3@2 ~ g3]/7",
  D: "[~@5 bb3@4 ~@2 bb3@30 ~@3 bb3@3 f3@6 bb3@4 ~@2 bb3@30 ~@3 bb3@3 e3@6 g3@4 ~@2 g3@30 ~@3 g3@2 ~ d3@6 g3@4 ~@2 g3@30 ~@3 g3@2 ~ eb3]/8",
  E: "[~@5 g3@4 ~@2 g3@28 ~@5 g3@2 ~ d3]/2", F: "~@5 f3@4 ~@2 f3@6 d3@6 c3",
  G: "[~@23 f3@47 ~@49 eb4@45 ~@3 [f3,d4]@25, ~@23 d4@94 ~@75, ~@71 g3@93 ~@28]/8", // Dm
  H: "[~@23 [e3,c4]@47 ~ d3@44 ~@4 eb3@25, ~@71 bb3@73, ~@71 e3 ~@72]/6", I: "[~@23 f3@24 c4, ~@23 d4@19 ~@6]/2",
  J: "[~@23 f3@46 ~@50 eb4@48 [f3,d4]@25, ~@23 d4@95 ~@74, ~@71 g3@92 ~@29]/8", // Dm
  K: "[~@23 [e3,c4]@47 ~ d3@44 ~@4 eb3@25, ~@71 bb3@73]/6", // C
  L: "[~@47 f4@19 ~@5 bb4@46 ~@50 ab4@25, ~@23 [f3,bb3,d4]@43 ~@5 g4@92 ~@29, ~@119 c5@73]/8", // Bb
  M: "[~@23 [g4,bb4]@25]/2", N: "[~@23 [a4,f5]@45 ~@3 g4@45 ~@3 [f4,ab4,c5]@25, ~@23 c5@93 ~@28, ~@34 eb5@23 ~@15]/6",
  O: "[~@23 [g4,eb5]@22 ~@2 [f4,d5]@23 ~ f4@2 ~@91 g4@3 ab4@25, ~@23 bb4@96 c5@73, ~@71 g4@91 ~@30]/8", // Cm Dm
  P: "[~@23 [g4,bb4]@46 ~@2 [a4,f5]@46 ~@2 [g4,eb5]@44 ~@4 [f4,ab4,c5]@8 ~@4 [f4,ab4,c5]@8 ~@4 [f4,ab4,c5], ~@71 c5@91 ~@30]/8", // Gm Dm Cm Fm
  Q: "[~@5 [f4,ab4,c5]@21 ~@22]/2", // Fm
})).s("gm_synth_strings_1").gain(0.3).pan(0.6)

// bass · electric bass finger · "BASS"
const bass = note("<~@8 A@8 B@5 C@5 D@4 E@2 F@8 G@8 H@8 I@8 J@8 K@8 L@4 M@6 N@4 O@8 ~@5>".pickRestart({
  A: "[~@23 bb1@47 ~ g2@46 ~@2 eb2@46 ~@2 bb1@25]/8", B: "[~@23 c2@45 ~@3 g2@44 ~@4 eb2]/5",
  C: "[~@17 d2@6 c2@23 ~ bb1@23 ~ f2@23 ~ bb1@13 ~@5 bb1@2 ~@4 bb1]/5",
  D: "[~@11 bb2@5 ~ a2@5 ~ g2@15 ~@3 g2@3 ~@3 g2@17 ~ d2@5 ~ eb2@15 ~@3 eb2@2 ~ eb2 ~@2 eb2]/4",
  E: "[~@11 eb2@3 f2@3 g2@5 ~ bb1@13 ~@2 g2@2 ~ f2@2 ~ a1@2 ~ bb1]/2",
  F: "[~@11 bb1@4 ~@2 b1@5 ~ c2@14 ~@4 c2@3 ~@3 c2@14 ~@4 f2@3 gb2@3 g2@15 ~@3 g2@3 ~@3 g2@11 ~ d2@11 ~ c2@15 ~@3 c2@3 ~@3 c2@23 ~ bb1@13 ~@5 d2@3 eb2@2 ~ f2]/8",
  G: "[~@11 eb2@5 ~ c2@5 ~ bb1@14 ~@4 bb1@3 ~@3 bb1@10 ~@2 bb2@5 ~ a2@5 ~ g2@14 ~@4 g2@3 ~@3 g2@17 ~ d2@5 ~ eb2@15 ~@3 eb2@2 ~ eb2 ~@2 eb2@9 ~@3 eb2@2 ~ f2@2 ~ g2@5 ~ bb1@14 ~ g2@2 ~ f2@2 ~ a1@2 ~ bb1]/8",
  H: "[~@11 bb1@4 ~@2 b1@5 ~ c2@15 ~@3 c2@3 ~@3 c2@15 ~@3 f2@2 ~ gb2@2 ~ g2@15 ~@3 g2@3 ~@3 g2@11 ~ d2@11 ~ c2@14 ~@4 c2@3 ~@3 c2@23 ~ bb1@13 ~@5 d2@3 eb2@2 ~ f2]/8",
  I: "[~@11 eb2@5 ~ c2@5 ~ bb1@13 ~@5 bb1@3 ~@3 bb1@8 ~@4 bb2@5 ~ a2@5 ~ g2@14 ~@4 g2@3 ~@3 g2@17 ~ d2@5 ~ eb2@15 ~@3 eb2@2 ~ eb2 ~@2 eb2@9 ~@3 eb2@2 ~ f2@2 ~ g2@5 ~ bb1@12 ~@3 g2@3 f2@2 ~ a1@2 ~ bb1]/8",
  J: "[~@11 bb1@4 ~@2 b1@5 ~ c2@14 ~@4 c2@3 ~@3 c2@13 ~@5 f2@2 ~ gb2@2 ~ g2@14 ~@4 g2@3 ~@3 g2@11 ~ d2@11 ~ c2@14 ~@4 c2@3 ~@3 c2@23 ~ bb1@14 ~@4 f2@5 ~ bb2]/8",
  K: "[~@11 ab2@5 ~ f2@5 ~ eb2@13 ~@5 bb1@5 ~ eb2@2 ~@4 eb2@8 ~@4 eb2@2 ~ d2@2 ~ c2@13 ~@5 g2@5 ~ c3@11 ~ c3@5 ~ g2@5 ~ ab2@17 ~ eb2@5 ~ ab2@11 ~ ab2@11 ~ eb2@16 ~@2 bb1@5 ~ eb2]/8",
  L: "[~@5 eb2@10 ~@2 eb2@2 ~ e2@2 ~ f2@17 ~ c2@5 ~ f2@3 ~@3 f2@11 ~ g2@5 ~ c2@10 ~@2 c2@8 ~ g1@2 ~ c2]/4",
  M: "[~@5 c2@11 ~ g2@5 ~ f2@9 ~@3 f2@8 ~ c2@2 ~ f2@11 ~ bb2@11 ~ eb2@13 ~@5 eb2@2 ~ g2@2 ~ bb2@11 ~ ab2@5 ~ f2@5 ~ eb2@8 ~@4 eb2@8 ~ bb1@2 ~ eb2]/6",
  N: "[~@5 eb2@10 ~@2 eb2@2 ~ d2@2 ~ c2@9 ~@3 c2@8 ~ g2@2 ~ c3@9 ~@3 c3@5 ~ g2@5 ~ ab2@10 ~@2 ab2@8 ~ eb2@2 ~ ab2]/4",
  O: "[~@5 ab2@9 ~@3 ab2@5 ~ eb2@9 ~@3 eb2@8 ~ bb1@2 ~ eb2@15 ~@3 eb2@2 ~ e2@2 ~ f2@10 ~@2 f2@8 ~ c2@2 ~ f2@3 ~@3 f2@11 ~ g2@5 ~ c2@9 ~@3 c2@8 ~ g1@2 ~ c2@3 ~@3 c2@17 ~ f2@12 ~@13]/8",
})).s("gm_electric_bass_finger").gain(0.5)

// drums · kick
const kick = s("bd").struct(`<
  ~@24 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C D B A B A B A B A
  B A B A B A B A B A B A B A B A B A B ~@7
>`.pickRestart({
  A: "~@23 x", B: "~@20 x ~@2 x", C: "~@11 x ~@12", D: "~@8 x ~@14 x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@25 [~@11 x ~@12]!46 [~@23 x] [~@11 x ~@12]!29 ~@6>").gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@24 [~@17 x ~@6] ~@47 [~@17 x ~@6] ~@34>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@24
  [~@23 x]
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x]!75
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3]
  ~@6
>`).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 [~@9 x ~@4 x ~@9] ~@47 [~@9 x ~@4 x ~@9] ~@34>").gain(0.5)

// drums · high tom
const high_tom = s("ht").struct("<~@23 [~@20 x!4] ~@47 [~@20 x!4] ~@35>").gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@24 A ~@16 B ~@14 A ~@15 A ~@15 A ~@18>".pickRestart({
  A: "~@23 x", B: "x",
})).gain(0.4)

stack(
  acoustic_guitar_nylon, percussive_organ, synth_strings_1, synth_strings_1_2, bass, kick, snare, low_tom, hihat,
  mid_tom, high_tom, crash
)

More by Christopher Cross