问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Linux应用开发【第八章】ALSA应用开发

发布网友 发布时间:2024-10-07 06:12

我来回答

1个回答

热心网友 时间:2024-11-09 03:07

音频信号是一种连续变化的模拟信号,但计算机只能处理和记录二进制的数字信号,由自然音源得到的音频信号必须经过一定的变换,成为数字音频信号之后,才能送到计算机中作进一步的处理。

数字音频系统通过将声波的波型转换成一系列二进制数据,来实现对原始声音的重现,实现这一步骤的设备常被称为(A/D)。A/D转换器以每秒钟上万次的速率对声波进行采样,每个采样点都记录下了原始模拟声波在某一时刻的状态,通常称之为样本(sample),而每一秒钟所采样的数目则称为采样频率,通过将一串连续的样本连接起来,就可以在计算机中描述一段声音了。对于采样过程中的每一个样本来说,数字音频系统会分配一定存储位来记录声波的振幅,一般称之为采样分辨率或者采样精度,采样精度越高,声音还原时就会越细腻。

数字音频涉及到的概念非常多,对于在Linux下进行音频编程的程序员来说,最重要的是7406解声音数字化的两个关键步骤:采样和量化。

采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数。采样频率的选择应该遵循奈奎斯特(Harry Nyquist)采样理论:如果对某一模拟信号进行采样,则采样后可还原的最高信号频率只有采样频率的一半,或者说只要采样频率高于输入信号最高频率的两倍,就能从采样信号系列重构原始信号。

量化位数是对模拟音频信号的幅度进行数字化,它决定了模拟信号数字化以后的动态范围,常用的有8位、12位和16位。量化位越高,信号的动态范围越大,数字化后的音频信号就越可能接近原始信号,但所需要的存储空间也越大。

ALSA全称是Advanced Linux Sound Architecture,中文音译是Linux高级声音体系。ALSA是Linux内核2.6后续版本中支持音频系统的标准接口程序,由ALSA库、内核驱动和相关测试开发工具组成,更好的管理Linux中音频系统。

本小节将介绍ALSA的架构。

ALSA是Linux系统中为声卡提供驱动的内核组件。它提供了专门的库函数来简化相应应用程序的编写。相较于OSS的编程接口,ALSA的函数库更加便于使用。

对应用程序而言,ALSA无疑是一个更佳的选择,因为它具有更加友好的编程接口,并且完全兼容于OSS。

ALSA系统包括7个子项目:

ALSA声卡驱动与用户空间体系结构交互如下图所示:

移植ALSA主要是移植alsa-Ub和alsa-utils。

ALSA Util是纯应用层的软件,相当于ALSA设备的测试程序,ALSA-Lib则是支持应用API的中间层程序,ALSA-Util中的应用程序中会调用到ALSA-Lib中的接口来操作到我们的音频编解码芯片的寄存器,而lib中接口就是依赖于最底层驱动代码,因此移植ALSA程序的顺序就是先后移植Driver,Lib,Util。

ALSA首先需要在ALSA的官网上下载官网 alsa-project.org下载alsa-lib和alsa-utils。

ALSA Lib移植不需要修改源码,只需要重新编译库代码以支持自己的平台。

在上述命令中./configure配置的几个重要的配置选项解释如下:

ALSA Util可以生成用于播放,录制,配置音频的应用可执行文件,测试驱动代码时用处很大,编译过程如下:

ALSA库和测试工具的移植就是将相应库文件和可执行文件放在目标板上,以下文件必须被拷贝至对应位置:

(1)ALSA Lib文件,放在/lib/中。

(2)配置文件放在/usr/local/share中,与编译时指定的目录相同。

(3)测试应用文件,ALSA Util能产生aplay、amixer、arecord,我们可以把这些可执行文件放在/usr/sbin中。

(4)内核目录中保证有/dev/snd/目录,这个目录下存放controlC0,pcmC0D0,/usr/sbintimer,timer这些设备文件,如果这些设备文件已经在/dev目录下,可手动拷贝到/snd目录中。

在LINUX系统中,每个设备文件都是文件。音频设备也是一样,它的设备文件被放在/dev/snd目录下,我们来看下这些设备文件:

(1)controlC0:音频控制设备文件,例如通道选择,混音,麦克风的控制等;

(2)pcmC0D0c:声卡0设备0的录音设备,c表示capter;

