Strudelify

While You See a Chance

Steve Winwood

KeyD majorTempo130 bpm
0:00/0:00
// While You See a Chance — Steve Winwood
// 130 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 5, 4/4 at bar 5) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 167 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 · synth bass 1
const bass = note(`<
  ~@16 A B C D C E F G H I J K L@2 ~@8 M@5 N O P Q R S T U A B C D C E F G H I J K L@2 V W X Y Z W AA@2 ~@2 M@5 N O P Q
  R S T U A B C D C E F G H I J K L@2 ~@8 M@5 N O P Q R S T U A B C D C E F G H I J K AB@6 AC AD AB@2 AC AE AB@2 AC AF
  AB@2 AC AE AC AG AC AH AC AI AC AJ AB@2 AK@2
>`.pickRestart({
  A: "g1!2 g2!2 e1!2 e2!2", B: "~ f#2 f#2@2 f#2@2 f#2!2", C: "g1!2 g2!2 g1!2 g2!2", D: "a1!2 a2!2 a1!2 a2!2",
  E: "g#1!2 g#2!2 g#1!2 g#2!2", F: "a1!2 a2!2 a1!2 a2 a#2", G: "a#1!2 a#2!2 a#1!2 a#2!2", H: "b1!2 b2!2 b1!2 b2!2",
  I: "c2!2 c3!2 c2!2 c3!2", J: "b1 b2!3 b1 b2 g2!2", K: "a1@2 a2!2 a1@2 a2 c#2", L: "d2/2", M: "d1@2 d2!2 d1@2 d2!2",
  N: "d1@2 d2!2 c#1@2 c#2!2", O: "b1@2 b1@2 g1@2 g1!2", P: "a1@2 a1@2 a1@2 a1!2", Q: "d1", R: "b1 g1", S: "a1@7 g1",
  T: "f#1 d2", U: "g1", V: "a#2 f2 a#2@2 a#2@2 a#2@2", W: "a#2!2 a#1@2 a#2 [g1,g2] [f1,f2]@2",
  X: "a#2 f2 a#2 f2 a#2@2 a#2@2", Y: "a#2 g1 f1 a#2@2 a#2@2 a#2", Z: "a#2 f2 a#1@2 a#2@2 a#2@2", AA: "[g1 a1@6 ~]/2",
  AB: "[d2@7 a1]/2", AC: "d2", AD: "a2@2 a2@4 a1!2", AE: "b2 a2 e2 d2", AF: "e3@2 d3@3 b2 e3@2", AG: "d2 f#3 e3 a1",
  AH: "b3@4 a3 e3 a1@2", AI: "b2 d2@2 a1", AJ: "f#3 e3@2 a1", AK: "[d2@7 ~]/2",
})).s("gm_synth_bass_1").gain(0.54)

// bass · fretless bass
const bass_2 = note("<~@12 A@4 ~@119 B@6 C D B@2 C E B@2 C F B@2 C E C G C H C I ~@6>".pickRestart({
  A: "[b3@2 c#4 d4@2 c#4@4 ~ d4@6]/4", B: "[d2@7 a1]/2", C: "d2", D: "a2@2 a2@4 a1!2", E: "b2 a2 e2 d2",
  F: "e3@2 d3@3 b2 e3@2", G: "d2 f#3 e3 a1", H: "b3@4 a3 e3 a1@2", I: "b2 d2@2 a1",
})).s("gm_fretless_bass").gain(0.45)

// bass · fretless bass · soft notes
const bass_soft = note("<~@161 A B C@2 D@2>".pickRestart({
  A: "d2", B: "f#3 e3@2 a1", C: "[d2@7 a1]/2", D: "[d2@7 ~]/2",
})).s("gm_fretless_bass").gain(0.2)

