一、概述
ALSA(Advanced Linux Sound Architecture),高级Linux声音架构的简称。在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。在Linux 2.6
的内核版本后,ALSA成为了默认的声音子系统,用来替换2.4
系列内核中的OSS(Open Sound System,开放声音系统)。目前已经成为了Linux的主流音频体系结构。
ALSA是一个完全开放源代码的音频驱动程序集,除了像OSS那样提供了一组内核驱动程序模块之外,ALSA还专门为简化应用程序的编写提供了相应的函数库,与OSS提供的基于ioctl的原始编程接口相比,ALSA函数库使用起来要更加方便一些。利用该函数库,开发人员可以方便快捷的开发出自己的应用程序,细节则留给函数库内部处理。当然 ALSA也提供了类似于OSS的系统接口,不过ALSA的开发者建议应用程序开发者使用音频函数库而不是驱动程序的API。
ALSA 主要有如下特点:
- 支持多种声卡设备。
- 模块化的内核驱动程序。
- 支持 SMP(对称多处理)和多线程。
- 提供应用开发函数库兼容OSS应用程序。
二、系统架构
用户空间
主要由ALSA Libray API对应用程序提供统一的API接口,各个APP应用程序只要调用alsa-lib
提供的API接口来实现放音、录音、控制。现在提供了两套基本的库,tinyalsa
是一个简化的alsa-lib
库,现在Android的系统中主要使用它。
内核空间
- ALSA Core
ALSA核心层,向上提供逻辑设备(PCM、CTL、MIDI、TIMER…)系统调用,向下驱动硬件设备(Machine、I2S、DMA、CODEC)。 - ASOC Core
建立在标准ALSA Core基础上,为了更好支持嵌入式系统和应用于移动设备的音频Codec的一套软件体系。提供了各种音频设备驱动的通用方法和数据结构,为Audio Driver提供ALSA Driver API。 - 硬件驱动
音频硬件设备驱动,由三大部分组成,分别是:Machine、Platform、Codec。提供的ALSA Driver API和相应音频设备的初始化及工作流程,实现具体的功能组件,这也是驱动开发人员需要具体实现的部分。
三、常用操作命令
1、安装ALSA
apt-get install xmlto libasound2-dev linux-sound-base alsa-base alsa-utils
2、查看音频设备
cat /proc/asound/cards
3、列出音频设备
arecord -l
4、音量控制器
alsamixer
MM
表示静音,00
表示非静音,可以通过按键M
进行切换。- 通过左右方向键切换不同的参数配置。通过上下方向键调节音量值。
- 按
ESC
键保存并退出。
四、常见问题
1、cannot open mixer: 没有那个文件或目录
现象: 输入alsamixer
命令后,显示cannot open mixer: 没有那个文件或目录
。
原因: 这是由于声卡配置问题。
解决方案:
-
输入
aplay -l
命令查看当前声卡信息,找到声卡编号,例如:这里声卡编号为0。
-
编辑
/usr/share/alsa/alsa.conf
配置文件,查看defaults.ctl.card
和defaults.pcm.card
配置项的编号,改为上一步查到的声卡编号,保存退出