(3)pcmC0D0p:声卡0设备0的播音设备,p表示play;

(4)timer:定时器设置。

本小节将着重讲解tinyalsa工具使用,tinyalsa是alsa-lib的一个简化版。它提供了pcm和control的基本接口;没有太多太复杂的操作、功能。可以按需使用接口。

使用方法:

举例:

与amixer作用类似,用于操作mixer control。

使用方法:

举例:

aplay是命令行的ALSA声卡驱动的播放工具,用于播放功能。使用方法:

举例:

arecord是命令行的ALSA声卡驱动的录音工具,用于录音功能。使用方法:

举例:

从代码角度体现了alsa-lib和alsa-driver及hardwared的交互关系。用户层的alsa-lib通过操作alsa-driver创建的设备文件/dev/snd/pcmC0D0p等对内核层进行访问。内核层的alsa-drivier驱动再经由sound core对硬件声卡芯片进行访问。

为了方便操作访问,alsa-lib中封装了相关接口,通过pcmCXDXp/pcmCXDXc节点(/dev/snd/pcmCXDXx)去实现播放、录音功能。

主要涉及到的接口:

详细pcm接口说明请查阅:

alsa-project.org/alsa-d...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么是Medical Literature Analysis and Retrieval System (NLM)的缩 ... 医学工作者的因特网内容简介 2002年的一篇文章英文摘要被《医学文献联机数据库》(MEDLINE)收录,是否... 医学器具medline啥意思 民国市与县的关系是怎样的,市与县分别又是什么? 历代兵制中国民国兵制 冰箱运行时有水流声怎么回事? ud牛郎眼影真假判断 爆闪/没有平替❌ 牛郎眼影真假鉴别方法 鉴别❗️衰败城市牛郎眼影真假,粉质肉眼差距 LINUX ABUNTU 装了之后没声音 合同成本都有什么 什么费用计入合同成本 天天酷跑小魔女纯净魂晶怎么样 天天酷跑小魔女纯净魂晶属性介绍_百度知 ... 天天酷跑吸血伯爵送出几件定情信物? 聊聊现在黄晓明夫妇的演技,他们有啥代表作呢? 有哪些电视剧是黄晓明和杨颖-起拍的,一共 黄晓明和杨颖演的电影有哪些 合肥佳富力建材有限公司怎么样? 合肥汉邦办公用品有限公司怎么样? 海岩的作品都有那些,能不能一一对照把书跟所拍的电视剧都写全,谢谢_百... 有谁知道合肥兄弟行办公用品配送 他们家的服务怎么样? 合肥办公用品批发市场在哪"? 农村公路建设管理办法第四章 建设组织与管理 你喜欢Angel baby演过的哪些影视剧? 青春励志类电视剧 ...到黑道老大身边当卧底,慢慢产生感情,后来女主的身份被揭 帮忙介绍几部电视剧或电影!比如甜蜜蜜 血色浪漫 与青春有关的日子 这... 关于黑道的电影? 什么是生命的信念和价值 一张2005年的全新100,编号D5H4588868,也就是俗称的我发发发要发,多钱... 颅压高的症状 您好;请问兰蔻护肤品的 小黑瓶肌底液 是在洁面后第一个步骤使用的吗?还... 颅内压增高三联征 宝宝颅内压增高的表现有哪些 颅内高压怎么治疗 宝宝颅内压增高可以自愈吗 大专旅游专业有前途吗 为什么我打一路发发每次都输? 玩一路发发输钱还继续玩是什么一种心态? 北京世纪雅博文化艺术有限公司是骗子公司吗?求问那怎么样?是正规的公... 河北世纪大饭店设施 我阴历1987年6月17出生,我女朋友阴历1987年2月27日出生,谁能帮我算... 我是87年阴历7月十七出生 我男朋友是阴历86年9月初五出生的,在一合适吗... 集中注意力的最佳技巧是什么? ...大家帮忙起个很有诗意的网游名字,要个字的,最好带个符号!是大话,谢 ... 名家的散文,要写景的,多弄几篇,题目加作者,文章就不要发了,最好发... 绝地求生刺激战场自由人干嘛的 自由人定位详解-高手进阶-安族网_百度... 怎么玩绝地求生刺激战场里面的拿着枪打别人打中了不是绿色的而是红色... _怎么读_是指什么呢