Strudelify

Why Can't We Be Friends

War

KeyA♭ majorTempo206 bpm
0:00/0:00
// Why Can't We Be Friends — War
// 206 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 16 piano (copy of ch 5 choir aahs)
// note: Full arrangement: all 158 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(206/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
const bass = note(`<
  ~@5 A@2 B@2 C D@2 E@2 F G H I J@3 K L@2 M@3 N O P Q R S T U V W X Y Z AA AB AC N O P Q R S T U V W X Y Z AA AB AD V W
  X Y Z AA AB AC N O P Q R S T U V W X Y Z AA AB AD V W X Y Z AA AB AC N O P Q R S T U V AE X AF AG AH AI AJ AK AL X Y Z
  AA AB AD V AL X Y Z AA AB AC N AE X AF AG AH AI AJ AK AE X AF AG AH AI AJ AK AE X AF AG AH AI AJ AK AM X AF AG AH AI
  AJ AK AN@2
>`.pickRestart({
  A: "[~ c3@28 f3@3]/2", B: "[~ eb3@4 ~ db3@4 ~ ab2@4 db2@14 eb1@3]/2", C: "~@2 f1@4 g1@4 ~ ab1@5",
  D: "[~@2 ab1@2 bb1@3 ~@2 ab1@12 ~@2 c2 ~ c2 ~@2 eb2@4]/2", E: "[c2@6 ~ c2@2 db2@4 ~ c2@12 ~@2 eb1 ~ f1 ~]/2",
  F: "~ ab1@4 f1@5 ~@2 f1 ~ c2@2", G: "~@3 f1@11 ~@2", H: "~ f1 ~ c2@2 ~ f1@4 eb1@6", I: "~ eb1 ~@4 eb1 ~ ab1@8",
  J: "[~@4 ab1 ~ bb1@4 ~ c2@4 db2@5 ~@2 db2 ~@2 eb2 ~@3 db2@15 ~ eb2 ~@2]/3", K: "db2@4 c2@5 ~@2 c2@2 ~ db2@2",
  L: "[~@18 f1@3 ~@4 bb1@5 ~@2, ~ c2@9 ~@6]/2", M: "[bb1@2 ~ f1@2 ~@2 bb1@12 ~@2 bb1@9 eb1@17 ~]/3", N: "eb2@2 f1 g1",
  O: "ab1@2 c2@2 eb2@2 c2 eb2", P: "ab1!2 eb2@2 db2@2 db2@2", Q: "c2@4 c2@3 ~ g1@3 ~ g1@4", R: "c2!2 e1@2 f1@2 g1@2",
  S: "f1@2 ab1@2 c2@2 ab1 c2", T: "f1!2 c2@2 ab1@2 c2@2", U: "eb1!2 bb1 eb2", V: "ab1!2 bb1 c2", W: "db2!2 ab1!2",
  X: "db2@2 db2 ~ db2@4 db2@2 db2@2 db2@4", Y: "c2@4 c2@4 e1@3 ~ e1@4", Z: "f1@3 ~ f1@4 gb1@4 g1@4", AA: "bb1!2 db2 f2",
  AB: "bb1 ~ bb1 ~ bb1@4 f2@4 bb1@4", AC: "eb1@3 ~ eb1@4 g1@4 bb1@4", AD: "eb1@3 ~ eb1@4 bb1@4 eb2@4",
  AE: "db2@3 ~ db2@4 db2@4 db2@4", AF: "c2!4", AG: "c2@3 ~ c2@4 c2@4 c2@4", AH: "bb1!4",
  AI: "bb1 ~ bb1 ~ bb1@4 bb1@4 bb1@4", AJ: "eb1!4", AK: "eb1!3 g1", AL: "db2@3 ~ db2@4 ab1@4 ab1@4", AM: "db2!4",
  AN: "ab1/2",
})).s("gm_electric_bass_finger").gain(0.55)

