Strudelify
That Voice Again cover art

So

That Voice Again

Peter Gabriel

KeyD♭ majorTempo120 bpm
0:00/0:00
// That Voice Again — Peter Gabriel
// 120 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 4 "A.PIANO 1" piano (copy of ch 1 "A.PIANO 1" piano)
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · piano · "A.PIANO 1"
const piano = note(`<
  A@6 B C@2 D E F@2 G E H@2 I E J@3 K@2 L@2 M N O@2 P Q P Q P R S@2 T@8 B C@2 D E F@2 G E H@2 I E J@3 K@2 L@2 M N O@2 P
  Q P Q P R S@2 U@8 V@8 B C@2 D E F@2 G W@6 B C@2 D E F@2 G B C@2 D E F@2 G E H@2 I E J@3 P
>`.pickRestart({
  A: "[~@6 b5@6 ~@10 bb5@6 ~@10 b5@6 ~@10 db6@6 ~@4 bb4 ~@5 b5@6 ~@10 bb5@6 gb5@3 ~, [gb4,b4,eb5]@15 ~ [gb4,bb4,db5]@15 ~ [gb4,b4,eb5]@15 ~ [gb4,bb4,db5]@15 ~ [gb4,b4,eb5]@15 ~ [gb4,bb4,db5]@14 ~@2, ~@12 ab5@11 ~@5 gb5@9 ~@7 ab5@10 ~@6 bb5@10 ~@6 ab5@10 ~@10]/6", // B Gb B Gb B Gb
  B: "[db3,ab3,db4]", // Db5
  C: "[~@2 [bb2,bb3,db4] ~ [bb2,bb3,db4]@3 bb2 [b2,gb3,b3] ~ [gb3,b3]@2 ~@4 db4 ~@3 [db3,ab3,db4]@12, ~@10 [b2,bb3] ~@3 [b2,gb3]@2 ~@16, ~@15 b3@2 ~@15]/2", // Bbm B5 Db5 Bmaj7 B5
  D: "~@2 [bb2,bb3,db4] ~ [bb3,db4]@3 bb2 [b2,gb3,b3] ~ [gb3,b3]@2 ~@2 [b2,gb3,b3]@2, ~@4 bb2@2 ~@4 b2 ~@5", // Bbm B5
  E: "db4 ~@3 [db3,ab3,db4]@12", // Db5
  F: "[~@2 [bb2,bb3,db4] ~ [bb3,db4]@3 bb2 [b2,gb3,b3] ~ [gb3,b3]@2 ~@4 db4 ~@3 [db3,ab3,db4]@12, ~@4 bb2@2 ~@4 b2 ~@3 [b2,gb3]@2 ~@16, ~@15 b3@2 ~@15]/2", // Bbm B5 Db5 B5
  G: "~@2 [bb2,bb3,db4] ~ [bb3,db4]@3 bb2 [b2,gb3,b3] ~ [b2,gb3,b3]@2 ~@2 [b2,gb3,b3]@2, ~@2 bb2 ~@5", // Bbm B5
  H: "[~@2 [bb2,bb3,db4] ~ [bb3,db4]@3 bb2 [b2,gb3,b3] ~ [gb3,b3]@3 ~@3 db4 ~@3 [db3,ab3,db4]@12, ~@4 bb2@2 ~@4 b2 ~@3 [b2,gb3]@2 ~@16, ~@15 b3@2 ~@15]/2", // Bbm B5 Db5 B5
  I: "~@2 [bb2,bb3,db4] ~ [bb3,db4]@3 bb2 [b2,gb3,b3] ~ [gb3,b3]@3 ~ [b2,gb3,b3]@2, ~@4 bb2@2 ~@4 b2 ~@5", // Bbm B5
  J: "[~@2 [bb2,bb3,db4] ~ [bb3,db4]@3 bb2 [b2,gb3,b3] ~ [gb3,b3]@2 ~@4 db4 ~@3 [db3,ab3,db4]@20 ~@8, ~@4 bb2@2 ~@4 b2 ~@3 [b2,gb3]@2 ~@32, ~@15 b3@2 ~@31]/3", // Bbm B5 Db5 B5
  K: "[[c3,c4,eb4]@18 ~ ab2@13, g3@16 ~@2 [ab3,c4,eb4]@13 ~]/2", L: "[[c3,c4]@18 [ab2,ab3,c4,eb4]@13 ~, g3 ~]/2",
  M: "[c3,g3,c4]", N: "~@2 [ab2,c4]@13 ~, ~@2 [ab3,eb4]@11 ~@3", O: "[[f2,f3] [g2,g3] ab2@2, c4@7 ~, ~@4 ab3@3 ~]/2",
  P: "[c3,g3,c4,eb4]", Q: "~@2 [ab2,ab3,c4,eb4]@13 ~", R: "~ [ab2,ab3,c4,eb4]@6 ~",
  S: "[[f2,f3]@8 [g2,g3]@8 ab2@8 eb2@7 ~, c4@31 ~, ~@16 ab3@15 ~]/2", // F G
  T: "[[bb4,eb5]@4 ~@6 bb3@2 eb3@2 ~@6 eb4@2 [bb3,eb5] ~@5 ab3@2 db3@2 [bb3,bb4,eb5]@4 eb3@2 ~@8 bb3@2 eb3@2 ~@2 eb3@2 ~@4 db3@2 ab3@2 db3@2 [bb4,eb5]@4 ~@14 bb3@2 eb3@2 ~@4 db3@2 ab3@2 db3@2 [bb4,eb5]@4 ~@16 bb3 ~@5 db3@2 [bb4,eb5] ~ db3 ~, eb2@22 ~@2 db2@7 ~ eb2@22 eb5@10 bb3 ~@3 eb5@4 gb4@2 eb4@2 bb3@2 gb4@22 eb5@14 eb4@4 db4@8 ~@2, bb3@4 bb4@2 gb5@17 ~@3 db4@5 ~ eb4@6 bb3@2 eb3@2 gb4@8 bb3@4 ab4@8 ~@2 eb4@4 bb4@2 gb5@16 ~@2 [db2,ab4,eb5]@7 ~ eb2@21 ~@3 db2@6 ~@2, [eb4,gb4]@2 eb3 gb4 eb4@4 eb3@3 ab4@4 ~@3 eb5@9 gb4@7 bb3 eb3@5 eb4@3 db4@5 eb4@2 bb4 gb5@3 bb3@2 gb4@7 ~, ~@4 eb5@10 bb3@4 gb4@5 ~ gb4@12 bb4@2 gb5@6 eb4@12 [db2,db4]@8 eb2@22 ab3@4 ~@6 bb3@6 eb3@2 gb4@2 eb4@4 eb3@7 ~ [ab3,ab4,eb5]@5 ~ ab3@2 ~@2]/8", // Eb5 Dbsus2 Ebm Db Ab5
  U: "[[bb4,eb5]@4 ~@6 bb3@2 eb3@2 ~@6 eb4@2 bb3 ~@5 ab3@2 db3@2 [bb3,bb4,eb5]@4 eb3@2 ~@8 bb3@2 eb3@2 ~@2 eb3@2 ~@4 db3@2 ab3@2 db3@2 [bb4,eb5]@4 ~@14 bb3@2 eb3@2 ~@4 db3@2 ab3@2 db3@2 [bb4,eb5]@4 ~@16 bb3 ~@5 db3@2 [bb4,eb5] ~ db3 ~, eb2@18 gb4@5 ~ gb4@12 bb4@2 gb5@6 eb4@10 ab4@8 ~@2 eb4@4 bb4@2 gb5@10 eb4@6 db4@10 bb3@6 eb3@2 gb4@2 eb4@4 eb3@7 ~ [ab3,ab4,eb5]@5 ~ ab3@2 ~@2, bb3@4 bb4@2 gb5@17 ~ db2@7 ~ eb2@22 eb5@10 bb3 ~@3 eb5@20 [db2,eb5]@8 eb2@21 ~@3 db2@6 ~@2, [eb4,gb4]@4 eb3@2 gb4@2 eb4@6 bb3@2 eb3@6 ab4@4 db4@5 ~ eb4@6 bb3@2 eb3@2 gb4@8 bb3@6 [db2,db4]@8 eb2@22 ab3@2 ab4@6 ~@2 eb4@4 bb4@2 gb5@6 bb3@4 gb4@14 ~@2, ~@2 eb5@9 eb5@5 ~@2 eb5@9 gb4@7 bb3 eb3 gb4 eb4 bb3 gb4@11 eb5@7 eb4@2 db4@4 ~]/8", // Eb5 Ab5 Dbsus2 Ebm Db
  V: "[~@4 bb4 ~@5 bb3@2 eb3@2 ~@6 eb4@2 bb3 ~@5 ab3@2 db3@2 [bb3,bb4,eb5]@4 eb3@2 ~@8 bb3@2 eb3@2 ~@2 eb3@2 ~@4 db3@2 ab3@2 db3@2 [bb4,eb5]@4 ~@14 bb3@2 eb3@2 ~@2 eb5@2 db3@2 ab3@2 db3@2 bb4@4 ~@16 bb3 ~ eb5@2 ~@2 db3@2 [bb4,eb5] ~ db3 ~, eb4@6 gb5@17 ~ db2@7 ~ eb2@22 eb5@10 bb3 ~@3 eb5@4 gb4@2 eb4@2 bb3@2 gb4@18 eb5 ~@3 [bb4,eb5]@2 gb5@8 eb3@7 ~ [ab3,ab4]@5 ~ ab3@2 ~@2, ~@2 eb5@9 eb5@5 ~@2 eb5@9 gb4@7 bb3 eb3@5 eb4@3 db4@5 eb4@3 eb3@2 eb4@3 gb4@7 ~, ~@4 eb3@4 eb4@8 eb3@6 ab4@4 db4@5 ~ eb4@6 bb3@2 eb3@2 gb4@8 bb3@4 ab4@8 ~@2 eb4@4 bb4@2 gb5@16 ~@2 [db2,ab4]@7 ~ eb2@21 ~@3 db2@6 ~@2, ~@6 gb4@8 bb3@4 gb4@5 ~ gb4@12 bb4@2 gb5@6 eb4@12 [db2,db4]@8 eb2@22 ab3@4 ~@6 bb3@8 gb4@4 bb3@6 eb4@4 db4@8 ~@2]/8", // Eb5 Ab Db5 Db
  W: "[eb5@3 ~@3 b5@6 ~@10 bb5@6 ~@4 eb5@3 ~@3 b5@6 ~@10 db6@6 ~@4 eb5@3 ~@3 b5@6 ~@10 bb5@6 gb5@3 ~, [gb4,b4]@15 ~ [gb4,bb4,db5]@15 ~ [gb4,b4]@15 ~ [gb4,bb4,db5]@15 ~ [gb4,b4]@15 ~ [gb4,bb4,db5]@14 ~@2, db4 ~@11 ab5@11 ~@5 gb5@9 ~@7 ab5@10 ~@6 bb5@10 ~@6 ab5@10 ~@10, ~@64 bb4 ~@31]/6", // B5 Gb B5 Gb B5 Gb
})).s("gm_piano").gain(0.46)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@5 A B C D E F G@2 H F E F I@2 J@3 K L M N M L O P M L M N M N O Q R@2 S@2 R@2 T@2 B C D E F G@2 H F E F I@2 J@3 K L
  M N M L O P M L M N M N O Q R@2 S@2 R@2 T@2 R@2 S@2 R@2 T@2 B C D E F G@2 H U ~@4 A B C D E F G@2 H V C D E F G@2 H F
  E F I@2 J@3 K
