alsa-project / alsa-utils

The Advanced Linux Sound Architecture (ALSA) - utilities
GNU General Public License v2.0
195 stars 135 forks source link

amidi or aplaymidi filtering #194

Open wraybowling opened 1 year ago

wraybowling commented 1 year ago

I would like to see filtering in either aplaymidi so things like sysex messages can be ignored. Or, as a compromise, if it's more appropriate to add to amidi, then a user would pipe the midi output from aplaymidi to amidi with that filtering. I would find the latter solution to be more clunky though.

jaffa225 commented 1 year ago

Sorry for the only slightly related post, but I've been updating QMidiRoute for various other MIDI message translations, including SysEx editing. Of course, it's graphical, so not precisely what you're asking for, but the output from aplaymidi is able to be connected to QMidiRoute's input port (and the output ports to intended destinations) as you've described as a possible clunky solution.

You can find the original, unmodified, Debian source here, if you're not using Debian yourself: https://drive.google.com/file/d/1EOo-llOW5XXvkiy_3EvOAuUuU4Fn6B4B/view?usp=share_link

And, while the site I'd been posting releases to, has been poorly maintained and has been down for the last month or so, due to my diligence with archive.org the latest patch (0.5.3, despite my typo) and build instructions can still be found here: https://web.archive.org/web/20220929045314/https://www.midimusicadventures.com/phpbb/viewtopic.php?f=4&t=17790&start=20#p18702

Other than that, you can find my attempts to have it added to alsamodular-devel here, although archive.org has to be used on the links for them to work: https://sourceforge.net/p/alsamodular/mailman/alsamodular-devel/

I have an overly long tutorial on how to use the different features, including SysEx Edit on youtube here (I have a table of contents there too, but no entry titled specifically for SysEx Edit): https://www.youtube.com/watch?v=5pIb506QipY

In concise terms, to remove SysEx messages, the message(s) to be removed should be entered (separated by commas) on the Input side (left) and the Output side (right) should have nothing (or simply a space) for each message, separated by commas.

For instance, to remove the resets for GM1, GM2, and XG: This would go in the input SysEx text box (each message separated by a comma): f0 7e 7f 09 01 f7, f0 7e 7f 09 03 f7, f0 43 10 4c 00 00 7e 00 f7

And this would go in the output SysEx text box (two commas): , ,

Each Input SysEx message may end with an asterisk () to match based on the known first bytes of a message only, so you could combine both GM1 & GM2 on the input with this: f0 7e 7f 09 , f0 43 10 4c 00 00 7e 00 f7

And this would be the output (one comma, separating the two removal rules of GM* and XG): ,

Anyway, I hope it helps, even if not your expected response,

Lucas