// other · trombone
const trombone = note(`<
  ~@10 A@2 B C D E F@5 G@4 H@3 ~@6 I J ~@14 I J ~@7 K L ~@13 I J ~@7 K L ~@13 I J ~@15 K L ~@41
>`.pickRestart({
  A: "[eb4@2 ~@5 db4@2 ~@5 c4@9 ab3@2 ~@7]/2", B: "~@5 eb4@2 ~@5 db4@2 ~@2", C: "~@3 c4@9 ab3@2 ~@2", D: "~@5 eb4 ~@2",
  E: "~ db4@2 ~@5 c4@8", F: "[~ ab3@2 ~@12 eb4@2 ~@5 db4@2 ~@5 c4@9 ab3@2 ~@7 f3@4 ~ g3@4 ~ ab3@4 bb3@9 ab3@9 ~]/5",
  G: "[c4@33 ~@8 f3@4 ~ g3@4 ~ ab3@4 bb3@9]/4", H: "[ab3@9 ~ c4@31 ~@7]/3", I: "gb3", J: "eb3@7 ~", K: "~@2 g3 gb3",
  L: "f3 ~@3",
})).s("gm_trombone").gain(0.55).pan(0.3)

// chords · alto sax
const alto_sax = note(`<
  ~@10 A@2 B C D E F@5 G@4 H@3 ~@6 I J ~@14 I J ~@7 K L ~@13 I J ~@7 K L ~@13 I J ~@15 K L ~@21 M N ~@18
>`.pickRestart({
  A: "[ab4@2 ~@5 f4@3 ~@4 eb4@9 c4@3 ~@6]/2", B: "~@5 ab4@2 ~@5 f4@3 ~", C: "~@3 eb4@9 c4@3 ~", D: "~@5 ab4 ~@2",
  E: "~ f4@3 ~@4 eb4@8", F: "[~ c4@3 ~@11 ab4@2 ~@5 f4@3 ~@4 eb4@9 c4@3 ~@6 f3@4 ~ g3@4 ~ ab3@4 bb3@9 ab3@9 ~]/5",
  G: "[[c4,e4]@33 ~@8 f3@4 ~ g3@4 ~ ab3@4 bb3@9]/4", H: "[ab3@9 ~ [c4,eb4]@31 ~@7]/3", I: "[bb3,db4]",
  J: "[ab3,c4]@7 ~", K: "~@2 [eb4,g4] [d4,gb4]", L: "[db4,f4] ~@3", M: "gb4 f4 eb4 db4", N: "c4 bb3 ab3 gb3",
})).s("gm_alto_sax").gain(0.48)

// other · trumpet
const trumpet = note("<~@10 A@2 B C D E F@3 ~@119 G H ~@18>".pickRestart({
  A: "[c5@2 ~@5 bb4@2 ~@5 ab4@9 f4@2 ~@7]/2", B: "~@5 c5@2 ~@5 bb4@2 ~@2", C: "~@3 ab4@9 f4@2 ~@2", D: "~@5 c5 ~@2",
  E: "~ bb4@2 ~@5 ab4@8", F: "[~ f4@2 ~@12 c5@2 ~@5 bb4@2 ~@5 ab4@9 f4@2 ~@8]/3", G: "gb5 f5 eb5 db5",
  H: "c5 bb4 ab4 gb4",
})).s("gm_trumpet").gain(0.55).pan(0.6)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@92 A B C D E@2 F G H@2 I@2 J@2 K@2 ~@16 H@2 I@2 J@2 K@2 H@2 I@2 J@2 K@2 H@2 I@2 J@2 K@2 H@2 I@2 J@2 L@4
>`.pickRestart({
  A: "ab2@7 ab2", B: "ab2!8", C: "g3@7 g3", D: "g3!8", E: "ab3!2", F: "gb3 f3 eb3 db3", G: "c3 bb2 ab2 gb2",
  H: "[db3,ab3,db4]/2", I: "[c3,g3,c4]/2", J: "[bb2,f3,bb3]/2", K: "[[bb3,db4] [ab3,c4], eb3]/2",
  L: "[[bb3,db4] [ab3,c4]@3, eb3]/4", // Bbm Ab
})).s("gm_overdriven_guitar").gain(0.55).pan(0.4)

// chords · rock organ
const rock_organ = note(`<
  ~@9 A@5 B@7 C@7 D@2 E@2 F@2 G H I@2 J@2 K@2 L@2 D@2 E@2 F@2 G H I@2 J@2 K@2 M@2 I@2 J@2 K@2 L@2 D@2 E@2 F@2 G H I@2
  J@2 K@2 M@2 I@2 J@2 K@2 L@2 D@2 E@2 F@2 G H I@2 N@2 K@2 O P I@2 J@2 K@2 M@2 I@2 J@2 K@2 L@2 I@2 N@2 K@2 O P I@2 N@2
  K@2 O P I@2 N@2 K@2 O P I@2 N@2 K@2 O Q@2 ~
>`.pickRestart({
  A: "[~@11 ab5@37 g5@32, ~@11 eb5@69]/5", B: "[~@5 [f5,ab5]@37 [eb5,gb5]@37 ~@23 c6@7 bb5@3, ~@79 [db5,f5]@33]/7",
  C: "[~@4 ab5@23 c6@7 bb5@7 ab5@23 ~@7 ab5@7 eb6@9 c6@8 ~ ab5@8 f5@6 ~@2, ~@4 [c5,e5]@37 [db5,f5]@37 [bb4,eb5]@34, ~@64 c6@9 ~@39]/7", // C Db Eb5
  D: "ab5/2", E: "g5/2", F: "[f5,ab5]/2", G: "[gb5,bb5]", H: "[ab5,c6]", I: "[ab5,db6,f6]/2", J: "[g5,c6,e6]/2",
  K: "[bb5,db6,f6]/2", L: "[ab5 g5, [bb5,eb6]]/2", M: "[[ab5,bb5] [ab5,c6], eb6]/2", N: "[g5,bb5,c6,eb6]/2",
  O: "[gb5,bb5,db6]", P: "[eb5,ab5,c6]", Q: "[eb5,ab5,c6]/2",
})).s("gm_rock_organ").gain(0.41).pan(0.6)

// chords · electric guitar jazz
const electric_guitar_jazz = note("<A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ~@132>".pickRestart({
  A: "~@9 [eb3,ab3,c4] ~@2 [eb3,ab3,c4] ~ [eb3,ab3,c4] ~", // Ab
  B: "~@3 [eb3,ab3,c4] ~ [eb3,ab3,c4] ~ [eb3,ab3,c4] ~@4 [eb3,ab3,c4] ~ [eb3,ab3,c4] ~", // Ab
  C: "[eb3,ab3,c4] ~@4 [eb3,ab3,c4] ~ [eb3,ab3,c4] ~@2 [eb3,ab3,c4] ~@3 [f3,ab3,db4] ~", // Ab Db
  D: "~ [f3,ab3,db4] ~ [f3,ab3,db4] ~@4 [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~@3", // Db
  E: "~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~@10", // Db
  F: "~@3 [eb3,ab3,c4] ~@2 [eb3,ab3,c4] ~ [eb3,ab3,c4] ~@4 [eb3,ab3,c4] ~ [eb3,ab3,c4]", // Ab
  G: "~ [eb3,ab3,c4] ~@4 [eb3,ab3,c4] ~ [eb3,ab3,c4] ~@2 [eb3,ab3,c4] ~@3 [eb3,ab3,c4]", // Ab
  H: "~ [eb3,ab3,c4] ~@2 [eb3,ab3,c4] ~@3 [f3,ab3,db4] ~@2 [f3,ab3,db4] ~ [f3,ab3,db4] ~@2", // Ab Db
  I: "~@2 [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~@4 [f3,ab3,db4] ~ [f3,ab3,db4] ~@2", // Db
  J: "[f3,ab3,db4] ~@12 [eb3,ab3,c4] ~@2", // Db Ab
  K: "[eb3,ab3,c4] ~ [eb3,ab3,c4] ~@4 [eb3,ab3,c4] ~ [eb3,ab3,c4] ~ [eb3,ab3,c4] ~@4", // Ab
  L: "[eb3,ab3,c4] ~ [eb3,ab3,c4] ~@2 [eb3,ab3,c4] ~@3 [eb3,ab3,c4] ~@2 [eb3,ab3,c4] ~ [eb3,ab3,c4] ~", // Ab
  M: "~@2 [eb3,g3,c4] ~@2 [eb3,g3,c4] ~ [eb3,g3,c4] ~@4 [eb3,g3,c4] ~ [eb3,g3,c4] ~", // Cm
  N: "[eb3,g3,c4] ~@4 [eb3,g3,c4] ~ [eb3,g3,c4] ~@2 [eb3,g3,c4] ~@3 [eb3,g3,c4] ~", // Cm
  O: "~ [eb3,g3,c4] ~ [eb3,g3,c4] ~@4 [f3,ab3,c4] ~ [f3,ab3,c4] ~ [f3,ab3,c4] ~@3", // Cm Fm
  P: "~ [f3,ab3,c4] ~ [f3,ab3,c4] ~ [f3,ab3,c4] ~@4 [f3,ab3,c4] ~ [f3,ab3,c4] ~@2 [f3,ab3,c4]", // Fm
  Q: "~@3 [f3,ab3,c4] ~@2 [f3,ab3,c4] ~ [f3,ab3,c4] ~@4 [gb3,bb3,db4] ~ [gb3,bb3,db4]", // Fm Gb
  R: "~ [gb3,bb3,db4] ~@4 [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~@4 [eb3,ab3,c4]", // Gb Ab
  S: "~ [eb3,ab3,c4] ~@2 [eb3,ab3,c4] ~@3 [eb3,ab3,c4] ~@2 [eb3,ab3,c4] ~ [eb3,ab3,c4] ~@2", // Ab
  T: "~@2 [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~@4 [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4]", // Db
  U: "~@4 [f3,ab3,db4] ~ [f3,ab3,db4] ~@2 [f3,ab3,db4] ~@3 [f3,ab3,db4] ~@2", // Db
  V: "[f3,ab3,db4] ~ [f3,ab3,db4] ~@4 [g3,bb3,c4] ~ [g3,bb3,c4] ~ [g3,bb3,c4] ~@4", // Db C7
  W: "[g3,bb3,c4] ~ [g3,bb3,c4] ~ [g3,bb3,c4] ~@4 [e3,g3,c4] ~ [e3,g3,c4] ~@2 [e3,g3,c4] ~", // C7 C
  X: "~@2 [e3,g3,c4] ~@2 [e3,g3,c4] ~ [e3,g3,c4] ~@4 [f3,bb3,db4] ~ [f3,bb3,db4] ~", // C Bbm
  Y: "[f3,bb3,db4] ~@4 [f3,bb3,db4] ~ [f3,bb3,db4] ~@2 [f3,bb3,db4] ~@3 [f3,bb3,db4] ~", // Bbm
  Z: "[f3,bb3,db4] ~@2 [f3,bb3,db4] ~@3 [f3,bb3,db4] ~@2 [f3,bb3,db4] ~ [f3,bb3,db4] ~@3", // Bbm
})).s("gm_electric_guitar_jazz").gain(0.1).pan(0.4)

// other · electric guitar jazz
const electric_guitar_jazz_2 = note(`<
  A B C D@7 ~@15 E@3 ~@8 F G H I J K L@2 ~@8 F G H I J K L@2 F G H I J K L@2 ~@8 F G H I J K L@2 F G H I J K L@2 ~@16 F
  G H I J K L@2 F G H I J K L@2 ~@34