>`.pickRestart({
  A: "~@3 gb2", B: "db2", C: "~@2 bb2 ~ bb2@2 ~ bb2 b2 ~ b2@2 ~ db2 bb2 b2", D: "db3@2 ~ db2@13",
  E: "~@2 bb2 ~ bb2@2 ~ bb2 b2 ~ b2@2 ~@2 db2 b2, ~@7 bb2", F: "db3 ~ db2@6",
  G: "[~@2 bb2 ~ bb2@2 ~ bb2 b2 ~ b2@2 ~@2 db2 b2 db3@2 ~@2 db2@12, ~@15 bb2@2 ~@15]/2",
  H: "~@2 bb2 ~ bb2@2 ~ bb2 b2 ~ b2 ~@3 db2 [bb2,b2]", // Bmaj7
  I: "[~@2 bb2 ~ bb2@2 ~ bb2 b2 ~ b2@2 ~@2 db2 b2 db3 ~@3 db2@12, ~@15 bb2@2 ~@15]/2",
  J: "[~@2 bb2 ~ bb2@2 ~ bb2 b2 ~ b2@2 ~@2 db2 b2 db3@2 ~@2 db2@20 eb2@8, ~@15 bb2@2 ~@31]/3", K: "c2@15 ~",
  L: "~@2 ab2@2 ~@2 ab2 ~ ab2@4 bb2@4", M: "c2", N: "~@2 ab2 ~@3 ab2 ~ ab2@4 bb2@4", O: "f2 g2", P: "ab2 eb2",
  Q: "ab2@8 eb2@7 ~", R: "[eb2@22 db2@5 ~ db2@4]/2", S: "[eb2@11 db2@3 db2@2]/2", T: "[eb2@22 db2@6 eb2@3 ~]/2",
  U: "db3 ~@15", V: "db2, db3 ~@15",
})).s("gm_electric_bass_finger").gain(0.76).pan(0.2)

// chords · pad new age · "FANTASIA"
const pad_new_age = note(`<
  A B A C A B D@2 E@4 F@8 G@2 ~@24 D@2 E@4 F@8 G@2 ~@24 H@6 I J D@2 E@4 K@2 L B A C A B D@2 E@4 K@2 D@2 E@4 F@8 G@2 ~
