> 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? > ---------------------------------------------------------- I use snd_pcm_avail_update( ) to show the number of frames that can write into the pcm before using snd_pcm_writei( ). I found that sometimes snd_pcm_avail_update( ) will return more than buffer size. EX. buffer size = 10240, sometimes snd_pcm_avail_update( ) 10274 > 10240. Dose this cause XRUN? How to improve it ? _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel