309 lines
12 KiB
Plaintext
309 lines
12 KiB
Plaintext
How to get a Tascam US-122 working with Slackware 13.37 and later.
|
|
|
|
[ 20140823 bkw: updated to include usbcore.autosuspend=-1 ]
|
|
|
|
The Tascam US-122 is a bus-powered USB 1.1 audio interface, with 2
|
|
channels of input (either 1/4" unbalanced or XLR balanced) and adjustable
|
|
direct monitoring. See Tascam's product page for more information (Links
|
|
section, below).
|
|
|
|
These directions might also be useful for the US-224 and US-428. There are
|
|
also US-122MkII and US-144MkII units which are cosmetically different,
|
|
but might be the same thing internally (or might not; I don't have one
|
|
for testing).
|
|
|
|
Before you start: the US-122 is bus-powered, and draws quite a bit more
|
|
power than your average USB device (though not more than the 500mA that
|
|
the USB specification says USB ports/hubs should support). It probably
|
|
won't work with cheap powered USB hubs (it may be detected & show up
|
|
in alsamixer, but fail to actually play any audio). It will of course
|
|
never work with an unpowered hub. It's also possible (but unlikely) that
|
|
it could fry a cheap motherboard, if plugged in without a hub. If you're
|
|
even slightly worried about this, I'd recommend getting a decent powered
|
|
hub (one that says it supports "high power" or "hi-power" USB devices).
|
|
|
|
You should read the owner's manual (see Links, below). Obviously you
|
|
can skip the parts about installing/using the Windows/Mac drivers and
|
|
software (which is most of the manual actually), but the product specs
|
|
in the back are informative.
|
|
|
|
Unlike some other "USB mixer" devices, the Tascam isn't just plug and
|
|
play on Slackware Linux systems. Although it appears as a standard
|
|
class-compliant USB audio interface (and also as a MIDI interface),
|
|
it requires its firmware to be sent over the USB cable each time it's
|
|
plugged in. Presumably, this is to save on cost (no ROM or flash is
|
|
required inside the unit), and to allow for easy firmware upgrades.
|
|
|
|
To get the device to work, you'll need the firmware itself, the firmware
|
|
loader utility, and some udev rules that cause the firmware loader to
|
|
be run when the device it plugged in. Read on for the gory details...
|
|
|
|
To start with, leave the device unplugged.
|
|
|
|
The commands below assume you have root access (either logged in as root,
|
|
or via "su -". Don't use "su" without the hyphen though).
|
|
|
|
Steps
|
|
-----
|
|
|
|
1. For 3.x series kernels, you'll have to disable USB autosuspend.
|
|
Actually this is a good idea for any system that uses USB audio, or
|
|
even any desktop system that doesn't need to save every last milliwatt
|
|
of power possible. If you don't do this, the US-122 will usually work
|
|
for a few seconds, then freeze up with "incomplete URB" messages in dmesg.
|
|
|
|
In Slackware's kernels, usbcore is built into the kernel (even the
|
|
-generic one), so you'll have to pass a parameter on the kernel's
|
|
command line.
|
|
|
|
In /etc/lilo.conf, in the section for your kernel, add a line like
|
|
this:
|
|
|
|
append="usbcore.autosuspend=-1"
|
|
|
|
If you already had an append=, add usbcore.autosuspend=-1 to the options
|
|
inside the double-quotes. An example might be:
|
|
|
|
append="threadirqs usbcore.autosuspend=-1"
|
|
|
|
(BTW, threadirqs is a useful option for systems that need low latency for
|
|
realtime audio).
|
|
|
|
Don't forget to re-run "lilo" and reboot after editing lilo.conf.
|
|
|
|
There's another method for disabling autosuspend that doesn't require
|
|
a reboot. Do this:
|
|
|
|
# echo "-1" > /sys/module/usbcore/parameters/autosuspend
|
|
# for i in /sys/bus/usb/devices/*/power/autosuspend; do
|
|
# echo "-1" > $i
|
|
# done
|
|
|
|
Put that code in /etc/rc.d/rc.local (or in a separate script that gets
|
|
called from rc.local) so it will execute on every boot.
|
|
|
|
2. To get the US-122 working without audio glitches:
|
|
|
|
# echo 'options snd_usb_usx2y nrpacks=1' > /etc/modprobe.d/tascam.conf
|
|
|
|
What this does is reduce the number of audio packets sent in each USB
|
|
packet. Without this, the Tascam worked, but every few seconds its
|
|
audio would get "scratchy" sounding (due to dropped samples). When this
|
|
happened, I was using jack, and it didn't report any x-runs. I don't
|
|
really understand why nrpacks works, I found it by googling (see the
|
|
links section, below).
|
|
|
|
3. Install fxload and alsa-tools from slackbuilds.org.
|
|
|
|
# sbopkg -i fxload alsa-tools
|
|
|
|
If you prefer, you can download the SlackBuild tarballs and build them
|
|
manually, instead of using sbopkg.
|
|
|
|
If you're not actually using Slackware, or if you decide to compile
|
|
alsa-tools without using the slackbuilds.org package, see the "Udev Rules"
|
|
section of this document.
|
|
|
|
4. Plug in the device.
|
|
|
|
After a couple of seconds, the green USB light on the Tascam should light
|
|
up. The snd_usb_usx2y should be auto-loaded by udev (check the output of
|
|
"lsmod").
|
|
|
|
5. Testing
|
|
|
|
Have a look at the output of "aplay -l", and/or run alsamixer and press
|
|
F6. The card should show up as "USX2Y [TASCAM US-X2Y]". It will probably
|
|
be device #1 (the numbering starts at zero, and your internal/onboard
|
|
audio normally shows up as device #0).
|
|
|
|
Example:
|
|
# aplay -l
|
|
**** List of PLAYBACK Hardware Devices ****
|
|
card 0: Intel [HDA Intel], device 0: ALC269 Analog [ALC269 Analog]
|
|
Subdevices: 1/1
|
|
Subdevice #0: subdevice #0
|
|
card 1: USX2Y [TASCAM US-X2Y], device 0: US-X2Y Audio [US-X2Y Audio #0]
|
|
Subdevices: 1/1
|
|
Subdevice #0: subdevice #0
|
|
|
|
Since it's card #1, we should be able to use it to play an mp3 or ogg file
|
|
with mplayer, like so:
|
|
|
|
# mplayer -ao alsa:device=hw=1 somesong.mp3
|
|
|
|
You can use some other audio player, if you don't have mplayer installed.
|
|
Whatever you use, set its audio device to "hw:1" (no, the "device=hw=1"
|
|
above isn't a typo, it's how you tell mplayer to use "hw:1". Really.)
|
|
|
|
Obviously you need speakers or headphones plugged into the Tascam, to
|
|
actually hear anything. Also, the headphone and main volumes have to be
|
|
turned up. There's no software volume control (you can't use alsamixer
|
|
or KDE's volume control), you'll have to actually turn the knobs :)
|
|
|
|
Troubleshooting
|
|
---------------
|
|
|
|
If you don't hear any audio, and/or mplayer (or whatever audio playing
|
|
app) gives error messages and/or freezes up, the Tascam might not be
|
|
getting enough power. Run "dmesg|tail" and look for messages like:
|
|
|
|
[623530.547384] Sequence Error!(hcd_frame=226 ep=10out;wait=226,frame=223).
|
|
[623530.547386] Most propably some urb of usb-frame 226 is still missing.
|
|
[623530.547387] Cause could be too long delays in usb-hcd interrupt handling.
|
|
|
|
Try a different powered USB hub, or try it in a USB port on the PC itself.
|
|
|
|
Once you get everything working, you should be able to use the US-122
|
|
with jack (with or without qjackctl). Make sure to enable the MIDI ports
|
|
(-Xseq on the jackd command line) if you plan to use them.
|
|
|
|
(Apparently, the US-428 requires a daemon called us428control to be
|
|
running, to get the MIDI controls to work. I haven't got a US-428 so I
|
|
don't know anything about this)
|
|
|
|
JACK Latency
|
|
------------
|
|
|
|
As a USB 1.x device, the Tascam's audio latency is going to be pretty
|
|
awful. To measure it, you loop the output back into the input, and run
|
|
jack_delay (I used a 1/4" guitar cable, connected from the headphone
|
|
output to the left line input jack). Make sure the "Direct Monitoring"
|
|
switch is off, or else it will feed back and jack_delay won't be able
|
|
to measure anything.
|
|
|
|
I've measured my Tascam with jack_delay. Results:
|
|
|
|
# jack_delay -I system:capture_1 -O system:playback_1 -E
|
|
210.625 frames 4.388 ms
|
|
|
|
To get jack-using applications to compensate for latency, use the -I and
|
|
-O options. jack_delay's README says:
|
|
|
|
To determine the correct values for jack's -I and -O, set both
|
|
of them to zero ('default' in qjackctl) and measure the latency
|
|
using the -E option. Then set each of the -I and -O options to
|
|
half the value displayed.
|
|
|
|
The options can't be fractional, so I use "-I 105 -O 105", which seems
|
|
to work OK. My complete jackd command line looks like:
|
|
|
|
/usr/bin/jackd -Z -R -P65 -dalsa -dhw:1 -r48000 -p256 -n3 -Xseq -I105 -O105
|
|
|
|
With these settings, I'm able to use fluidsynth, beatrix, bristol,
|
|
and other audio synths. I use a USB MIDI keyboard, but you could
|
|
use the Tascam's MIDI in jack with a standard MIDI keyboard as well.
|
|
ardour and ecasound also work for recording audio, though I haven't
|
|
tested them thoroughly.
|
|
|
|
I haven't experimented with the -p and -n options. Lower values would
|
|
mean less latency, at the expense of more CPU and I/O overhead. I'm using
|
|
the Tascam with an eeePC (relatively slow single core Intel Atom CPU),
|
|
you might do better on faster hardware... but don't expect miracles:
|
|
USB 1.1 just plain doesn't move data fast enough to get truly low latency
|
|
audio. You'd need USB 2.0 (expensive, proprietary) or better yet, Firewire
|
|
(also expensive) for that.
|
|
|
|
If you can't seem to get rid of audio problems any other way, try
|
|
(in order):
|
|
|
|
- make sure jackd and your audio applications have the appropriate
|
|
POSIX capabilities (e.g. setcap cap_ipc_lock,cap_sys_nice=ep
|
|
/usr/bin/jackd)
|
|
|
|
- add append="threadirqs" in lilo.conf (re-run lilo, reboot)
|
|
|
|
- use the rtirq script from http://www.rncbc.org/jack/
|
|
|
|
- recompile the kernel with CONFIG_PREEMPT=y
|
|
|
|
- Use a realtime-patched kernel
|
|
from http://www.kernel.org/pub/linux/kernel/projects/rt/
|
|
|
|
There is a lot of info out there on the 'net about reducing latency
|
|
and/or x-runs in jack. You'll get it working if you're persistent.
|
|
|
|
Miscellaneous
|
|
-------------
|
|
|
|
This isn't Slackware- or Linux-specific information, but it's not covered
|
|
real well in the owner's manual either.
|
|
|
|
Unlike some other "USB mixer" devices, the Tascam won't work as a
|
|
standalone mixer. It's USB-powered, and needs its firmware loaded.
|
|
|
|
The Direct switch sends whatever's coming in on the inputs, directly to
|
|
the output, with no latency. In ardour, select "Options > Hardware does
|
|
monitoring" to use this. If you want to use the Tascam + your computer
|
|
as a live guitar effects rig (maybe using rakarrack, jack-rack, and/or
|
|
sooperlooper), this needs to be disabled.
|
|
|
|
The inputs are labelled L and R (left and right). When the Mono switch
|
|
is in the On position, both channels are mixed together and appear on
|
|
the left and right outputs (and on both system:capture_* ports in jack).
|
|
The device still appears to be stereo from jack and alsa's point of view
|
|
(just with identical audio on both channels).
|
|
|
|
The insert jacks are described as "TRS jacks" in the manual. This means
|
|
tip-ring-sleeve. Probably you'll need a stereo 1/4" Y-cable (with two
|
|
mono 1/4" plugs or jacks on the other end) to make any use of the inserts.
|
|
I haven't tried them yet. See http://en.wikipedia.org/wiki/TRS_connector
|
|
|
|
There are no software-controllable mixer controls. You can only adjust
|
|
the volume with the hardware knobs (separate ones for headphone and
|
|
line outputs).
|
|
|
|
You can't use the US-122's controls as a MIDI control surface. From what
|
|
I've read, the US-428 is capable of this.
|
|
|
|
Links
|
|
-----
|
|
|
|
Tascam US-122 product page: http://tascam.com/product/us-122/
|
|
The owner's manual is in the "Downloads" section.
|
|
|
|
These instructions were adapted from the Fedora Core 5 instructions here:
|
|
http://www.astro.caltech.edu/~mcs/tascam_us122/
|
|
|
|
Ubuntu forum topic about Tascam devices (there's a lot of noise, but some
|
|
useful info too):
|
|
http://ubuntuforums.org/showthread.php?t=30891
|
|
|
|
The US-122L, US-122MkII, and US-144 are apparently completely different
|
|
beasts. Here are a couple of pages discussing them (which may contain
|
|
outdated information, YMMV):
|
|
http://www.premiumorange.com/la-page-web-of-phil/index.php?page=P030001
|
|
http://mailman.alsa-project.org/pipermail/alsa-devel/2011-November/045912.html
|
|
|
|
Udev Rules
|
|
----------
|
|
|
|
If you used the slackbuilds.org package of alsa-tools, you don't need
|
|
this (it already includes a suitable set of udev rules for the US-122,
|
|
US-224, and US-428).
|
|
|
|
# cat > /lib/udev/rules.d/99-tascam.rules <<EOF
|
|
SUBSYSTEMS=="usb", ACTION=="add", SYSFS{idProduct}=="8006", SYSFS{idVendor}=="1604", RUN+="/bin/sh -c '/sbin/fxload -D %N -s /usr/share/alsa/firmware/usx2yloader/tascam_loader.ihx -I /usr/share/alsa/firmware/usx2yloader/us122fw.ihx'"
|
|
SUBSYSTEMS=="usb", ACTION=="add", SYSFS{idProduct}=="8007", SYSFS{idVendor}=="1604", RUN+="/bin/sh -c '/usr/bin/usx2yloader'"
|
|
EOF
|
|
|
|
(the above is two long lines, each beginning with "SUBSYSTEMS==". There
|
|
shouldn't be any other line breaks)
|
|
|
|
For the US-224, change the "us122fw.ihx" above to "us224fw.ihx", and
|
|
change the SYSFS{idProduct} numbers to 8004 and 8005. For the US-428,
|
|
the firmware is "us428fw.ihx" and the product IDs are 8000 and 8001.
|
|
|
|
After creating the udev rules file, tell udevd to load it:
|
|
|
|
# udevadm control --reload-rules
|
|
|
|
Author
|
|
------
|
|
|
|
B. Watson (yalhcru at gmail dot com)
|
|
|
|
If you find anything confusing or inaccurate in this guide, or have more
|
|
information (particularly about the other Tascam US-series interfaces),
|
|
let me know and I'll update the guide at some point.
|