Strudelify
Sailing cover art

Atlantic Crossing

Sailing

Rod Stewart

KeyB majorTempo130 bpm
0:00/0:00
// Sailing — Stewart Rod
// 130 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · electric bass finger · "FINGERDBA"
const bass = note(`<
  ~@8 A@2 B@2 C@2 D@2 E@2 F@2 E@2 G H I@2 J@2 C@2 K@2 L@2 M@2 N@2 O H P Q R S T U O V W X Y Z AA AB AC AD AE Q AF AG AH
  AI AJ AK AL AM AN AO AP AB O AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH P Q R S T U BI@2 W X Y Z AA AB BJ
  BK AA AB BJ BK AA AB BJ BK AA AB BJ BL AA AB BJ BK AA AB BJ BL
>`.pickRestart({
  A: "[b1@15 ~]/2", B: "[g#2@15 ~]/2", C: "[e2@29 ~@3]/2", D: "[b1@29 ~@3]/2", E: "[c#2@15 ~]/2", F: "[g#1@15 ~]/2",
  G: "b1@7 ~", H: "f#2@15 ~", I: "[b1@11 ~ d#2@2 f#2@2]/2", J: "[g#2@27 ~ d#2@4]/2", K: "[b1@23 ~ f#1@4 g#1@4]/2",
  L: "[c#2@22 ~@2 c#2@7 ~]/2", M: "[g#1@23 ~ f#1@4 g#1@4]/2", N: "[c#2@23 ~ g#1@4 c#2@4]/2", O: "b1", P: "b1@6 b1!2",
  Q: "b1@2 d#2 f#2", R: "g#2@6 g#2!2", S: "g#2 d#2", T: "e2@12 e2 ~ e2 ~", U: "e2@7 ~ e2@2 f#2@6",
  V: "~ g#2@2 d#2 b1@4", W: "c#2@14 c#2 ~", X: "c#2@6 d#1 f#1", Y: "g#1@15 ~", Z: "g#1@7 ~ g#1@4 b1@4",
  AA: "c#2@13 ~ c#2 ~", AB: "c#2@2 g#1 c#2", AC: "b1@7 b1", AD: "f#1@3 f#1@3 a#1@2", AE: "b1@13 ~ b1 ~",
  AF: "g#2@13 ~ g#2 ~", AG: "g#2@2 b2 g#2", AH: "e2@13 ~ e2@2", AI: "e2@7 ~ e2@4 g#2@4", AJ: "b1@14 b1 ~",
  AK: "b1@2 g#2 d#2", AL: "c#2@11 ~ c#2 ~ c#2 ~", AM: "c#2@11 ~ d#1@2 f#1@2", AN: "g#1@14 g#1 ~",
  AO: "g#1@11 ~ g#1@2 b1@2", AP: "c#2@11 ~ c#2@3 ~", AQ: "f#1@5 ~ f#1 ~ f#1@5 ~ f#1 ~",
  AR: "f#1@5 ~ f#1 ~ f#1 ~ f#1 ~ f#1@3 ~", AS: "e1@13 ~ e1 ~", AT: "e1 e2 e1 b1", AU: "g#1@11 ~ g#1@4",
  AV: "g#2@2 g#1@2 g#2 d#2 g#1@2", AW: "f#1@6 f#2 f#1", AX: "f#2@7 ~ f#2@2 c#2@2 f#1@4", AY: "g#1",
  AZ: "b2 a#2 g#2 f#2 g#2 f#2 g#2 f#2", BA: "e2@6 b1 d#2", BB: "e2@3 ~ e2@2 f#2@2 g#2@4 f#2@4", BC: "b1@15 ~",
  BD: "b1@7 ~ b1@2 a#1 ~ g#1@3 ~", BE: "f#1@11 ~ f#1 ~ f#1 ~", BF: "f#1@7 ~ f#1@4 g#1@4", BG: "a#1@7 ~ a#1@4 b1@4",
  BH: "c#2 f#2", BI: "[b1@9 g#2@2 d#2 b1@4]/2", BJ: "b1@6 b1 ~", BK: "f#1@5 ~ f#1 ~ f#1@5 ~@3", BL: "f#1@2 ~ f#1@3 ~@2",
})).s("gm_electric_bass_finger").gain(0.44)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@6 A@3 ~@15 B@8 C@6 D E F@6 G@2 H@6 I J K@8 L@2 M@2 N@2 O P@2 Q@4 R@2 S@2 T@4 U@4 V@6 W@2 X@6 Y@2 Z@2 I AA Z@2 Y@2
  Z@2 Y@2 Z@2 Y@2 Z@2 AB@2