// bass · electric bass pick
const bass_3 = note(`<
  ~@30 A B C D A B C D E@5 F G H I J K L M ~@12 N@2 O P Q R S P T U@2 ~ E@5 F G H I J K L M ~@12 N@2 A B C D A B C D E@5
  F G H I J K L M ~@44
>`.pickRestart({
  A: "d2 a1 ~ d2 c#2@3 c#2", B: "b1@2 ~@3 b1 f#1@2", C: "e1@2 ~ b1 e2@2 ~ e2", D: "a1@2 ~ a1 e2@2 ~@2",
  E: "d1@2 d2!2 d1@2 d2!2", F: "d1@2 d2!2 c#1@2 c#2!2", G: "b1@2 b1@2 g1@2 g1!2", H: "a1@2 a1@2 a1@2 a1!2", I: "d1",
  J: "b1 g1", K: "a1@7 g1", L: "f#1 d2", M: "g1", N: "d2/2", O: "a#2 f2 a#2@2 a#2@2 a#2@2",
  P: "a#2!2 a#1@2 a#2 [g1,g2] [f1,f2]@2", Q: "a#2 f2 a#2 f2 a#2@2 a#2@2", R: "a#2 g1 f1 a#2@2 a#2@2 a#2",
  S: "a#2 f2 a#1@2 a#2@2 a#2@2", T: "g1 a1@3", U: "a1/2",
})).s("gm_electric_bass_pick").gain(0.57)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A B@2 C D C E@2 F G H I@3 J K@4 L M L N O@2 L P Q R ~@8 S T U@4 V W S ~@10 L N O@2 L P X@2 ~@7 Y@2 S ~@8 Z AA AB@2
  AC ~@6 L N O@2 L P AD@2 ~@8 S T U@4 V W Z AA AB@2 AC ~@6 L N O@2 L P ~@3 AE AF@2 AG AH ~@9 AI AJ ~@13
>`.pickRestart({
  A: "~ a3", B: "[d4 ~ d4 [d2,a3], ~ [d2,a3]@2 ~]/2", C: "[d2,a3]", D: "[d2,d3,g4]", E: "[[d2,a3]@3 c#2]/2",
  F: "b2 g2, d4", G: "d4 c#4, e4", H: "d2", I: "[b4@2 c#5 d5@2 c#5@4 a4 b4 a4]/3", J: "d4 e4 d4@2", K: "d5/2", L: "d5",
  M: "e5@2 d5 e5", N: "c#5@2 d5 e5", O: "[d5@5 e5@2 c5@5 d5@2 e5@2]/2", P: "d5 c#5", Q: "[a4,f#5]",
  R: "[g3,b3] [a3,c#4]", S: "d4", T: "d4@7 e4", U: "[f#4 ~@7 a4@8, ~ d4@8 ~@7]/4", V: "g4@7 f#4", W: "e4@6 f#4 e4",
  X: "[[a4,f#5]@7 ~]/2", Y: "[~ c#4, a4]/2", Z: "~ f#3 g3 a3", AA: "b3@2 c#4 d4",
  AB: "[d4@3 e4 c#4@6 a3@2 b3@2 a3@2]/2", AC: "a3 g3@2 ~", AD: "[~@2 [g3,b3] [a3,c#4], [a4,f#5]@7 ~]/2", AE: "~ b4",
  AF: "[a4@3 ~]/2", AG: "~@2 g4 f#4", AH: "g4", AI: "~@10 c5 b4 a4@4", AJ: "b4",
})).s("gm_string_ensemble_1").gain(0.25).pan(0)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~ A B@2 C D E F@2 G H I J@3 K L@4 M N M O P@2 M Q R S ~@12 T@2 U V W ~@10 M O P@2 M Q X@2 M Y M Z M Y AA AB@2 W ~@8 AC
  AD AE@2 AF ~@6 M O P@2 M Q R S ~@8 W AG AH@4 U V AC AD AE@2 AF ~@6 M O P@2 M Q L@8 ~@24
>`.pickRestart({
  A: "~ e4", B: "[f#4 e4 f#4 [d3,a3,f#4], ~ a3@2 ~]/2", C: "[d4,g4]", D: "[b3,g4]", E: "[d4,f#4]",
  F: "[[d4,f#4]@3 [c#3,a3,e4]]/2", G: "~ g2, [b3,g4]", H: "~ c#4, [a2,a3]", I: "~ f#4, [a3,d4]",
  J: "[b4@2 c#5 d5@2 c#5@4 a4 b4 a4]/3", K: "d4 e4 d4@2", L: "d5/2", M: "d5", N: "e5@2 d5 e5", O: "c#5@2 d5 e5",
  P: "[d5@5 e5@2 c5@5 d5@2 e5@2]/2", Q: "d5 c#5", R: "[a4,f#5]", S: "[g3,b3] [a3,c#4]", T: "a4/2", U: "g4@7 f#4",
  V: "e4@6 f#4 e4", W: "d4", X: "[[a4,f#5]@7 ~]/2", Y: "d#5", Z: "c5 d#5", AA: "c4 a4@3", AB: "[~ c#4, a4]/2",
  AC: "~ f#3 g3 a3", AD: "b3", AE: "a3/2", AF: "g3", AG: "d4@7 e4", AH: "[f#4 ~@7 a4@8, ~ d4@8 ~@7]/4",
})).s("gm_string_ensemble_1").gain(0.25).pan(1)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@2 A ~@5 B C D E ~@3 F G@2 H@4 I J K@5 ~@9 E L M@4 N O E ~@36 P Q R@2 S ~@5 T U@2 V@2 W ~@11 X Y@2 Z AA@2 AB AC@2 ~@9
  T U@2 V@2 W ~ AD AE@2 AF AG AH AI AJ@2 AK@2 AL@2 AM@2 ~@6 AN AO@2 ~@8
