Strudelify

On The Border

Al Stewart

KeyF minorTempo190 bpm
0:00/0:00
// On The Border — Al Stewart
// 190 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "Metalic Effects on Piano 1" named as a piano, played on piano (its synth bass 2 patch is not one)
// note: duplicate parts dropped: ch 7 "Guitar" acoustic guitar steel (copy of ch 6 "Guitar" acoustic guitar steel); ch 12 "Harmony" piccolo (copy of ch 11 "Melody" flute)
// note: Full arrangement: all 173 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(190/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 · piano · "Piano 1"
const bass = note("<[f1 f2 f1 f2 f1 f2 f1 f2]!46 ~@127>").s("gm_piano").gain(0.25)

// other · piano · "Metalic Effects on Piano 1"
const piano = note("<[f1 ~ f2 ~ f1 ~ f2 ~ f1 ~ f2 ~ f1 ~ f2 ~]!4 ~@169>").s("gm_piano").gain(0.45)

// chords · piano · "Piano 2"
const piano_2 = note(`<
  ~@4 A@7 B A B A B A B A B A B A B A@4 C@4 D@2 E F G H A@12 C@4 D@2 E F G H A@4 I@2 J@2 K@2 I L K@2 M N O P A@12 C@4
  D@2 E F G H A@4 I@2 J@2 K@2 I L K@2 M N O P A@12 C@4 D@2 E F G H A@4 C@4 A@4 C@4 A@16 Q
>`.pickRestart({
  A: "[f4,ab4]@2 c4@2 [f4,ab4] ~ [bb3,eb4,g4]@3 ~ [c4,f4,ab4]@3 ~ c4@2", // Fm Eb Fm
  B: "[f4,ab4]@2 c4@2 [f4,ab4] ~ [bb3,eb4,g4]@3 ~ [c4,g4,bb4]@3 ~ c4@2", // Fm Eb C7
  C: "[db4,f4]@2 ab3@2 [db4,f4] ~ [f4,ab4]@3 ~ [db4,f4]@4 ab3@2", // Db Fm Db
  D: "[db4,f4]@2 bb3@2 [db4,f4] ~ [f4,bb4]@3 ~ [db4,f4]@4 bb3@2", // Db Bb5 Db
  E: "[eb4,ab4]@2 c4@2 [eb4,ab4] ~ [eb4,ab4]@4 c4@2 [eb4,ab4]@2 c4@2", // Ab5
  F: "[db4,gb4]@2 bb3@2 [db4,gb4] ~ [db4,gb4]@4 bb3@2 [db4,gb4]@2 bb3@2", // Gb5
  G: "[c4,f4]@2 ab3@2 [c4,f4] ~ [c4,f4]@4 ab3@2 [c4,f4]@2 ab3@2", // F5
  H: "[bb3,eb4]@2 g3@2 [bb3,eb4] ~ [bb3,eb4]@4 g3@2 [bb3,eb4]@2 g3@2", // Eb5
  I: "[ab4,c5]@2 eb4@2 [ab4,c5] ~ [ab4,c5]@4 eb4@2 [ab4,c5]@2 eb4 ~", // Ab
  J: "[bb4,db5]@2 gb4@2 [bb4,db5] ~ [bb4,db5]@4 gb4@2 [bb4,db5]@2 gb4 ~", // Bbm
  K: "[ab4,db5]@2 f4@2 [ab4,db5] ~ [ab4,db5]@4 f4@2 [ab4,db5]@2 f4 ~", // Db5
  L: "[ab4,c5]@2 eb4@2 [ab4,c5] ~ [ab4,c5]@4 eb4 ~ [ab4,c5]@2 eb4 ~", // Ab
  M: "[g4,c5]@2 e4@2 [g4,c5] ~ [g4,c5]@4 e4@2 [g4,c5]@2 e4 ~", // C5
  N: "[c5,e5]@2 g4@2 [c5,e5] ~ [c5,e5]@4 g4@2 [c5,e5]@2 g4 ~", // C
  O: "[e5,g5]@2 c5@2 [e5,g5] ~ [e5,g5]@4 c5@2 [e5,g5]@2 c5 ~", P: "[g5,bb5] e5 [g5,bb5] e5 [g5,c6] e5 [g5,c6] e5",
  Q: "[f4,ab4] ~@7", // Fm
})).s("gm_piano").gain(0.64)