>`.pickRestart({
  A: "~@6 b5 ~@5 ab5 ~@3", B: "~@6 bb5 ~@5 gb5 ~@3", C: "~@6 db6 ~@5 bb5 ~@3",
  D: "[ab3@16 bb3@7 ~ [gb3,b3]@8, db4@3 ~]/2", E: "[ab3@2 bb3 [gb3,b3], db4@3 ~]/2",
  F: "[ab3@16 bb3@7 ~ [gb3,b3]@7 ~ ab3@16 bb3@7 ~@9 ab3@16 bb3@7 ~ [gb3,b3]@7 ~ ab3@16 bb3@8 [gb3,b3]@8, db4@23 ~@8 db4@24 ~ [gb3,b3]@7 ~@65, ~@57 db4@30 ~@8 db4@24 ~@9]/8", // B5
  G: "[db4@24 eb4@7 ~, ab3@31 ~]/2", H: "[gb5@22 f5@7 eb5@7 ab5@14 bb5@8 gb5@10 ~ db6@14 ab5@13]/6", I: "eb5@7 db5",
  J: "ab5@7 ~", K: "[ab3@16 bb3@7 ~ [gb3,b3]@7 db4, db4@23 ~@9]/2", L: "ab3 ~@5 b5 ~@5 ab5 ~@3",
})).s("gm_pad_new_age").gain(0.38).pan(0.9)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@5 A B C@7 D@2 E@6 ~@24 F C@7 D@2 E@6 ~@32 F C@7 ~@5 A B C@7 F C@7 D@2 E@6 ~
>`.pickRestart({
  A: "~@3 gb3", B: "db4 [bb3,ab4] [ab3,bb4] db4 bb3 ab3 db4 bb3, db5 ~@5 db5@10",
  C: "[ab3@2 db4@2 bb3@2 ab3@2 db4@2 bb3@2 ab3@2 db4@3 ~ ab4@2 [ab3,bb4]@2 db4@2 bb3@2 ab3@2 db4@2 bb3@2 ab3@2 db4@2 bb3@2 ab3@2 db4@2 bb3@2 ab3@2 db4@4 [bb3,ab4]@2 [ab3,bb4]@2 db4@2 bb3@2 ab3@2 db4@2 bb3@2 ab3@2 db4@2 bb3@2 ab3@2 db4@2 bb3@2 ab3@2 db4@4 [bb3,ab4]@2 [ab3,bb4]@2 db4@2 bb3@2 ab3@2 db4@2 bb3@2 ab3@2 db4@2 bb3@2 ab3@2 db4@2 bb3@2 ab3@2 db4@2, ~@17 bb3@2 ~@3 db5@18 ~@14 db5@14 ~@18 db5@12 ~@14]/7", // Absus2 Bb7 Absus2 Bb7 Absus2
  D: "[~ [bb3,ab4] [ab3,bb4] db4 bb3 ab3 db4 bb3 ab3 db4 bb3 ab3 db4 bb3 ab3 db4, ~@6 db5@17 ~@9]/2", // Bb7 Absus2
  E: "[~ [bb3,ab4] [ab3,bb4] db4 bb3 ab3 db4 bb3 ab3 db4 bb3 ab3 db4 bb3 ab3 db4@2 [bb3,ab4] [ab3,bb4] db4 bb3 ab3 db4 bb3 ab3 db4 bb3 ab3 db4 bb3 ab3 db4@2 [bb3,ab4] bb4 db5@9 ~@4, ~@6 db5@17 ~@15 db5@12 ~@18 ab3@24 ~@4]/6", // Bb7 Absus2 Bb7 Absus2 Bb7
  F: "~ [bb3,ab4] [ab3,bb4] db4 bb3 ab3 db4 bb3, ~@3 db5@5", // Bb7 Absus2
})).s("gm_electric_guitar_muted").gain(0.61)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@13 A B C D E@2 F@2 ~ G H I J K@2 L@2 I M N@2 K@2 O@2 ~@7 P Q R S T@2 U@2 A V W X Y@2 Z@2 ~ I AA I AB AC@2 AD@2 I AA
  AE@2 AF@2 AG@2 ~@15 AH AI AJ AK E@2 AL@3 AM AN@2 AO@2 AP AQ@6 AR@2 AS AT AU AV@2 AW@2 A B AX X AY@2 AZ@2 ~@2
