newlandsvalley / elm-comidi

MIDI parser in pure elm
BSD 3-Clause "New" or "Revised" License
9 stars 3 forks source link

No support for Running Status messages #2

Closed newlandsvalley closed 8 years ago

newlandsvalley commented 8 years ago

These are tricky because they depend on state. They can only be used (in a possible sequence) immediately after a channel voice or channel mode message and they inherit the status byte of that message. They only provide data (no status). I had to remove them because my naive parser accepted any input for this data and would have swallowed the TrackEnd messages.

newlandsvalley commented 8 years ago

I've re-added support but it's very, very inefficient and slow. In order to recognize a Running Status, you have to detect a data byte - i.e. it must be in the range 0x00-0x7F. At the moment , I use a parser named brange which basically builds the entire range as a list and uses the choice parser to scan the range. I attempted to use a regex parser but this gave a 'range out of order in character class' error. Leaving this open whilst I investigate.

newlandsvalley commented 8 years ago

Improved the performance by re-implementing in terms of Combine.Char.satisfy().