【音视频|ALSA】ALSA是什么?ALSA框架详细介绍

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭ALSA是什么?ALSA框架详细介绍🍭
😎金句分享😎:🍭有机会一定要试试,其实试错的成本并不高,而错过的成本很高🍭

目录

  • 一、概述
  • 二、ALSA框架介绍
  • [三、ALSA驱动 - 内核空间](#三、ALSA驱动 - 内核空间)
    • [3.1 /proc/asound/目录](#3.1 /proc/asound/目录)
    • [3.2 /dev/snd/目录](#3.2 /dev/snd/目录)
  • [四、ALSA库、程序 - 用户空间](#四、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存放设备信息的,一般这个目录有如下内容:

shell 复制代码
# ls /proc/asound/
C93      Headset  card0    card1    cards    devices  hwdep    modules  pcm      timers   version

/proc/asound/cards文件记录了声卡信息,接入声卡后,一般有如下内容:

sh 复制代码
# 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的信息:

sh 复制代码
# 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驱动的版本信息:

sh 复制代码
# cat /proc/asound/version 
Advanced Linux Sound Architecture Driver Version k4.19.90.

/proc/asound/card0/目录记录了第0个声卡的信息,如:播放的状态、参数等
/proc/asound/card0/pcm0p/sub0/status查看第0个声卡的播放状态:

sh 复制代码
# 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文件查看参数

sh 复制代码
# 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文件查看参数

sh 复制代码
# 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命令查看有哪些文件:

sh 复制代码
# 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官网查看。

如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

相关推荐
MediaTea4 小时前
Pr:音频仪表
音视频
桃园码工4 小时前
13_HTML5 Audio(音频) --[HTML5 API 学习之旅]
音视频·html5·audio
cuijiecheng20189 小时前
音视频入门基础:MPEG2-TS专题(21)——FFmpeg源码中,获取TS流的视频信息的实现
ffmpeg·音视频
γ..10 小时前
基于MATLAB的图像增强
开发语言·深度学习·神经网络·学习·机器学习·matlab·音视频
cuijiecheng201810 小时前
音视频入门基础:AAC专题(13)——FFmpeg源码中,获取ADTS格式的AAC裸流音频信息的实现
ffmpeg·音视频·aac
悟纤13 小时前
Suno Api V4模型无水印开发「高清音频WAV下载」 —— 「Suno Api系列」第6篇
音视频·suno·suno v4·suno ai
gomogomono19 小时前
HDR视频技术之八:色域映射
音视频·hdr·yuv
野蛮的大西瓜1 天前
BigBlueButton视频会议 vs 华为云会议的详细对比
人工智能·自动化·音视频·实时音视频·信息与通信·视频编解码
野蛮的大西瓜1 天前
文心一言对接FreeSWITCH实现大模型呼叫中心
人工智能·机器人·自动化·音视频·实时音视频·文心一言·信息与通信
野蛮的大西瓜1 天前
BigBlueButton视频会议 vs 钉钉视频会议系统的详细对比
人工智能·自然语言处理·自动化·音视频·实时音视频·信息与通信·视频编解码