On Fri, 27 Jul 2007 15:38:28 -0400 "Lee Revell" rlrevell@joe-job.com wrote:
On 7/27/07, stan stanl@cox.net wrote:
On Fri, 27 Jul 2007 11:59:53 -0400 "Lee Revell" rlrevell@joe-job.com wrote:
On 7/27/07, Alan Horstmann gineera@aspect135.co.uk wrote:
Could you give pointers as to how to modify Alsa configuration so that rate conversion can never happen, as I would prefer to have an error accessing the sound card rather than unknown conversion, which in my use should never be neccesary anyway.
Simply open the hw device rather than the default, dmix, or plughw device.
Lee
Lee,
Are you saying that plughw *does* do hidden conversion? I thought its definition was equivalent to
newplug { type plug slave { pcm "hw:0,0" } }
It's not "hidden" conversion, by using the plughw device you are explicitly asking ALSA to convert the PCM stream to a format the hardware supports.
Lee
Thanks Lee. I didn't understand that. Does that mean that I can't use a call like
err = snd_pcm_hw_params_set_format (alsa_dev, hw_params, SND_PCM_FORMAT_FLOAT64);
to a device opened to the hw plug if the native format is S32_LE? I'm guessing that I have to know (or read) the internal format of the card and send it data only in that format. I end up doing the conversion instead of alsa unless I happen to hit a card that has the same internal representation as I'm using.
And will plughw skip rate conversion if it is a rate the hardware natively supports? So I could send a buffer of doubles to alsa and it would convert it to the cards native internal representation, but skip the rate conversion if it is a hardware supported one.
I really want to avoid rate resampling if I can, while format conversion has to occur somewhere in order to match the hardware in most cases. I assume that any format conversion alsa does is at least as good as one I would do myself. While the rate resampling can introduce throughput issues and inaccuracies in the sound stream.