[alsa-devel] pcm_rate API question
Clemens Ladisch
clemens at ladisch.de
Mon Sep 30 10:59:35 CEST 2013
Rob Sykes wrote:
>> Typically there is some buffering/delay within a resampler -- how
>> does the pcm_rate API allow for this?
The API itself does not allow for this. Your code must generate
dst_frames samples.
At startup, prefix the output with zero samples. For example,
rate_samplerate.c in the alsa-plugins package does this:
src_short_to_float_array(src, rate->src_buf, src_frames * rate->channels);
src_process(rate->state, &rate->data);
if (rate->data.output_frames_gen < dst_frames)
ofs = dst_frames - rate->data.output_frames_gen;
else
ofs = 0;
src_float_to_short_array(rate->dst_buf, dst + ofs * rate->channels,
rate->data.output_frames_gen * rate->channels);
> If, as you say above, the buffer sizes
the period sizes
> define the conversion ratio, then this seems to imply that alsa is
> unable to perform accurate rate conversion for one of the most common
> uses!
The conversion indeed is not accurate, unless you are using a period
size of an integer multiple of 441 frames. In your example, the
application probably used a buffer of 0.5 s and four periods per buffer;
it should either double the buffer size or halve the number of periods.
Regards,
Clemens
More information about the Alsa-devel
mailing list