On 06/21/2011 03:15 PM, alsa-user-request@xxxxxxxxxxxxxxxxxxxxx wrote: > Date: Tue, 21 Jun 2011 16:48:49 +0400 > From: Vladimir Mosgalin<mosgalin@xxxxxxxxxxxxxxx> > Subject: Re: plughw versus hw > To: alsa-user@xxxxxxxxxxxxxxxxxxxxx > Message-ID:<20110621124848.GA4531@xxxxxxxxxxxxxxx> > Content-Type: text/plain; charset=us-ascii > > 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. Ok. >> 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. Ok, I have understood that now. > 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. Indeed, it works fine: I can now play it with hw. >> 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. The contents of /proc/asound/card0/pcm1p/sub0/hw_params looks very similar to the one displayed by aplay -v. I assume that aplay gets its data from /proc... > 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. I don't know how to write a .asoundrc file. The syntax to use is available but it is rather complex and I did not find anything about the associated semantics. I beleive I can play music without this file... > 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. I don't know what exactly do pulseaudio and I don't like using things the operation of which I do not understand. Also, I read a lot of negative things about pulseaudio. So I've deactivated it. Thanks again for your help. Pierre ------------------------------------------------------------------------------ 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@xxxxxxxxxxxxxxxxxxxxx https://lists.sourceforge.net/lists/listinfo/alsa-user