六、ALSA lib库接口

一、ALSA lib库介绍

使用 ALSA 的 lib 库中的 snd_pcm_xxx 等标准接口函数,操作 /dev/snd/pcmC0D0c或pcmC0D0p 等录放音设备节点,相当于在 OSS 框架下通过 ioctl 设置不同参数去操作 /dev/dsp 设备

ALSA功能丰富,可以设置音频参数,DMA buffer 大小、分块数量,buffer 阀值等

二、ALSA lib库接口

1.1 snd_pcm_open

函数原型:snd_pcm_open(&handle, pcm_name, stream, open_mode);
函数功能:打开pcm设备
参数含义:

	&handle:static snd_pcm_t *handle 结构体指针
	pcm_name:打开的pcm设备节点,可以是“default,也可以是“hw:0,0”
	stream:对应放音与录音操作,SND_PCM_STREAM_PLAYBACK,SND_PCM_STREAM_CAPTURE
	open_mode:一些相关功能设置,比如:是否阻塞,是否重采样,是否软件调音量等

1.2 snd_pcm_info

函数原型:snd_pcm_info(handle, info);
函数功能:用来获取录放音、声卡与设备等相关信息,不是必须的接口
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	info:设备信息

1.3 snd_pcm_writei

函数原型:snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size);
函数功能:播放交错格式的音频数据
参数含义:

	pcm:pcm设备
	buffer:数据地址
	size:数据大小

1.4 snd_pcm_readi

函数原型:snd_pcm_readi(snd_pcm_t *pcm, void *buffer, snd_pcm_uframes_t size);
函数功能:录制交错格式的音频数据
参数含义:

	pcm:pcm设备
	buffer:数据地址
	size:数据大小

1.5 snd_pcm_drain

函数原型:snd_pcm_drain(handle);
函数功能:等待buffer中的数据全部播放完成
参数含义:

	handle:句柄

1.6 snd_pcm_drop

函数原型:snd_pcm_drop(handle);
函数功能:不等待buffer数据播放完成,马上停止
参数含义:

	handle:句柄

1.7 snd_pcm_hw_params_set_rate_resample

函数原型:snd_pcm_hw_params_set_rate_resample(handle, params, soft_resample);
函数功能:设置采样率
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	params:参数

1.8 snd_pcm_close

函数原型:snd_pcm_close(handle);
函数功能:关闭pcm handle
参数含义:

	handle:static snd_pcm_t *handle 结构体指针

1.9 snd_pcm_hw_params_set_channels

函数原型:snd_pcm_hw_params_set_channels(handle, params, hwparams.channels);
函数功能:设置声道数
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	params:参数

1.10 snd_pcm_hw_params_set_rate_near

函数原型:snd_pcm_hw_params_set_rate_near(handle, params, &hwparams.rate, 0);
函数功能:设置采样率,之所以是rate_near,是因为上层设置的采样率&hwparams.rate,底层很可能不支持,因此,会返回上层一个底层支持的相近的采样率
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	params:参数

1.11 snd_pcm_hw_params_get_buffer_time_max

函数原型:snd_pcm_hw_params_get_buffer_time_max(params, &buffer_time, 0);
函数功能:获取底层支持的最大buffer大小,换算为时间
参数含义:

	params:参数

1.12 snd_pcm_hw_params_set_period_time_near

函数原型:snd_pcm_hw_params_set_period_time_near(handle, params, &period_time, 0);
函数功能:设置底层period区间大小,以时间为单位,之所以为time_near,是因为上层设置的大小很可能底层不支持,底层会返回相近的&period_time
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	params:参数

1.13 snd_pcm_hw_params_set_period_size_near

函数原型:snd_pcm_hw_params_set_period_size_near(handle, params, &period_frames, 0);
函数功能:设置底层period区间大小,以字节为单位,size_near,原因类似。该接口与set_period_time_near接口,都是设置period大小,只是单位不同,二选一即可
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	params:参数

1.14 snd_pcm_hw_params_set_buffer_time_near

函数原型:snd_pcm_hw_params_set_buffer_time_near(handle, params, &buffer_time, 0);
函数功能:设置底层buffer区间大小,以时间为单位。与上面接口类似。在底层,buffer是一个大DMA空间,而period是将buffer平均分成的几个小区间
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	params:参数

1.15 snd_pcm_hw_params_set_buffer_size_near