>`.pickRestart({
  A: "~@14 [bb4,gb5] ~", B: "[bb4,gb5] ~ [ab4,f5] ~ [ab4,f5] ~ [ab4,f5]@3 ~ [gb4,eb5]@3 ~ [gb4,eb5] ~",
  C: "eb5@2 [ab4,db5] ~ [ab4,db5] ~ [ab4,db5]@6 ~@2 [ab4,db5] ~, gb4 ~@15", // Db5
  D: "[ab4,db5]@2 ~@2 [ab4,db5]@2 ~@2 [ab4,db5]@3 ~ [ab4,db5] ~ [ab4,db5] ~", // Db5
  E: "[[bb4,db5]@3 ~ bb4@3 ~ ab4@3 ~ [gb4,bb4] ~ [db4,ab4]@14 ~@2 [bb4,gb5] ~, ~ db5@2 ~@5]/2", // Bbm Gb Db5 Ebm
  F: "[[bb4,gb5]@3 ~ ab4@3 ~ [gb4,eb5]@4 [ab4,db5] ~ [ab4,db5]@14 ~@4, ~@3 f5@3 ~@26]/2", // Ebm Db5
  G: "~@4 g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3@2", H: "~@2 ab3@3 ~ g3 ~ f3@3 ~ eb3@3 ~", I: "~@4 g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ ab3@2",
  J: "~@2 g3@3 ~ f3 ~ f3@4 ~@4", K: "[eb3@4 f3@4 g3@4 ab3@2 bb3@4 ab3@3 ~@9 eb3@2]/2",
  L: "[ab3@3 ~ ab3@4 g3@4 f3@2 eb3@12 ~@6]/2", M: "~@2 g3@3 ~ f3 ~ f3@3 ~ eb3@2 ~@2",
  N: "[~@4 g3 ~ g3 ~ g3@3 ~ g3 ~ ab3@4 g3@3 ~ f3 ~ f3@5 ~@3]/2", O: "[ab3 ~ ab3@6 g3@4 f3@2 eb3@17 ~]/2",
  P: "~@14 gb5 ~", Q: "gb5@2 f5 ~ f5 ~ f5@3 ~ eb5@4 eb5 ~", R: "eb5@2 db5 ~ db5 ~ db5@6 ~@2 db5 ~",
  S: "db5@2 ~@2 db5@2 ~ db5@4 ~ db5 db5@3", T: "[eb5@3 eb5@4 ~ db5@4 bb4@2 ab4@15 ~ [bb4,gb5] ~]/2",
  U: "[[bb4,gb5]@3 ~ [ab4,f5]@3 ~ [gb4,eb5]@4 [ab4,db5] ~ [ab4,db5]@17 ~]/2", // Ebm Db Ebm Db5
  V: "[bb4,gb5] ~ ab4@2 [ab4,f5] ~ [ab4,f5]@4 [ab4,eb5]@3 ~ [ab4,eb5] ~, ~@2 f5 ~@13", // Ebm Db Ab5
  W: "[ab4,eb5] ~ [gb4,db5] ~ [gb4,db5] ~ [gb4,db5]@6 ~@2 [ab4,db5] ~", // Ab5 Gb5 Db5
  X: "[ab4,db5]@2 ~@2 [ab4,db5]@3 ~ [ab4,db5]@3 ~ [ab4,db5] ~ [ab4,db5] ~", // Db5
  Y: "[[bb4,db5]@3 ~ bb4@4 ab4@3 ~ [gb4,bb4] ~ [db4,ab4]@15 ~ [bb4,gb5] ~, ~@3 db5@8 ~@21]/2", // Bbm Gb Db5 Ebm
  Z: "[[bb4,gb5]@3 ~ [ab4,f5]@3 ~ [gb4,eb5]@4 [ab4,db5] ~ [ab4,db5]@18]/2", AA: "~@2 g3@3 ~ f3 ~ f3@4 eb3@3 ~",
  AB: "~@2 g3@3 ~ f3 ~ f3@5 ~@3", AC: "[eb3@4 f3@4 g3@4 ab3@2 bb3@4 ab3@11 ~ eb3@2]/2",
  AD: "[ab3@3 ~ ab3@4 g3@4 f3@2 eb3@14 ~@4]/2", AE: "[~@4 g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ ab3@4 g3@3 ~ f3 ~ f3@5 ~@3]/2",
  AF: "[eb3@2 f3@2 g3@2 ab3 bb3@2 ab3 ~@5 eb3]/2", AG: "[ab3 ab3@3 g3@2 f3 eb3@9]/2", AH: "~@14 [bb4,gb5]!2",
  AI: "~ [ab4,f5] ~@2 [ab4,f5] ~ [ab4,f5]@3 ~ [gb4,eb5]@3 ~ [gb4,eb5] ~", // Db Ebm
  AJ: "eb5@2 [ab4,db5] ~ [ab4,db5] ~ [ab4,db5]@5 ~@2 db5@2 ~, gb4 ~@12 ab4 ~@2", // Db5
  AK: "[ab4,db5]@2 ~ [ab4,db5]@3 ~ [ab4,db5]@3 ~ db5 ab4 db5@2 ~, ~@13 ab4 ~@2", // Db5
  AL: "[[bb4,gb5]@2 ~@2 [ab4,f5]@3 ~ [gb4,eb5]@3 ~ [ab4,db5] ~ [ab4,db5]@26 ~@8]/3", AM: "~@10 bb4@2 b4 ~ b4 ~",
  AN: "[b4@4 bb4 ~ bb4@4 ab4@2 gb4 ~ gb4@11 ~ b4 ~ db5 ~ eb5@2]/2",
  AO: "[db5@4 bb4@2 b4@4 bb4@2 ab4 ~ gb4@12 gb5@3 ~ gb5@2]/2", AP: "gb5@13 ~ eb5@2", AQ: "[bb5@14 ab5@73 gb5@9]/6",
  AR: "[f5@4 eb5 ~ db5@21 ~@3 gb5 ~]/2", AS: "gb5@2 f5 ~ f5 ~ f5@4 eb5@3 ~ eb5 ~",
  AT: "eb5@2 db5 ~ db5 ~ db5@7 ~ db5 ~", AU: "db5@2 ~@2 db5@2 ~@2 db5@3 db5 ~ db5@2 ~",
  AV: "[eb5@4 eb5@4 db5@4 bb4@2 ab4@15 ~ [bb4,gb5] ~]/2", // Ebm
  AW: "[[bb4,gb5]@3 ~ [ab4,f5]@3 ~ [gb4,eb5]@3 ~ [ab4,db5] ~ [ab4,db5]@17 ~]/2", // Ebm Db Ebm Db5
  AX: "eb5@2 [ab4,db5] ~ [ab4,db5] ~ [ab4,db5]@7 ~ [ab4,db5] ~, gb4 ~@15", // Db5
  AY: "[[bb4,db5]@3 ~ [bb4,db5]@4 [ab4,db5]@4 [gb4,bb4] ~ [db4,ab4]@14 ~@2 [bb4,gb5] ~]/2", // Bbm Db5 Gb Db5 Ebm
  AZ: "[[bb4,gb5]@3 ~ [ab4,f5]@3 ~ [gb4,eb5]@3 ~ [ab4,db5] ~ [ab4,db5]@15 ~@3]/2", // Ebm Db Ebm Db5
})).s("gm_synth_strings_1").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A@4 B A@5 C A B D E F G@19 H G H G@2 A@4 B A@5 C A B D E F G@19 H G H G@5 H G H G@2 A@4 B A@3 ~@6 A@4 B A@7 B A@5
  C A B D E F ~
>`.pickRestart({
  A: "x ~@7 x ~ x ~ x!2 ~@2", B: "x ~@6 x ~@2 x ~ x!2 ~@2", C: "x ~@6 x!2 ~ x ~ x!2 ~@2", D: "x ~@7 x ~ x ~ x!2 ~ x",
  E: "x ~@14 x", F: "x!2 ~@2 x ~@3", G: "~ x ~ x", H: "~@4 x ~@6 x ~@4",
})).gain(0.76)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A@7 B A@3 C A@3 ~@2 D ~@5 D ~ E ~ E ~@5 D ~@3 F ~@2 A@7 B A@3 C A@3 ~@2 D ~@5 D ~ E ~ E ~@5 D ~@3 F ~@3 D ~@3 F
  ~@2 A@7 B ~@6 A@7 B A@7 B A@3 C A@3 ~@2
>`.pickRestart({
  A: "~ x ~@2", B: "~@4 x ~@2 x!2 ~ x ~ x!4", C: "~@4 x ~@2 x!2 ~ x ~@2 x!3", D: "~@7 x", E: "~@14 x!2", F: "~@15 x",
})).gain(0.76)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@23 A ~ B ~@13 A ~@3 C ~@19 A ~ B ~@13 A ~@3 C ~@3 A ~@3 C ~@41>".pickRestart({
  A: "~@15 x", B: "~@14 x!2", C: "~@7 x",
})).gain(0.46)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@10 A ~ A ~@3 A ~@20 B ~ B ~@3 B ~ B ~@4 A ~ A ~@3 A ~@20 B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~@4 A ~ A ~@11 A ~ A ~@5 A ~
  A ~@3 A ~@6
>`.pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.76)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@7 A ~ A ~ A ~@3 A ~@3 A B ~@16 C ~ C ~@3 C ~ D ~ A ~ A ~ A ~@3 A ~@3 A B ~@16 C ~ C ~@3 C ~ D ~ C ~@3 C ~ D ~ A ~ A
  ~ A ~@9 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~@3 A B ~@2
>`.pickRestart({
  A: "~@15 x", B: "x", C: "~@12 x!2 ~@2", D: "~@10 x ~ x!2 ~@2",
})).gain(0.76)

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

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@7 A ~ B ~ B ~@3 B ~@3 A ~@17 C ~ C ~@3 C ~ D ~ A ~ B ~ B ~@3 B ~@3 A ~@17 C ~ C ~@3 C ~ D ~ C ~@3 C ~ D ~ A ~ B ~ B
  ~@9 A ~ B ~ B ~@3 A ~ B ~ B ~@3 B ~@3 A ~@3
>`.pickRestart({
  A: "~@7 x", B: "~@14 x!2", C: "~@10 x!2 ~@4", D: "~@6 x!4 ~@6",
})).gain(0.76)