>`.pickRestart({
  A: "[f#8@11 ~@5]/3", B: "[f#4@32 ~@32 e5@31 ~ [f#4,d#5]@32, b4, d#5 ~, ~ g#4@2 ~]/8",
  C: "[[c#5,f5] [b4,d#5] [c#5,e5], g#4]/6", D: "[f#4,b4,d#5]", E: "f#5@3 e5, [a#4,c#5]",
  F: "[f#5@31 ~@9 d#5@2 c#5@2 ~@2 c#5@2 [g#4,d#5]@16 e5@32, b4@95 ~, ~@32 g#5@63 ~]/6", G: "[b4,d#5,f#5]/2",
  H: "[[c#5,f5]@32 [b4,d#5]@31 ~ [c#5,e5]@32, g#4]/6", I: "[b4,d#5,f#5]", J: "[c#5,f#5,a#5]",
  K: "[f#5@32 ~@14 f#5@2 ~@2 c#5@2 b4@12 e5@32 f#5@23 ~ [f#5,f#6]@8, b5@127 ~, d#5@61 ~@35 d#5@31 ~, ~@32 g#5@63 ~@33]/8", // F#
  L: "[c#5,f5,g#5,f6]/2", M: "[~@6 d#6 c#6 b5@8, [d#5,g#5], b5@15 ~@17]/2", N: "[c#5,e5,g#5,c#6]/2", O: "[d#5,f#5,b5]",
  P: "[a#4,c#5,f#5]/2", Q: "[e5@31 ~ d#5@32, [g#4,b4]@63 ~]/4", R: "[f#4,a#4,c#5]/2", S: "[[g#4,d#5]@31 ~]/2",
  T: "[[g#4,e5] [f#4,d#5], b4]/4", U: "[~@32 e5@31 ~, [f#4,a#4,c#5]]/4",
  V: "[f#5@31 ~@11 c#5@2 b4@2 c#5@2 ~@4 d#5@12 e5@32, d#5@17 ~@15, b4@11 ~ g#4@3 ~@9, ~@32 g#5@63 ~]/6",
  W: "[d#5,f#5]/2", X: "[[c#5,f5]@32 [b4,d#5]@31 ~ [c#5,e5,g#5]@32, g#4]/6", Y: "[[b4,d#5] [a#4,c#5], f#5]/2",
  Z: "[c#5,e5,g#5]/2", AA: "[a#4,c#5,f#5]", AB: "[[b4,d#5] [a#4,c#5], f#5@31 ~]/2",
})).s("gm_percussive_organ").gain(0.22).pan(0.2)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@2 B@2 A@2 C@2 D@2 E@2 F@2 D@2 G@2 E@2 H@2 I J@4 K@6 L@6 M@3 E@2 F@2 D@2 G@2 E@2 H@2 C@2 D@2 E@2 F@2 D@2 G@2 E@2 H@2
  N@2 ~@17 D@2 E@2 F@2 D@2 G@2 E@2 H@2 I O H@2 I O H@2 I O H@2 I O H@2 I O H@2 I O
>`.pickRestart({
  A: "[~@3 e4 ~@3 e4 ~@3 e4 ~@3 e4, e4@3 ~ e4@3 ~ e4@3 ~ e4@3 ~, ~ g#4@4 g#4@4 g#4@4 g#4@3, ~ a4@2 a4@2 a4@2 a4]/2",
  B: "[~@7 d#4 ~@7 d#4, b3@8 b3@9 ~@5 d#4@8 ~@2, ~ f#4@4 f#4@4 f#4@4 f#4@3, ~ b4@2 b4@2 b4@2 b4, ~@3 d#4@4 ~ f#3@4 b3@4]/2",
  C: "[~@7 d#4 ~@2 a#4 c#4 [g#3,f#4,b4]@2 [a#3,f#4,c#5]@2, b3@8 b3@9 ~@15, ~@2 f#4@8 f#4@8 f#4@5 ~@9, ~ b4@2 b4@2 ~@3, ~@3 d#4@4 ~ f#3@3 ~@5]/2", // G#m7 F#
  D: "~@7 d#4, b3 f#3, ~ f#4@4 f#4@3, ~ b4@2 b4, ~@3 d#4@4 ~",
  E: "~@7 d#4, g#3!2, ~ g#4@4 g#4@3, ~ b4@2 b4, ~@3 d#4@4 ~",
  F: "~@3 e4 ~@3 e4, e4@3 ~ e4@3 ~, ~ g#4@4 g#4@3, ~ b4@2 b4", G: "~@7 f4, c#4!2, ~ g#4@4 g#4@3, ~ b4@2 b4, ~@3 f4@4 ~",
  H: "[~@15 g#4, c#4!2 c#4 e4, ~ g#4@2 g#4@2 g#4@2 g#4@2 g#4@2 g#4@2 g#4@2 ~, ~ c#5@2 c#5@2 c#5@2 c#5]/2",
  I: "~@7 d#4, b3!2, ~ f#4@4 f#4@3, ~ b4@2 b4, ~@3 d#4@4 ~",
  J: "[~@2 a#4 c#4 [g#3,f#4,b4]@2 ~@25 d#4, f#3@6 ~@6 [a#3,f#4,c#5]@3 d#3@21 b4@8 b4@2 d#4@2 b3@12 b4@4, ~@2 f#4@5 ~@7 b2@24 d#4@8 g#2@18, ~@15 f#3 d#4@2 f#4@2 b4@2 d#4@2 f#3@10 f#4@8 f#4@5 d#3@17, ~@16 b3@10 f#4@2 b4@2 d#4@2 b3@8 f#3@7 g#3 d#4@2 g#4@2 b4@2 d#4@2 g#3@2 g#4@6]/4", // G#m7 F#
  K: "[~@30 e4 ~@63 f4@2, g#3@6 d#4@8 d#4@2 b3@18 g#4@8 g#4@5 d#3@23 d#4@8 c#3@18, ~@2 g#4@8 g#4@5 [e3,g#3]@21 b4@8 b4@3 f#3 d#4@2 f#4@2 b4@2 d#4@2 f#3@10 f#4@2 b4@6 f#4@4 d#4@2 f4@2 g#4@4 f4@4 g#4@6, ~@4 b4@8 b4@4 e4@2 g#4@2 b4@4 e4@2 g#4@2 b4@4 e4@8 e4@6 e4@2 b3@10 f#4@2 b4@2 d#4@2 b3@12 b4@3 g#3@17, ~@8 g#3@6 [e2,b2]@26 ~@6 b2@26 f#3@7 c#4@5 b4@4 c#4@4 b4@4]/6", // E E5
  L: "[~@47 d#4, c#4@14 f4@2 b3@26 g#4@5 g#3@28 ~@3 b2@14 b4@4, ~@2 g#4@8 g#4@5 d#3@21 b4@8 b4@3 c#4@3 g#4@2 c#5@2 g#4@2 c#4@2 g#4@2 c#5@2 g#4@2 c#4@8 e4@7 [d#3,f#3]@17, ~@4 b4@8 b4@3 g#3 d#4@2 g#4@2 b4@2 d#4@2 g#3@2 g#4@2 b4@2 d#4@2 g#3@2 g#4@4 d#4@8 d#4@2 e4@18 g#4@2 c#5@8 c#5@4 d#4@2 f#4@4 d#4@4 f#4@6, ~@6 f4@8 g#2@26 g#3@5 ~ c#3@24 g#4@4 g#4@4 g#4@2 b3@4 b4@4 b3@8]/6", // D#m
  M: "[~@2 a#4 c#4 [g#3,f#4,b4]@2 ~@17 d#4, f#3@6 ~@6 [a#3,f#4,c#5]@3 d#3@21 b4@8 b4@4, ~@2 f#4@5 ~@7 b2@24 d#4@8 ~@2, ~@15 f#3 d#4@2 f#4@2 b4@2 d#4@2 f#3@10 f#4@8 f#4@6, ~@8 b3@5 f#4 b4 d#4 b3@4 f#3@4]/3", // G#m7 F#
  N: "[~@7 d#4 ~@8, b3@8 b3@9 ~@15, ~ f#4@4 f#4@4 ~@7, ~ b4@2 b4@2 ~@3, ~@3 d#4@4 ~@9]/2",
  O: "~@2 a#4 c#4 ~@2 a#4 c#4, f#3@3 ~ f#3@3 ~, ~@2 f#4@5 ~@3 f#4@5 ~",
})).s("gm_acoustic_guitar_steel").gain(0.28).pan(0.2)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note("<A ~ B C D ~ E F G ~@5 H I ~ J K L M N O ~@102>".pickRestart({
  A: "e7 ~ e7 e7@2 e7@2 e7!2 ~ e7 ~ e7!2 ~@2", B: "f#7 ~ f#7 f#7@2 ~@2 f#7!2 ~ f#7 ~ f#7!2 ~ f#7",
  C: "~@2 e7 ~ e7 d#7 e7 [d#7,e7] b6 [d#7,e7] [b6,d#7] [b6,e7] [d#7,e7] b6 [d#7,e7] [b6,d#7]", // Emaj7 B E5 Emaj7 B
  D: "[b6,e7] [d#7,e7] b6 d#7 b6!2 ~ b6 ~@8", E: "f#5 ~ f#5 ~@13",
  F: "f#5 ~ [f#5,g#5] ~ [f#5,g#5,b5] [f#5,g#5] [b5,c#6] [f#5,g#5,b5] [c#6,d#6] [f#5,g#5,b5,c#6] [f#5,g#5,d#6] [b5,c#6,d#6] [f#5,g#5,b5,f#6] [c#6,d#6] [f#5,g#5,b5,c#6,f#6,g#6] [g#5,d#6,f#6]", // F#sus2 G#m7 F#sus2 Bsus2 G#m7 C#sus2 F#sus4 G#7 …
  G: "[b5,c#6,d#6,f#6,g#6] [b5,f#6,g#6] [c#6,d#6,f#6] [f#6,g#6] [d#6,f#6] [d#6,f#6,g#6] [f#6,g#6] [d#6,f#6] [f#6,g#6] [d#6,f#6] [d#6,f#6,g#6] [f#6,g#6] f#6 [f#6,g#6] ~ f#6", // G#m7 D#m7 F#sus2 D#m G#7 F#sus2 D#m F#sus2 …
  H: "~@12 d#6 ~ [c#6,d#6] d#6", // C#sus2
  I: "[b5,c#6] [c#6,d#6] b5 [b5,c#6,d#6] d#6 [b5,c#6] [c#6,d#6] b5 [b5,d#6] d#6 b5 d#6 ~@4", // Bsus2 C#sus2 B Bsus2 C#sus2 B
  J: "f6 ~ [f6,f#6] f6 [f#6,g#6] [f6,f#6] g#6 [f6,f#6,g#6] f6 [f#6,g#6] f#6 g#6 [f#6,g#6] ~ [f#6,g#6] ~", // F#maj7 F#sus2 F#maj7 Fm F#sus2
  K: "g#6!2 ~@14",
  L: "b5 ~ [b5,c#6] b5 [c#6,d#6] [b5,c#6] d#6 [b5,c#6,d#6] b5 [c#6,d#6] [b5,c#6] d#6 [b5,c#6,d#6] ~ [c#6,d#6] c#6", // Bsus2 C#sus2 Bsus2 B C#sus2 Bsus2 B C#sus2
  M: "d#6 ~@15", N: "e6 ~ [e6,f#6] f#6 [e6,g#6] [e6,f#6] g#6 [e6,f#6,g#6] f#6 [e6,g#6] f#6 g#6 [f#6,g#6] ~ g#6 ~",
  O: "[f#6,g#6] f#6 ~ f#6 ~ f#6!2 ~ f#6 ~ f#6!2 ~ f#6 ~@2", // F#sus2
})).s("gm_epiano1").gain(0.23).pan(0.6)

