diff options
author | Takashi Iwai <tiwai@suse.de> | 2016-11-10 16:52:57 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2016-11-10 22:33:24 +0100 |
commit | 4e47556e345c8c0bd86911a99f28299e3d962140 (patch) | |
tree | 9a60678b2588ce3b85f90e311721633a36a734a4 /Documentation/sound/alsa | |
parent | 312c01b1736e81fe0d23217fe537d415785256d2 (diff) | |
download | linux-4e47556e345c8c0bd86911a99f28299e3d962140.tar.bz2 |
ALSA: doc: ReSTize Audiophile-USB.txt
Another simple conversion from a plain text file.
Put to cards directory.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'Documentation/sound/alsa')
-rw-r--r-- | Documentation/sound/alsa/Audiophile-Usb.txt | 442 |
1 files changed, 0 insertions, 442 deletions
diff --git a/Documentation/sound/alsa/Audiophile-Usb.txt b/Documentation/sound/alsa/Audiophile-Usb.txt deleted file mode 100644 index e7a5ed4dcae8..000000000000 --- a/Documentation/sound/alsa/Audiophile-Usb.txt +++ /dev/null @@ -1,442 +0,0 @@ - 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 - (typically a .conf file in /etc/modprobe.d/ directory: - 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.d/*.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. |