alsa非阻塞模式有噪声
最近用alsa播放声音,阻塞模式很好用,但是会阻塞线程。所以想试试非阻塞模式,一试之下,发现很多问题,场景如下:
循环读取wav文件播放,每次读取352的采样(352×4Bytes)。
如果alsa的frame设置大于352, 那么播放很正常,但是延时很大。
如果frame设置小于每次写的数据,哪怕我循环再快,也会有缺数据发出的卡达声。
不知道大家有没有这么玩过。
简易代码如下:
if (af == NULL)
af=fopen("test.wav", "rb");
if (af != NULL)
fread(abuf, 1, 352*4, af);
while(config.output->play(abuf, 352)<0); (这个函数直接调用snd_pcm_writei)