[alsa-devel] XRUN happens too often.

Rong-Jhe r93922118 at ntu.edu.tw
Tue Apr 8 12:15:05 CEST 2008


I use "default" pcm and open it in block mode.
Then, I set the this pcm to perform 16-bit, two channels, and 44100 bps 
sampling rate audio data.
The number of periods per buffer is 10.

The follows are the parameters that I read from the pcm.
sampling rate = 44100 bps
period time = 21333 us
period size = 940 frames
buffer time = 213330 us
buffer size = 9408 frames

A sample in 16-bit, two channels is 4 bytes.
I allocate a audio data of 9408x4=37632 bytes.

audio_data=malloc(buffer_size*4);

This audio_data buffer will receive audio data from the network.
If this buffer is full, I use snd_pcm_writei( ) to put the buffer into the pcm.

snd_pcm_sframes_t frames;
snd_pcm_t *handle;

while((frame=snd_pcm_writei(handle, audio_data, buffer_size))<0)
{
   if(frames==-EPIPE)
      snd_pcm_prepare(handle);
   else
      printf("snd_pcm_writei error %d\n", frames);
}

The codes states that I put the entire buffer into the pcm at each time. The 
pcm use 10 periods to perform this buffer. The program can work normally.

If the sampling rate is changed, the program will encounter XRUN frequently.

The follows are the parameters that I read from the pcm after setting sampling 
rate to 48000.
sampling rate = 48000 bps
period time = 21333 us
period size = 1024 frames
buffer time = 213330 us
buffer size = 10240 frames
audio_data=malloc(buffer_size*4); //10240x4=40960

I also put the entire buffer into the pcm at each time, but snd_pcm_writei( )
will return -PIPE frequently.

What is the problem?









More information about the Alsa-devel mailing list