Hi Pierre Habraken!

 On 2011.06.21 at 13:55:12 +0200, Pierre Habraken wrote next:

> Hello Vladimir,
> 
> Thank you for your reply.
> 
> I just bought an Asus Xonar DX sound card, for sending 24bits/96KHz
> stereo flac files to an external DAC.
> I am using Alsa 1.0.21 on a PC running Ubuntu 10.04 with Linux
> kernel 2.6.32-32.
> Running aplay, I can't use hw for reading 24/96 files:
> 
> $ aplay -D hw:0,1 Prelude.wav
> Playing WAVE 'Prelude.wav' : Signed 24 bit Little Endian in 3bytes,
> Rate 96000 Hz, Stereo
> aplay: set_params:990: Sample format non available
> Available formats:
> - S16_LE
> - S32_LE
> $

Obviously, your card doesn't support 24 bit but supports 32-bit S32_LE
instead.

> Adding the switch -f S32_LE does not help:
> 
> $ aplay -D hw:0,1 -f S32_LE Prelude.wav
> Warning: format is changed to S24_3LE
> Playing WAVE 'Prelude.wav' : Signed 24 bit Little Endian in 3bytes,
> Rate 96000 Hz, Stereo
> aplay: set_params:990: Sample format non available
> Available formats:
> - S16_LE
> - S32_LE
> $

Yes. Wrong format. You have to send *real* 32-bit stream to playback,
S32_LE. This is rather inconvenient and it's a reason why you shouldn't
use hw device.

What aplay did here isn't 24 bit to 32 bit conversion; it simply changed
form of 24 bit samples to "S24_3LE". S24_3LE is 32-bit format for 24-bit
samples, with 8 bit of padding. So it's very easy to convert between
S24_3LE and S24_LE, you just add or remove padding - which aplay did for
you here. While S24_3LE samples are 32-bit, they aren't what your card
likes, it needs true S32_LE.

Try converting stream to 32-bit before feeding it to aplay:
sox Prelude.wav -b 32 output.wav

this should generate true S32_LE stream, try playing it.


> If I use plughw instead of hw, it works fine:
> 
> $ aplay -D plughw:0,1 Prelude.wav
> Playing WAVE 'Prelude.wav' : Signed 24 bit Little Endian in 3bytes,
> Rate 96000 Hz, Stereo
> ^CAborted by signal Interrupt...
> $
> 
> Does it mean that the 24bits stream has to be converted to 16bits
> before being sent to the device and then to the DAC ?

It could mean that, or (more likely) that it's converting it to 32-bit
S32_LE and then sends (probably downconverting to 24-bit in process..)
it to DAC.

Easy to check, do something like
$ cat /proc/asound/card0/pcm1p/sub0/hw_params 

during playback. Here card 0 is first audio card and pcm1p is second
playback stream - numbers can be different from you. For example, I get

access: MMAP_INTERLEAVED
format: S24_3BE
subformat: STD
channels: 2
rate: 96000 (96000/1)
period_size: 960
buffer_size: 7680

which means that playback works in S24_3BE (another strange format,
32-bit format with padded 24-bit samples, big endian). Obviously my
stream wasn't like that, and no sane program would've used that for
output; therefore plughw device is only that works.


If you want to ensure that higher sample rate and format are used, you
can write manual conversion in .asoundrc. Instead of using hw or plughw,
you should use "default" device, and you can add conversion to S32_LE to
that default device section - and redirect to plughw after conversion.
Or you can add both S32_LE and sample rate conversion and redirect to hw
device even. Unfortunately, I can't provide you help with writing
asoundrc.


Now, easier way is to use some sound server, like jack (for professional
apps) or pulseaudio (for normal desktop). I use later, and have settings
to ensure that it converts all streams to 96khz S24_3BE, so DAC accepts
maximum quality streams all the time. I don't have to worry about what
applications send at all, because pulse ensures that audio device is
used only in this mode.



-- 

Vladimir

------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
Alsa-user mailing list
Alsa-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-user

Reply via email to