Channel aftertouch
Implements Channel aftertouch and a method to set the Push to Channel and Poly aftertouch modes.
(In the issue, I had been starting Ableton Live along with the Push, which sets the Push to Channel mode. Hence my confusion when push-wrapper only handles Poly aftertouch.)
Resolves #3
This PR doesn't make sense to me in terms of the API exposed by push wrapper. Client code would look like:
channel().onAftertouch(pressure => { /* do something with pressure */ }
But as a person using the Push hardware, "channel" isn't a physical thing I'd iteract with.
Assuming the channel aftertouch messages are sent from the hardware when:
- the push is in "channel aftertouch mode"
- the user presses/holds one of the pads
then I'd expect the client code to be
pad().onAftertouch(pressure => { /* do something with pressure */ }
i.e. the internal implementation of pad().onAftertouch should abstract whether the incoming MIDI message is a channel/poly aftertouch message (and hide that from the client code)
Given channel aftertouch messages do not declare which pad(s) was pressed/pressured to generate the message, the implementation would be tricky. I'd suggest the pushWrapper instance would have to keep some internal state of which pads are currently pressed, and trigger dispatch on all currently pressed pads in response to an incoming channel aftertouch message