提交 cac19c3b 编写于 作者: T Thibault Le Meur 提交者: Jaroslav Kysela

[ALSA] usb-audio - Fix AC3 with M-Audio Audiophile USB

Fixed AC3 interface in device_setup=0x00 mode thanks to Hakan
Lennestal and updated documentation
Signed-off-by: NThibault Le Meur <Thibault.LeMeur@supelec.fr>
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
Signed-off-by: NJaroslav Kysela <perex@suse.cz>
上级 1b290a51
Guide to using M-Audio Audiophile USB with ALSA and Jack v1.4 Guide to using M-Audio Audiophile USB with ALSA and Jack v1.5
======================================================== ========================================================
Thibault Le Meur <Thibault.LeMeur@supelec.fr> Thibault Le Meur <Thibault.LeMeur@supelec.fr>
...@@ -12,6 +12,8 @@ History ...@@ -12,6 +12,8 @@ History
- Added Low Endianness nature of 16bits-modes - Added Low Endianness nature of 16bits-modes
found by Hakan Lennestal <Hakan.Lennestal@brfsodrahamn.se> found by Hakan Lennestal <Hakan.Lennestal@brfsodrahamn.se>
- Modifying document structure - Modifying document structure
* v1.5 - Thibault Le Meur (2007-07-12)
- Added AC3/DTS passthru info
1 - Audiophile USB Specs and correct usage 1 - Audiophile USB Specs and correct usage
...@@ -105,9 +107,12 @@ way (I suppose the device's index is 1): ...@@ -105,9 +107,12 @@ way (I suppose the device's index is 1):
In this mode, the device uses Big Endian byte-encoding so that 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 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 reported 24-bits depth mode.
to be Little Endian compliant (supposedly supporting S16_LE) but processes
in fact only S16_BE streams. 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: Examples:
* playing a S24_3BE encoded raw file to the Ao port * playing a S24_3BE encoded raw file to the Ao port
...@@ -116,6 +121,8 @@ Examples: ...@@ -116,6 +121,8 @@ Examples:
% arecord -D hw:1,1 -c2 -t raw -r48000 -fS24_3BE test.raw % arecord -D hw:1,1 -c2 -t raw -r48000 -fS24_3BE test.raw
* playing a S16_BE encoded raw file to the Do port * playing a S16_BE encoded raw file to the Do port
% aplay -D hw:1,1 -c2 -t raw -r48000 -fS16_BE test.raw % 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 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. issue with this mode, then you can skip the following chapter.
...@@ -205,13 +212,16 @@ mode" above for an aplay command example) ...@@ -205,13 +212,16 @@ mode" above for an aplay command example)
3.2.1.3 - AC3 w/ DTS passthru mode 3.2.1.3 - AC3 w/ DTS passthru mode
This mode is untested, I have no AC3 compliant device to test it. I uses: Thanks to Hakan Lennestal, I now have a report saying that this mode works.
* device_setup=0x03 * device_setup=0x03
- 16bits 48kHz mode with only the Do port enabled - 16bits 48kHz mode with only the Do port enabled
- AC3 with DTS passthru (not tested) - AC3 with DTS passthru
- Caution with this setup the Do port is mapped to the pcm device hw:1,0 - 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 3.2.2 - How to use the device_setup parameter
---------------------------------------------- ----------------------------------------------
......
...@@ -2532,7 +2532,18 @@ static int parse_audio_format_i(struct snd_usb_audio *chip, struct audioformat * ...@@ -2532,7 +2532,18 @@ static int parse_audio_format_i(struct snd_usb_audio *chip, struct audioformat *
* but we give normal PCM format to get the existing * but we give normal PCM format to get the existing
* apps working... * apps working...
*/ */
pcm_format = SNDRV_PCM_FORMAT_S16_LE; switch (chip->usb_id) {
case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
if (device_setup[chip->index] == 0x00 &&
fp->altsetting == 6)
pcm_format = SNDRV_PCM_FORMAT_S16_BE;
else
pcm_format = SNDRV_PCM_FORMAT_S16_LE;
break;
default:
pcm_format = SNDRV_PCM_FORMAT_S16_LE;
}
} else { } else {
pcm_format = parse_audio_format_i_type(chip, fp, format, fmt); pcm_format = parse_audio_format_i_type(chip, fp, format, fmt);
if (pcm_format < 0) if (pcm_format < 0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册