>`.pickRestart({
  A: "a3 ~ d4 ~ e4 ~@3", B: "~ d4 e4 c#4", C: "b3@3 d4", D: "d4 c#4", E: "d4", F: "~@4 a3 ~ d4 ~",
  G: "[f#4@5 ~ g4@2 f#4 f#4@3 e4@2 e4@4 d4@2 ~@4 a3@2 ~@2 d4@2 ~@2]/2",
  H: "[f#4@5 ~ g4@2 f#4@4 e4@2 e4@4 d4@2 ~@4 e4@2 ~@2 e4@2 e4@4 ~@2 d4@2 d4@4 ~@2 b3@2 b3@4 e4@4 ~@4 d4@2 e4@2 ~@2]/4",
  I: "f#4 ~ g4 f#4@2 ~ e4!2", J: "~ f#4@2 ~@5",
  K: "[f#4 ~ g4 f#4@2 ~ e4 e4@2 f#4@2 ~@3 f#4 f#4@2 ~ g4 g4@10 ~ g4 f#4@2 ~@7]/5", L: "d4@7 e4",
  M: "[f#4 ~@7 a4@8, ~ d4@8 ~@7]/4", N: "g4@7 f#4", O: "e4@6 f#4 e4", P: "~ f#3 g3 a3", Q: "b3@2 c#4 d4",
  R: "[d4@3 e4 c#4@6 a3@2 b3@2 a3@2]/2", S: "a3 g3@2 ~", T: "~@2 b3 c#4", U: "[d4@5 e4 d4 c#4@5 d4@2 e4@2]/2",
  V: "[d4@5 e4 d4 c4@5 d4@2 e4@2]/2", W: "b3", X: "~@2 a4 b4@3 d5 ~ d5@3 e5@2 ~@3",
  Y: "[~ b4@2 a4 f4 d4 e4 d4@2 ~ b3 a3 f4 f#4 g4 a4]/2", Z: "f4 e4 d4@2 e4@2 d4@4 ~@6",
  AA: "[~@2 e5@4 a5@2 b5@10 c6 b5 a5@2 a5@4 b5@2 f5 e5 d5 ~]/2", AB: "e5@2 b4@2 d5@2 e5@2 f#5@3 g5@3 a5@2",
  AC: "[f5 e5 d5@2 e5@2 b4@2 d5@2 b4@2 e5 b4 d5@16 ~@2]/2", AD: "~@10 e4@2 ~@2 a4 ~",
  AE: "[b4@10 c5 b4 a4 ~ a4@6 b4 ~ f4 e4 d4@5 ~ d4@2]/2", AF: "d4@2 b3@2 d4 e4 d4@6 ~@4",
  AG: "~@2 e5@4 a5 ~ a5@4 f#5 ~@3", AH: "~@2 b5@8 a5 ~@3 b5 ~", AI: "f5 e5 d5 ~ e5@2 b4@2 d5@4 b4 ~ a4 ~",
  AJ: "[f4@3 g4 ~@2 a4 ~ f4 e4 d4 ~ d4 ~ d4@4 ~@14]/2", AK: "[~@2 a4@4 d5 ~ d5@2 b4@2 e5@2 d5@4 ~@14]/2",
  AL: "[~@2 a4 b4@3 a4 ~ f4@4 d4 ~ d4@4 ~@14]/2", AM: "[~@8 a4@2 f#4 ~ b4@2 a4@4 ~@14]/2",
  AN: "~@2 e4@4 a4 ~ b4@6 c5 b4", AO: "[a4 ~ a4@16 ~@14]/2",
})).s("gm_lead_2_sawtooth").gain(0.35).pan(1)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~@4 A@3 B@2 C D E F G@3 H I J I J K I L M N J O I P Q R S T Q R S T U@4 V W X Y I Z AA AB Z H I J I J K I L M N J O
  AC@2 AD AE AD AE AD AE AF@2 AG@2 U@4 V W X Y I Z AA AB Z H I J I J K I L M N J O I P Q R S T Q R S T U@4 V W X Y I Z
  AA AB Z H I J I J K I L M N J O AH@2 AI@2 AJ@2 AI@2 AH@2 AI@2 AJ@2 AI@2 AK AL AM J AK AL AM J AH@2 AI@2 AJ@2 AI@2
>`.pickRestart({
  A: "d5/3", B: "[[d4,f#4,a4]@3 [c#4,e4,a4]]/2", C: "d4 [d4,b4], g4", D: "[a3,d4] e5", E: "[a3,d4,f#4]", F: "d4",
  G: "[a4@5 d4@4 ~@3]/3", H: "[d4,g4,b4] [e3,g4,b4]", I: "[d4,f#4,a4]", J: "[d4,g4,b4]", K: "[g#4,b4,e5]",
  L: "[f#4,a#4,c#5]", M: "[b4,d5,f#5]", N: "[f#4,a4,d5]", O: "d4 c#4, [e4,a4]", P: "[d4,a4]",
  Q: "[a3,d4,f#4] [a3,c#4,e4]", R: "[b3,d4,f#4]", S: "[b3,e4,g4]", T: "[c#4,e4,a4]", U: "d5/4", V: "a5",
  W: "d5@4 e5@2 g5 f#5", X: "e5 d5@2 ~", Y: "[a4,d5] [a4,e5]", Z: "[d4,g4]", AA: "a4", AB: "~ d4, a4",
  AC: "[[d4,f#4,a4]@5 a4 d5 e5]/2", AD: "[d5,f5]", AE: "[d#5,f5]", AF: "[[e4,g4,c5] [d4,f#4,a4]@6 ~]/2",
  AG: "[[e4,a4]@7 ~]/2", AH: "[a3,d4,f#4]/2", AI: "[d4,g4,b4]/2", AJ: "[d4,f#4,a4]/2", AK: "~ [d4,g4] [d4,f#4] ~",
  AL: "~ [d4,f#4] ~@2", AM: "~@2 [d4,g4,b4]@2 [d4,g4,b4] [d4,g4,b4]@2 ~",
})).s("gm_drawbar_organ").gain(0.29).pan(1)

