ListenTo() panics for some message types
The existing function `_channelMessage` is correctly determining which bytes of the message to use to return the appropriate message type. However, it takes two data bytes as arguments. `data2` is not populated for `AfterTouch` and `ProgramChange` messages. https://gitlab.com/gomidi/midi/-/blob/master/v2/listen.go?ref_type=heads#L8
`_channelMessage` is only used inside ListenTo, which _always_ attempts to index into the message byte slice to pass both data1 and data2 bytes into `_channelMessage`. For `AfterTouch` or `ProgramChange` messages, this will always panic with `panic: runtime error: index out of range [2] with length 2`. https://gitlab.com/gomidi/midi/-/blob/master/v2/listen.go?ref_type=heads#L166
This can easily be fixed by making `_channelMessage` take the full byte slice and only attempt to index into `data2` if we have already decoded the message type and determined it to be a message that uses `data2`.
This change will not affect any other parts of the code. I do not foresee any significant performance impact. I would be happy to open a PR that fixes this. We may also want to consider adding a test that will catch behavior like this in the future.
issue