>`.pickRestart({
  A: "~@7 [eb3,ab3,c4]@3 ~@4 [eb3,ab3,c4]@2", B: "[f3,ab3,db4]@2 ~@3 [eb3,ab3,c4]@10 ~",
  C: "[eb3,ab3,c4]@2 ~ [f3,db4]@2 [eb3,c4]@7 [ab3,db4,f4]@3 ~, ~@3 ab3@9 ~@4", // Ab Db Cm Db
  D: "[~ f4 ~ [ab3,db4,f4]@2 [bb3,db4,gb4]@3 ~@2 [ab3,db4,f4]@23 [eb3,ab3,c4]@3 ~@4 [eb3,ab3,c4]@2 [f3,ab3,db4]@2 ~@3 [eb3,ab3,c4]@10 ~@2 [eb3,ab3,c4]@2 [f3,db4]@2 [eb3,c4]@7 [ab3,db4,f4]@3 ~@2 f4 ~ [ab3,db4,f4]@2 [bb3,db4,gb4]@3 ~@2 [ab3,db4,f4]@23 ~@5, ~@61 ab3@9 ~@42]/7", // Db Gb Db Ab Db Ab Db Cm …
  E: "[~@14 [g3,bb3,eb4]@33 ~]/3", F: "ab3@8 ~@2 ab3 ~@3 ab3 ~", G: "~@2 ab3 ~@3 ab3 ~ ab3@2 ~@2 ab3@2 ~@2",
  H: "ab3@4 ~@2 ab3 ~@3 ab3@2 ~@2 ab3 ~", I: "~@2 ab3 ~@3 ab3 ~ c4@4 bb3@4", J: "ab3@10 ab3 ~@3 ab3 ~",
  K: "~@2 ab3 ~@3 ab3 ~ ab3 ~@3 ab3@2 ~@2", L: "[bb3@5 ~@3]/2",
})).s("gm_electric_guitar_jazz").gain(0.41).pan(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@28 A B C D E@2 F G H@2 I@2 H@2 J K A B C D E@2 F G H@2 I@2 H@2 J L H@2 I@2 H@2 J K A B C D E@2 F G H@2 I@2 H@2 J L
  H@2 I@2 H@2 J K A B C D E@2 F G ~@8 H@2 I@2 H@2 J L H@2 I@2 H@2 J K ~@34
>`.pickRestart({
  A: "~@2 [eb4,ab4,c5]@4 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~", // Ab
  B: "~@2 [eb4,ab4,c5]!2 [eb4,ab4,c5]@2 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~", // Ab
  C: "~@2 [c4,e4,g4]@4 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // C
  D: "~@2 [c4,e4,g4]!2 [c4,e4,g4]@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // C
  E: "~@2 [c4,f4,ab4]@4 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~", // Fm
  F: "~@2 [eb4,gb4,bb4]@4 [eb4,gb4,bb4] ~@3 [eb4,gb4,bb4] ~@3 [eb4,gb4,bb4] ~", // Ebm
  G: "~@2 [c4,eb4,ab4]@4 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~", H: "[db4,f4,ab4]!8", I: "[c4,e4,g4]!8",
  J: "[eb4,ab4,bb4]!8", K: "[eb4,g4,bb4]!8", L: "[eb4,ab4,c5]!8",
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.3)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B C D A E F G H I J K ~ L M N I E K I O P Q R S T@7 U T@7 V T@7 U T@7 V T@7 V T@7 U T@7 V T@7 V T@7 U T@7 V T@7
  V T@7 V T@7 V T@7 V T@7 V T@7 V ~@2
>`.pickRestart({
  A: "~@15 x", B: "~@4 x!2 ~@2", C: "~@5 x ~@2", D: "~@13 x ~@2", E: "~@11 x ~@4", F: "~ x ~@6", G: "~ x ~@2",
  H: "~@7 x ~@8", I: "~@9 x ~@6", J: "~@5 x ~@6 x ~@3", K: "~@7 x", L: "~ x ~@14", M: "~@3 x ~@11 x", N: "~@3 x ~@4",
  O: "x", P: "~@3 x ~@12", Q: "~@5 x ~@10", R: "~@3 x ~@8 x ~ x ~", S: "~@5 x!4 ~ x!6", T: "~ x ~ x",
  U: "~@4 x ~@7 x ~ x!2", V: "~@4 x ~@6 x!2 ~ x!2",
})).gain(0.68)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@7 A ~@3 B ~@4 C ~@4 D ~@3 E F G ~@7 H ~@3 I ~@3 J ~@7 H ~@3 I ~@3 J ~@3 I ~@3 J ~@7 H ~@3 I ~@3 J ~@3 I ~@3 J ~@7 H
  ~@3 I ~@3 J ~@3 I ~@3 J ~@3 I ~@3 J ~@3 I ~@3 J ~@3 I ~@3 J ~@3 I ~@3 J ~@3 I ~@3 J ~@2
>`.pickRestart({
  A: "~ x ~@2", B: "~@7 x", C: "~ x", D: "~ x ~@6", E: "~@3 x", F: "~@2 x ~@7 x!2 ~@4", G: "~@2 x!3 ~@4 x ~@6",
  H: "~@10 x!2 ~ x ~@2", I: "~@14 x!2", J: "~@5 x ~@2",
})).gain(0.45)

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

// drums · low tom
const low_tom = s("lt").struct("<~@9 [~@3 x ~@4] ~@16 [~@7 x ~@8] ~@131>").gain(0.68)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 [~@3 x ~@8 x ~@3] ~@22 x ~@130>").gain(0.68)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@43 A ~@15 A ~@7 A ~@15 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@2
>`.pickRestart({
  A: "~ x ~@2",
})).gain(0.68)

// drums · crash · soft notes
// … 15 more lines

More by War