// chords · piano
const piano = note(`<
  ~@16 A@2 B@2 C@2 D@2 E@2 F G@2 ~ H I J@2 H I K@4 L@2 M@2 N@2 O P Q R@2 A@2 B@2 C@2 D@2 E@2 F G@2 ~ S@6 T ~@3 U@2 L@2
  M@2 N@2 O P Q R@2 A@2 B@2 C@2 D@2 E@2 F G@2 ~ H I J@2 H I K@4 L@2 M@2 N@2 O P Q R@2 A@2 B@2 C@2 D@2 E@2 F V@3 W X@2 Y
  W X@2 Y W X@2 Y W X@2 Y W X@2 Y W X@2 Y W X@2 Y W ~
>`.pickRestart({
  A: "[[g3,b3,d4]@4 [e3,b3,d4]@2 [g3,b3,d4] [g3,b3,d4]@2 [f#2,a3,d4]@7]/2", // G E7 G D
  B: "[[g3,b3,d4]@4 [g3,b3,d4]@2 [g3,b3,d4] [g3,b3,d4]@2 [f#3,a3,d4]@7]/2", // G D
  C: "[[g3,b3,d4]@3 [g3,b3,d4]@3 [g3,b3,d4] [g3,b3,d4]@2 [b3,e4,g#4]@3 [g#3,b3]!2 [g#3,c#4,e4]@2]/2", // G E G#m C#m
  D: "[[d4,f#4]@2 [e4,g4] [d4,f#4]@4 [f#3,a#3,c#4]@2 [f#3,a#3,c#4]@5 [a#3,c#4]@2]/2", // D Em D F# A#m
  E: "[[d4,f#4]@2 [e4,g4] [d4,f#4]@4 [c3,f#3,c4,a4]@2 [c3,f#3,a3]@5 [c3,d4,f#4,a4]@2]/2", // D Em D F#dim D7
  F: "[g4,b4]@2 [g4,b4] [g4,b4]@3 ~@2", G: "[[a3,d4]@2 [a3,d4]@2 [c#4,a4] [a4,e5]@2 [f#4,a4,d5]@8 ~]/2",
  H: "[d4,f#4,a4]@3 [d4,f#4,a4] [c#3,a3,e4]@3 [a3,c#4,e4]", I: "[b3,d4,f#4]@3 [d4,f#4]@2 [d4,f#4] [a3,d4]@2",
  J: "[[e2,b3,g4]@2 [e4,b4] [d4,a4]@2 [d4,g4,b4]@2 e4@3 e4 c#4 [a3,c#4,g4]@2 ~ e3, ~@7 [c#4,a4]@4 ~@3 [a3,c#4,g4]@2]/2", // Em E5 D5 G A7 F#m A7
  K: "[[e2,b3,g4]@2 [e4,b4] [d4,a4]@2 [d4,g4,b4]@2 e4@3 e4 ~ [g3,d4,b4]@3 [d4,f#4,a4]@3 [d4,f#4,a4]@2 [d4,f#4,a4] [d4,a4,c#5]@2 [d4,a4,c#5]@2 [d4,g4,b4] [d4,g4,b4]@4 ~@2, ~@7 [c#4,a4]@4 c#4@2 ~@19]/4", // Em E5 D5 G D Dmaj7 G F#m
  L: "[~@2 [d4,g4,b4]@2 [d4,g4,b4] [d4,a4,c#5]@2 [d4,g4,b4]@2 [d4,f#4,a4] [d4,f#4,a4]@4 ~@2]/2", // G Dmaj7 G D
  M: "[[d3,c#4,e4,a4]@5 [d3,b3,g4]@2 [d3,a3,f#4]@2 [d3,f#4] [d3,f#4,a4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2, ~@9 a3@2 ~@5]/2", // A G D A
  N: "[[g3,b3,e4]@2 [g3,b3,d4] [g3,b3,d4]@2 [b3,d4,g4]@2 [g3,d4,e4]@2 [g3,d4,e4]@4 [g3,d4,e4]@3]/2", // Em G Em7
  O: "[a3,d4,f#4]@2 ~ [d4,f#4]@2 [c#4,e4]@3, ~ d3@2 ~", P: "[b3,d4,g4]@2 [b3,d4,g4] [b3,d4,g4]@2 [a3,d4,f#4]@3",
  Q: "[a3,d4,f#4]@2 [a3,c#4,e4] [a3,c#4,e4]@2 [a3,c#4,e4]@3", // D A
  R: "[[a3,d4,f#4]@2 [f#3,c4,d4] [f#3,c4,d4]@2 d4@2 ~ [g3,c4]@2 [g3,b3,d4]@4 ~@2, ~@5 [f#3,c4]@3 ~@8, ~@7 d4@3 ~@6]/2", // D D7 C5 G F#dim
  S: "[[f3,a#3,d4]@2 [f3,a#3,d4]@3 [a3,c4,f4]@2 [a#3,d#4,g4]@4 [a#3,d#4,g4]@2 [a#3,d#4,g4] [f3,a3,c4]@2]/2", // A# F D# F
  T: "[c4,e4,g4]@2 [d4,f#4,a4]@3 ~@3", // C D
  U: "[~@2 [d4,f#4,a4]@2 [d4,f#4,a4] [d4,a4,c#5]@2 [d4,a4,c#5]@2 [d4,g4,b4] [d4,g4,b4]@4 ~@2]/2", // D Dmaj7 G
  V: "[[a3,d4]@2 [a3,d4]@2 [c#4,a4] [a4,e5]@2 ~@3 d3@4 d5 d5@3 d5 d5@3 d5!2, ~@7 [f#4,a4]@8 ~@9, ~@7 d5@7 ~@10]/3", // D5 F#m A5 F#m
  W: "~@2 d5@3 d5@3", X: "[d5@3 d5@3 d5@3 ~ d5@3 d5@3]/2", Y: "d5@3 d5@3 d5!2",
})).s("gm_piano").gain(0.32).pan(0)

