[alsa-devel] Problems with snd_pcm_writei() function

Douglas Lopes Pereira douglaslopespereira at gmail.com
Tue Oct 27 18:07:00 CET 2009

Hi Clemens,

thanks for your replay. Sorry about the delay, I was taking care of
high priority tasks.

Back to my problem, I'm convinced that I'm passing the correct number
of frames. Do I have to change the buffer if discarding non complete
buffers (<> 160bytes)?

I'm not sure how timing is managed since my function is called by a
third part application but it looks like my code is invoked in a "for"
loop. Next is part of the code which calls my function:

			for (cur = f, next = AST_LIST_NEXT(cur, frame_list);
			     cur = next, next = cur ? AST_LIST_NEXT(cur, frame_list) : NULL) {
				if (!skip) {
					if ((res = chan->tech->write(chan, cur)) < 0) {
						chan->_softhangup |= AST_SOFTHANGUP_DEV;
						skip = 1;
					} else if (next) {
						/* don't do this for the last frame in the list,
						   as the code outside the loop will do it once
						chan->fout = FRAMECOUNT_INC(chan->fout);

I sent a copy of my code to pastbin. It is available at:

I would be glad if you take a look at it.

Thanks for your time.

On Fri, Oct 23, 2009 at 5:39 AM, Clemens Ladisch <clemens at ladisch.de> wrote:
> Douglas Lopes Pereira wrote:
>> I'm splitting my audio data into 160 bytes buffers but when buffer
>> with different size is passed to that function I hear a noise (like
>> 'Krrr') on my audio device.
> Do you actually pass the correct number of frames?
> How do you manage the timing of the snd_pcm_writei() calls?
> Best regards,
> Clemens

More information about the Alsa-devel mailing list