Hi,
I am doing a bit of work on the Alsa Web MIDI implementation in Chrome: https://code.google.com/p/chromium/issues/detail?id=344410
Web MIDI likes to know the "manufacturer" field as part of its API: http://webaudio.github.io/web-midi-api/#attributes-3
The current implementation in Chrome uses rawmidi, and then tries to parse out the manufacturer from the longname of the card. This works reasonably well, but is brittle and results in a lot of code.
I am working on a seq implementation for Chrome, to replace the rawmidi implementation. I can retain the manufacturer extraction hack on the card, but seq requires yet another hack to guess the card for a particular seq client.
Any suggestions on how to extract the manufacturer more easily? The best solution would be to add a manufacturer (or vendor) field to the snd_seq_client_info ioctl struct. This would likely require a new ioctl, since there is only 64 bytes reserved in the current struct. I am guessing this is not too likely to be accepted. (I would want to also add the same manufacturer field to the snd_ctl_card_info.)
The next best solution would be to add a card field to snd_seq_client_info, which could be optionally populated with the card that is associated to the client.
A completely different solution would be to add all this info to sysfs which is easier to extend dynamically and won't require any ioctl changes at all. (I kind of like this solution the best, but it would be a change from the ioctl-based mechanisms done so far.)
Ultimately, if I am stuck guessing and parsing, that will work as long as the underlying implementation doesn't change. But I would rather have a more reliable solution going forward.
Any thoughts?
Thanks,
Adam Goode