函数原型:snd_pcm_hw_params_set_buffer_size_near(handle, params, &buffer_frames);
函数功能:与上类似,上面设置完成后,都需要调用下面两个函数,获取最终设置的period与buffer大小

1、snd_pcm_hw_params_get_period_size(params, &chunk_size, 0);
2、snd_pcm_hw_params_get_buffer_size(params, &buffer_size);

参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	params:参数

1.16 snd_pcm_hw_params_set_format

函数原型:snd_pcm_hw_params_set_format(handle, params, hwparams.format);
函数功能:设置采样位宽格式
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	params:参数

1.17 snd_pcm_hw_params_can_pause

函数原型:snd_pcm_hw_params_can_pause(params);
函数功能:查询底层是否支持暂停
参数含义:

	params:参数

1.18 snd_pcm_hw_params

函数原型: snd_pcm_hw_params(handle, params);
函数功能:将上面设置的硬件配置参数,加载,并且会自动调用snd_pcm_prepare( )将stream状态置为SND_PCM_STATE_PREPARED
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	params:参数

1.19 snd_pcm_sw_params_alloca

函数原型:snd_pcm_sw_params_alloca(&swparams);
函数功能:申请一段空间,存放软件配置参数
参数含义:

	swparams:软件配置参数

1.20 snd_pcm_sw_params_current

函数原型:snd_pcm_sw_params_current(handle, swparams);
函数功能:获取当前的软件参数配置
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	swparams:软件配置参数

1.21 snd_pcm_sw_params_set_avail_min

函数原型:snd_pcm_sw_params_set_avail_min(handle, swparams, n);
函数功能:阻塞模式下,设置已缓存一定buffer大小后开始下一次取数据
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	swparams:软件配置参数
	n:块数量

1.22 snd_pcm_sw_params_set_start_threshold

函数原型:snd_pcm_sw_params_set_start_threshold(handle, swparams, start_threshold);
函数功能:设置开始的阀值,可以起到预缓冲的效果。对于放音,当上层调用snd_pcm_writei超过阀值时,才会启动播放
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	swparams:软件配置参数
	start_threshold:阈值

1.23 snd_pcm_sw_params_set_stop_threshold

函数原型:snd_pcm_sw_params_set_stop_threshold(handle, swparams, stop_threshold);
函数功能:设置停止的阀值,避免硬件上的underrun或overrun出现
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	swparams:软件配置参数
	start_threshold:阈值

1.24 snd_pcm_sw_params

函数原型:snd_pcm_sw_params(handle, swparams);
函数功能:将上面的软件参数,加载到底层
参数含义:

	swparams:软件配置参数

1.25 snd_pcm_hw_params_any

函数原型:snd_pcm_hw_params_any(handle, params);
函数功能:初始化pcm属性
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	params:参数

1.26 snd_pcm_hw_params_set_access

函数原型:snd_pcm_hw_params_set_access(handle, params,SND_PCM_ACCESS_RW_INTERLEAVED);
函数功能:设置为交错方式
参数含义:

	handle:static snd_pcm_t *handle 结构体指针
	params:参数

1.27 snd_pcm_format_set_silence

函数原型:snd_pcm_format_set_silence(snd_pcm_format_t format, void *data, unsigned int samples);
函数功能:用于将某个buffer中的数据,转换为静音,也就是0
参数含义:

	format:格式
	data:数据地址
	samples:数据大小

1.28 snd_pcm_nonblock

函数原型:snd_pcm_nonblock(handle, 0);
函数功能:打开或关闭阻塞模式。0,为阻塞模式,1,为非阻塞模式
参数含义:

	handle:句柄

1.29 snd_pcm_nonblock

函数原型:snd_pcm_nonblock(handle, 1);
函数功能:如果需要非阻塞方式,则将第二个参数,设置为1。snd_pcm_open后,默认为阻塞方式,因此,该接口可以不用调用
参数含义:

	handle:static snd_pcm_t *handle 结构体指针

1.30 snd_pcm_hw_params_alloca

函数原型:`snd_pcm_hw_params_alloca(&params);
函数功能:申请一段snd_pcm_hw_params_t *params;结构体空间。使用该结构体,来配置底层ALSA的相关硬件参数,比如:声道,采样率,位宽,buffer大小等
参数含义:

	params:参数

猜你喜欢

转载自blog.csdn.net/future_sky_word/article/details/128504999