// other · piano · "Piano 3"
const piano_3 = note("<~@59 A ~@6 B@4 ~@2 B@2 ~ C D E ~@21 A ~@6 B@4 ~@2 B@2 ~ C D E ~@21 A ~@33>".pickRestart({
  A: "~ g2 ~@3 g2 ~ g2", B: "db4@2 ~@2 db4 ~ db4@4 ~@2 db4@2 ~@2", C: "e4@2 ~@2 e4 ~ e4@4 ~@2 e4@2 ~@2",
  D: "[e4,g4]@2 ~@2 [e4,g4] ~ [e4,g4]@4 ~@2 [e4,g4]@2 ~@2", E: "[g4,bb4] e4 [g4,bb4] e4 [g4,c5] e4 [g4,c5] e4",
})).s("gm_piano").gain(0.56)

// chords · string ensemble 2 · "Strings"
const string_ensemble_2 = note(`<
  ~@11 A@8 ~@4 B@4 C@8 D@2 E@8 F@4 G@8 H@6 I@2 J@8 K@4 L@8 ~ M@7 N@6 O@5 P@3 Q@6 K@4 L@8 ~ R@7 S@6 T@8 U@8 V@8 W@4 X@6
>`.pickRestart({
  A: "[~@15 c6@113]/8", B: "[~@5 bb5@10 ab5@49]/4", C: "[~@7 g5@8 f5@64 bb5@32 c6@16 bb5]/8", D: "[~@15 ab5@16 g5]/2",
  E: "[~@79 c5@49, ~@15 f5@113, ~@47 f4@64 ~@17]/8", F: "[~@15 [f4,ab5,c6]@49]/4",
  G: "[~@15 [db4,f5,ab5,db6]@64 [bb3,f5,bb5,db6]@32 [ab4,ab5,c6]@16 [gb4,gb5,bb5]]/8", // Db Bbm Ab Gb
  H: "[~@15 [f4,f5,ab5]@16 [eb4,eb5,g5]@16 [f4,f5,ab5]@49]/6", I: "[~@15 [ab4,c5,eb5,c6]@17, ~@15 ab5 ~@16]/2",
  J: "[~@15 [gb4,bb4,eb5,gb5,bb5]@32 [f4,ab4,db5,f5,ab5]@32 [eb4,ab4,c5,ab5,c6]@32 [f4,ab4,db5,f5,ab5]@17]/8", // Ebm Db Ab Db
  K: "[~@47 c6@17, ~@15 [g4,c5,e5,g5]@49]/4", L: "[~@15 ab6@32 ~@16 ab5@64 g5, ~@15 [ab4,f5]@113, ~@15 f6@64 ~@49]/8",
  M: "[[f4,ab5,c6]@9 [db4,db5,f5]@7]/7", // Fm Db
  N: "[~@15 [bb3,bb4,db5]@32 [ab3,ab5,c6]@16 [gb3,gb5,bb5]@16 [f3,f5,ab5]@16 [eb3,eb5,g5]]/6", // Bbm Ab Gb Fm Eb
  O: "[~@15 [f3,f5,ab5]@64 ~]/5", P: "[[ab4,c5,eb5,ab5,c6]@31 [gb4,bb4,gb5,bb5]@17, ~@31 eb5 ~@16]/3",
  Q: "[~@15 [f4,ab4,db5,f5,ab5]@32 [eb4,ab4,c5,ab5,c6]@32 [f4,ab4,db5,f5,ab5]@17]/6", // Db Ab Db
  R: "[[f4,ab5,c6]@9 [db4,f5,db6]@7, ~@63 ab5 ~@48]/7", // Fm Db
  S: "[~@15 [bb3,f5,bb5,db6]@32 [ab4,ab5,c6]@16 [gb4,gb5,bb5]@16 [f4,f5,ab5]@16 [eb4,eb5,g5]]/6", // Bbm Ab Gb Fm Eb
  T: "[~@15 [f4,f5,ab5]@64 [db4,f5,db6]@49]/8", U: "[~@15 [f4,f5,c6]@64 [db4,f5,ab5]@49]/8",
  V: "[~@15 [f4,f5,c6]@64 [f4,f5,ab5]@49]/8", W: "[~@15 [f4,c5,ab5]@49]/4", X: "[~@15 [f4,c5,f5]@80 ~]/6",
})).s("gm_string_ensemble_2").gain(0.48)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  ~@38 A@3 B C D@4 ~@13 E@5 ~@5 F@2 ~@5 G@8 H I ~@14 J K L M ~@5 N@4 ~@2 O@2 P@3 Q R@2 S@2 T@2 ~@13 U V W X@6 Y@2 Z AA
  AB@2 AC@3 ~@14
