Kick
Snare
HH Open
HH Closed
Brush
The core functionality was the work of an evening. It works with what I assume are old API calls. I construct new Audio() classes and call their play methods. For the timing I just use setInterval timed to fire once per slice based on the desired BPM. setInterval may not be terribly accurate but it works fine for the purpose here. Perhaps I should be using the more advanced Audio API that's generally considered part of HTML5 but that would be more complex, less broadly supported, and perhaps unwieldy for making an interactive drum machine like this. My thinking is - in essence - why mess with what 'ain't broken?