At Wed, 11 Aug 2010 09:04:32 +0100 (BST), Mark Hills wrote:
Hi, does anybody have any thoughts on my email below? The rate conversion code looks stable and untouched for a while.
I guess it's a missing support of 3-byte formats in 16bit conversion, so not specific to rate plugin.
Adding the support shouldn't be too hard, since it's already found in 32bit conversion.
thanks,
Takashi
Thanks
On Sun, 1 Aug 2010, Mark Hills wrote:
I have a device (snd-usb-caiaq) whose native sample format is S24_3BE. When sample rate conversion is used, the audio becomes near silent, distorted, and only in the left channel.
It is reproducable with aplay (see example below). Recording is not affected. Playback is correct if only format conversion is used.
It looks something is causing the incorrect put function to be used by the rate conversion.
I traced it to linear_expand() and others, alsa-lib-src/pcm_rate_linear.c.
Forcing the function to put S16 format into the destination buffer allows, suprisingly, the sound to be heard correctly and at full volume from both aplay and xwax:
if (rate->put_idx == 10) rate->put_idx = 6
I suspected that linear_init() is looking in the wrong place to choose the attributes for the rate conversion. After some time spent I cannot see it.
But is there any reason that the output buffer for the rate conversion would not be in S24_3BE? And for the rate conversion to be misinformed?
$ uname -s -r -v -p -i -m Linux 2.6.34.1-mh #83 SMP PREEMPT Wed Jul 21 23:25:33 BST 2010 i686 pentium4 i386
$ alsacap Card 0, ID `Audio8DJ', name `Audio 8 DJ' Device 0, ID `Audio 8 DJ', name `Audio 8 DJ', 4 subdevices (4 available) 2 channels, sampling rate 44100..96000 Hz Sample formats: S24_3BE Subdevice 0, name `subdevice #0' Subdevice 1, name `subdevice #1' Subdevice 2, name `subdevice #2' Subdevice 3, name `subdevice #3'
$ aplay -v -D plughw:Audio8DJ,0,0 halcyon-24000.wav Playing WAVE 'halcyon-24000.wav' : Signed 16 bit Little Endian, Rate 24000 Hz, Stereo Plug PCM: Rate conversion PCM (48000, sformat=S24_3BE) Converter: linear-interpolation Protocol version: 10002 Its setup is: stream : PLAYBACK access : RW_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 24000 exact rate : 24000 (24000/1) msbits : 16 buffer_size : 10922 period_size : 2730 period_time : 113770 tstamp_mode : NONE period_step : 1 avail_min : 2730 period_event : 0 start_threshold : 10922 stop_threshold : 10922 silence_threshold: 0 silence_size : 0 boundary : 715784192 Slave: Hardware PCM card 0 'Audio 8 DJ' device 0 subdevice 0 Its setup is: stream : PLAYBACK access : MMAP_INTERLEAVED format : S24_3BE subformat : STD channels : 2 rate : 48000 exact rate : 48000 (48000/1) msbits : 24 buffer_size : 21845 period_size : 5461 period_time : 113770 tstamp_mode : NONE period_step : 1 avail_min : 5461 period_event : 0 start_threshold : 21844 stop_threshold : 21845 silence_threshold: 0 silence_size : 0 boundary : 1431633920 appl_ptr : 0 hw_ptr : 0
-- Mark