>`.pickRestart({
  A: "[~@10 c5 c5@6 c5 db5 eb5 c5 db5 bb4 c5, ~@15 [c4,f4]@3 bb4@4 ~@26, ~@4 c5 ~@7]/3", // F5
  B: "ab4 g4 ab4 ab4@2 g4 f4 eb4", C: "~@5 g4 ab4 g4, f4@3 ~",
  D: "[f4@2 g4@2 f4@2 eb4@4 db4@2 c4@2 ~@20 bb3@2 ab3@2 g3@2 bb3@2 ab3@2 g3@2 ~ f3@17, ~@14 bb3@4 ~@28 ab3@3 ~@15, ~@4 c4@5 ~@7]/4",
  E: "[~@18 g4@2 ~@43 ab3@15 ~@2, ~@15 c4@4 ~@3 g4@4 eb4@4 c4@4 eb4@4 db4@6 bb3@4 g3@4 db4@4 bb3@4 g3@4 ~@16, ~@8 f4@2 ab4@2 f4@2 db4@2 db4@2 c4@2 ~ c4@2 ab3@2 eb4@2 c4@2 ab3@2 f3@2 ~@7]/5",
  F: "[~ c5 db5 ~@2 ab4 bb4 c5@4 ~@5, ~@3 eb5@3 ~@10]/2",
  G: "[~@16 c5@2 c5 ~ c5@2 c5@13 ~@3 c5@2 ~@8 c5@2 c5@4 c5@12 ab4@2 bb4@2 ~@4 f4@2 g4@2 ab4@12 g4@2 ~@2 g4@4 ab4@2 f4@2 eb4@2 f4@2 eb4@2 db4@2 c4@16 bb3@2, ~@15 [f4,ab4]@2 ~@23 db5@4 eb5@4 ~@80, ~@21 c5@2 db5@2 ~@10 c5@4 ~@7 f4@2 ~@16]/8", // Fm
  H: "c4 bb3 ab3 g3@2 ab3 g3@2", I: "f3@15 ~", J: "~ f2 eb2 f2 g2 f2 g2 ab2", K: "g2 ab2 bb2 ab2 bb2 c3 bb2 c3",
  L: "db3 c3 db3 eb3 db3 eb3 f3 g3", M: "ab3@5 ~@3",
  N: "[~ [db4,f4], ~@5 db5@2 db5@2 bb4@2 f4@2 c4@2 c4@2 ~@15, ~@3 c5 c5 ab4 eb4 bb3 ~@8]/4", // Db
  O: "[~@15 eb4, c5!3 ab4 ab4!2 f4!2, ~ db5@2 bb4@2 bb4@2 bb4@2 g4@2 g4@2 g4@2 ~]/2",
  P: "[f4@5 eb4 db4 c4@5 f4 eb4 db4 c4@2 ab3 bb3 c4@5]/3", Q: "~ ab3 g3 ab3 bb3 ab3 bb3 c4",
  R: "[eb4 c4 eb4 f4@2 eb4 f4 g4@2 g4 ab4@2 g4 ab4 g4 eb4]/2", S: "[f4@5 c4 bb3 ab3]/2", T: "[f3@11 ~@5]/2",
  U: "~ c3 db3 eb3 f3 g3 ab3 bb3", V: "c4 ~@2 c4@5, ~ db4@2 ~@5, ~ bb3 ~@2", W: "~ bb3 ab3 g3 bb3 ab3 g3 ab3",
  X: "[f3@12 ~@3 f3@2 ~@2 bb3@2 ~@6 ab4@2 bb4@2 ~ c5@10 ~@2 c5!4, ~@13 db3@2 ~@3 ab3@2 ~ c4@2 eb4@3 g4@2 ~@3 bb4@2 ~@15, ~@14 eb3@2 ~ g3@2 ~@3 db4@2 ~ f4@2 ~@21]/6",
  Y: "[c5 db5 c5 bb4!2 ab4 ab4@5 g4 ab4 g4 f4 eb4]/2", Z: "f4@13 ~ eb4@2", AA: "db4@2 c4 db4@5",
  AB: "[~@3 bb3@6 ab3 bb3 ab3@2 g3 ab3@2, ~ ab4@2 ~@13, ~ c4 ~@6]/2", AC: "[g3@6 f3@5 ~ c3@36]/3",
})).s("gm_acoustic_guitar_steel").gain(0.8).pan(0)

// chords · acoustic guitar steel · "Guitar" · soft notes
const acoustic_guitar_steel_2 = note("<~@3 A@8 B@8 C@5 ~@149>".pickRestart({
  A: "[~@15 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4,ab4]@4 ~ f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4,ab4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4,ab4]@4 ~ f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4]@3 ~@2 [c4,f4], ~@15 c4@6 ~@10 c4@7 ~@4 ab4@5 c4@7 ~@4 ab4@5 c4@6 ~@10 c4@6 ~@10 c4@7 ~@4 ab4@5 c4@7 ~@4 ab4@5 ~]/8", // Eb Fm Eb F5 Eb F5 Eb Fm …
  B: "[ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4,ab4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4,ab4]@4 ~ f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4,ab4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4,ab4]@4 ~ f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4]@3 ~@2 [c4,f4], ~@15 c4@6 ~@10 c4@7 ~@4 ab4@5 c4@7 ~@4 ab4@5 c4@6 ~@10 c4@6 ~@10 c4@7 ~@4 ab4@5 c4@7 ~@4 ab4@5 ~]/8", // Eb Fm Eb Fm Eb F5 Eb F5 …
  C: "[ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4,ab4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4,ab4]@4 ~ f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4]@3 ~@2 f4 ab4@2 f4@2 ab4@2 [eb4,g4]@3 ~ [c4,f4,ab4]@3 ~@3, ~@15 c4@6 ~@10 c4@7 ~@4 ab4@5 c4@7 ~@4 ab4@5 c4@6 ~@11]/5", // Eb Fm Eb Fm Eb F5 Eb F5 …
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0)

// other · orchestral harp · "Enhance Solos via Harp"
const orchestral_harp = note(`<
  ~@77 A@8 B C ~@29 D@2 E@3 F G@2 H@2 I@2 ~@13 J K L M@6 N@2 O P Q@2 R@3 ~@14
