	Guide to using M-Audio Audiophile USB with ALSA and Jack	v1.3
	========================================================

	    Thibault Le Meur <Thibault.LeMeur@supelec.fr>

This document is a guide to using the M-Audio Audiophile USB (tm) device with 
ALSA and JACK.

1 - Audiophile USB Specs and correct usage
==========================================
This part is a reminder of important facts about the functions and limitations 
of the device.

The device has 4 audio interfaces, and 2 MIDI ports:
 * Analog Stereo Input (Ai)
   - This port supports 2 pairs of line-level audio inputs (1/4" TS and RCA) 
   - When the 1/4" TS (jack) connectors are connected, the RCA connectors
     are disabled
 * Analog Stereo Output (Ao)
 * Digital Stereo Input (Di)
 * Digital Stereo Output (Do)
 * Midi In (Mi)
 * Midi Out (Mo)

The internal DAC/ADC has the following characteristics:
* sample depth of 16 or 24 bits
* sample rate from 8kHz to 96kHz
* Two ports can't use different sample depths at the same time. Moreover, the 
Audiophile USB documentation gives the following Warning: "Please exit any 
audio application running before switching between bit depths"

Due to the USB 1.1 bandwidth limitation, a limited number of interfaces can be 
activated at the same time depending on the audio mode selected:
 * 16-bit/48kHz ==> 4 channels in/4 channels out
   - Ai+Ao+Di+Do
 * 24-bit/48kHz ==> 4 channels in/2 channels out, 
                    or 2 channels in/4 channels out
   - Ai+Ao+Do or Ai+Di+Ao or Ai+Di+Do or Di+Ao+Do
 * 24-bit/96kHz ==> 2 channels in, or 2 channels out (half duplex only)
   - Ai or Ao or Di or Do

Important facts about the Digital interface:
--------------------------------------------
 * The Do port additionally supports surround-encoded AC-3 and DTS passthrough, 
though I haven't tested it under Linux
   - Note that in this setup only the Do interface can be enabled
 * Apart from recording an audio digital stream, enabling the Di port is a way 
to synchronize the device to an external sample clock
   - As a consequence, the Di port must be enable only if an active Digital 
source is connected
   - Enabling Di when no digital source is connected can result in a 
synchronization error (for instance sound played at an odd sample rate)


2 - Audiophile USB support in ALSA
==================================

2.1 - MIDI ports
----------------
The Audiophile USB MIDI ports will be automatically supported once the 
following modules have been loaded:
 * snd-usb-audio
 * snd-seq-midi

No additional setting is required.

2.2 - Audio ports
-----------------

Audio functions of the Audiophile USB device are handled by the snd-usb-audio 
module. This module can work in a default mode (without any device-specific 
parameter), or in an "advanced" mode with the device-specific parameter called 
"device_setup".

2.2.1 - Default Alsa driver mode

The default behavior of the snd-usb-audio driver is to parse the device 
capabilities at startup and enable all functions inside the device (including 
all ports at any supported sample rates and sample depths). This approach 
has the advantage to let the driver easily switch from sample rates/depths 
automatically according to the need of the application claiming the device.

In this case the Audiophile ports are mapped to alsa pcm devices in the 
following way (I suppose the device's index is 1):
 * hw:1,0 is Ao in playback and Di in capture
 * hw:1,1 is Do in playback and Ai in capture
 * hw:1,2 is Do in AC3/DTS passthrough mode

You must note as well that the device uses Big Endian byte encoding so that 
supported audio format are S16_BE  for 16-bit depth modes and S24_3BE for 
24-bits depth mode. One exception is the hw:1,2 port which is Little Endian 
compliant and thus uses S16_LE.

Examples:
 * playing a S24_3BE encoded raw file to the Ao port
   % aplay -D hw:1,0 -c2 -t raw -r48000 -fS24_3BE test.raw
 * recording a  S24_3BE encoded raw file from the Ai port
   % arecord -D hw:1,1 -c2  -t raw -r48000 -fS24_3BE test.raw
 * playing a S16_BE encoded raw file to the Do port
   % aplay -D hw:1,1 -c2 -t raw -r48000 -fS16_BE test.raw

If you're happy with the default Alsa driver setup and don't experience any 
issue with this mode, then you can skip the following chapter.

2.2.2 - Advanced module setup

Due to the hardware constraints described above, the device initialization made 
by the Alsa driver in default mode may result in a corrupted state of the 
device. For instance, a particularly annoying issue is that the sound captured 
from the Ai port sounds distorted (as if boosted with an excessive high volume 
gain).

For people having this problem, the snd-usb-audio module has a new module 
parameter called "device_setup".

2.2.2.1 - Initializing the working mode of the Audiophile USB

As far as the Audiophile USB device is concerned, this value let the user 
specify:
 * the sample depth
 * the sample rate
 * whether the Di port is used or not 

Here is a list of supported device_setup values for this device:
 * device_setup=0x00 (or omitted)
   - Alsa driver default mode
   - maintains backward compatibility with setups that do not use this 
     parameter by not introducing any change
   - results sometimes in corrupted sound as decribed earlier
 * device_setup=0x01
   - 16bits 48kHz mode with Di disabled
   - Ai,Ao,Do can be used at the same time
   - hw:1,0 is not available in capture mode
   - hw:1,2 is not available
 * device_setup=0x11
   - 16bits 48kHz mode with Di enabled
   - Ai,Ao,Di,Do can be used at the same time
   - hw:1,0 is available in capture mode
   - hw:1,2 is not available
 * device_setup=0x09
   - 24bits 48kHz mode with Di disabled
   - Ai,Ao,Do can be used at the same time
   - hw:1,0 is not available in capture mode
   - hw:1,2 is not available
 * device_setup=0x19
   - 24bits 48kHz mode with Di enabled
   - 3 ports from {Ai,Ao,Di,Do} can be used at the same time
   - hw:1,0 is available in capture mode and an active digital source must be 
     connected to Di
   - hw:1,2 is not available
 * device_setup=0x0D or 0x10
   - 24bits 96kHz mode
   - Di is enabled by default for this mode but does not need to be connected 
     to an active source
   - Only 1 port from {Ai,Ao,Di,Do} can be used at the same time
   - hw:1,0 is available in captured mode
   - hw:1,2 is not available
 * device_setup=0x03
   - 16bits 48kHz mode with only the Do port enabled 
   - AC3 with DTS passthru (not tested)
   - Caution with this setup the Do port is mapped to the pcm device hw:1,0

2.2.2.2 - Setting and switching configurations with the device_setup parameter

The parameter can be given:
 * By manually probing the device (as root):
   # modprobe -r snd-usb-audio
   # modprobe snd-usb-audio index=1 device_setup=0x09
 * Or while configuring the modules options in your modules configuration file
   - For Fedora distributions, edit the /etc/modprobe.conf file:
       alias snd-card-1 snd-usb-audio
       options snd-usb-audio index=1 device_setup=0x09

IMPORTANT NOTE WHEN SWITCHING CONFIGURATION:
-------------------------------------------
 * You may need to _first_ initialize the module with the correct device_setup 
   parameter and _only_after_ turn on the Audiophile USB device
 * This is especially true when switching the sample depth:
   - first turn off the device
   - de-register the snd-usb-audio module (modprobe -r)
   - change the device_setup parameter by changing the device_setup
     option in /etc/modprobe.conf 
   - turn on the device

2.2.2.3 - Audiophile USB's device_setup structure

If you want to understand the device_setup magic numbers for the Audiophile 
USB, you need some very basic understanding of binary computation. However, 
this is not required to use the parameter and you may skip this section.

The device_setup is one byte long and its structure is the following:

       +---+---+---+---+---+---+---+---+
       | b7| b6| b5| b4| b3| b2| b1| b0|
       +---+---+---+---+---+---+---+---+
       | 0 | 0 | 0 | Di|24B|96K|DTS|SET|
       +---+---+---+---+---+---+---+---+

Where:
 * b0 is the "SET" bit
   - it MUST be set if device_setup is initialized 
 * b1 is the "DTS" bit
   - it is set only for Digital output with DTS/AC3
   - this setup is not tested
 * b2 is the Rate selection flag
   - When set to "1" the rate range is 48.1-96kHz
   - Otherwise the sample rate range is 8-48kHz
 * b3 is the bit depth selection flag
   - When set to "1" samples are 24bits long
   - Otherwise they are 16bits long
   - Note that b2 implies b3 as the 96kHz mode is only supported for 24 bits 
     samples
 * b4 is the Digital input flag
   - When set to "1" the device assumes that an active digital source is 
     connected 
   - You shouldn't enable Di if no source is seen on the port (this leads to 
     synchronization issues)
   - b4 is implied by b2 (since only one port is enabled at a time no synch 
     error can occur) 
 * b5 to b7 are reserved for future uses, and must be set to "0"
   - might become Ao, Do, Ai, for b7, b6, b4 respectively

Caution:
 * there is no check on the value you will give to device_setup
   - for instance choosing 0x05 (16bits 96kHz) will fail back to 0x09 since 
     b2 implies b3. But _there_will_be_no_warning_ in /var/log/messages
 * Hardware constraints due to the USB bus limitation aren't checked
   - choosing b2 will prepare all interfaces for 24bits/96kHz but you'll
     only be able to use one at the same time

2.2.3 -  USB implementation details for this device

You may safely skip this section if you're not interested in driver 
development.

This section describes some internal aspects of the device and summarize the 
data I got by usb-snooping the windows and Linux drivers.

The M-Audio Audiophile USB has 7 USB Interfaces:
a "USB interface":
 * USB Interface nb.0
 * USB Interface nb.1
   - Audio Control function
 * USB Interface nb.2
   - Analog Output
 * USB Interface nb.3
   - Digital Output
 * USB Interface nb.4
   - Analog Input
 * USB Interface nb.5
   - Digital Input
 * USB Interface nb.6
   - MIDI interface compliant with the MIDIMAN quirk 

Each interface has 5 altsettings (AltSet 1,2,3,4,5) except:
 * Interface 3 (Digital Out) has an extra Alset nb.6 
 * Interface 5 (Digital In) does not have Alset nb.3 and 5 

Here is a short description of the AltSettings capabilities:
 * AltSettings 1 corresponds to
  - 24-bit depth, 48.1-96kHz sample mode
  - Adaptive playback (Ao and Do), Synch capture (Ai), or Asynch capture (Di)
 * AltSettings 2 corresponds to
  - 24-bit depth, 8-48kHz sample mode
  - Asynch capture and playback  (Ao,Ai,Do,Di)
 * AltSettings 3 corresponds to
  - 24-bit depth, 8-48kHz sample mode
  - Synch capture (Ai) and Adaptive playback (Ao,Do)
 * AltSettings 4 corresponds to
  - 16-bit depth, 8-48kHz sample mode
  - Asynch capture and playback  (Ao,Ai,Do,Di)
 * AltSettings 5 corresponds to
  - 16-bit depth, 8-48kHz sample mode
  - Synch capture (Ai) and Adaptive playback (Ao,Do)
 * AltSettings 6 corresponds to
  - 16-bit depth, 8-48kHz sample mode
  - Synch playback (Do), audio format type III IEC1937_AC-3

In order to ensure a correct initialization of the device, the driver 
_must_know_ how the device will be used:
 * if DTS is chosen, only Interface 2 with AltSet nb.6 must be
   registered
 * if 96KHz only AltSets nb.1 of each interface must be selected
 * if samples are using 24bits/48KHz then AltSet 2 must me used if
   Digital input is connected, and only AltSet nb.3 if Digital input
   is not connected
 * if samples are using 16bits/48KHz then AltSet 4 must me used if
   Digital input is connected, and only AltSet nb.5 if Digital input
   is not connected

When device_setup is given as a parameter to the snd-usb-audio module, the 
parse_audio_endpoints function uses a quirk called 
"audiophile_skip_setting_quirk" in order to prevent AltSettings not 
corresponding to device_setup from being registered in the driver.

3 - Audiophile USB and Jack support
===================================

This section deals with support of the Audiophile USB device in Jack.
The main issue regarding this support is that the device is Big Endian 
compliant.

3.1 - Using the plug alsa plugin
--------------------------------

Jack doesn't directly support big endian devices. Thus, one way to have support 
for this device with Alsa is to use the Alsa "plug" converter.

For instance here is one way to run Jack with 2 playback channels on Ao and 2 
capture channels from Ai:
  % jackd -R -dalsa -dplughw:1 -r48000 -p256 -n2 -D -Cplughw:1,1


However you may see the following warning message:
"You appear to be using the ALSA software "plug" layer, probably a result of 
using the "default" ALSA device. This is less efficient than it could be. 
Consider using a hardware device instead rather than using the plug layer."

3.2 - Patching alsa to use direct pcm device
--------------------------------------------
A patch for Jack by Andreas Steinmetz adds support for Big Endian devices. 
However it has not been included in the CVS tree.

You can find it at the following URL:
http://sourceforge.net/tracker/index.php?func=detail&aid=1289682&group_id=39687&
atid=425939

After having applied the patch you can run jackd with the following command 
line:
  % jackd -R -dalsa -Phw:1,0 -r48000 -p128 -n2 -D -Chw:1,1

3.2 - Getting 2 input and/or output interfaces in Jack
------------------------------------------------------

As you can see, starting the Jack server this way will only enable 1 stereo
input (Di or Ai) and 1 stereo output (Ao or Do).

This is due to the following restrictions:
* Jack can only open one capture device and one playback device at a time
* The Audiophile USB is seen as 2 (or three) Alsa devices: hw:1,0, hw:1,1
  (and optionally hw:1,2)
If you want to get Ai+Di and/or Ao+Do support with Jack, you would need to
combine the Alsa devices into one logical "complex" device.

If you want to give it a try, I recommend reading the information from
this page: http://www.sound-man.co.uk/linuxaudio/ice1712multi.html
It is related to another device (ice1712) but can be adapted to suit
the Audiophile USB.

Enabling multiple Audiophile USB interfaces for Jackd will certainly require:
* patching Jack with the previously mentioned "Big Endian" patch
* patching Jackd with the MMAP_COMPLEX patch (see the ice1712 page)
* patching the alsa-lib/src/pcm/pcm_multi.c file (see the ice1712 page)
* define a multi device (combination of hw:1,0 and hw:1,1) in your .asoundrc
  file 
* start jackd with this device

I had no success in testing this for now, but this may be due to my OS
configuration. If you have any success with this kind of setup, please
drop me an email.