// chords · epiano1 · "E.PIANO 1" · soft notes
const epiano1_soft = note("<A B ~ C D ~ E F G H ~@5 I ~ J K L M N O P ~@101>".pickRestart({
  A: "~@15 e7", B: "~ e7!2 ~@13", C: "~ f#7!2 ~@13", D: "~@3 e7 d#7 e7 d#7 ~ d#7 b6!2 ~@5",
  E: "~@3 f#5 ~ f#5 ~ f#5!2 ~ f#5 ~ f#5!2 ~ f#5", F: "d#6!2 ~@13 f#5",
  G: "~ [f#5,g#5] ~ [f#5,g#5,b5,c#6] g#5 [b5,c#6] b5 c#6!2 ~@5 f#6 g#6", H: "g#6 f#6 f#6@2 ~@12",
  I: "~@8 c#6 ~ c#6!2 b5 [b5,c#6,d#6] d#6 [b5,c#6]", J: "~@10 f6 ~ f6!2 ~ [f6,f#6]",
  K: "~ [f6,f#6] f6 [f#6,g#6] f#6 g#6!2 ~@9", L: "~@13 b5 ~ b5", M: "~ [b5,c#6,d#6] b5 [c#6,d#6] c#6 d#6!2 ~@9",
  N: "~@10 e6 ~ e6 f#6 e6 [e6,f#6]", O: "~ [e6,g#6] f#6 [e6,g#6] f#6 g#6!2 ~@8 f#6", P: "f#6 ~ f#6 ~@13",
})).s("gm_epiano1").gain(0.08).pan(0.6)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@85 A B C D E@8 F@6 G H I@2 G H I@2 G H I@2 G ~ I@2 G H I@2 G ~>".pickRestart({
  A: "f#3@7 ~ f#3@3 ~ g#3@3 ~", B: "a#3@7 ~ a#3@3 ~ b3@3 ~", C: "c#4@7 ~ c#4@4 [d#4,d#5]@4",
  D: "[e4,e5] [f#4,f#5] [g#4,g#5] [e4,a#5]", E: "[f#5 ~ [e4,e5] [d#4,b4,d#5,f#5], b5@127 ~, [d#4,d#5] ~, ~ g#5@2 ~]/8",
  F: "[[c#4,c#5,f5] [g#3,b4,d#5] [c#5,e5], g#4, g#5@16 c#4@7 ~]/6", G: "[f#4,b4,d#5]", H: "[c#4,f#4]",
  I: "[c#4,c#5,e5]/2", // C#m
})).s("gm_string_ensemble_1").gain(0.3).pan(0.9)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@73 A@2 B@2 C@4 D@2 E@2 F G H I J@2 ~@34>".pickRestart({
  A: "[a#4@3 a#4]/2", B: "[f#4@3 f#4]/2", C: "[f#4@3 g#4@5]/4", D: "[a#4@6 b4 c#5]/2", E: "[c#5@29 ~@3]/2",
  F: "g#4@3 a#4", G: "b4@12 c5@3 ~", H: "d#5", I: "f#5@15 ~", J: "d#5/2",
})).s("gm_overdriven_guitar").gain(0.18).pan(0.9)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel_2 = note("<~@25 A B@3 ~ C D E F G@2 H ~ I ~@32 J K@2 ~@51>".pickRestart({
  A: "~@3 d#4 f#4@2 d#4@2", B: "[b3@20 f#3@2 g#3@2 b3@2 c#4@2 b3@15 ~@5]/3", C: "[f#4,b4] [g#4,c#5] [b4,d#5]@6",
  D: "[b4,d#5]@2 [a#4,d5] ~ [b4,d#5] ~ [a#4,d5] ~ [b4,d#5] ~ [a#4,d5]@2 [b4,d#5]@2 ~@2", E: "[g#4,c#5] ~", F: "~@3 c#5",
  G: "[g#4@22 ~@2 g#4@3 ~ b4@3 ~]/2", H: "c#5", I: "[f#4,b4] [g#4,c#5] ~@2 f#4@4, ~ [b4,d#5]@3",
  J: "~@2 a#4 c#4 b3 g#4 b3 a#3", K: "[f#4@4 e4 d#4 c#4 b3@3 ~@6]/2",
})).s("gm_acoustic_guitar_steel").gain(0.45)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_2 = note("<~@71 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I J K@2 ~@34>".pickRestart({
  A: "[~@4 c#3@4 f#3@4 b3@3 c#4@6 f#4@2 d#4@2 f#4@3 g#4@2 f#4@2]/2", B: "[g#4 f#4@11 f#4@4]/2", C: "[c#4@3 c#4]/2",
  D: "[c#4@6 c#4!2]/2", E: "[c#4@6 c#4 g#3 a#3@14 [f#3,g#3] [d#4,g#4] b4@2 g#4@2 g4@2 d#4@2]/2", F: "[f#4@3 f#4]/2",
  G: "[c#4@11 g#4@7 d#4@6 b3@8]/2", H: "[c#4@3 d#4@4 f4]/2", I: "f#4@12 a#4 b4 ~ c#5",
  J: "d#5 e5 ~ d#5 f#5 d#5 ~ g#5 e5 c#5 ~ a#5 f#5 c#5 ~ a#5", K: "a#5/2",
})).s("gm_overdriven_guitar").gain(0.4).pan(0.3)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_3 = note("<~@71 A B@3 C@2 D@2 E@4 F@2 G@2 H I J@2 ~@34>".pickRestart({
  A: "~@5 c#4@4 f#4@4 b4@3", B: "[c#5@6 f#5@2 d#5@2 f#5@3 g#5@2 f#5@2 g#5@2 f#5@22 f#5@7]/3", C: "[~ c#5@24 c#5@7]/2",
  D: "[~ c#5@24 c#5@4 c#5@3]/2", E: "[~ c#5@6 c#5 g#4 a#4@14 [f#4,g#4] [d#5,g#5] b5@2 g#5@2 g5@2 d#5@2 f#5@24 f#5@7]/4",
  F: "[~ c#5@11 g#5@7 d#5@6 b4@7]/2", G: "[c#5@3 d#5@4 f5]/2", H: "f#5@12 c#5 d#5 ~ e5",
  I: "f#5 g#5 ~ f#5 a#5 f#5 ~ b5 g#5 e5 ~ c#6 a#5 f#5 ~ c#6", J: "c#6/2",
})).s("gm_overdriven_guitar").gain(0.22).pan(1)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_4 = note("<~@73 A@2 B@2 C@4 D@2 E@2 F G H I J@2 ~@34>".pickRestart({
  A: "d#5/2", B: "[a#4@3 a#4]/2", C: "[a#4@3 b4@5]/4", D: "[d#5@6 d#5 d5]/2", E: "[e5@29 ~@3]/2", F: "e4@12 f#4@3 ~",
  G: "f#4@11 ~ a#4@4", H: "a#4", I: "c#5@15 ~", J: "b4/2",
})).s("gm_overdriven_guitar").gain(0.18).pan(0.1)

