一、概述

        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 -laplay -l

4、音量控制器

(1)alsamixer

提供了一个交互式的文本界面,适合直接在终端中使用。
在这里插入图片描述

  • MM表示静音,00表示非静音,可以通过按键M进行切换。
  • 通过左右方向键切换不同的参数配置。通过上下方向键调节音量值。
  • ESC键保存并退出。

(2)amixer

提供了命令行参数,适合在脚本中自动化控制或在需要精确控制时使用。

  • amixer -c 声卡索引 scontrols,列出声卡当前可控制项。
root@kylin:~# amixer -c 0 scontrols
Simple mixer control 'Playback Polarity',0
Simple mixer control 'DAC',0
Simple mixer control 'DAC Double Fs Mode',0
Simple mixer control 'DAC Notch Filter',0
Simple mixer control 'DAC SRC Mux',0
Simple mixer control 'DAC Soft Ramp Rate',0
Simple mixer control 'DAC Stereo Enhancement',0
Simple mixer control 'DAC Volume Control-LeR',0
Simple mixer control 'Differential Mux',0
Simple mixer control 'Digital Mic Mux',0
Simple mixer control 'Enable DAC Soft Ramp',0
Simple mixer control 'HP',0
Simple mixer control 'HPMixer Gain',0
Simple mixer control 'Input PGA',0
Simple mixer control 'LLIN',0
Simple mixer control 'Left DAC',0
Simple mixer control 'Left Hp mux',0
Simple mixer control 'MIC Boost',0
Simple mixer control 'RLIN',0
Simple mixer control 'Right DAC',0
Simple mixer control 'Right Hp mux',0
  • amixer -c 声卡索引 scontents,列出声卡当前控制项的内容。
root@kylin:~# amixer -c 0 scontents
Simple mixer control 'Playback Polarity',0
  Capabilities: enum
  Items: 'Normal' 'R Invert' 'L Invert' 'L + R Invert'
  Item0: 'Normal'
Simple mixer control 'DAC',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 192
  Mono:
  Front Left: Playback 173 [90%] [-9.50dB]
  Front Right: Playback 173 [90%] [-9.50dB]
Simple mixer control 'DAC Double Fs Mode',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'DAC Notch Filter',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'DAC SRC Mux',0
  Capabilities: enum
  Items: 'LDATA TO LDAC, RDATA TO RDAC' 'LDATA TO LDAC, LDATA TO RDAC' 'RDATA TO LDAC, RDATA TO RDAC' 'RDATA TO LDAC, LDATA TO RDAC'
  Item0: 'LDATA TO LDAC, RDATA TO RDAC'
Simple mixer control 'DAC Soft Ramp Rate',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 4
  Mono: 0 [0%]
Simple mixer control 'DAC Stereo Enhancement',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 7
  Mono: 7 [100%]
Simple mixer control 'DAC Volume Control-LeR',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 1
  Mono: 1 [100%]
Simple mixer control 'Differential Mux',0
  Capabilities: enum
  Items: 'lin1-rin1' 'lin2-rin2' 'lin1-rin1 with 20db Boost' 'lin2-rin2 with 20db Boost'
  Item0: 'lin1-rin1'
Simple mixer control 'Digital Mic Mux',0
  Capabilities: enum
  Items: 'dmic disable' 'dmic data at high level' 'dmic data at low level'
  Item0: 'dmic disable'
Simple mixer control 'Enable DAC Soft Ramp',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'HP',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 4
  Mono:
  Front Left: Playback 3 [75%] [-12.00dB]
  Front Right: Playback 3 [75%] [-12.00dB]
Simple mixer control 'HPMixer Gain',0
  Capabilities: volume
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 7
  Front Left: 0 [0%]
  Front Right: 0 [0%]
Simple mixer control 'Input PGA',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 8
  Mono: 8 [100%]
Simple mixer control 'LLIN',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Left DAC',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Left Hp mux',0
  Capabilities: enum
  Items: 'lin1-rin1' 'lin2-rin2' 'lin-rin with Boost' 'lin-rin with Boost and PGA'
  Item0: 'lin1-rin1'
Simple mixer control 'MIC Boost',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'RLIN',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Right DAC',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Right Hp mux',0
  Capabilities: enum
  Items: 'lin1-rin1' 'lin2-rin2' 'lin-rin with Boost' 'lin-rin with Boost and PGA'
  Item0: 'lin1-rin1'
  • amixer -c 声卡索引 sget 控制项,获取声卡指定控制项内容。
root@kylin:~# amixer -c 0 sget DAC
Simple mixer control 'DAC',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 192
  Mono:
  Front Left: Playback 173 [90%] [-9.50dB]
  Front Right: Playback 173 [90%] [-9.50dB]
  • amixer -c 声卡索引 sset 控制项 内容,设置声卡指定控制项内容。
root@kylin:~# amixer -c 0 sset DAC 100%
Simple mixer control 'DAC',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 192
  Mono:
  Front Left: Playback 192 [100%] [0.00dB]
  Front Right: Playback 192 [100%] [0.00dB]

四、常见问题

1、cannot open mixer: 没有那个文件或目录

现象: 输入alsamixer命令后,显示cannot open mixer: 没有那个文件或目录
原因: 这是由于声卡配置问题。
解决方案:

  • 输入aplay -l命令查看当前声卡信息,找到声卡编号,例如:这里声卡编号为0。
    在这里插入图片描述

  • 编辑/usr/share/alsa/alsa.conf配置文件,查看defaults.ctl.carddefaults.pcm.card配置项的编号,改为上一步查到的声卡编号,保存退出
    在这里插入图片描述

Logo

开源、云原生的融合云平台

更多推荐