😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭ALSA是什么?ALSA框架详细介绍🍭
😎金句分享😎:🍭有机会一定要试试,其实试错的成本并不高,而错过的成本很高🍭
目录
- 一、概述
- 二、ALSA框架介绍
- 三、ALSA驱动 - 内核空间
- 3.1 /proc/asound/目录
- 3.2 /dev/snd/目录
- 四、ALSA库、程序 - 用户空间
- 五、总结
一、概述
ALSA,全称Advanced Linux Sound Architecture(高级Linux音频体系结构),是Linux操作系统上用于管理音频和音频设备的软件架构,为Linux操作系统提供音频和MIDI功能。它提供了一个标准的接口,用于应用程序与硬件之间的音频通信,以及音频设备之间的通信。
ALSA具有以下重要特征:
- 高效支持所有类型的音频接口,从消费类声卡到专业多声道音频接口。
- 完全模块化的声音驱动程序。
- SMP和线程安全设计。
- 用户空间库(alsa-lib),用于简化应用程序编程并提供更高级别的功能。
- 支持较旧的开放声音系统(OSS)API,为大多数OSS程序提供二进制兼容性。
ALSA是根据GPL(GNU通用公共许可证)和LGPL(GNU较宽松通用公共许可)发布的。ALSA驱动程序代码包含在Linux内核2.6中。
如果还有其他需要了解的,可以查看ALSA项目的官网:https://www.alsa-project.org/
ALSA项目在github的开源地址(不包含驱动代码):https://github.com/alsa-project
二、ALSA框架介绍
ALSA架构主要有两方面组成:
1、Linux内核空间的ALSA驱动,在Linux内核2.6之后,ALSA驱动代码已经集成到Linux源码中。
2、Linux用户空间的ALSA库和程序:alsa-lib、alsa-utils、alsa-tools、alsa-firmware、alsa-plugins、alsa-oss、pyalsa。
三、ALSA驱动 - 内核空间
ALSA驱动程序包含在内核空间中运行的ALSA组件,在Linux内核2.6之后,ALSA驱动代码已经集成到Linux源码中,ALSA驱动代码在Linux内核源码的sound 目录里。在编译内核时,可以选择将alsa驱动单独编译为模块,一般会有如下ko:snd-hwdep.ko、snd-pcm.ko、snd-rawmidi.ko、snd-timer.ko snd-usb-audio.ko、snd-usbmidi-lib.ko、snd.ko、soundcore.ko。
在Linux内核安装完ALSA驱动后,会多出两个目录:/proc/asound/
目录、/dev/snd/
目录
3.1 /proc/asound/目录
/dev/asound/
目录主要用于ALSA存放设备信息的,一般这个目录有如下内容:# ls /proc/asound/ C93 Headset card0 card1 cards devices hwdep modules pcm timers version
/proc/asound/cards
文件记录了声卡信息,接入声卡后,一般有如下内容:# cat /proc/asound/cards 0 [Headset ]: USB-Audio - Rapoo Gaming Headset Rapoo Gaming Headset at usb-10300000.xhci_0-1.4, full speed 1 [C93 ]: USB-Audio - 罗技高清网络摄像机 C93 罗技高清网络摄像机 C93 at usb-10300000.xhci_0-1.2, high speed
/proc/asound/pcm
文件可以查看声卡采集、播放pcm的信息:# cat /proc/asound/pcm 00-00: USB Audio : USB Audio : playback 1 : capture 1 01-00: USB Audio : USB Audio : capture 1
/proc/asound/version
显示ALSA驱动的版本信息:# cat /proc/asound/version Advanced Linux Sound Architecture Driver Version k4.19.90.
/proc/asound/card0/
目录记录了第0个声卡的信息,如:播放的状态、参数等
/proc/asound/card0/pcm0p/sub0/status
查看第0个声卡的播放状态:# cat /proc/asound/card0/pcm0p/sub0/status state: RUNNING owner_pid : 628 trigger_time: 77794.597275511 tstamp : 0.000000000 delay : 7280 avail : 864 avail_max : 2016 ----- hw_ptr : 166788864 appl_ptr : 166796000
/proc/asound/card0/pcm0p/sub0/hw_params
文件查看参数# cat /proc/asound/card0/pcm0p/sub0/hw_params access: RW_INTERLEAVED format: S16_LE subformat: STD channels: 2 rate: 48000 (48000/1) period_size: 2000 buffer_size: 8000
/proc/asound/card0/pcm0p/sub0/sw_params
文件查看参数# cat /proc/asound/card0/pcm0p/sub0/sw_params tstamp_mode: NONE period_step: 1 avail_min: 2000 start_threshold: 1 stop_threshold: 8000 silence_threshold: 0 silence_size: 0 boundary: 9007199254740992000
/proc/asound/
目录还有其他一些内容,感兴趣读者可以一一去查看。
3.2 /dev/snd/目录
/dev/snd/
目录主要是各个声卡对应的设备文件,这些文件会随着声卡的插入和移除而产生变化,用ls命令查看有哪些文件:# ls /dev/snd/ controlC0 controlC1 pcmC0D0c pcmC0D0p pcmC1D0c timer
/dev/snd/controlCX
:控制接口,提供灵活的方式管理注册的声卡和对存在的声卡进行查询;
/dev/snd/pcmCXDX
:PCM 接口,提供管理数字音频的录音和回放,pcmCXDXc 对应录音设备,pcmCXDXp 对应回放设备
/dev/snd/timer
:定时器接口,为支持声音的同步事件提供访问声卡上的定时器;
/dev/snd/mixerCXDX
:混音器接口,控制发送信号和控制声音大小的声卡上的设备;
/dev/snd/seq
:音序器接口,一个比原始 MIDI 接口高级的 MIDI 编程和声音同步高层接口。它可以处理很多 MIDI 协议和定时器。
/dev/snd/midiCXDX
:原始 MIDI 接口,支持 MIDI(Musical Instrument DigitalInterface,音乐设备数字化接口),一种标准电子音乐指令集。这些 API 提供访问声卡上的 MIDI 总线。这些原始接口直接工作在 MIDI 事件上,程序员只需管理协议和时间。
有关ALSA驱动的更多内容可以看:https://www.alsa-project.org/wiki/ALSA_Driver_Documentation
四、ALSA库、程序 - 用户空间
ALSA库和程序主要:alsa-lib、alsa-utils、alsa-tools、alsa-firmware、alsa-plugins、alsa-oss、pyalsa。
这些都是都是工作在Linux用户空间的,可以在ALSA官网下载:https://www.alsa-project.org/wiki/Download
-
alsa-lib
alsa-lib 包含开发人员编译alsa应用程序所使用的用户空间库。
有关alsa-lib的使用可以参照:https://www.alsa-project.org/alsa-doc/alsa-lib/ -
alsa-utils
alsa-utils 包含各种通用的alsa命令行工具,如amixer、aplay、alsaconf等。
alsa-utils是一组小型且功能强大的应用程序,旨在允许用户控制ALSA系统的各个部分:
1、alsactl 应用程序是保存设备设置的一种方式。
2、amixer 应用程序是一个命令行应用程序,允许对设备音量和声音控制进行调整。
3、alsamixer 应用程序是amixer的ncurses版本。
4、acconnect 和aseqview 应用程序用于建立MIDI连接和查看连接端口列表。
5、aplay和arecord 应用程序用于命令行播放和记录多种文件类型,包括原始、波形和aiff,所有采样率、位深度和ALSA库已知的通道计数。 -
alsa-tools
alsa-tools 包含各种更模糊的工具和加载器。 -
alsa-firmware
alsa-firmware 包含各种第三方产品的二进制驱动程序。 -
alsa-plugins
alsa-plugins 包含各种alsa需求的插件(例如Jack)。 -
alsa-oss
alsa-oss 包含oss兼容层。 -
pyalsa
pyalsa 包含ALSA的Python绑定。
需要了解更多ALSA相关文档可以参考:https://www.alsa-project.org/wiki/Documentation
五、总结
总的来说,ALSA是Linux系统中的一个关键音频框架,提供了强大的音频处理功能,并为开发者和用户提供了一种一致的方式来处理音频设备和数据。它在Linux发行版中内置,因此几乎所有基于Linux的系统都可以受益于其音频处理能力。如果开发过程中,有不清楚的,多到ALSA官网查看。
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