// drums · kick
const kick = s("bd").struct(`<
  ~@40 A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B ~ A B A B@3 A B A@2 B@2 A B A B A B A B A B A B A
  B A B A B A B@2 A B A B A B A B A B D B A B A B A B D
>`.pickRestart({
  A: "x ~@6 x", B: "x", C: "x ~@2 x", D: "x ~@2 x!2 ~@3",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@40 [~ x]!32 [x ~@2 x!4 ~] ~@16 [~ x]!13 [~@5 x ~@2] [~ x]!22>").gain(0.57)

// drums · low tom
const low_tom = s("lt").struct("<~@72 [~@3 x!4 ~] ~@29 [~@3 x] ~@22>").gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<~@24 A@16 B@32 C D E D E D E D E D E D E D E D E B@36>".pickRestart({
  A: "~ x", B: "x!4", C: "x!3 ~", D: "x ~ x ~ x ~ x!2", E: "x ~ x!2",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@73 [~ x]!16 ~@36>").gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@72 A ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@13 C ~@22>".pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~@7 x",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@70 x ~@54>").gain(0.36)

// drums · ride
const ride = s("rd").struct("<~@73 [x!4]!16 ~@36>").gain(0.29)

// drums · tambourine
const tambourine = s("tb").struct("<~@40 [~ x]!32 x ~@16 [~ x]!13 [~@5 x ~@2] [~ x]!22>").gain(0.36)

stack(
  bass, percussive_organ, acoustic_guitar_steel, epiano1, epiano1_soft, string_ensemble_1, overdriven_guitar,
  acoustic_guitar_steel_2, overdriven_guitar_2, overdriven_guitar_3, overdriven_guitar_4, kick, snare, low_tom, hihat,
  mid_tom, open_hat, crash, ride, tambourine
)

More by Rod Stewart