How To Get The M-Audio Transit USB Audio Device Working In Ubuntu 9.04 AMD64
This tutorial will explain how to get the M-Audio Transit USB audio device working under Ubuntu 9.04 amd64, although it may work for other versions.
The Transit is usually a Windows only device and is not detected normally because the firmware has to be loaded in to the device; this is normally done by the Windows drivers. I've written this tutorial after a long exhaustive search on how to get it working.
Requirements:
madfucutter (from multiverse repositories)
transit firmware file (you must get this from the driver package or
from windows)
What we're doing
ALSA supports USB audio devices by default, and the Transit does conform to this standard, however, when it's first powered on it does not have a firmware loaded in to it and is basically a "pretty dumb" USB device. In fact, when you plug it up, lsusb lists it as the following:
user@host:~$ lsusb
Bus 001 Device 007: ID 0763:2806 Midiman M-Audio Transit DFU
Usually the Windows drivers will load the firmware in to the device and runs a reset on it, from which point Windows will then detect it as a Transit audio device and load the appropiate drivers. Under linux, the madfuload utility will upload the firmware to the device so Linux will be able to detect it. madfuload is available in multiverse, but out of the box it doesn't work.
How to do it
You do not need your Transit USB plugged in for any of these steps, so you may want to unplug it if it's currently plugged in. Let's make sure the multiverse repositories are enabled. The easiest way to do this is grep /etc/apt/sources.list with the following command:
less /etc/apt/sources.list | grep multiverse
You are looking for a line similar to this
deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
If you see this line but it has a # in front of it, then we'll need to enable the repositories by editing the sources.list file.
sudo nano /etc/apt/sources.list
Of course you can replace nano with your favorite editor. Once you find the proper line, remove the #, save the file, and reload your apt sources:
sudo apt-get update
Once your apt is updated with multiverse, we can proceed to install madfudload:
sudo apt-get install madfudload
Now that we've got madfuload installed, we need to copy the firmware file. This file is called ma006100.bin - you can either extract the installer package to find the file, or, if you have Windows installed on the same system, you can find the file on your windows drive in /windows/system32/drivers/ Once you've located the file, it needs to be copied to /usr/share/usb/maudio.
If we try to pass the proper variables over command-line to madfudload, at least on amd64 systems, we get a segfault. So what we're going to do is modify a udev rule file to make everything automatic and avoid the segfault problems.
The file we need to edit is /lib/udev/rules.d/42-madfuload.rules and change the TRANSIT section. For this I used gedit since the entry does not contain any line-breaks and is much wider than my terminal screen..again, you can use any editor you wish.
sudo gedit /lib/udev/rules.d/42-madfuload.rules
# Transit ACTION=="add", SUBSYSTEM=="usb", DEVPATH=="/*.0", ENV{PRODUCT}=="763/2806/*", RUN+="/usr/sbin/madfuload -l -3 -f /usr/share/usb/maudio/ma006100.bin -D $root/$name"
We need to replace that entire chunk with this:
# Transit ACTION=="add", SUBSYSTEM=="usb", ENV{PRODUCT}=="763/2806/*", RUN+="/usr/sbin/madfuload -l -3 -f /usr/share/usb/maudio/ma006100.bin -D $env{DEVNAME}"
Save the file. Now, plug up your Transit and run lsusb again. You should now find that it shows up as this:
user@host:~$ lsusb
Bus 001 Device 009: ID 0763:2006 Midiman M-Audio Transit
That's it. Your Transit is now installed and working in Ubuntu.
Since publication I've discovered that about 80% of the other machines I did this on required a reboot. I cannot remember what was special about those installs either; so if your Transit still shows up as a DFU after reboot, reboot your machine before thinking it did not work.
I've also discovered why you are unable to play 24-bit with the device. The limitation is not in ALSA but is with the Transit itself. Since it's a USB 1.1 device it does not have enough bandwidth to reliably send a 96/24 stream in and out at the same time. M-Audio has worked around this by having several operating modes selectable in the Windows Drivers. When the firmware first loads, it defaults to the 16-bit 8000-48000hz mode, which gives you recording and playback. ALSA does not know (or probably care) how to change this, however, as a result you cannot support more than 48khz 16-bit on this under Linux.