Hi Danny,
Really sorry I failed to respond to this at the time, but better late than never! I've not touched this for ages but was just recently looking at it again.
I've yet to get this running totally reliably, and have some things that were working got knocked back with distro/kernel updates. Sometimes the crashes are so bad they lock up the whole computer when I try to restart jack, and I've generally tended to go with a simpler interface, but still occasionally come back to see if I can get more life out of this.
All my experience has been on Debian-based distros (LMDE), so should be close to your own experience.
Broadly, this is what's involved (as at last time I gave this serious attention):
1. Make sure the interface is being seen by ALSA
- Use 'aplay -l' in a terminal to monitor the sound devices that ALSA recognises
- Plug in interface, and keep monitoring with 'aplay -l' (it might take a while)
- Eventually, the interface should be listed, as two devices (0 and 2)
- If it's still not listed after a minute or two, unplug and replug; keep retesting with 'aplay -l'
RATIONALE: to get full functionality, the card needs to be detected, firmware for the card loaded, and the 'modified' device (with firmware) detected again (device 2), and the device kernel module (snd-usb-usx2y) loaded. This should all be done by udev, but my past experience has been that is doesn't (didn't) do it all automatically.
To avoid the double-plugging, I make the driver (snd-usb-usx2y) load manually, by including it in /etc/modules.
NOTE: you can also try adding 'options snd-usb-usx2y nrpacks=1' in a conf file in /etc/modprobe.d (I don't know exactly what this does, but general advice has been that it's necessary to help the kernel module best handle the data throughput).
2. Make sure control software (us428control) is running
- Once card has been detected, in terminal, use 'ps -A | grep us428control' to check if software process is running
- If not, run 'us428control &' (the & makes it a background process so you can exit the terminal and it keeps running)
- Response to the successful command should be something like 'US-X2Y-compatible card found on hwdep hw:2'
RATIONALE: this is mainly to enable communication between knobs and buttons on the interface, but also including the main volume control, so I find it still needs to be running to get audio functionality, even if I'm not using all the controls.
I found lots of sources on the web that describe how to do these two steps manually, but found it's mostly taken care of automatically by udev and should't need much more effort, apart from the double-plugging.
3. Run jack
- Use jack1 (not jack2).
- My main discovery was that I need to use jack1 (not jack2), as that contains elements to support the USX2Y interface, but jack2 doesn't (didn't).
- I think falkTX is now developing jack2, but have heard nothing about adding in USX2Y functionality.
- The kxstudio build of jack1 includes dbus functionality, so you can control jack with Cadence, or you can just use qjackctl or command line with other builds
- Specific jack parameters might depend on your system, but the ones I found most significant (IIRC):
- Set/force 16-bit
- Reference card as hw:n,2 with n as card number and 2 as device number (2 for full functionality, 0 for basic). This is (was) more reliable that using the system-assigned hw:USX2Y,2 (on a US-428 you need device :2 for the full 4 inputs)
- Sample rate, buffer size, periods/buffer you can tweak for best performance on your system, but I think I found 3 periods/buffer better than the default of 2.
Things I don't really know/understand
Some of what I discovered ran up against the limits of my knowledge, or time/patience to find out more fully. These include:
- These are USB1 devices, and I suspect some of the unreliability comes from playing badly with USB2. I've not tried USB3, but that may have similar problems. Although I've tried things like running it through various hubs, I can't give a definitive 'best approach'
- Sometimes, if it was working ok without the us428control software running, things went bad (heavy digital noise/distortion instead of clean sound) when I ran us428control. That made me suspect it was messing with the data throughput, and I made a stab at rewriting it, but I'm not much of a programmer, so didn't get too far beyond getting more control over button mappings.
- I'm currently running a US-224 (smaller version of US-428), just as device 0, and with jack2. This wouldn't give 4 full inputs on a US-428 but seems to work ok for a reasonable while. But, when it crashes it totally locks up the computer. That makes me think there's some problem at a low level, like hardware or kernel module.
- It's possible to use rtirq to prioritise how the computer handles different devices, e.g. to prioritise these USB1 cards, but I've never managed to find a totally reliable solution.
Lots of this knowledge/experience is a few years old, so I think the broad principles should still hold true, but the specifics might have changed with newer software versions. I still like these machines as handy and inexpensive so, if I even find a reliable solution, will post again, maybe in another few years!