六、ALSA lib库接口

这篇具有很好参考价值的文章主要介绍了六、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大小等
参数含义:文章来源地址https://www.toymoban.com/news/detail-575456.html

	params:参数

到了这里,关于六、ALSA lib库接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【音频应用】Linux之ALSA音频应用编程

    上文: 【音频驱动】Linux之ALSA声卡、WAV文件相关概念 使用alsa-libs和alsa-utils实现.wav格式文件的播放与录制,了解Linux中声卡的应用层设备节点。介绍了使用alsa-libs应用编程步骤。 高级Linux声音体系结构(ALSA)为Linux操作系统提供音频和MIDI功能。 ALSA具有以下显著特征: 高效支持所

    2024年02月05日
    浏览(43)
  • Linux alsa 音频 录制与播放

    ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构。 在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为咱们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,便可以完成对底层音频硬件的控制。 aplay -l 显示实际声卡序号 查看声卡:

    2024年02月16日
    浏览(36)
  • RK3568 alsa 音频 录制与播放

    ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构。 在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为咱们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,便可以完成对底层音频硬件的控制。 aplay -l 显示实际声卡序号 查看声卡:

    2024年02月13日
    浏览(41)
  • 零基础入门多媒体音频(6)-alsa(2)

    PCM接口 ALSA的PCM中间层非常有用,每个驱动只需要实现底层的功能来访问硬件。要使用PCM层,你需要先引用 sound/pcm.h头文件。此外,如果你要使用和hw_param相关的函数,sound/pcm_params.h也是必须的。 每个声卡设备最多拥有4个PCM实例。一个PCM实例对应一个PCM设备文件。实例数量的

    2024年04月14日
    浏览(56)
  • 【C++】开源:Linux端ALSA音频处理库

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍Linux端ALSA音频处理库。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/alsa-project/alsa-lib ALSA(Adva

    2024年02月15日
    浏览(45)
  • alsa音频pcm设备之i2c调试

    i2cdetect 列举 I2C bus i2cdetect -l ls /dev/i2c* 列出I2C bus i2c-7 上面连接的所有设备,并得到i2c设备地址 i2cdetect -y 7 发现i2c设备的位置显示为UU或表示设备地址的数值,UU表示设备在driver中被使用. I2cdump i2c设备大量register的值 i2cdump -y 7 0x40 I2cset设置i2c设备某个register的值 i2cset -y 7 0x40 0x0

    2024年02月08日
    浏览(39)
  • IMX8mp alsa音频调试

    1、硬件环境: soc: im8mp bt: cypress CYW43455, 并通过M2接口连接到imx8mp开发板。 2、硬件连接: 3、综述: BT通过M2接口连接到IMX8mp开发板,M2接口中包含了PCM总线、UART、BT_EN引脚。 通话音频播放,BT使用imx8mp默认PCM接口,所以默认情况下无需额外配置,imx8会自动识别并加载音频设备

    2023年04月09日
    浏览(32)
  • 【FFmpeg】音视频录制 ① ( 查询系统中 ffmpeg 可录制的音视频输入设备 | 使用 ffmpeg 命令录制音视频数据 | 录制视频数据命令 |录制音频数据| 同时录制音频和视频数据命令 )

    在 Windows 系统中 , 使用 ffmpeg 命令 录制 音视频 , 需要先获取 系统的 音视频设备 信息 , 录制 音视频 本质上是从 系统音视频设备 中获取数据 ; 执行 命令 , 可以获取 系统中 ffmpeg 可用的 DirectShow 音视频输入设备 ; 命令参数解析 : -list_devices true : 列出所有 ffmpeg 的 指定类型的可

    2024年04月25日
    浏览(92)
  • 音视频基础概念(5)——音频基础说明

    现实生活中,音频(Audio)主要用在两大场景中,包括语音(Voice)和音乐(Music)。语音主要用于沟通,如打电话等。目前由于语音识别技术的发展,人机语音交互也是语音的一个应用方向,很多大厂推出智能音箱、语音助手等。音乐主要用于欣赏和陶冶情操,如播放音乐。

    2023年04月08日
    浏览(109)
  • 【音视频原理】音视频 “ 采样 - 编码 - 封装 过程 “ 和 “ 解封装 - 解码 - 播放 过程 “ 分析 ( 视频采集处理流程 | 音频采集处理流程 | 音视频文件解封装播放流程 )

    本篇文件主要分析 音视频文件 是怎么产生的 , 以及 音视频文件是如何播放的 ; 视频文件从录像到生成文件的全过程 : 采集图像帧 : 摄像头 硬件 负责 采集画面 , 采集的 初始画面 称为 \\\" 图像帧 \\\" , 一秒钟 采集 的 图像帧 数量 称为 \\\" 帧率 \\\" , 如 : 60 帧 就是 一秒钟采集 60 个画

    2024年02月11日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包