码迷,mamicode.com
首页 > 其他好文 > 详细

ALSA声音编程

时间:2014-06-26 00:47:22      阅读:661      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   ext   strong   数据   

 

1. ALSA设备驱动将ALSA设备描述分为四层,从上到下为:


 

default

default:0

plughw:0,0

hw:0,0

  不同的层次,对设备的控制权限不同,比如hardware parameters 的period/buffer size 需要在plughw:0,0 和 hw:0,0 这两层才会作用。

  

2. Hardware Parameters && Software Parameters


 

  对alsa-core设置,叫做Software Parameters,而对audio interface的设置叫做Hardware Parameters。

 

3. XRUN


 

  xrun指的是,声卡period一到,引发一个中断,告诉alsa驱动,要填入数据,或读走数据,但是,问题在于alsa的读取和写入操作必须用户调用 writei和readi才会发生的,它不会去缓存数据。如果上层没有用户调用writei和readi,那么就会产生 overrun(录制时,数据都满了,还没被alsa驱动读走)和underrun(需要数据来播放,alsa驱动却不写入数据),统称为xrun。

这个东西,需要用一些函数来设置,比如snd_pcm_sw_params_set_silence_threshold(),是针对playback 的,就是设置当xxx的情况下,就用silence来写入hardware buffer。至于xxx情况,以及写入多少silence,我都不是很清楚,还有,比如xrun到什么情况下,可以停止这个设备等等函数。一般情况下用 alsa驱动的默认的xrun处理策略。

 

if(err == -EPIPE){

	snd_pcm_prepare(handle);
	err = snd_pcm_readi(handle, buf, samples);

	if(err < 0)
		printf("alsa read the pcm data error %s\n", snd_strerror(err));
}

 

ALSA声音编程,布布扣,bubuko.com

ALSA声音编程

标签:style   class   blog   ext   strong   数据   

原文地址:http://www.cnblogs.com/xw022/p/3804184.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!