>`.pickRestart({
  A: "[~@16 c5@2 c5 ~ c5@2 c5@13 ~@3 c5@2 ~@8 c5@2 c5@4 c5@12 ab4@2 bb4@2 ~@4 f4@2 g4@2 ab4@12 g4@2 ~@2 g4@4 ab4@2 f4@2 eb4@2 f4@2 eb4@2 db4@2 c4@16 bb3@2, ~@15 [f4,ab4]@2 ~@23 db5@4 eb5@4 ~@80, ~@21 c5@2 db5@2 ~@10 c5@4 ~@7 f4@2 ~@16]/8", // Fm
  B: "c4 bb3 ab3 g3@2 ab3 g3@2", C: "f3@15 ~",
  D: "[~@15 eb4, c5!3 ab4 ab4!2 f4!2, ~ db5@2 bb4@2 bb4@2 bb4@2 g4@2 g4@2 g4@2 ~]/2",
  E: "[f4@5 eb4 db4 c4@5 f4 eb4 db4 c4@2 ab3 bb3 c4@5]/3", F: "~ ab3 g3 ab3 bb3 ab3 bb3 c4",
  G: "[eb4 c4 eb4 f4@2 eb4 f4 g4@2 g4 ab4@2 g4 ab4 g4 eb4]/2", H: "[f4@5 c4 bb3 ab3]/2", I: "[f3@11 ~@5]/2",
  J: "~ c3 db3 eb3 f3 g3 ab3 bb3", K: "c4 ~@2 c4@5, ~ db4@2 ~@5, ~ bb3 ~@2", L: "~ bb3 ab3 g3 bb3 ab3 g3 ab3",
  M: "[f3@12 ~@3 f3@2 ~@2 bb3@2 ~@6 ab4@2 bb4@2 ~ c5@10 ~@2 c5!4, ~@13 db3@2 ~@3 ab3@2 ~ c4@2 eb4@3 g4@2 ~@3 bb4@2 ~@15, ~@14 eb3@2 ~ g3@2 ~@3 db4@2 ~ f4@2 ~@21]/6",
  N: "[c5 db5 c5 bb4!2 ab4 ab4@5 g4 ab4 g4 f4 eb4]/2", O: "f4@13 ~ eb4@2", P: "db4@2 c4 db4@5",
  Q: "[~@3 bb3@6 ab3 bb3 ab3@2 g3 ab3@2, ~ ab4@2 ~@13, ~ c4 ~@6]/2", R: "[g3@6 f3@5 ~ c3@36]/3",
})).s("gm_orchestral_harp").gain(0.8)

// bass · electric bass finger · "Bass"
const bass_2 = note(`<
  ~@15 A B C B D B C E C F G@2 H I J@2 K L M@2 N O P F Q@2 H F Q@2 H F Q@2 H R S@2 K L M@2 N O P F Q@2 H T@2 U@2 V@2 W X
  Y Z AA AB AC AD F Q@2 H F Q@2 H F Q@2 H R S@2 K L M@2 N O P F Q@2 H AE@2 U@2 V@2 W X Y Z AA AB AC AD F Q@2 H F Q@2 H F
  Q@2 H R S@2 K L M@2 N O P F Q@2 H R S@2 K F Q@2 H R S@2 K F Q@2 AF F Q@2 AF F Q@2 AF F Q@2 AF AG
>`.pickRestart({
  A: "~@7 c2", B: "f2 ~@7", C: "g2 f2 ~ c2 ~ c2 ~ c2", D: "g2@2 f2@2 ~@2 c2 ~@4 c2@2 ~ c2@2", E: "f2 ~@15", F: "f2 ~@3",
  G: "[g2@2 f2 ~@3 c2 ~@3 c2 ~@3 c2 f2@5 ~@12]/2", H: "g2@2 f2 ~@3 c2@7 ~ ab1 ~", I: "db2@3 ~",
  J: "[f2@2 eb2 ~@3 db2 ~@3 db2 ~@3 ab1 db2@12 ~@5]/2", K: "f2@2 eb2@2 ~@2 db2@5 ~@3 f1 ~", L: "bb1@3 ~",
  M: "[f2@2 db2 ~@3 bb1 ~@3 bb1 ~@3 eb1 ab1@7 ~@9 db1]/2", N: "gb1@9 ~@6 c1", O: "f1@9 ~@6 bb0", P: "eb1@10 ~@4 c2 ~",
  Q: "[g2@2 f2 ~@3 c2 ~@3 c2 ~@3 c2 f2@4 ~@13]/2", R: "db2 ~", S: "[f2@2 eb2 ~@3 db2 ~@3 db2 ~@3 ab1 db2@11 ~@6]/2",
  T: "[ab2@7 ~ c2@3 ~ eb2 ~ ab2@8 ~@2 c2@2 ~@2 db2 ~@3]/2",
  U: "[eb2@7 ~ bb1@3 ~ db2 ~ eb2@8 ~@2 bb1@2 ~@2 eb2@2 ~@2]/2",
  V: "[db2@7 ~ ab1@2 ~@2 bb1 ~ db2@8 ~@2 ab1@2 ~@2 eb1@2 ~@2]/2", W: "ab1@6 eb1 ~", X: "ab1", Y: "db2@9 ~@2 ab1@2 ~@3",
  Z: "db2@7 ~", AA: "c2@7 ~", AB: "c2@11 ~ g1@2 ~@2", AC: "c2@10 ~@2 g1@3 ~", AD: "c2@14 ~ ab1",
  AE: "[ab2@7 ~ c2@3 ~ eb2 ~ ab2@8 ~@2 c2@2 ~@2 db2@2 ~@2]/2", AF: "g2@2 f2 ~@3 c2@7 ~ c2 ~", AG: "f2@13 ~@3",
})).s("gm_electric_bass_finger").gain(0.49)

// drums · rim
const rim = s("rim").struct("<~@18 [~@6 x!3 ~@7] ~@3 [~@6 x!3 ~@7] ~@150>").gain(0.64)

// drums · kick
const kick = s("bd").struct("<~@46 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@12 ~ B A@38 ~ B A@54 ~>".pickRestart({
  A: "~ x", B: "~@2 x!3 ~@2 x ~@3 x ~@4",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@46 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@12 ~@2 A@38 ~@2 A@54 ~>".pickRestart({
  A: "~ x",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@76 [~@12 x!3 ~] ~@39 [~@12 x!3 ~] ~@56>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@24 [x!2]!52 ~@2 [x!2]!38 ~@2 [x!2]!54 x>").gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@76 [~@6 x!3 ~@7] ~@39 [~@6 x!3 ~@7] ~@56>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@24 [~ x ~ x]!52 ~@2 [~ x ~ x]!38 ~@2 [~ x ~ x]!54 ~>").gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@76 [x!3 ~@13] [~@7 x ~@3 x ~@4] ~@38 [x!3 ~@13] [~@7 x ~@3 x ~@4] ~@55>").gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@24 A ~@21 A ~ B ~@11 A ~@3 A ~@7 A ~@5 A ~@7 A ~@7 A ~@5 A ~@3 A ~@7 A ~@5 A ~@7 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(0.8)

// drums · shaker
const shaker = s("sh").struct("<~@8 [x!4]!16 ~@149>").gain(0.4)

stack(
  bass, piano, piano_2, piano_3, string_ensemble_2, acoustic_guitar_steel, acoustic_guitar_steel_2, orchestral_harp,
  bass_2, rim, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, shaker
)

More by Al Stewart