首先问题现象如题,具体的情况是我在一个线程中先catpure然后playback,结果在playback相关函数调用中发现,snd_pcm_writei会持续性的发生underrun现象(返回值为-32)。正常的人声是可以听到的,就是伴随着”滋滋“声。
首先在我的程序中针对cature和playback设备的参数配置都是参照arecord(aplay)源码进行编写的。所以参数应该不会有什么问题。
接着我试验了”arecord 参数 | aplay 参数“ 这个测试方法,发现它是没有几乎没有underrun现象的(或偶尔一个),但是这种方式是进程间通讯,使用到了管道符号”|“,我的程序没有进程间通讯,只有开线程。
请问了,有谁知道怎样在一个程序中设计capture,playback通讯吗,如果可以的话,给一些代码参考啊

解决方案 »

  1.   

    问题解决,调用snd_pcm_hw_params_set_period_size_near和snd_pcm_hw_params_set_buffer_size_near时,传递合适的参数就行
      

  2.   

    试了后,发现其实一个线程一边capture一边playback也能解决underrun问题。这个还是得用穷举法,不停的地试alsa的参数,才有解决的可能啊