Strudelify

Soul of My Soul

Michael Bolton

KeyC♯ minorTempo99 bpm
0:00/0:00
// Soul of My Soul — Michael Bolton
// 99 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  A B C D E F G H I J K L@2 M N O P Q R S T U V W X Y Z AA C D E F G H I J K L@2 M N O P Q R S T U V W X Y Z AA C D E F
  G H AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT C D E AU AV H AW AA C D E F AV H I J K AX Q AY AZ AX Q AY
  AZ AX Q AY AZ AX Q AY BA AX Q AY AZ AX Q AY AZ AX Q BB BC AX Q AY AZ
>`.pickRestart({
  A: "~@13 g1 [f1,f#1] [d#1,e1], ~@6 g#1 ~", B: "c#1@5 ~ c#1@7 ~ c#1@2, d1 ~@15", C: "f#1@3 f#1@4 g#1",
  D: "a#1@6 a#1@7 ~ a#1@2", E: "d#1@6 g#1@5 ~ g#1@4", F: "c#1@5 ~ c#1@7 ~ f1@2", G: "f#1@6 f#1@7 ~ f1@2",
  H: "d#1@5 ~ d#1@7 ~ d#1@2", I: "g#1@5 ~ a1@9 ~", J: "c#1@5 ~ c#1@7 ~ c#1 ~", K: "c#1@5 ~ c#1@7 ~ d#1@2",
  L: "e1@5 ~ e1@6 ~@2 e1 ~", M: "c#2@4 ~@2 c#1@6 ~@2 b1 ~", N: "a1@5 ~ a1@6 ~@2 a1 ~", O: "g#1@5 ~ g#1@7 ~ g#1 ~",
  P: "a1@5 ~ a1@8 ~@2", Q: "f#1@5 ~ f#1@7 ~ f#1 ~", R: "b1@5 ~ b1@7 ~ b1 g#1", S: "e1@4 ~@2 e1@7 ~ e1@2",
  T: "d#1@5 ~ d#1@8 ~@2", U: "c#2@5 ~ c#1@7 ~@3", V: "c2@5 ~ c2@9 ~", W: "f#1@5 ~ f#1@6 ~@2 f#1 ~",
  X: "g#1@5 ~ g#1@7 ~ g#1@2", Y: "a1@5 ~ a1@9 ~", Z: "b1@5 ~ b1@4 b1@2 b1@2 [a1,a#1] [g1,g#1]",
  AA: "c#1@5 ~ c#1@7 ~ c#1@2", AB: "g#1@5 ~ g#1@6 g#1@2 g#1@2", AC: "f#1@5 ~ f#1@8 f#1 g#1", AD: "e1@5 ~ e1@7 ~ e1@2",
  AE: "d#1@5 ~ d#1@9 ~", AF: "c#2@5 ~ c#2@9 ~", AG: "c#1@5 ~ c#1@8 f#1 ~", AH: "f#1@5 ~ f#1@9 ~",
  AI: "g#1@4 ~@2 g#1@9 ~", AJ: "a1@2 ~ a1@4 ~", AK: "b1@5 ~ b1@9 ~", AL: "c2@5 ~ c2@7 ~ c2@2", AM: "f1@3 f1@4 g1",
  AN: "a1@6 a1@7 ~ a1@2", AO: "d2@6 g1@5 ~ g1@4", AP: "c2@5 ~ c2@7 ~ e1@2", AQ: "a1@6 a1@7 ~ e1@2",
  AR: "d1@5 ~ d1@7 ~ d1@2", AS: "g1@6 g1@3 g1 a1 c2 g2@2 f#2 [d#2,e2,f2]", AT: "c#2@3 c#2@4 c#2, d2 ~@15",
  AU: "c#1@5 ~ c#1@7 ~ c2@2", AV: "a#1@6 a#1@7 ~ f1@2", AW: "g#1@5 ~ g#1@5 ~ g#1@2 d#1@2", AX: "a1@4 ~@2 a1@7 ~ a1 ~",
  AY: "c#1@5 ~ c#1@7 ~ c#2 ~", AZ: "c#1@5 ~ c#1@6 ~@2 c#2 b1", BA: "c#1@5 ~@7 c#1@2 g1 g#1, ~@3 c#1@3 ~@2, ~@5 c#2@2 ~",
  BB: "c#2@5 ~ c#2@7 ~ c#2 ~", BC: "a#1@5 ~ a#1@6 ~@2 g1 g#1",
})).s("gm_fretless_bass").gain(0.44)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~ A B C D ~@4 E@2 ~@24 F@3 G H ~ I ~@2 J@2 K ~ L@2 ~@19 M N O P Q R S@2 T ~@16 E@2 ~@32
>`.pickRestart({
  A: "~@5 g#3 [c4,c#4] d#4", B: "d#4@3 g#4@3 g#4@10, ~@3 g4 ~@12", C: "~@3 d#4 c#5 c5 g#4!2",
  D: "g#4@3 a#4@3 g#4@2 g#4@7 ~", E: "[~@2 c#5@2 d#5@2 ~@5 f4@4 ~, c#4@15 ~@17, ~@6 c#5@9 ~]/2",
  F: "[~@2 c#5@2 d#5@2 ~@5 f4@4 b4@9, ~@2 c#5@3 ~@3]/3", G: "~@6 f#4@3 f#4@4 f#4@2 g#4",
  H: "[b3,c4] ~@2 e4@13, c#4@3 ~@13", I: "~ d#5@2 b4@5", J: "[~@2 f#3@2 g#3@2 a3@4 [a3,c#4]@4 [g#3,b3]@11 ~@7]/2",
  K: "~ a4@3 [b4,d#5]@3 ~ [f#4,b4]@8", L: "[~@6 a4 b4!2 ~@2 b4@3 a4@10 ~@8]/2", M: "~@7 d#4", N: "c5@3 c5@11 ~@2",
  O: "~@6 a4 b4 b4@2 b4@2 a4@2 d5@2", P: "[d4,b4]@2 c#4 [b3,g4]@2 ~ [g3,e4]@6 ~@2 e4@2, ~@6 a3 ~@9",
  Q: "g4@3 g4 ~@2 c4@4 d4@6", R: "~@2 g4 [g#4,a4,a#4,b4] [d#5,e5] ~ g4@2 [e5,f5]@2 e5@2 d5@4",
  S: "[[d4,b4]@2 c5 [b3,d5]@3 ~ [a4,c5]@6 d5 e5 f5@2 g5@2 g5@3 c5@7 ~@2 d5, ~@3 c#5 ~@2 a3@6 ~@20]/2", // G Bm Am
  T: "e5@2 f5@2 e5@2 d5@9 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.19)

// chords · acoustic guitar nylon · "NYLON GTR" · soft notes
const acoustic_guitar_nylon_2 = note("<~@9 A@2 ~@24 A@2 ~@7 B ~ C ~@25 D ~ E ~@19 A@2 ~@32>".pickRestart({
  A: "[~ g#4@2 g#4@2 g#4@2 ~@2 g#4 f#4 ~@5, ~@7 g#4@2 ~@7, ~@8 c#4@7 ~]/2", B: "~@10 c4 ~@5",
  C: "~ e4@2 c#5 [a4,d5] ~@2 [g#4,a4,a#4,c#5,d5] [g4,c5] ~@7, ~@3 d#4 ~@4", D: "~@2 a#4 [c4,a4]@2 f#4 [g#3,f4] ~@9",
  E: "~@4 [c5,d5] ~@11", // Csus2
})).s("gm_acoustic_guitar_nylon").gain(0.1)

// other · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~@5 A B C D E ~@21 A B C D E ~@21 A B C D F@5 G H@3 ~@12 A B C D ~@4 A B C D E ~@25 I@8
>`.pickRestart({
  A: "f5@3 ~ f5@4 d#5@4 c#5@3 ~", B: "d#5 f5 f#5 g#5@5", C: "~@2 g#5 ~ g#5@2 f#5@2 f#5@2 f5 ~ f5@2 d#5 ~",
  D: "d#5@2 ~ d#5@5", E: "c#5@7 ~",
  F: "[[a4,c#5]@31 b4@17 [a4,c#5]@15 ~ e5@16, f#5@63 [g#4,c#5]@16 ~, ~@31 f#4@15 ~@2 e4@32]/5", G: "[f#4,a4,c#5]",
  H: "[[g#4,b4]@15 ~ c#5@15 [f#4,b4,e5]@15 ~@2, e5@31 ~@17, ~@5 a4@5 ~@6]/3", I: "[c#4@63 ~]/4",
})).s("gm_pad_warm").gain(0.25)

// other · pad warm · "WARM PAD" · soft notes
const pad_warm_soft = note("<~@11 A@2 B@2 C D@3 E@2 F@2 G@4 ~@10 A@2 B@2 C D@3 E@2 F@2 G@4 ~@43 H@24 ~@8>".pickRestart({
  A: "d#4/2", B: "e4/2", C: "f#4", D: "e4/3", E: "[b3,f#4]/2", F: "[e4@31 ~]/2",
  G: "[~@32 e4@31 ~, e4@31 ~@33, ~@20 b4@15 ~@29]/4", H: "[c#4@63 ~]/4",
})).s("gm_pad_warm").gain(0.14)

// chords · pad halo · "HALO PAD"
const pad_halo = note(`<
  ~ A@3 B C@2 D@2 E@2 ~@16 A@3 B C@2 D@2 E@2 ~@16 A@3 B C@2 F@2 ~@9 G@3 H I@2 J@2 A@3 B K@2 L@2 A@3 B K@2 D@2 E@2 ~@16 M
  N O@4 P@4 Q R S@2 T ~
>`.pickRestart({
  A: "[[g#3,c#4,f4]@47 ~]/3", B: "[a#3,c#4,f#4]", C: "[[g#3,c#4,f4]@31 ~]/2",
  D: "[[a#3,c#4]@11 [c#4,d#4,a4]@5, f#4@5 ~@3]/2", E: "c#4/2", F: "[[a#3,c#4,f#4]@21 ~ [d#4,g#4]@9 ~]/2",
  G: "[[g3,c4,e4]@47 ~]/3", H: "[a3,c4,f4]", I: "[[g3,c4,e4]@31 ~]/2", J: "[[a3,c4]@11 [c4,d4,g4]@5, e4@5 ~@3]/2",
  K: "[g#3@16 a#3@15 ~, [c#4,f4]@31 ~]/2", L: "[[a#3,c#4,f#4]@21 ~ [c#4,g#4]@10]/2", M: "[b3,d#4] [a3,c#4]",
  N: "[g#3,b3]@4 d#6 e6 d#6 b5, ~ [f#3,a3]", // G#m F#m
  O: "[c#4@16 [b3,d#4]@4 [a3,c#4]@4 [g#3,b3]@4 d#6 e6 d#6 b5, c#6@55 ~ f#3@8]/4", // B A G#m
  P: "[~@16 d#4@4 [a3,c#4]@4 [g#3,b3]@4 d#6 e6 d#6 b5, c#6@7 [f#3,a3]]/4", Q: "d#4@6 f4@9 ~, [g#3,c#6]",
  R: "[c4,g#4]@3 a#4@5, a#5, ~@3 f4@4 ~", S: "[[b3,d#4]@4 [a3,c#4]@4 [g#3,b3]@4 d#6 e6 d#6 b5, c#6@3 [f#3,a3]]/2",
  T: "c#6, c#3@5 ~@3",
})).s("gm_pad_halo").gain(0.19)

// chords · pad halo · "HALO PAD" · soft notes
const pad_halo_soft = note("<~@114 A@2 ~ B C@2 D ~@5 E@2>".pickRestart({
  A: "[g#3@15 ~]/2", B: "~ a3", C: "[c#4@16 d#4@15 ~, c#3]/2", D: "b3 ~", E: "[~@8 c#3@5 ~@3, [g#3,d#4]@25 ~@7]/2",
})).s("gm_pad_halo").gain(0.1)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@6 A@3 B@2 ~@21 A@3 B@2 ~@21 C@3 D E F G H D I J K ~@13 C@3 ~@5 A@3 B@2 ~@32
>`.pickRestart({
  A: "[~@8 f4@4 c#4 a#3 g#3@24 b3@10]/3", B: "[c#4@15 ~]/2", C: "[~@8 f4@4 c#4 a#3 g#3@24 g#3@10]/3", D: "[f#2,f#3]",
  E: "[e2,e3]", F: "d#3", G: "c#3@7 g#2", H: "c#3", I: "[g#2,g#3]", J: "[a2,a3]", K: "[b2,f#3,b3]",
})).s("gm_distortion_guitar").gain(0.17)

// other · vibraphone
const vibraphone = note(`<
  ~@5 A B C D E ~@21 F B G H@2 ~@5 I@2 J ~@13 A B G D ~@21 A B K D ~@4 F B G D E ~@33
>`.pickRestart({
  A: "f5@3 ~ f5@4 d#5@4 c#5@3 ~", B: "d#5 f5 f#5 g#5@5", C: "~@2 g#5 ~ g#5@2 f#5@2 f#5@2 f5 ~ f5@2 d#5 ~",
  D: "d#5@2 ~ d#5@5", E: "c#5@7 ~", F: "f5@3 ~ f5@4 d#5@2 c#5@3 ~@3", G: "~@2 g#5 ~ g#5@2 f#5@2 f#5@2 f5 ~ d#5@2 c#5 ~",
  H: "[d#5@2 ~ d#5@4 c#5@7 ~@2]/2", I: "[~@8 e5@2 f#5@2 ~@2 b5@13 ~@5]/2", J: "a5@9 ~@7",
  K: "~@2 g#5 ~ g#5@2 f#5@2 f#5@2 f5 ~ c#5@2 d#5 ~",
})).s("gm_vibraphone").gain(0.28)

// other · vibraphone · soft notes
const vibraphone_soft = note("<~@23 A B@2 ~@15 C ~@7 A B@2 ~@76>".pickRestart({
  A: "~@4 e5 b4!2 e5", B: "[f#5@2 b4@2 b4@15 ~@13]/2", C: "~@6 g#5 ~",
})).s("gm_vibraphone").gain(0.16)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~ A B C D E B F G H@2 I@2 J K L M N O P Q R S T@2 U V A B C D E B F G W@2 I@2 J K L M N O P Q R S T@2 U V A B C D E B
  F X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AI AM AN A B C D E B F AO A B C D E B F G H@2 AP AQ AR@2 AP AQ AS@2 AP AQ
  AR@2 AP AQ AR@2 AP AQ AR@2 AP AQ AR@2 AP AQ AT@2 AP AQ AR@2
>`.pickRestart({
  A: "[d#4,f4,g#4]@15 ~", B: "[c#4,f4,a#4]@15 ~", C: "[c#4,f4,g#4]@15 ~", D: "[c#4,f#4,a#4]@6 [c#4,f#4,g#4]@9 ~",
  E: "[d#4,f4,g#4]@7 ~", F: "[c#4,f#4,a#4]@15 ~", G: "[c#4,d#4]@5 ~ [a3,c#4,d#4,b4]@10, g#4@3 ~@13",
  H: "[[g#3,d#4,f4]@3 g#3@4 ~@2 f4@2 [d#4,f4]@4 ~, ~@3 d#4@8 ~@5, ~@3 f4@6 ~@7, ~@7 g#3@3 ~@6, ~@8 c#3@7 ~]/2", // Fm7 D#sus2
  I: "[b3@10 ~ d#4@5, g#3@9 ~ b3@6, e3 ~]/2", J: "[e3,g#3,b3]@3 [e3,g#3,b3]@5, c#3", K: "[a2,g#3,c#4,e4]",
  L: "[g#3,b3,d#4]@3 [f#3,b3,d#4]@5, g#2", M: "[a2,a3,c#4]", N: "c#4@2 ~ f#4@5, [f#2,e4], a3 ~@7",
  O: "~@5 f#4@3, b2, ~ b3@3, ~@3 e4@5", P: "[g#3,b3,e4]@3 ~@4 e4", Q: "~@3 d#4@4 ~, d#3@3 ~, d#4@3 ~@5, ~ b3@2 ~",
  R: "~@3 [b3,c#4,e4]@5, c#3", S: "[f#3,a3,c4,e4]@3 [f#3,a3,c4,e4]@5, c3",
  T: "[[a3,c#4]@3 ~@5 b3@2 ~@5 b3, f#2@8 e4@2 b3 e4@3 d#4@2, g#3 g#2, ~@3 c#4@13, ~@3 e4@2 b4@11]/2", // A
  U: "c#4@2 ~@5 e4, [a2,e3], ~@3 e4@4 ~, ~@3 c#4", // A5
  V: "b3@2 b3 ~@3 [f#3,b3,e4] ~, b2@4 b2@3 ~, e4@3 [b3,e4]@3 ~@2, f#3 ~@2 f#3@2 ~@3", // Esus2 E5
  W: "[[d#4,f4]@3 g#3@4 ~@2 f4@2 d#4@4 ~, c#3@8 c#3@7 ~, ~@3 d#4@8 ~@5, ~@3 f4@6 ~@7]/2", // D#sus2
  X: "[c#4,g#4]@6 [c#4,d#4,g#4]@9 ~, d#4 ~@3", Y: "[a3,c#4,f#4]@3 [c#4,f#4,a4]@5", Z: "[a3,c#4,e4]@3 [c#4,e4,a4]@5",
  AA: "[f#3,b3,d#4]@3 [f#3,b3,d#4]@5", AB: "a3@5 a3@3, [c#4,e4]", AC: "g#3@3 g#4@5, [c#4,e4]",
  AD: "a3@5 ~ c#4@2, [e4,g#4], c#4@3 ~, ~@5 a3@3", AE: "[b3,e4,g#4]@3 [b3,e4,g#4]@5", AF: "[c#4,e4,g#4]@15 ~",
  AG: "[f#3,b3,e4]@6 [b3,e4,f#4,b4]@9 ~", AH: "[d4,e4,g4]@15 ~", AI: "[c4,e4,a4]@15 ~", AJ: "[c4,e4,g4]@15 ~",
  AK: "[c4,f4,a4]@6 [c4,f4,g4]@9 ~", AL: "[d4,e4,g4]@7 ~", AM: "[c4,f4,a4]@15 ~",
  AN: "[c4,g4]@6 [c4,d4,g4]@9 ~, d4 ~@3", AO: "[c#4,d#4]@5 ~ [g#3,d#4,g#4]@10, g#4@3 ~@13",
  AP: "[b3,d#4]!2 [b3,d#4]@2 [a3,c#4]!2 [a3,c#4]@2", AQ: "[g#3,b3]@2 b3@2 [g#3,b3]@4 [f#3,a3] ~ f#3@2 [f#3,a3]@4",
  AR: "[g#3@4 f#3@2 ~@6 c#4@8 f#3@2 ~@6 c#4@3 ~, c#3 ~@5 f3@14 g#3@11 ~, ~@22 f3@9 ~]/2",
  AS: "[g#3@4 f#3@2 ~@6 c#4@8 f#3@2 f3@9 ~, c#3 ~@5 f3@14 g#3@11 ~]/2",
  AT: "[g#3@4 f#3@2 ~@6 c#4@4 a#3@6 a#3@6 [a#3,c#4]@3 ~, c#3 ~@5 f3@14 ~@12, ~@16 [c4,f4]@15 ~, ~@4 c#4@3 ~]/2", // A#m F5
})).s("gm_epiano2").gain(0.22)

// chords · epiano2 · "E.PIANO 2" · soft notes
const epiano2_soft = note(`<
  ~@10 A ~ B ~@3 C D E F G ~@2 H@2 I J ~@8 K@2 ~ B ~@3 C D E F G ~@2 H@2 I J ~@42 A ~ L M@2 ~ L M@2 ~ L M@2 ~ L M@2 ~ L
  M@2 ~ L M@2 ~ L M@2 ~ L M@2
>`.pickRestart({
  A: "~@2 g#3 g#3@2 g#3@2 ~", B: "~ g#3@7, e3", C: "e4", D: "~ c#4@3, ~ a3@7", E: "~ f#3@7",
  F: "~@3 g#3@2 ~ b3@2, ~ e3@3, ~@3 e4@4 ~, ~@3 b3@3 ~@2, ~@5 g#3@3", G: "~ g#3@4 ~@2 d#4, ~@5 g#3@3, ~@3 [d#3,b3]",
  H: "[~@9 g#3@4 g#3@3, ~@3 [a3,g#4]@13]/2", I: "~@3 g#3@2 g#3@3, ~ g#3@2 ~@5, ~ c#4@2 ~", J: "~ f#3@2 ~@2 f#3 ~@2",
  K: "[~@7 g#3@3 g#3 g#3@2 g#3@2 ~, ~@11 f4@4 ~]/2", L: "~ g#3 ~@3 a3 ~@2", M: "[~ c#3@4 c#3@2 c#3@3 ~@6]/2",
})).s("gm_epiano2").gain(0.11)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<~@23 A@2 B C ~@22 A@2 B C ~@8 D@2 E F G H I J K ~@58>".pickRestart({
  A: "[~@11 e4@3 ~ b3, e3@15 ~ e3@15 ~, ~@2 a3@15 ~@15, ~@4 b3@13 ~@3 b3@9 ~@3, ~@3 e4@7 ~@4 d#4@2]/2",
  B: "~@3 e4@4 ~, e3@3 ~, ~ a3@6 ~, ~@4 b3@11 ~", C: "~@6 b3 e4, e3@9 ~ e3@6, ~ a3@7, ~@4 b3@7 ~@5, ~@3 e4@3 ~@2",
  D: "[~@7 a3 ~@7 a3, f#3@9 ~ f#3@6 e3@9 ~ e3@5 ~, ~ a3@5 ~@3 a3@5 ~@2, ~@4 c#4@7 ~ c#4@6 ~@2 c#4@7 ~ c#4@4, ~@3 f#4@7 ~ f#4@5]/2",
  E: "~@7 c#4, d#3@9 ~ d#3@6, ~ a3@5 b3@2, ~@4 c#4@7 ~@5, ~@3 f#4@5",
  F: "~@3 f#4@2 ~@2 c#4, c#3@9 ~ c#3@5 ~, ~ a3@6 ~, ~ c#4@2 f#4",
  G: "~@6 g#3 c#4, c#3@15 ~, ~@2 e3@7 ~ e3@4 ~@2, ~@4 f#3@7 ~@5, ~@6 c#4@7 ~@3",
  H: "~@6 a3 c#4, ~ a3@4 f#3@3, ~ c#4@2 ~, ~@6 f#4@9 ~", I: "~@3 e4, g#3, ~ b3@7, ~@2 e4@3 ~@3, ~@3 g#4@5",
  J: "~@6 e4 c#4, a3@9 ~ a3@5 ~, ~ c#4@5 ~@2, ~@4 e4@7 ~@5, ~@6 a4@9 ~",
  K: "~@5 f#3@3, f#3@9 ~@7, ~ b3@6 ~, ~@4 e4@11 ~, ~@6 f#4@9 ~",
})).s("gm_electric_guitar_clean").gain(0.09)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note("<~@61 A@2 B C D E F G H ~@58>".pickRestart({
  A: "[f#5 e5, c#5]/2", B: "[b4,d#5]", C: "[a4,c#5]@15 ~", D: "[c#5,e5]", E: "[c#5,f#5]", F: "[e5,g#5]", G: "[e5,a5]",
  H: "[f#5,b5]@7 ~", // B5
})).s("gm_percussive_organ").gain(0.15)

// chords · percussive organ · "ORGAN 2" · soft notes · Dsus2 Cmaj7 Dm Am
const percussive_organ_soft = note("<~@69 [~@12 [d5,e5] [g4,a4,b4,c5] [d4,e4,f4] [a3,b3,c4]] [g3 ~@15] ~@57>")
  .s("gm_percussive_organ").gain(0.08)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B A B A B A@3 B A B A B A B A B A B A B A B A B A B A B A B A@3 B A B A B A B A B A B A@3 B A B A B A B
  A@3 B A B A B A@2 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 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 D
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "x ~@2 x ~ x ~ x", C: "x ~@2 x ~@4", D: "x ~@2 x ~ x ~@2",
})).gain(0.45)

// drums · clap
const clap = s("cp").struct(`<
  ~@2 A ~ A ~ A ~ A ~@19 A ~ A ~ A ~@21 A ~ A ~ A ~@3 A ~ A ~ A ~ A ~@2 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@5 A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A
>`.pickRestart({
  A: "~@3 x",
})).gain(0.35)

// drums · snare
const snare = s("sd").struct(`<
  A B@3 C B@3 A B@21 C B@3 A B@17 D B@3 C B@3 A B@4 D B@3 E B@3 C B@3 F B@3 C B@3 G H B@2 C B@3 A B@5 C B@3 C B@3 I B@3
  J B@3 D B@7 K B@3 C
// … 84 more lines

More by Michael Bolton