// drums · ride
const ride = s("rd").struct(`<
  ~@22 A ~ A ~ A ~@3 A ~ A ~ A ~@3 B A@2 C A C A ~@17 A ~ A ~ A ~@3 A ~ A ~ A ~@3 B A@2 C A C A ~ D A@2 C A C A ~@39 A
>`.pickRestart({
  A: "x", B: "x ~@13 x!2", C: "~@6 x!3 ~@7", D: "~@14 x!2",
})).gain(0.76)

// drums · china
const china = s("cr").struct(`<
  ~@6 A ~@3 B ~ B ~ B ~ B ~ B ~ B C A ~@7 A ~@7 A ~@3 A ~ A ~ A ~@3 B ~ B ~ B ~ B ~ B ~ B C A ~@7 A ~@7 A ~@3 A ~ A ~@5
  A ~ A ~ A ~@3 B ~ B ~@7 A ~@3 B ~ B ~ A ~@3 B ~ B ~ B ~ B ~ B ~ B C A
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "~@5 x ~@2",
})).gain(0.76)

stack(
  piano, bass, pad_new_age, electric_guitar_muted, synth_strings_1, kick, snare, snare_soft, hihat, low_tom, mid_tom,
  open_hat, high_tom, ride, china
)

More by Peter Gabriel