// other · tenor sax
const tenor_sax = note("<~@76 A B ~@65 C@2 D ~ C@2 D ~ C@2 E ~ C@2 F ~ C@2 ~@6>".pickRestart({
  A: "~@4 f#4@2 e4 f#4", B: "~ e4 ~ d4@4 ~@9", C: "[a4@4 g4@2 f#4@4 ~@4 d4 e4@3 f#4@3 ~@11]/2",
  D: "g4@3 ~ g4@2 g4@4 ~@6", E: "g4@3 ~ g4@2 g4@8 ~@2", F: "g4@3 ~ g4@2 a4@4 g4 g4@4 ~",
})).s("gm_tenor_sax").gain(0.25).pan(0)

// other · tenor sax · soft notes
const tenor_sax_soft = note("<~@161 A ~ B@2 A ~>".pickRestart({
  A: "g4@3 ~ g4@2 g4@4 ~@6", B: "[a4@4 g4@2 f#4@4 ~@4 d4 e4@3 f#4@3 ~@11]/2",
})).s("gm_tenor_sax").gain(0.1).pan(0)

// other · electric guitar muted
const electric_guitar_muted = note("<~@76 [~@10 a3 b3 d4@2 b3@2] [d4 ~@3] ~@89>")
  .s("gm_electric_guitar_muted").gain(0.62).pan(1)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A@12 B@2 A@16 B@5 A@12 B@2 A@6 ~ C B ~ D A@7 B@5 A@5 E D A@5 B@2 A@8 D A@7 B@5 A@5 E D A@5 B@15 F B@3 G B@11 ~
>`.pickRestart({
  A: "x!8", B: "~ x ~ x", C: "~@3 x ~ x!3", D: "~ x!7", E: "x!4 ~@4", F: "x!2 ~ x", G: "~ x ~@2",
})).gain(0.78)

// drums · open hat
const open_hat = s("oh").struct("<~@149 [~ x ~ x ~ x ~ x] ~@17>").gain(0.78)

// drums · mid tom
const mid_tom = s("mt").struct("<~@74 [~@8 x ~@2 x!2 ~ x ~] ~@92>").gain(0.78)

// drums · high tom
const high_tom = s("ht").struct("<~@74 [x ~@2 x!2 ~ x ~@9] ~@92>").gain(0.78)

// drums · crash
const crash = s("cr").struct(`<
  ~@28 A ~@17 A ~@16 A ~@7 B ~ A ~ A ~@7 A ~@10 A ~@5 A ~@9 A ~@7 A ~@10 A ~@5 A ~@19 A ~@11
>`.pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.78)

// drums · tambourine
const tambourine = s("tb").struct("<~@21 [~ x!15] [x!16]!143 [x!15 ~] ~>").gain(0.54)

// … 38 more lines

More by Steve Winwood