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

	    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.

History
=======
* v1.4 - Thibault Le Meur (2007-07-11)
 - Added Low Endianness nature of 16bits-modes
   found by Hakan Lennestal <Hakan.Lennestal@brfsodrahamn.se>
 - Modifying document structure
* v1.5 - Thibault Le Meur (2007-07-12)
 - Added AC3/DTS passthru info


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 interfaces 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 MIDI support in ALSA
=======================================

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.


3 - Audiophile USB Audio support in ALSA
========================================

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".

3.1 - Default Alsa driver mode
------------------------------

The default behavior of the snd-usb-audio driver is to list the device 
capabilities at startup and activate the required mode when required 
by the applications: for instance if the user is recording in a 
24bit-depth-mode and immediately after wants to switch to a 16bit-depth mode,
the snd-usb-audio module will reconfigure the device on the fly.

This approach has the advantage to let the driver automatically switch from sample 
rates/depths automatically according to the user's needs. However, those who 
are using the device under windows know that this is not how the device is meant to
work: under windows applications must be closed before using the m-audio control
panel to switch the device working mode. Thus as we'll see in next section, this 
Default Alsa driver mode can lead to device misconfigurations.

Let's get back to the Default Alsa driver mode for now.  In this case the 
Audiophile interfaces 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

In this mode, 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 was reported to be Little Endian 
compliant (supposedly supporting S16_LE) but processes in fact only S16_BE streams.
This has been fixed in kernel 2.6.23 and above and now the hw:1,2 interface 
is reported to be big endian in this default driver mode.

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
 * playing an ac3 sample file to the Do port
   % aplay -D hw:1,2 --channels=6 ac3_S16_BE_encoded_file.raw

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

3.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 interface 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" (this parameter was introduced in kernel
release 2.6.17)

3.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 

When initialized with "device_setup=0x00", the snd-usb-audio module has
the same behaviour as when the parameter is omitted (see paragraph "Default 
Alsa driver mode" above)

Others modes are described in the following subsections.

3.2.1.1 - 16-bit modes

The two supported modes are:

 * 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

In this modes the device operates only at 16bits-modes. Before kernel 2.6.23,
the devices where reported to be Big-Endian when in fact they were Little-Endian
so that playing a file was a matter of using:
   % aplay -D hw:1,1 -c2 -t raw -r48000 -fS16_BE test_S16_LE.raw
where "test_S16_LE.raw" was in fact a little-endian sample file.

Thanks to Hakan Lennestal (who discovered the Little-Endiannes of the device in
these modes) a fix has been committed (expected in kernel 2.6.23) and
Alsa now reports Little-Endian interfaces. Thus playing a file now is as simple as
using:
   % aplay -D hw:1,1 -c2 -t raw -r48000 -fS16_LE test_S16_LE.raw

3.2.1.2 - 24-bit modes

The three supported modes are:

 * 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

In these modes the device is only Big-Endian compliant (see "Default Alsa driver 
mode" above for an aplay command example)

3.2.1.3 - AC3 w/ DTS passthru mode

Thanks to Hakan Lennestal, I now have a report saying that this mode works.

 * device_setup=0x03
   - 16bits 48kHz mode with only the Do port enabled 
   - AC3 with DTS passthru
   - Caution with this setup the Do port is mapped to the pcm device hw:1,0

The command line used to playback the AC3/DTS encoded .wav-files in this mode:
   % aplay -D hw:1,0 --channels=6 ac3_S16_LE_encoded_file.raw

3.2.2 - How to use 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

CAUTION when initializing the device
-------------------------------------

 * Correct initialization on the device requires that device_setup is given to
   the module BEFORE the device is turned on. So, if you use the "manual probing"
   method described above, take care to power-on the device AFTER this initialization.

 * Failing to respect this will lead to a misconfiguration of the device. In this case
   turn off the device, unprobe the snd-usb-audio module, then probe it again with
   correct device_setup parameter and then (and only then) turn on the device again.

 * If you've correctly initialized the device in a valid mode and then want to switch
   to  another mode (possibly with another sample-depth), please use also the following 
   procedure:
   - 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
 * A workaround for this last issue has been applied to kernel 2.6.23, but it may not
   be enough to ensure the 'stability' of the device initialization.

3.2.3 - Technical details for hackers
-------------------------------------
This section is for hackers, wanting to understand details about the device
internals and how Alsa supports it.

3.2.3.1 - 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

3.2.3.2 -  USB implementation details for this device

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

This section describes some internal aspects of the device and summarizes 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.

4 - Audiophile USB and Jack support
===================================

This section deals with support of the Audiophile USB device in Jack.

There are 2 main potential issues when using Jackd with the device:
* support for Big-Endian devices in 24-bit modes
* support for 4-in / 4-out channels

4.1 - Direct support in Jackd
-----------------------------

Jack supports big endian devices only in recent versions (thanks to
Andreas Steinmetz for his first big-endian patch). I can't remember 
exactly when this support was released into jackd, let's just say that
with jackd version 0.103.0 it's almost ok (just a small bug is affecting 
16bits Big-Endian devices, but since you've read carefully the above
paragraphs, you're now using kernel >= 2.6.23 and your 16bits devices 
are now Little Endians ;-) ).

You can run jackd with the following command for playback with Ao and
record with Ai:
  % jackd -R -dalsa -Phw:1,0 -r48000 -p128 -n2 -D -Chw:1,1

4.2 - Using Alsa plughw
-----------------------
If you don't have a recent Jackd installed, you can downgrade to using
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."

4.3 - 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:
* Making sure your Jackd version has the MMAP_COMPLEX patch (see the ice1712 page)
* (maybe) 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, if you have any success with this kind 
of setup, please drop me an email.
